BAPI创建预制凭证
2012-07-07 15:40
344 查看
一、利用此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'.
二、前一个BAPI只能生成总帐类的预制凭证,有一定局限性,如果涉及AP、AR时应该用以此BAPI来生成预制凭证。
用此BAPI生成预制凭证时,应先处理如下BADI.
ACC_DOCUMENT在调用科目接口前更改外部凭证(利用T-code:SE18处理)
在BAPI的Change方法中增加如下代码:
DATA:ls_exte TYPE bapiparex,
ls_accit TYPE accit,
l_string TYPE string.
FIELD-SYMBOLS:<fs_posnr> TYPE ANY,
<fs_field> TYPE ANY,
<fs_value1> TYPE ANY,
<fs_value2> TYPE ANY.
READ TABLE c_extension2 INTO ls_exte WITH KEY structure = 'PARK'.
IF sy-subrc = 0.
MOVE '2' TO c_acchd-status_new.
DELETE c_extension2 INDEX sy-tabix.
ENDIF.
LOOP AT c_extension2 INTO ls_exte.
ASSIGN COMPONENT 1 OF STRUCTURE ls_exte TO <fs_field>.
ASSIGN COMPONENT 2 OF STRUCTURE ls_exte TO <fs_posnr>.
ASSIGN COMPONENT 3 OF STRUCTURE ls_exte TO <fs_value1>.
READ TABLE c_accit INTO ls_accit WITH KEY posnr = <fs_posnr>.
IF sy-subrc IS INITIAL.
CONCATENATE 'LS_ACCIT-' ls_exte-structure INTO l_string.
ASSIGN (l_string) TO <fs_value2>.
<fs_value2> = <fs_value1>.
MODIFY c_accit FROM ls_accit INDEX sy-tabix.
ENDIF.
ENDLOOP.
该段代码分两个部分,前一部分是为了生成预制凭证用的,后一部分
是针对BAPI标准参数中没有的字段。
调用BAPI的代码如下:
call function 'BAPI_ACC_DOCUMENT_POST'
exporting
documentheader = header
importing
obj_type = obj_type
obj_key = obj_key
obj_sys = obj_sys
tables
accountgl = accountgl
accountreceivable = accountreceivable
accountpayable = accountpayable
currencyamount = currencyamount
return = return
extension2 = extension2.
read table return with key type = 'S'
id = 'RW'
number = '605'.
if sy-subrc = 0.
call function 'BAPI_TRANSACTION_COMMIT'
exporting
wait = 'X'.
endif.
备注:如果要生成预制凭证,一定要在表参数extension2中
增加一条特殊记录,例如可以如下:
extension2-structure = 'PARK'.
extension2-valuepart1 = '1'.
extension2-valuepart2 = 'PARK'.
append extension2.
clear extension2.
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'.
二、前一个BAPI只能生成总帐类的预制凭证,有一定局限性,如果涉及AP、AR时应该用以此BAPI来生成预制凭证。
用此BAPI生成预制凭证时,应先处理如下BADI.
ACC_DOCUMENT在调用科目接口前更改外部凭证(利用T-code:SE18处理)
在BAPI的Change方法中增加如下代码:
DATA:ls_exte TYPE bapiparex,
ls_accit TYPE accit,
l_string TYPE string.
FIELD-SYMBOLS:<fs_posnr> TYPE ANY,
<fs_field> TYPE ANY,
<fs_value1> TYPE ANY,
<fs_value2> TYPE ANY.
READ TABLE c_extension2 INTO ls_exte WITH KEY structure = 'PARK'.
IF sy-subrc = 0.
MOVE '2' TO c_acchd-status_new.
DELETE c_extension2 INDEX sy-tabix.
ENDIF.
LOOP AT c_extension2 INTO ls_exte.
ASSIGN COMPONENT 1 OF STRUCTURE ls_exte TO <fs_field>.
ASSIGN COMPONENT 2 OF STRUCTURE ls_exte TO <fs_posnr>.
ASSIGN COMPONENT 3 OF STRUCTURE ls_exte TO <fs_value1>.
READ TABLE c_accit INTO ls_accit WITH KEY posnr = <fs_posnr>.
IF sy-subrc IS INITIAL.
CONCATENATE 'LS_ACCIT-' ls_exte-structure INTO l_string.
ASSIGN (l_string) TO <fs_value2>.
<fs_value2> = <fs_value1>.
MODIFY c_accit FROM ls_accit INDEX sy-tabix.
ENDIF.
ENDLOOP.
该段代码分两个部分,前一部分是为了生成预制凭证用的,后一部分
是针对BAPI标准参数中没有的字段。
调用BAPI的代码如下:
call function 'BAPI_ACC_DOCUMENT_POST'
exporting
documentheader = header
importing
obj_type = obj_type
obj_key = obj_key
obj_sys = obj_sys
tables
accountgl = accountgl
accountreceivable = accountreceivable
accountpayable = accountpayable
currencyamount = currencyamount
return = return
extension2 = extension2.
read table return with key type = 'S'
id = 'RW'
number = '605'.
if sy-subrc = 0.
call function 'BAPI_TRANSACTION_COMMIT'
exporting
wait = 'X'.
endif.
备注:如果要生成预制凭证,一定要在表参数extension2中
增加一条特殊记录,例如可以如下:
extension2-structure = 'PARK'.
extension2-valuepart1 = '1'.
extension2-valuepart2 = 'PARK'.
append extension2.
clear extension2.
相关文章推荐
- BAPI:BAPI_ACC_DOCUMENT_POST创建预制凭证
- [BAPI]创建会计凭证 BAPI_ACC_DOCUMENT_POST
- F-02 创建财务凭证BAPI
- BAPI_ACC_DOCUMENT_POST生成预制凭证增强
- [BAPI]创建会计凭证 BAPI_ACC_DOCUMENT_POST
- 使用BAPI_ACC_DOCUMENT_POST 与 BADI_ACC_DOCUMENT 创建固定资产凭证
- 试着利用BAPI 寻找F-59创建凭证的函数
- BAPI_ACC_GL_POSTING_POST生成财务预制凭证
- CALL FUNCTION 'BAPI_GOODSMVT_CREATE'-(物料凭证创建)
- BAPI_ACC_DOCUMENT_POST生成预制凭证增强
- BAPI_ACC_DOCUMENT_POST生成预制凭证增强
- 关于BAPI创建FI凭证时 原因代码等字段的传入
- 使用BAPI_ACC_DOCUMENT_POST,创建会计凭证,用BADI扩展字段
- BAPI_ACC_GL_POSTING_POST生成财务预制凭证
- SAP盘点:创建盘点凭证BAPI_MATPHY…
- BAPI_GOODSMVT_CREATE创建带‘E’特殊库存标识的物料凭证
- 创建会计凭证(FB01)的BAPI
- 使用BAPI_ACC_DOCUMENT_POST,创建会计凭证 增强
- BAPI调用 - 创建SO出现错误"不允许业务对象 BUS2032 和销售凭证类别 H 的组合"
- [BAPI]创建会计凭证 BAPI_ACC_DOCUMENT_POST