Доброго всем дня!
Возник затык, при деблокировании сбытовой фактуры в бух.учет нужно создать еще один бух. документ. Для этого решил воспользоваться BAPI_ACC_DOCUMENT_POST которая завернута в мой ФМ вызываю так:
Code:
CALL FUNCTION 'ZSD_ACC_DOC_POST_DOC_TC1'
STARTING NEW TASK 'ACC_POST_TC1'
PERFORMING RETURN_INFO_POST_TC1 ON END OF TASK
EXPORTING
IP_VBRK = g_wa_vbrk
TABLES
TP_RETURN = g_it_return.
Внутри ФМ заполняю структуры:
Code:
DATA: BEGIN OF l_wa_objkey,
belnr TYPE bseg-belnr,
bukrs TYPE bseg-bukrs,
gjahr TYPE bseg-gjahr,
END OF l_wa_objkey.
DATA: l_it_vbrp TYPE TABLE OF vbrp WITH HEADER LINE,
l_wa_vbrp TYPE vbrp.
DATA: l_wa_add_post like zsdtc1 OCCURS 0 WITH HEADER LINE.
DATA: l_v_posnr TYPE posnr VALUE 1.
DATA: l_v_lifnr TYPE lifnr.
DATA: l_v_numkr TYPE numkr.
DATA: l_it_konv TYPE TABLE OF konv,
l_wa_konv TYPE konv.
DATA: l_it_return TYPE bapiret2 OCCURS 0.
DATA: l_wa_doc_header TYPE bapiache09.
DATA: l_v_objkey TYPE bapiache09-obj_key.
DATA: l_wa_curr_amount TYPE bapiaccr09,
l_it_curr_amount TYPE TABLE OF bapiaccr09.
DATA: l_wa_accgl TYPE bapiacgl09,
l_it_accgl TYPE TABLE OF bapiacgl09.
DATA: l_wa_ext1 TYPE bapiacextc,
l_it_ext1 TYPE TABLE OF bapiacextc.
DATA: l_wa_criteria TYPE bapiackec9,
l_it_criteria TYPE TABLE OF bapiackec9.
DATA: l_wa_vendor type BAPIACAP09,
l_it_vendor TYPE TABLE OF BAPIACAP09.
* данные по фактуре из VBRP
SELECT *
FROM vbrp
INTO TABLE l_it_vbrp
WHERE vbeln = ip_vbrk-vbeln.
* Берем данные из настроечной таблицы
SELECT * FROM zsdtc1 INTO TABLE l_wa_add_post
WHERE fkart = ip_vbrk-fkart.
LOOP AT l_wa_add_post.
* данные по условиям из KONV
SELECT * FROM konv INTO TABLE l_it_konv
WHERE knumv eq ip_vbrk-knumv
AND kschl eq l_wa_add_post-kschl.
* поиск кредитора
CLEAR l_v_lifnr.
SELECT SINGLE lifnr
FROM kna1
INTO l_v_lifnr
WHERE kunnr = ip_vbrk-KUNAG
.
IF l_v_lifnr is INITIAL.
MESSAGE E000(ZRND_TC) WITH ip_vbrk-kunag.
ENDIF.
* заполняем l_wa_doc_header - заголовой документа
l_wa_doc_header-BUS_ACT = 'RFBU'.
l_wa_doc_header-USERNAME = sy-uname.
l_wa_doc_header-HEADER_TXT = l_wa_add_post-doc_txt.
l_wa_doc_header-COMP_CODE = ip_vbrk-bukrs.
l_wa_doc_header-DOC_DATE = ip_vbrk-fkdat.
l_wa_doc_header-PSTNG_DATE = ip_vbrk-fkdat.
l_wa_doc_header-TRANS_DATE = ip_vbrk-fkdat.
l_wa_doc_header-FISC_YEAR = ip_vbrk-gjahr.
l_wa_doc_header-DOC_TYPE = l_wa_add_post-blart.
l_wa_doc_header-REF_DOC_NO = ip_vbrk-vbeln.
l_wa_doc_header-AC_DOC_NO = number.
*** заполняем l_it_curr_amount
CLEAR l_wa_curr_amount.
l_wa_curr_amount-itemno_acc = l_v_posnr. " позиция документа
l_wa_curr_amount-currency = ip_vbrk-waerk. " валюта
LOOP AT l_it_konv INTO l_wa_konv.
l_wa_curr_amount-amt_doccur = l_wa_curr_amount-amt_doccur + l_wa_konv-kwert.
ENDLOOP.
IF ip_vbrk-fkart <> 'YRE' and ip_vbrk-fkart <> 'YRE3'.
l_wa_curr_amount-amt_doccur = - l_wa_curr_amount-amt_doccur. " сумма
ENDIF.
l_wa_curr_amount-disc_base = l_wa_curr_amount-amt_doccur. " сумма, с которой начисляется сконто
APPEND l_wa_curr_amount TO l_it_curr_amount.
* Прикручиваем код ОГК
CLEAR l_wa_vendor.
l_wa_vendor-ITEMNO_ACC = l_v_posnr.
l_wa_vendor-VENDOR_NO = l_v_lifnr.
l_wa_vendor-GL_ACCOUNT = l_wa_add_post-HKONT_K.
l_wa_vendor-COMP_CODE = ip_vbrk-bukrs.
l_wa_vendor-BUS_AREA = ip_vbrk-gsber.
l_wa_vendor-SP_GL_IND = 'K'.
l_wa_vendor-TAX_CODE = 'N0'.
l_wa_vendor-ref_key_1 = ip_vbrk-knkli. " ссылочный ключ делового партнера
** номер условия
LOOP AT l_it_vbrp INTO l_wa_vbrp.
IF l_wa_vbrp-aubel IS NOT INITIAL.
WRITE l_wa_vbrp-aubel TO l_wa_vendor-alloc_nmbr NO-ZERO. " поле присвоения
SELECT SINGLE bezei " ссылочный ключ делового партнера
FROM tvgrt
INTO l_wa_vendor-ref_key_1
WHERE spras = sy-langu
AND vkgrp = l_wa_vbrp-vkgrp.
l_wa_vendor-ref_key_2 = ip_vbrk-zztfsnr. " ссылочный ключ делового партнера
EXIT.
ENDIF.
ENDLOOP.
APPEND l_wa_vendor to l_it_vendor.
* заполняем вспомогательную таблицу
*** код проводки
CLEAR l_wa_ext1.
l_wa_ext1-field1 = l_v_posnr.
l_wa_ext1-field2 = 'BSCHL'.
l_wa_ext1-field3 = l_wa_add_post-BSCHL_K.
APPEND l_wa_ext1 TO l_it_ext1.
*** фактура
CLEAR l_wa_ext1.
l_wa_ext1-field1 = l_v_posnr.
l_wa_ext1-field2 = 'VBELN'.
l_wa_ext1-field3 = ip_vbrk-vbeln.
APPEND l_wa_ext1 TO l_it_ext1.
* уровень финансовой диспозиции
CLEAR l_wa_ext1.
l_wa_ext1-field1 = l_v_posnr.
l_wa_ext1-field2 = 'FDLEV'.
l_wa_ext1-field3 = 'F1'.
APPEND l_wa_ext1 TO l_it_ext1.
* уровень финансовой диспозиции
CLEAR l_wa_ext1.
l_wa_ext1-field1 = l_v_posnr.
l_wa_ext1-field2 = 'FDGRP'.
l_wa_ext1-field3 = 'ZK'.
APPEND l_wa_ext1 TO l_it_ext1.
* дата диспозиции
CLEAR l_wa_ext1.
l_wa_ext1-field1 = l_v_posnr.
l_wa_ext1-field2 = 'FDTAG'.
l_wa_ext1-field3 = sy-datum.
APPEND l_wa_ext1 TO l_it_ext1.
* торговый документ
CLEAR l_wa_ext1.
l_wa_ext1-field1 = l_v_posnr.
l_wa_ext1-field2 = 'VBEL2'.
l_wa_ext1-field3 = l_it_vbrp-vgbel.
APPEND l_wa_ext1 TO l_it_ext1.
ADD 1 TO l_v_posnr.
* заполняем позицию по дебету
LOOP AT l_it_vbrp INTO l_wa_vbrp WHERE netwr > 0.
*** заполняем l_it_accgl
CLEAR l_wa_accgl.
l_wa_accgl-itemno_acc = l_v_posnr. " позиция документа
l_wa_accgl-gl_account = l_wa_add_post-HKONT_D. " основной счет главной бухгалтерии
l_wa_accgl-item_text = ip_vbrk-kunrg. " название позиции
l_wa_accgl-acct_type = 'S'. " вид счета
l_wa_accgl-value_date = sy-datum. " дата валютирования
SELECT SINGLE bezei " ссылочный ключ делового партнера
FROM tvgrt
INTO l_wa_accgl-ref_key_1
WHERE spras = sy-langu
AND vkgrp = l_wa_vbrp-vkgrp.
l_wa_accgl-ref_key_2 = ip_vbrk-zztfsnr. " ссылочный ключ делового партнера
WRITE l_wa_vbrp-aubel TO l_wa_accgl-alloc_nmbr NO-ZERO. " поле присвоения
APPEND l_wa_accgl TO l_it_accgl.
*** заполняем l_it_curr_amount
CLEAR l_wa_curr_amount.
l_wa_curr_amount-itemno_acc = l_v_posnr. " позиция документа
l_wa_curr_amount-currency = ip_vbrk-waerk. " валюта
READ TABLE l_it_konv INTO l_wa_konv
WITH KEY kposn = l_wa_vbrp-posnr.
IF sy-subrc = 0.
l_wa_curr_amount-amt_doccur = l_wa_konv-kwert.
* IF ip_vbrk-fkart = 'YRE' or ip_vbrk-fkart = 'YRE3'.
* l_wa_curr_amount-amt_doccur = - l_wa_konv-kwert. " сумма
* ENDIF.
ENDIF.
l_wa_curr_amount-disc_base = l_wa_curr_amount-amt_doccur. " сумма, с которой начисляется сконто
APPEND l_wa_curr_amount TO l_it_curr_amount.
*{ INSERT DEVK912917 14
*** заполняем таблицу CRITERIA
*** клиент
CLEAR l_wa_criteria.
l_wa_criteria-itemno_acc = l_v_posnr.
l_wa_criteria-FIELDNAME = 'KNDNR'.
l_wa_criteria-CHARACTER = ip_vbrk-kunrg.
APPEND l_wa_criteria TO l_it_criteria.
*** материал
CLEAR l_wa_criteria.
l_wa_criteria-itemno_acc = l_v_posnr.
l_wa_criteria-FIELDNAME = 'ARTNR'.
l_wa_criteria-CHARACTER = l_wa_vbrp-matnr.
APPEND l_wa_criteria TO l_it_criteria.
*** вид фактуры
CLEAR l_wa_criteria.
l_wa_criteria-itemno_acc = l_v_posnr.
l_wa_criteria-FIELDNAME = 'FKART'.
l_wa_criteria-CHARACTER = ip_vbrk-fkart.
APPEND l_wa_criteria TO l_it_criteria.
*** заказ клиента
CLEAR l_wa_criteria.
l_wa_criteria-itemno_acc = l_v_posnr.
l_wa_criteria-FIELDNAME = 'KAUFN'.
l_wa_criteria-CHARACTER = l_wa_vbrp-aubel.
APPEND l_wa_criteria TO l_it_criteria.
*** заказ клиента
CLEAR l_wa_criteria.
l_wa_criteria-itemno_acc = l_v_posnr.
l_wa_criteria-FIELDNAME = 'KDPOS'.
l_wa_criteria-CHARACTER = l_wa_vbrp-aupos.
APPEND l_wa_criteria TO l_it_criteria.
*** номер заказа
CLEAR l_wa_criteria.
l_wa_criteria-itemno_acc = l_v_posnr.
l_wa_criteria-FIELDNAME = 'RKAUFNR'.
l_wa_criteria-CHARACTER = l_wa_vbrp-aufnr.
APPEND l_wa_criteria TO l_it_criteria.
*** БЕ
CLEAR l_wa_criteria.
l_wa_criteria-itemno_acc = l_v_posnr.
l_wa_criteria-FIELDNAME = 'BUKRS'.
l_wa_criteria-CHARACTER = ip_vbrk-bukrs.
APPEND l_wa_criteria TO l_it_criteria.
*** завод
CLEAR l_wa_criteria.
l_wa_criteria-itemno_acc = l_v_posnr.
l_wa_criteria-FIELDNAME = 'WERKS'.
l_wa_criteria-CHARACTER = l_wa_vbrp-werks.
APPEND l_wa_criteria TO l_it_criteria.
*** бизнес-сфера
CLEAR l_wa_criteria.
l_wa_criteria-itemno_acc = l_v_posnr.
l_wa_criteria-FIELDNAME = 'GSBER'.
l_wa_criteria-CHARACTER = l_wa_vbrp-gsber.
APPEND l_wa_criteria TO l_it_criteria.
*** сбытовая организация
CLEAR l_wa_criteria.
l_wa_criteria-itemno_acc = l_v_posnr.
l_wa_criteria-FIELDNAME = 'VKORG'.
l_wa_criteria-CHARACTER = ip_vbrk-vkorg.
APPEND l_wa_criteria TO l_it_criteria.
*** канал сбыта
CLEAR l_wa_criteria.
l_wa_criteria-itemno_acc = l_v_posnr.
l_wa_criteria-FIELDNAME = 'VTWEG'.
l_wa_criteria-CHARACTER = ip_vbrk-vtweg.
APPEND l_wa_criteria TO l_it_criteria.
*} INSERT
*** заполняем вспомогательную таблицу
CLEAR l_wa_ext1.
l_wa_ext1-field1 = l_v_posnr.
l_wa_ext1-field2 = 'BSCHL'.
l_wa_ext1-field3 = l_wa_add_post-BSCHL_D.
APPEND l_wa_ext1 TO l_it_ext1.
*** фактура
CLEAR l_wa_ext1.
l_wa_ext1-field1 = l_v_posnr.
l_wa_ext1-field2 = 'VBELN'.
l_wa_ext1-field3 = ip_vbrk-vbeln.
APPEND l_wa_ext1 TO l_it_ext1.
* торговый документ
CLEAR l_wa_ext1.
l_wa_ext1-field1 = l_v_posnr.
l_wa_ext1-field2 = 'VBEL2'.
l_wa_ext1-field3 = l_wa_vbrp-aubel.
APPEND l_wa_ext1 TO l_it_ext1.
* торговый документ
CLEAR l_wa_ext1.
l_wa_ext1-field1 = l_v_posnr.
l_wa_ext1-field2 = 'POSN2'.
l_wa_ext1-field3 = l_wa_vbrp-aupos.
APPEND l_wa_ext1 TO l_it_ext1.
ADD 1 TO l_v_posnr.
ENDLOOP.
BREAK-POINT.
CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
EXPORTING
DOCUMENTHEADER = l_wa_doc_header
IMPORTING
OBJ_KEY = l_v_objkey
TABLES
ACCOUNTGL = l_it_accgl
CURRENCYAMOUNT = l_it_curr_amount
EXTENSION1 = l_it_ext1
CRITERIA = l_it_criteria
ACCOUNTPAYABLE = l_it_vendor
RETURN = tp_return.
IF lines( tp_return ) > 1.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ELSE.
ip_vbrk-zzbelnr_d = l_v_objkey.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X' .
ENDIF.
ENDLOOP.
На выходе получаю сообщение об ошибке: " № докум. для ОСч 2000 22001003 требует обязательного ввода.
". Собственно вопрос в том, почему он сам не заполняет № документа, может у кого было такое. Аналогичная операция выполняется в системе но там только основные счета используются (структура ACCOUNTGL) а для позиции с кредитором и кодом огк приходится юзать ACCOUNTPAYABLE.