Используется функциональный модуль BAPI_ACC_DOCUMENT_POST. Если поставить header-doc_status = '2', то документ будет предварительно зарегистрирован.
DATA: ls_header TYPE bapiache09, lt_accountgl TYPE TABLE OF bapiacgl09, lt_accountpay TYPE TABLE OF bapiacap09, lt_accounttax TYPE TABLE OF bapiactx09, lt_currencyamount TYPE TABLE OF bapiaccr09, lt_return TYPE TABLE OF bapiret2, lv_obj_type TYPE bapiache02-obj_type, lv_obj_key TYPE bapiache02-obj_key, lv_obj_sys TYPE bapiache02-obj_sys, lv_bukrs TYPE bukrs, lv_waers TYPE waers, lv_mwskz TYPE mwskz, lv_wrbtr TYPE bseg-wrbtr, lt_mwdat TYPE TABLE OF rtax1u15. FIELD-SYMBOLS: <fs_accountgl> LIKE LINE OF lt_accountgl, <fs_accountpay> LIKE LINE OF lt_accountpay, <fs_accounttax> LIKE LINE OF lt_accounttax, <fs_currencyamount> LIKE LINE OF lt_currencyamount, <fs_mwdat> LIKE LINE OF lt_mwdat. lv_bukrs = ''. " БЕ lv_waers = 'RUB'. " Валюта lv_mwskz = ''. " Код налога ls_header-bus_act = 'RFBU'. ls_header-username = sy-uname. ls_header-header_txt = ''. ls_header-comp_code = lv_bukrs. ls_header-doc_date = sy-datum. ls_header-pstng_date = sy-datum. ls_header-fisc_year = sy-datum+0(4). ls_header-fis_period = sy-datum+4(2). ls_header-doc_type = 'KR'. ls_header-ref_doc_no = 'N001-2019'. * ls_header-doc_status = '2'. " Если нужно предварительно зарегистрировать документ lv_wrbtr = 100. CALL FUNCTION 'CALCULATE_TAX_FROM_GROSSAMOUNT' EXPORTING i_bukrs = lv_bukrs i_mwskz = lv_mwskz * i_txjcd = ' ' i_waers = lv_waers i_wrbtr = lv_wrbtr * i_zbd1p = 0 * i_prsdt = * i_protokoll = * i_taxps = * i_accnt_ext = * i_accdata = * is_enhancement = * i_pricing_refresh_tx = ' ' * IMPORTING * e_fwnav = * e_fwnvv = * e_fwste = * e_fwast = TABLES t_mwdat = lt_mwdat EXCEPTIONS bukrs_not_found = 1 country_not_found = 2 mwskz_not_defined = 3 mwskz_not_valid = 4 account_not_found = 5 different_discount_base = 6 different_tax_base = 7 txjcd_not_valid = 8 not_found = 9 ktosl_not_found = 10 kalsm_not_found = 11 parameter_error = 12 knumh_not_found = 13 kschl_not_found = 14 unknown_error = 15 OTHERS = 16. IF sy-subrc EQ 0. READ TABLE lt_mwdat ASSIGNING <fs_mwdat> INDEX 1. ENDIF. INSERT INITIAL LINE INTO TABLE lt_accountpay ASSIGNING <fs_accountpay>. <fs_accountpay>-itemno_acc = 1. <fs_accountpay>-vendor_no = 'VENDOR0001'. <fs_accountpay>-item_text = ''. <fs_accountpay>-tax_code = lv_mwskz. INSERT INITIAL LINE INTO TABLE lt_currencyamount ASSIGNING <fs_currencyamount>. <fs_currencyamount>-itemno_acc = 1. <fs_currencyamount>-curr_type = '00'. <fs_currencyamount>-currency = lv_waers. <fs_currencyamount>-amt_doccur = -1 * 120. INSERT INITIAL LINE INTO TABLE lt_accountgl ASSIGNING <fs_accountgl>. <fs_accountgl>-itemno_acc = 2. <fs_accountgl>-gl_account = '0000100000'. <fs_accountgl>-item_text = ''. <fs_accountgl>-costcenter = ''. <fs_accountgl>-plant = ''. <fs_accountgl>-tax_code = lv_mwskz. INSERT INITIAL LINE INTO TABLE lt_currencyamount ASSIGNING <fs_currencyamount>. <fs_currencyamount>-itemno_acc = 2. <fs_currencyamount>-curr_type = '00'. <fs_currencyamount>-currency = lv_waers. <fs_currencyamount>-amt_doccur = lv_wrbtr. IF <fs_mwdat> IS ASSIGNED. INSERT INITIAL LINE INTO TABLE lt_accounttax ASSIGNING <fs_accounttax>. <fs_accounttax>-itemno_acc = 3. * <fs_accounttax>-gl_account = <fs_mwdat>-hkont. <fs_accounttax>-tax_code = lv_mwskz. INSERT INITIAL LINE INTO TABLE lt_currencyamount ASSIGNING <fs_currencyamount>. <fs_currencyamount>-itemno_acc = 3. <fs_currencyamount>-curr_type = '00'. <fs_currencyamount>-currency = lv_waers. <fs_currencyamount>-amt_doccur = 20. <fs_currencyamount>-amt_base = 100. ENDIF. CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST' EXPORTING documentheader = ls_header * customercpd = * contractheader = * IMPORTING * obj_type = * obj_key = * obj_sys = TABLES accountgl = lt_accountgl * accountreceivable = accountpayable = lt_accountpay accounttax = lt_accounttax currencyamount = lt_currencyamount * criteria = * valuefield = * extension1 = return = lt_return * paymentcard = * contractitem = * extension2 = * realestate = * accountwt = . LOOP AT lt_return TRANSPORTING NO FIELDS WHERE type CA 'EAX'. EXIT. ENDLOOP. IF sy-subrc NE 0. COMMIT WORK. ELSE. ROLLBACK WORK. ENDIF.
Комментариев нет:
Отправить комментарий