1 Overall
The blog will demostrate how to use BAPI_ACC_DOCUMENT_POST. We use
enhancement for it
2 Code
function zxtif_top_hkpz .
*"----------------------------------------------------------------------
*"*"Local interface:
*" EXPORTING
*" VALUE(STATUS) TYPE STRING
*" VALUE(MESSAGE) TYPE STRING
*" VALUE(BUSINESS_VALUE) TYPE STRING
*" CHANGING
*" VALUE(MESSAGEID) TYPE STRING
*" VALUE(INTERFACEID) TYPE STRING
*" VALUE(JSONDATA) TYPE STRING
*"----------------------------------------------------------------------
data:lo_exception type ref to cx_root,
ztrexjson type ref to cl_trex_json_serializer,
ztrexjsonret type ref to zcl_trex_json_deserializer,
http_client type ref to if_http_client.
*------------------->增加前导零
define ref_lead_zero.
call function 'CONVERSION_EXIT_ALPHA_INPUT'
exporting
input = &1
importing
output = &1.
end-of-definition.
*------------------->除去前导零
define ref_exit_zero.
call function 'CONVERSION_EXIT_ALPHA_OUTPUT'
exporting
input = &1
importing
output = &1.
end-of-definition.
data:begin of gw_data,
zlcbh like ztfi015-zlcbh,
znumb like ztfi015-znumb,
zlshjd like ztfi015-zlshjd,
kunnr like ztfi015-kunnr,
vkbur like ztfi015-vkbur,
zhkje like ztfi015-zhkje,
zfkf like ztfi015-zfkf,
zfkrq like ztfi015-zfkrq,
hkont like ztfi015-hkont,
zhkyt like ztfi015-zhkyt,
status type char1, "状态:S/E
zmsg(200), "返回消息
end of gw_data.
data: gt_data like table of gw_data with header line.
data:begin of gw_data_id, " " 独资办
zlcbh like ztfi015-zlcbh,
znumb like ztfi015-znumb,
zlshjd like ztfi015-zlshjd,
kunnr like ztfi015-kunnr,
vkbur like ztfi015-vkbur,
zhkje like ztfi015-zhkje,
hkont like ztfi015-hkont,
zfkf like ztfi015-zfkf,
zfkrq like ztfi015-zfkrq,
zhkyt like ztfi015-zhkyt,
status type char1, "状态:S/E
zmsg(200), "返回消息
end of gw_data_id.
data: gt_data_id like table of gw_data_id with header line.
data:gt_ztfi015 like table of ztfi015 with header line,
gw_ztfi015 like line of gt_ztfi015.
data:lt_ztfi015 like table of ztfi015 ,
lw_ztfi015 like line of gt_ztfi015.
* DATA:item_num TYPE i.
* DATA :znum TYPE i VALUE '450'.
data: l_line type posnr_acc.
data: l_line1 type posnr_acc.
data:gv_uname type uname,
l_sperr like knb1-sperr.
gv_uname = zcl_aip=>get_uname( ).
try.
if jsondata is not initial.
replace all occurrences of regex '"(\w+)"(\s*:\s*)'
in jsondata with '$1$2'.
create object ztrexjsonret.
ztrexjsonret->deserialize(
exporting json = jsondata
importing abap = gt_data[] ).
endif.
loop at gt_data into gw_data.
ref_lead_zero:gw_data-kunnr.
clear:l_sperr.
select single sperr into l_sperr
from knb1
where kunnr = gw_data-kunnr
and bukrs = '6800'.
if sy-subrc <> 0 .
gw_data-status = 'E'.
concatenate gw_data-kunnr '经销商/6800不存在!' into gw_data-zmsg.
else.
if l_sperr = 'X'.
gw_data-status = 'E'.
concatenate gw_data-kunnr '经销商冻结!' into gw_data-zmsg.
endif.
endif.
modify gt_data from gw_data.
endloop.
read table gt_data into gw_data with key status = 'E'.
if sy-subrc = 0.
status = 'E'.
message = gw_data-zmsg."'存在错误消息!'.
exit.
endif.
*****************************************************
data: lt_docheader like table of bapiache09 with header line,
lt_accountgl like table of bapiacgl09 with header line,
lt_acccven like table of bapiacar09 with header line,
lt_amount like table of bapiaccr09 with header line,
lt_return like table of bapiret2 with header line,
lv_obj_key like bapiache09-obj_key.
* data: l_msg type string.
data: lt_docheader1 like table of bapiache09 with header line,
lt_accountgl1 like table of bapiacgl09 with header line,
lt_acccven2 like table of bapiacap09 with header line, " 供应
lt_acccven1 like table of bapiacar09 with header line, "客户
lt_amount1 like table of bapiaccr09 with header line .
data: gt_extension2 like table of bapiparex with header line.
data: wa_zexten like zexten1.
data: l_bukrs type bukrs,
l_belnr type belnr_d,
l_gjahr type gjahr,
lv_belnr type zfkre-belnr.
data: l_acc1 type posnr_acc,
l_acc2 type posnr_acc.
" 处理数据将直营办和独资办区分.
* gt_data_id[] = gt_data[] .
loop at gt_data into gw_data.
if gw_data-vkbur = '3007' or gw_data-vkbur = '3009'
or gw_data-vkbur = '3011' or gw_data-vkbur = '3012'.
move-corresponding gw_data to gw_data_id.
append gw_data_id to gt_data_id .
endif.
clear:gw_data ,gw_data_id .
endloop.
delete gt_data where vkbur = '3007'or vkbur = '3009'
or vkbur = '3011' or vkbur = '3012' .
clear:lt_docheader[].
* 直营办数据处理
* data: lv_flag(1).
if gt_data[] is not initial.
clear:lt_acccven,lt_accountgl,lt_amount,l_line.
sort gt_data by zlcbh.
loop at gt_data into gw_data.
* item_num = item_num + 1.
select * into corresponding fields of lw_ztfi015 from ztfi015
where zlcbh = gw_data-zlcbh
and znumb = gw_data-znumb .
endselect.
if lw_ztfi015 is initial or lw_ztfi015-belnr is not initial.
if lt_docheader[] is initial.
lt_docheader-username = gv_uname. "用户
lt_docheader-header_txt = '商家回款'. "
lt_docheader-comp_code = '6800'. "公司代码
lt_docheader-doc_date = sy-datum."凭证日期
lt_docheader-pstng_date = sy-datum."过账日期
lt_docheader-doc_type = 'ZB'.
lt_docheader-ref_doc_no = gw_data-zlcbh.
append lt_docheader.
endif.
l_line = l_line + 1 .
"APPEND ACCOUNTGL:
"行项目一
lt_accountgl-itemno_acc = l_line.
lt_accountgl-gl_account = gw_data-hkont.
" CONCATENATE 'Q' WA_SEL-BUKRS INTO gt_accountgl-PROFIT_CTR.
concatenate gw_data-zfkrq+4(2) '月' gw_data-zfkrq+6(2) '日' gw_data-zhkyt gw_data-zlcbh into lt_accountgl-item_text .
* lt_accountgl-item_text = ''."gw_alv-sgtxt. "文本
append lt_accountgl.
clear:lt_accountgl.
lt_amount-itemno_acc = l_line." '0000000001'.
lt_amount-currency = 'RMB'.
lt_amount-amt_doccur = gw_data-zhkje. "处罚金额
append lt_amount.
clear:lt_amount.
if gw_data-hkont+0(4) = '1002'.
wa_zexten-posnr = l_line. "凭证行项目
wa_zexten-rstgr = '101'. "原因代码
* wa_zexten-bschl = '40'.
gt_extension2-structure = 'ZEXTEN1'.
gt_extension2-valuepart1 = wa_zexten.
* lv_flag = 'X'.
append gt_extension2.
clear: gt_extension2.
endif.
.
* APPEND gt_accountgl.
"行项目二
l_line = l_line + 1 .
"APPEND ACCOUNTPAYABLE:(针对客户)'
lt_acccven-itemno_acc = l_line.
lt_acccven-customer = gw_data-kunnr.
lt_acccven-comp_code = '6800'.
lt_acccven-c_ctr_area = '6800'.
* lt_acccven-item_text = ''."gw_alv-sgtxt."处罚原因
concatenate gw_data-zfkrq+4(2) '月' gw_data-zfkrq+6(2) '日' gw_data-zhkyt gw_data-zlcbh into lt_acccven-item_text .
append lt_acccven.
clear:lt_acccven.
lt_amount-itemno_acc = l_line." '0000000002'.
lt_amount-currency = 'RMB'.
lt_amount-amt_doccur = gw_data-zhkje * -1 .
append lt_amount.
clear:lt_amount.
*
* IF lv_flag = 'X'.
* wa_zexten-posnr = l_line. "凭证行项目
* wa_zexten-bschl = '11'.
* gt_extension2-structure = 'ZEXTEN'.
* gt_extension2-valuepart1 = wa_zexten.
* APPEND gt_extension2.
* CLEAR: gt_extension2.
* ENDIF.
* IF item_num >= znum .
at end of zlcbh .
call function 'BAPI_ACC_DOCUMENT_POST'
exporting
documentheader = lt_docheader
importing
obj_key = lv_obj_key
tables
accountgl = lt_accountgl
accountreceivable = lt_acccven
currencyamount = lt_amount
return = lt_return
extension2 = gt_extension2
exceptions
others = 1.
read table lt_return with key type = 'E' .
if sy-subrc = 0.
call function 'BAPI_TRANSACTION_ROLLBACK'.
* concatenate l_msg '处罚通报号:'gw_alv-sennr '出错:'lt_return-message '/'into l_msg.
status = 'E'.
loop at lt_return.
concatenate message '出错:'lt_return-message '/'into message.
endloop .
* CONCATENATE message '出错:'lt_return-message '/'INTO message.
else.
call function 'BAPI_TRANSACTION_COMMIT'
exporting
wait = 'X'.
l_belnr = lv_obj_key+0(10).
l_bukrs = lv_obj_key+10(4).
l_gjahr = lv_obj_key+14(4).
do 20 times.
select single * from bkpf where bukrs = l_bukrs
and belnr = l_belnr
and gjahr = l_gjahr.
if sy-subrc <> 0.
wait up to '0.5' seconds.
else.
lv_belnr = lv_obj_key+0(10).
exit.
endif.
enddo.
if lv_belnr is initial.
* concatenate l_msg '处罚通报号:'gw_alv-sennr '出错:数据库更新失败/'into l_msg.
status = 'E'.
concatenate message '数据库更新失败' into message.
else.
status = 'S'.
concatenate message '会计凭证产生成功,凭证编号:' lv_belnr into message.
endif.
endif.
" 日志
loop at gt_data into gw_data where zlcbh = lt_docheader-ref_doc_no .
clear:gw_ztfi015.
gw_ztfi015-zlcbh = gw_data-zlcbh.
gw_ztfi015-znumb = gw_data-znumb.
gw_ztfi015-kunnr = gw_data-kunnr.
gw_ztfi015-vkbur = gw_data-vkbur.
gw_ztfi015-zhkje = gw_data-zhkje.
gw_ztfi015-hkont = gw_data-hkont.
gw_ztfi015-zfkrq = gw_data-zfkrq .
gw_ztfi015-zlshjd = gw_data-zlshjd.
gw_ztfi015-belnr = lv_belnr.
gw_ztfi015-bukrs = lt_docheader-comp_code.
gw_ztfi015-zcdte = sy-datum.
gw_ztfi015-zcime = sy-uzeit.
gw_ztfi015-status = status.
gw_ztfi015-message = message.
append gw_ztfi015 to gt_ztfi015 .
endloop.
modify ztfi015 from table gt_ztfi015[].
if sy-subrc = 0.
commit work.
else.
rollback work.
endif.
clear:lt_accountgl[],lt_amount[],lt_acccven[],lt_docheader[],gt_ztfi015[],l_line,lv_belnr,message,gt_extension2[].
endat.
endif.
clear: lw_ztfi015.
endloop.
endif.
if gt_data_id[] is not initial. " 独资办凭证数据处理
clear:lt_acccven,lt_accountgl,lt_amount ,l_line.
sort gt_data_id by zlcbh.
loop at gt_data_id into gw_data_id.
* item_num = item_num + 1.
if gw_data_id-zlshjd = '独资办审核' .
select * into corresponding fields of lw_ztfi015 from ztfi015
where zlcbh = gw_data_id-zlcbh
and znumb = gw_data_id-znumb .
endselect.
if lw_ztfi015 is initial or lw_ztfi015-belnr is not initial.
if lt_docheader[] is initial.
lt_docheader-username = gv_uname. "用户
lt_docheader-header_txt = '商家回款'. "
lt_docheader-comp_code = gw_data_id-vkbur. "公司代码
lt_docheader-doc_date = sy-datum."凭证日期
lt_docheader-pstng_date = sy-datum."过账日期
lt_docheader-doc_type = 'ZB'.
lt_docheader-ref_doc_no = gw_data_id-zlcbh.
append lt_docheader.
endif.
l_line = l_line + 1.
"行项目一
lt_accountgl-itemno_acc = l_line.
lt_accountgl-gl_account = gw_data_id-hkont.
" CONCATENATE 'Q' WA_SEL-BUKRS INTO gt_accountgl-PROFIT_CTR.
concatenate gw_data_id-zfkrq+4(2) '月' gw_data_id-zfkrq+6(2) '日' gw_data_id-zhkyt gw_data_id-zlcbh into lt_accountgl-item_text .
* lt_accountgl-item_text = ''."gw_alv-sgtxt. "文本
append lt_accountgl.
clear:lt_accountgl.
lt_amount-itemno_acc = l_line." '0000000001'.
lt_amount-currency = 'RMB'.
lt_amount-amt_doccur = gw_data_id-zhkje. "处罚金额
append lt_amount.
clear:lt_amount.
if gw_data_id-hkont+0(4) = '1002'.
wa_zexten-posnr = l_line. "凭证行项目
wa_zexten-rstgr = '101'. "原因代码
* wa_zexten-bschl = '40'.
gt_extension2-structure = 'ZEXTEN1'.
gt_extension2-valuepart1 = wa_zexten.
append gt_extension2.
clear: gt_extension2.
* lv_flag = 'X'.
endif.
* APPEND gt_accountgl.
"行项目二
l_line = l_line + 1.
"APPEND ACCOUNTPAYABLE:(针对客户)'
lt_acccven-itemno_acc = l_line.
lt_acccven-customer = gw_data_id-kunnr.
lt_acccven-comp_code = gw_data_id-vkbur.
lt_acccven-c_ctr_area = gw_data_id-vkbur.
concatenate gw_data_id-zfkrq+4(2) '月' gw_data_id-zfkrq+6(2) '日' gw_data_id-zhkyt gw_data_id-zlcbh into lt_acccven-item_text .
* lt_acccven-item_text = ''."gw_alv-sgtxt."处罚原因
append lt_acccven.
clear:lt_acccven.
lt_amount-itemno_acc = l_line." '0000000002'.
lt_amount-currency = 'RMB'.
lt_amount-amt_doccur = gw_data_id-zhkje * -1 .
append lt_amount.
clear:lt_amount.
* IF lv_flag = 'X'.
* wa_zexten-posnr = l_line. "凭证行项目
* wa_zexten-bschl = '11'.
* gt_extension2-structure = 'ZEXTEN'.
* gt_extension2-valuepart1 = wa_zexten.
* APPEND gt_extension2.
* CLEAR: gt_extension2.
* ENDIF.
* IF item_num >= znum .
at end of zlcbh .
call function 'BAPI_ACC_DOCUMENT_POST'
exporting
documentheader = lt_docheader
importing
obj_key = lv_obj_key
tables
accountgl = lt_accountgl
accountreceivable = lt_acccven
currencyamount = lt_amount
return = lt_return
extension2 = gt_extension2
exceptions
others = 1.
read table lt_return with key type = 'E'.
if sy-subrc = 0.
call function 'BAPI_TRANSACTION_ROLLBACK'.
* concatenate l_msg '处罚通报号:'gw_alv-sennr '出错:'lt_return-message '/'into l_msg.
status = 'E'.
loop at lt_return.
concatenate message '出错:'lt_return-message '/'into message.
endloop .
* CONCATENATE message '出错:'lt_return-message '/'INTO message.
else.
call function 'BAPI_TRANSACTION_COMMIT'
exporting
wait = 'X'.
l_belnr = lv_obj_key+0(10).
l_bukrs = lv_obj_key+10(4).
l_gjahr = lv_obj_key+14(4).
do 20 times.
select single * from bkpf where bukrs = l_bukrs
and belnr = l_belnr
and gjahr = l_gjahr.
if sy-subrc <> 0.
wait up to '0.5' seconds.
else.
lv_belnr = lv_obj_key+0(10).
exit.
endif.
enddo.
if lv_belnr is initial.
* concatenate l_msg '处罚通报号:'gw_alv-sennr '出错:数据库更新失败/'into l_msg.
status = 'E'.
concatenate message '数据库更新失败' into message.
else.
status = 'S'.
concatenate message '会计凭证产生成功,凭证编号:' lv_belnr into message.
endif.
endif.
" 日志
loop at gt_data_id into gw_data_id where zlcbh = lt_docheader-ref_doc_no.
clear:gw_ztfi015.
gw_ztfi015-zlcbh = gw_data_id-zlcbh.
gw_ztfi015-znumb = gw_data_id-znumb.
gw_ztfi015-kunnr = gw_data_id-kunnr.
gw_ztfi015-vkbur = gw_data_id-vkbur.
gw_ztfi015-zhkje = gw_data_id-zhkje.
gw_ztfi015-hkont = gw_data_id-hkont.
gw_ztfi015-zfkrq = gw_data_id-zfkrq .
gw_ztfi015-zlshjd = gw_data_id-zlshjd.
gw_ztfi015-belnr = lv_belnr.
gw_ztfi015-bukrs = lt_docheader-comp_code.
gw_ztfi015-zcdte = sy-datum.
gw_ztfi015-zcime = sy-uzeit.
gw_ztfi015-status = status.
gw_ztfi015-message = message.
append gw_ztfi015 to gt_ztfi015 .
endloop.
modify ztfi015 from table gt_ztfi015[].
if sy-subrc = 0.
commit work.
else.
rollback work.
endif.
clear:lt_accountgl[],lt_amount[],lt_acccven[] ,gt_ztfi015[],lt_docheader[],l_line,lv_belnr,message,gt_extension2[].
endat.
endif.
clear:lw_ztfi015.
elseif gw_data_id-zlshjd = '总公司审核' .
select * into corresponding fields of lw_ztfi015 from ztfi015
where zlcbh = gw_data_id-zlcbh
and znumb = gw_data_id-znumb .
endselect.
if lw_ztfi015 is initial or lw_ztfi015-belnr is not initial.
if lt_docheader[] is initial.
lt_docheader-username = gv_uname. "用户
lt_docheader-header_txt = '商家回款'. "
lt_docheader-comp_code = '6800'. "公司代码
lt_docheader-doc_date = sy-datum."凭证日期
lt_docheader-pstng_date = sy-datum."过账日期
lt_docheader-doc_type = 'ZB'.
lt_docheader-ref_doc_no = gw_data_id-zlcbh.
append lt_docheader.
endif.
l_line = l_line + 1.
"行项目一
lt_accountgl-itemno_acc = l_line.
lt_accountgl-gl_account = gw_data_id-hkont.
" CONCATENATE 'Q' WA_SEL-BUKRS INTO gt_accountgl-PROFIT_CTR.
concatenate gw_data_id-zfkrq+4(2) '月' gw_data_id-zfkrq+6(2) '日' gw_data_id-zhkyt gw_data_id-zlcbh into lt_accountgl-item_text .
* lt_accountgl-item_text = ''."gw_alv-sgtxt. "文本
append lt_accountgl.
clear:lt_accountgl.
lt_amount-itemno_acc = l_line." '0000000001'.
lt_amount-currency = 'RMB'.
lt_amount-amt_doccur = gw_data_id-zhkje. "处罚金额
append lt_amount.
clear:lt_amount.
if gw_data_id-hkont+0(4) = '1002'.
wa_zexten-posnr = l_line. "凭证行项目
wa_zexten-rstgr = '101'. "原因代码
gt_extension2-structure = 'ZEXTEN1'.
gt_extension2-valuepart1 = wa_zexten.
append gt_extension2.
clear: gt_extension2.
endif.
.
* APPEND gt_accountgl.
"行项目二
l_line = l_line + 1.
"APPEND ACCOUNTPAYABLE:(针对客户)'
lt_acccven-itemno_acc = l_line.
if gw_data_id-vkbur = '3007'.
lt_acccven-customer = '0001002856'.
elseif gw_data_id-vkbur = '3009'.
lt_acccven-customer = '0001002873'.
elseif gw_data_id-vkbur = '3011'.
lt_acccven-customer = '0001001699'.
elseif gw_data_id-vkbur = '3012'.
lt_acccven-customer = '0001001700'.
endif.
lt_acccven-comp_code = '6800'.
lt_acccven-c_ctr_area = '6800'.
concatenate gw_data_id-zfkrq+4(2) '月' gw_data_id-zfkrq+6(2) '日' gw_data_id-zhkyt gw_data_id-zlcbh into lt_acccven-item_text .
* lt_acccven-item_text = ''."gw_alv-sgtxt."处罚原因
append lt_acccven.
clear:lt_acccven.
lt_amount-itemno_acc = l_line." '0000000002'.
lt_amount-currency = 'RMB'.
lt_amount-amt_doccur = gw_data_id-zhkje * -1 .
append lt_amount.
clear:lt_amount.
* IF item_num >= znum .
at end of zlcbh .
call function 'BAPI_ACC_DOCUMENT_POST'
exporting
documentheader = lt_docheader
importing
obj_key = lv_obj_key
tables
accountgl = lt_accountgl
accountreceivable = lt_acccven
currencyamount = lt_amount
return = lt_return
extension2 = gt_extension2
exceptions
others = 1.
read table lt_return with key type = 'E'.
if sy-subrc = 0.
call function 'BAPI_TRANSACTION_ROLLBACK'.
* concatenate l_msg '处罚通报号:'gw_alv-sennr '出错:'lt_return-message '/'into l_msg.
status = 'E'.
loop at lt_return.
concatenate message '出错:'lt_return-message '/'into message.
endloop .
* CONCATENATE message '出错:'lt_return-message '/'INTO message.
else.
call function 'BAPI_TRANSACTION_COMMIT'
exporting
wait = 'X'.
l_belnr = lv_obj_key+0(10).
l_bukrs = lv_obj_key+10(4).
l_gjahr = lv_obj_key+14(4).
do 20 times.
select single * from bkpf where bukrs = l_bukrs
and belnr = l_belnr
and gjahr = l_gjahr.
if sy-subrc <> 0.
wait up to '0.5' seconds.
else.
lv_belnr = lv_obj_key+0(10).
exit.
endif.
enddo.
if lv_belnr is initial.
* concatenate l_msg '处罚通报号:'gw_alv-sennr '出错:数据库更新失败/'into l_msg.
status = 'E'.
concatenate message '数据库更新失败' into message.
else.
status = 'S'.
concatenate message '会计凭证产生成功,凭证编号:' lv_belnr into message.
endif.
endif.
" 日志
loop at gt_data_id into gw_data_id where zlcbh = lt_docheader-ref_doc_no..
clear:gw_ztfi015.
gw_ztfi015-zlcbh = gw_data_id-zlcbh.
gw_ztfi015-znumb = gw_data_id-znumb.
gw_ztfi015-kunnr = gw_data_id-kunnr.
gw_ztfi015-vkbur = gw_data_id-vkbur.
gw_ztfi015-zhkje = gw_data_id-zhkje.
gw_ztfi015-hkont = gw_data_id-hkont.
gw_ztfi015-zfkrq = gw_data_id-zfkrq .
gw_ztfi015-zlshjd = gw_data_id-zlshjd.
gw_ztfi015-belnr = lv_belnr.
gw_ztfi015-bukrs = lt_docheader-comp_code.
gw_ztfi015-zcdte = sy-datum.
gw_ztfi015-zcime = sy-uzeit.
gw_ztfi015-status = status.
gw_ztfi015-message = message.
append gw_ztfi015 to gt_ztfi015 .
endloop.
modify ztfi015 from table gt_ztfi015[].
if sy-subrc = 0.
commit work.
else.
rollback work.
endif.
clear:lt_accountgl[],lt_amount[],lt_acccven[] ,lt_docheader[],l_line,lv_belnr,message,gt_extension2[].
endat.
endif.
if lw_ztfi015 is initial or lw_ztfi015-belnr1 is not initial.
if lt_docheader1[] is initial.
lt_docheader1-username = gv_uname. "用户
lt_docheader1-header_txt = '商家回款'. "
lt_docheader1-comp_code = gw_data_id-vkbur. "公司代码
lt_docheader1-doc_date = sy-datum."凭证日期
lt_docheader1-pstng_date = sy-datum."过账日期
lt_docheader1-doc_type = 'ZB'.
lt_docheader1-ref_doc_no = gw_data_id-zlcbh.
append lt_docheader1.
endif.
l_line1 = l_line1 + 1.
"行项目一
"APPEND ACCOUNTPAYABLE:(针对供应商)'
lt_acccven2-itemno_acc = l_line1.
lt_acccven2-vendor_no = '0008800019'.
* lt_acccven2-comp_code = gw_data_id-vkbur.
* lt_acccven2-BUS_AREA = gw_data_id-vkbur.
concatenate gw_data_id-zfkrq+4(2) '月' gw_data_id-zfkrq+6(2) '日' gw_data_id-zhkyt gw_data_id-zlcbh into lt_acccven2-item_text .
* lt_acccven2-item_text = ''."gw_alv-sgtxt."处罚原因
append lt_acccven2.
clear:lt_acccven1.
lt_amount1-itemno_acc = l_line1." '0000000002'.
lt_amount1-currency = 'RMB'.
lt_amount1-amt_doccur = gw_data_id-zhkje .
append lt_amount1.
clear:lt_amount1.
if gw_data_id-hkont+0(4) = '1002'.
wa_zexten-posnr = l_line. "凭证行项目
wa_zexten-rstgr = '101'. "原因代码
gt_extension2-structure = 'ZEXTEN1'.
gt_extension2-valuepart1 = wa_zexten.
append gt_extension2.
clear: gt_extension2.
endif.
"行项目二"APPEND ACCOUNTPAYABLE:(针对客户)'
l_line1 = l_line1 + 1.
lt_acccven1-itemno_acc = l_line1.
lt_acccven1-customer = gw_data_id-kunnr .
concatenate gw_data-zfkrq+4(2) '月' gw_data-zfkrq+6(2) '日' gw_data_id-zhkyt gw_data_id-zlcbh into lt_acccven1-item_text .
* lt_acccven1-item_text = ''."gw_alv-sgtxt."处罚原因
append lt_acccven1.
clear:lt_acccven1.
lt_amount1-itemno_acc = l_line1." '0000000001'.
lt_amount1-currency = 'RMB'.
lt_amount1-amt_doccur = gw_data_id-zhkje * -1 .
append lt_amount1.
clear:lt_amount1.
* IF item_num >= znum .
at end of zlcbh .
clear:lv_obj_key,lt_acccven,lt_return ,message,lv_belnr.
call function 'BAPI_ACC_DOCUMENT_POST'
exporting
documentheader = lt_docheader1
importing
obj_key = lv_obj_key
tables
* accountgl = lt_accountgl1
accountreceivable = lt_acccven1 " 供应商
accountpayable = lt_acccven2 " 客户
currencyamount = lt_amount1
return = lt_return
extension2 = gt_extension2
exceptions
others = 1.
read table lt_return with key type = 'E'.
if sy-subrc = 0.
call function 'BAPI_TRANSACTION_ROLLBACK'.
* concatenate l_msg '处罚通报号:'gw_alv-sennr '出错:'lt_return-message '/'into l_msg.
status = 'E'.
loop at lt_return.
concatenate message '出错:'lt_return-message '/'into message.
endloop .
* CONCATENATE message '出错:'lt_return-message '/'INTO message.
else.
call function 'BAPI_TRANSACTION_COMMIT'
exporting
wait = 'X'.
l_belnr = lv_obj_key+0(10).
l_bukrs = lv_obj_key+10(4).
l_gjahr = lv_obj_key+14(4).
do 20 times.
select single * from bkpf where bukrs = l_bukrs
and belnr = l_belnr
and gjahr = l_gjahr.
if sy-subrc <> 0.
wait up to '0.5' seconds.
else.
lv_belnr = lv_obj_key+0(10).
exit.
endif.
enddo.
if lv_belnr is initial.
* concatenate l_msg '处罚通报号:'gw_alv-sennr '出错:数据库更新失败/'into l_msg.
status = 'E'.
concatenate message '数据库更新失败' into message.
else.
status = 'S'.
concatenate message '会计凭证产生成功,凭证编号:' lv_belnr into message.
endif.
endif.
loop at gt_ztfi015 into gw_ztfi015 where zlcbh = lt_docheader1-ref_doc_no.
gw_ztfi015-belnr1 = lv_belnr.
gw_ztfi015-bukrs1 = lt_docheader1-comp_code.
modify gt_ztfi015 from gw_ztfi015 transporting belnr1 bukrs1.
endloop.
modify ztfi015 from table gt_ztfi015[].
if sy-subrc = 0.
commit work.
else.
rollback work.
endif.
clear:lt_accountgl1[],lt_amount1[],lt_acccven1[],gt_ztfi015[],l_line1,lv_belnr,message,gt_extension2[].
endat.
endif.
endif.
clear:lw_ztfi015.
endloop.
endif.
clear:status,message,lt_return[].
catch cx_root into lo_exception.
status = 'E'.
message = lo_exception->get_text( ).
endtry.
endfunction.