on 02-21-2019 4:32 PM
Dear Experts,
can you please show me how to pass the Acc: List of Business Transactions (RF05A-BUSCS) to BAPI_ACC_DOCUMENT_POST?
My aim is to create enter incoming invoices (t-code = FB60) with BAPI_ACC_DOCUMENT_POST.
Kind regards,
Emal
Hi Eli,
If you call the transaction code FB60 it is the first drop down field you can choose between invoice and credit memo (see screenshot).
My problem:
I’m trying to create mass enter incoming invoices with BAPI_ACC_DOCUMENT_POST from header-table (zsd_rgkopf_lft) and position-table (zsd_rgpos_lft) through the following source code
METHOD create_voucher_fb60.
CONSTANTS:
lc_sys_part TYPE zsd_nrver VALUE 5,
lc_salesorder TYPE zsd_belegart VALUE 'SD',
lc_blart TYPE blart VALUE 'KR',
lc_awtyp TYPE awtyp VALUE 'BKPFF',
lc_bktxt TYPE bktxt VALUE 'trans-o-flex Express GmbH',
lc_waers TYPE waers VALUE 'EUR',
lc_kunnr TYPE kunnr VALUE '0237000201',
lc_glvor TYPE glvor VALUE 'RFBU'.
DATA: doc_header TYPE bapiache09,
lt_accountpayable TYPE TABLE OF bapiacap09,
ls_accountpayable TYPE bapiacap09,
ls_accountgl TYPE bapiacgl09,
lt_accountgl TYPE TABLE OF bapiacgl09,
lt_accounttax TYPE TABLE OF bapiactx09,
ls_currencyamount TYPE bapiaccr09,
lt_currencyamount TYPE TABLE OF bapiaccr09,
ls_extension1 TYPE bapiacextc,
lt_extension1 TYPE TABLE OF bapiacextc,
lt_return TYPE TABLE OF bapiret2,
obj_type TYPE bapiache08-obj_type,
obj_key TYPE bapiache02-obj_key,
obj_sys TYPE bapiache02-obj_sys,
belnr TYPE bkpf-belnr,
docnum TYPE bkpf-belnr,
lc_bukrs TYPE bukrs,
lv_message TYPE string,
ld_posting_date TYPE syst_datum,
ld_fiscal_year TYPE bapi0002_4-fiscal_year,
ld_fiscal_period TYPE bapi0002_4-fiscal_period,
lv_posnr TYPE posnr_acc VALUE 1,
ld_return TYPE bapireturn1,
lc_awkey TYPE awkey,
lt_accountreceivable TYPE TABLE OF bapiacar09.
DATA: l_s_log TYPE bal_s_log,
l_s_msg TYPE bal_s_msg,
l_t_msg TYPE bal_t_msg,
l_balloghandl TYPE balloghndl,
l_t_ballog TYPE bal_t_logh,
logger TYPE REF TO zcl_log.
CREATE OBJECT logger.
logger->call_application_log(
i_t_msg = l_t_msg
i_object = 'ZSD_KRED_XML'
i_subobject = 'ZSD_KRED_XML_SUBOBJ'
iwa_s_log = l_s_log
i_balloghandl = l_balloghandl
i_t_ballog = l_t_ballog ).
SELECT * FROM zsd_rgpos_lft INTO TABLE @DATA(lt_rgpos)
WHERE angelegter_beleg NE @space AND nummer_verarbeitung EQ @lc_sys_part AND modul = @lc_salesorder AND gegenbuchung EQ @space.
SELECT * FROM zsd_rgkopf_lft INTO TABLE @DATA(lt_rgkopf)
WHERE angelegter_beleg NE @space AND nummer_verarbeitung EQ @lc_sys_part AND modul = @lc_salesorder AND gegenbuchung EQ @space.
DESCRIBE TABLE lt_rgkopf LINES DATA(lv_linenumber).
IF lv_linenumber NE 0.
LOOP AT lt_rgkopf INTO DATA(ls_rgkopf).
TRY.
lc_bukrs = lt_rgpos[ id = ls_rgkopf-id positionsnummer = '1' ]-kartennummer+3(3).
belnr = lt_rgpos[ id = ls_rgkopf-id positionsnummer = '1' ]-angelegter_beleg.
CATCH cx_sy_itab_line_not_found.
logger->i_message( '-->Die Schnittstelle SYS_PART meldet (SD)' ).
MOVE ls_rgkopf-id TO lv_message.
CONCATENATE 'Mit der Positionsnummer 1 und id' lv_message 'kann keiner Datensatz in der Tabelle ZSD_RGPOS_LFT gefunden werden.' INTO lv_message SEPARATED BY space.
logger->i_message( lv_message ).
logger->i_message( '<--Ende der Meldung.' ).
ENDTRY.
IF lc_bukrs IS INITIAL.
logger->i_message( '-->Die Schnittstelle SYS_PART meldet (SD).' ).
logger->i_message( 'Für ID ' && ls_rgkopf-id && ' und Positionsnummer 1 könnte kein Buchungskreis ermittelt werden.' ).
logger->i_message( '<--Ende der Meldung.' ).
CONTINUE.
ELSE.
lc_bukrs = 0 && lc_bukrs.
ENDIF.
MOVE ls_rgkopf-rechnungsdatum TO ld_posting_date.
CALL FUNCTION 'BAPI_COMPANYCODE_GET_PERIOD'
EXPORTING
companycodeid = lc_bukrs
posting_date = ld_posting_date
IMPORTING
fiscal_year = ld_fiscal_year
fiscal_period = ld_fiscal_period
return = ld_return.
IF sy-subrc <> 0.
logger->i_message( '-->Die Schnittstelle SYS_PART meldet (SD)' ).
logger->i_message( ' Geschäftsjahr bzw. Geschäftsmonat könnte nicht ermittelt werden' ).
logger->i_message( '<--Ende der Meldung.' ).
ELSE.
" Get last SA type document.
SELECT MAX( belnr )
INTO docnum
FROM bkpf
WHERE bukrs = lc_bukrs
AND bstat = ''
AND blart = lc_blart
AND gjahr = sy-datlo(4).
" Create new document number to be used.
docnum = docnum + 1.
" Begin to populate docnument header.
CONCATENATE '0' docnum '001' sy-datlo(4) INTO doc_header-obj_key.
doc_header-obj_type = lc_awtyp.
CONCATENATE sy-sysid sy-mandt INTO doc_header-obj_sys.
doc_header-username = sy-uname.
doc_header-header_txt = lc_bktxt.
doc_header-comp_code = lc_bukrs.
doc_header-doc_date = ls_rgkopf-rechnungsdatum.
doc_header-pstng_date = ls_rgkopf-rechnungsdatum.
doc_header-doc_type = lc_blart.
doc_header-ref_doc_no = belnr.
CONCATENATE '0' docnum INTO docnum.
doc_header-fisc_year = ld_fiscal_year.
* doc_header-ac_doc_no = docnum.
doc_header-bus_act = lc_glvor.
LOOP AT lt_rgpos INTO DATA(ls_rgpos) WHERE id = ls_rgkopf-id.
IF ls_rgpos-positionsnummer <> 1.
lc_bukrs = 0 && ls_rgpos-kartennummer+3(3).
belnr = ls_rgpos-angelegter_beleg.
" Get last SA type document.
SELECT MAX( belnr )
INTO docnum
FROM bkpf
WHERE bukrs = lc_bukrs
AND bstat = ''
AND blart = lc_blart
AND gjahr = sy-datlo(4).
" Create new document number to be used.
docnum = docnum + 1.
" Begin to populate docnument header.
CONCATENATE '0' docnum '001' sy-datlo(4) INTO doc_header-obj_key.
doc_header-ref_doc_no = belnr.
doc_header-comp_code = lc_bukrs.
ENDIF.
" fill account payable
ls_accountpayable-itemno_acc = lv_posnr.
ls_accountpayable-vendor_no = lc_kunnr.
APPEND ls_accountpayable TO lt_accountpayable.
" fill currency amount
ls_currencyamount-itemno_acc = lv_posnr.
ls_currencyamount-currency = lc_waers.
ls_currencyamount-amt_doccur = ls_rgpos-nettowert.
ls_currencyamount-curr_type = '00'.
APPEND ls_currencyamount TO lt_currencyamount.
* " Change the posting key
* ls_extension1-field1 = ls_currencyamount-itemno_acc.
* ls_extension1-field2 = 'BSCHL'.
* ls_extension1-field3 = '31'.
* APPEND ls_extension1 TO lt_extension1.
" fill account gl
ADD 1 TO lv_posnr.
ls_accountgl-itemno_acc = lv_posnr.
ls_accountgl-gl_account = ls_rgpos-sachkonto_0205.
ls_accountgl-comp_code = lc_bukrs.
ls_accountgl-fisc_year = ld_fiscal_year.
ls_accountgl-fis_period = ld_fiscal_period.
ls_accountgl-costcenter = ls_rgpos-kartennummer.
APPEND ls_accountgl TO lt_accountgl.
" fill currency amount
ls_currencyamount-itemno_acc = lv_posnr.
ls_currencyamount-currency = lc_waers.
ls_currencyamount-amt_doccur = ls_rgpos-nettowert * -1.
ls_currencyamount-curr_type = '00'.
APPEND ls_currencyamount TO lt_currencyamount.
* " Change the posting key
* ls_extension1-field1 = ls_currencyamount-itemno_acc.
* ls_extension1-field2 = 'BSCHL'.
* ls_extension1-field3 = '40'.
* APPEND ls_extension1 TO lt_extension1.
CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
EXPORTING
documentheader = doc_header
IMPORTING
obj_key = lc_awkey
TABLES
accountgl = lt_accountgl
accountpayable = lt_accountpayable
accounttax = lt_accounttax
currencyamount = lt_currencyamount
extension1 = lt_extension1
return = lt_return.
IF sy-subrc EQ 0.
CLEAR lv_message.
COMMIT WORK AND WAIT.
logger->i_message( '-->Die Schnittstelle SYS_PART meldet (SD)' ).
logger->i_message('BAPI-Aufruf hat funkioniert.').
logger->i_message( '-->Die Schnittstelle SYS_PART meldet (SD)' ).
READ TABLE lt_return INTO DATA(ls_return) INDEX 1.
MOVE ls_return-message TO lv_message.
logger->i_message( lv_message ).
logger->i_message( '<--Ende der Meldung.' ).
IF lv_message IS NOT INITIAL.
DATA(lv_change) = abap_true.
ls_rgpos-gegenbuchung = lc_awkey.
MODIFY lt_rgpos FROM ls_rgpos TRANSPORTING gegenbuchung.
IF ls_rgpos-positionsnummer = '1' .
ls_rgkopf-gegenbuchung = lc_awkey.
MODIFY lt_rgkopf FROM ls_rgkopf TRANSPORTING gegenbuchung WHERE id = ls_rgkopf-id.
ENDIF.
CLEAR lc_awkey.
ENDIF.
ELSE.
logger->i_message( '-->Die Schnittstelle SYS_PART meldet (SD)' ).
LOOP AT lt_return INTO ls_return WHERE type = 'E'.
MOVE ls_return-message TO lv_message.
logger->i_message( lv_message ).
ENDLOOP.
logger->i_message( '<--Ende der Meldung.' ).
ENDIF.
REFRESH: lt_accountpayable, lt_accountgl, lt_accounttax, lt_currencyamount,lt_return.
CLEAR lv_posnr.
lv_posnr = 1.
ENDLOOP.
ENDIF.
REFRESH: lt_accountpayable, lt_accountgl, lt_accounttax, lt_currencyamount,lt_return.
CLEAR doc_header.
ENDLOOP.
IF lv_change = abap_true.
MODIFY zsd_rgpos_lft FROM TABLE lt_rgpos.
MODIFY zsd_rgkopf_lft FROM TABLE lt_rgkopf.
COMMIT WORK.
ENDIF.
ELSE.
IF gv_invoked_method <> 'create_voucher_f_22_43'.
logger->i_message( '-->Die Schnittstelle SYS_PART meldet (SD).' ).
logger->i_message( 'Es könnte kein Datensatz selektiert werden.' ).
logger->i_message( '<--Ende der Meldung.' ).
MESSAGE 'Die Verarbeitung ist abgeschlossen.' TYPE 'I'.
LEAVE.
ENDIF.
ENDIF.
ENDMETHOD.
This source code can create enter incoming invoices, but there is a problem. The posting key are not accurately acquired.
I try to change the posting key 40 to 31 with the aid of extension1 table as follows
" Change the posting key
ls_extension1-field1 = ls_currencyamount-itemno_acc.
ls_extension1-field2 = 'BSCHL'.
ls_extension1-field3 = '31'.
APPEND ls_extension1 TO lt_extension1.
but I got the error message:
Error in document: BKPFF $ KA4CLNT100
Debit/credit indicator is inconsistent
I create manually a enter incoming invoices over the transaction code FB60 with the same account and posting key 31 it is working fine.
I suppose it has something to do with BUSCS.
Now I hope, that you or someone else can help me to hand over the posting key 31 to BAPI.
Kind regards,
Emal
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Still, this BUSCS is just a technical front-end field, which tells the system what path to choose for processing a document; you won't be able to pass it to BAPI. Posting key could be controlled by extension, though. I see that you put it on 'comments'. Also, the error message implies that you have some inconsistency with SHKZG (debit/credit).
Hi,
BUSCS is an internal technical parameter. It is not stored with FI documents, so I'm not sure what you mean by the attempt to pass it through BAPI_ACC_DOCUMENT_POST.
Regards,
Eli
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
97 | |
11 | |
11 | |
6 | |
6 | |
4 | |
4 | |
3 | |
3 | |
3 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.