文章轉自 http://hi.baidu.com/tsingwa
利用此BAPI生成預制憑證,首先要在如下使用者出口做一個簡單增強:
ACBAPI01 會計核算: 對 BAPI 界面的客戶增強功能
對應的出口函數是:EXIT_SAPLACC4_001
相應的代碼如下,核心内容是要讓憑證擡頭中的status_new值為2,即可生成預制憑證:
READ TABLE extension WITH KEY field1 = 'BAPI-PARK'.
IF sy-subrc = 0 .
MOVE 2 TO t_acchd-status_new. "to mark this is Park Document
ENDIF.
*此部分内容為BAPI标準參數中沒有的字段,四個Field字段都是char250,如果字段太多,
可利用處理字元串拆分的方法進行
LOOP AT extension.
READ TABLE t_accit WITH KEY posnr = extension-field1.
IF sy-subrc = 0.
t_accit-bschl = extension-field2. "記帳碼
t_accit-rstgr = extension-field3. "原因代碼
t_accit-umskz = extension-field4. "特殊總帳辨別
MODIFY t_accit INDEX sy-tabix.
ENDIF.
*在自己的程式或接口代碼中調用BAPI,測試程式如下:
*&---------------------------------------------------------------------*
*& Report ZT_TEST_PARK_DOCUMENT
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT zt_test_park_document1 NO STANDARD PAGE HEADING.
TABLES: bkpf,
bseg,
bsec,
bset,
bsez.
DATA: header LIKE bapiache08,
accountgl LIKE STANDARD TABLE OF bapiacgl08 WITH HEADER LINE,
currencyamount LIKE STANDARD TABLE OF bapiaccr08 WITH HEADER LINE,
extension1 LIKE STANDARD TABLE OF bapiextc WITH HEADER LINE,
return LIKE STANDARD TABLE OF bapiret2 WITH HEADER LINE.
DATA: loc_cnt TYPE posnr_acc,
loc_amt TYPE bapiwrbtr.
DATA: obj_key LIKE bapiache02-obj_key,
obj_type LIKE bapiache02-obj_type,
obj_sys LIKE bapiache02-obj_sys.
START-OF-SELECTION.
header-username = sy-uname.
header-comp_code = '1200'.
header-fisc_year = sy-datum+0(4).
header-doc_date = sy-datum.
header-pstng_date = sy-datum.
header-fis_period = sy-datum+4(2).
header-doc_type = 'SA'.
accountgl-itemno_acc = '1'.
accountgl-gl_account = '6602070000 ' .
accountgl-costcenter = '1200AA01'.
accountgl-item_text = 'Test Bapi SGTXT'.
accountgl-alloc_nmbr = 'Test Bapi ZUONR'.
APPEND accountgl.
CLEAR accountgl.
extension1-field1 = '1'."Item No
extension1-field2 = '40'."記帳碼
APPEND extension1.
loc_cnt = 1.
loc_cnt = loc_cnt + 1.
accountgl-itemno_acc = loc_cnt.
accountgl-gl_account = '1001010000' .
* accountgl-comp_code = '1200'.
* accountgl-pstng_date = sy-datum.
* accountgl-doc_type = 'SA'.
* accountgl-fisc_year = sy-datum+0(4).
* accountgl-fis_period = sy-datum+4(2).
* accountgl-costcenter = ‘13100’.
accountgl-item_text = 'Test Bapi SGTXT'.
accountgl-alloc_nmbr = 'Test Bapi ZUONR'.
APPEND accountgl.
CLEAR accountgl.
extension1-field1 = '2'. "Item No
extension1-field2 = '50'. "記帳碼
extension1-field3 = '999'."原因代碼
APPEND extension1.
loc_amt = 1111.
currencyamount-itemno_acc = '1'.
currencyamount-currency = 'CNY'.
currencyamount-amt_doccur = loc_amt. "( For Debit / ‘S’)
APPEND currencyamount.
CLEAR currencyamount.
currencyamount-itemno_acc = '2'.
currencyamount-currency = 'CNY'.
currencyamount-amt_doccur = ( -1 ) * ( loc_amt ). " ( For credit /‘H’)
APPEND currencyamount.
CLEAR currencyamount.
extension1-field1 = 'BAPI-PARK'.
APPEND extension1.
CALL FUNCTION 'BAPI_ACC_GL_POSTING_POST'
EXPORTING
documentheader = header
IMPORTING
obj_type = obj_type
obj_key = obj_key
obj_sys = obj_sys
TABLES
accountgl = accountgl
currencyamount = currencyamount
return = return
extension1 = extension1.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.