有些字段无法通过BAPI导入,需要经过SE19增强实施激活才行
增强参考博客:
https://blog.youkuaiyun.com/stone0823/article/details/96843146
"bapi参数
"表头
DATA: ls_header TYPE bapiache09.
"总账科目
DATA:lt_accountgl TYPE TABLE OF bapiacgl09,
ls_accountgl TYPE bapiacgl09.
"货币项目
DATA: lt_currency TYPE TABLE OF bapiaccr09,
ls_currency TYPE bapiaccr09.
"供应商
DATA: lt_vendor TYPE TABLE OF bapiacap09,
ls_vendor TYPE bapiacap09.
"税值
DATA:lt_accounttax TYPE TABLE OF bapiactx09,
ls_accounttax TYPE bapiactx09.
"返回值
DATA: lt_return TYPE TABLE OF bapiret2 WITH HEADER LINE,
ls_return TYPE bapiret2.
* "增强字段
DATA:ls_zexten TYPE zfis003c,
lt_ext2 LIKE TABLE OF bapiparex WITH HEADER LINE.
"记账码
DATA: ls_bschl TYPE bschl.
"行项目号
DATA: lv_buzei TYPE buzei.
DATA: lv_key TYPE bapiache09-obj_key.
DATA: lv_posid TYPE PRPS-POSID.
*&--- 创建日志记录实例
DATA:lv_act TYPE zel_ifact.
" 凭证抬头
ls_header-username = sy-uname.
ls_header-doc_type = 'Z1'. " 凭证类型,默认Z1
ls_header-doc_date = is_input-bldat. " 凭证日期
ls_header-pstng_date = is_input-budat. " 记账日期
ls_header-comp_code = is_input-bukrs. " 公司代码
ls_header-ref_doc_no = is_input-xblnr. " 参考
ls_header-header_txt = is_input-bktxt. " 抬头文本
lv_buzei = '000'.
" 凭证行项目
LOOP AT it_input INTO DATA(ls_input).
lv_buzei = lv_buzei + 10.
IF ls_input-hkont IS NOT INITIAL.
ls_zexten-bschl = '40'.
"总账
ls_accountgl-itemno_acc = lv_buzei.
ls_accountgl-gl_account = ls_input-hkont. " 科目
ls_accountgl-tax_code = ls_input-mwskz. " 税码
ls_accountgl-wbs_element = ls_input-projk. " wbs
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' " 成本中心
EXPORTING
input = ls_input-kostl
IMPORTING
output = ls_accountgl-costcenter.
ls_accountgl-func_area = ls_input-fkber. " 功能范围
ls_accountgl-item_text = ls_input-sgtxt. " 文本摘要
ls_accountgl-alloc_nmbr = ls_input-zuonr. " 分配号码
ls_accountgl-ref_key_2 = ls_input-xref2. " 参考代码2
APPEND ls_accountgl TO lt_accountgl.
"金额
ls_currency-itemno_acc = lv_buzei.
ls_currency-currency = is_input-waers.
ls_currency-amt_doccur = ls_input-wrbtr .
APPEND ls_currency TO lt_currency.
ELSEIF ls_input-lifnr IS NOT INITIAL.
ls_zexten-bschl = '31'.
" 供应商
CLEAR ls_vendor.
ls_vendor-itemno_acc = lv_buzei.
ls_vendor-gl_account = ls_input-hkont." 费用科目
ls_vendor-vendor_no = ls_input-lifnr." 供应商编码
ls_vendor-vendor_no = |{ ls_vendor-vendor_no ALPHA = IN }|.
ls_vendor-bline_date = is_input-budat. " 付款起算时间
ls_vendor-pymt_meth = 'T'. " 付款方式
ls_vendor-item_text = ls_input-sgtxt. " 文本摘要
ls_vendor-alloc_nmbr = ls_input-zuonr. " 分配号码
ls_vendor-ref_key_2 = ls_input-xref2. " 参考代码2
ls_vendor-bline_date = is_input-budat. " 付款起算时间
ls_vendor-pymt_meth = 'T' . " 付款方式
APPEND ls_vendor TO lt_vendor.
"金额
ls_currency-itemno_acc = lv_buzei.
ls_currency-currency = is_input-waers.
ls_currency-amt_doccur = 0 - ls_input-wrbtr .
APPEND ls_currency TO lt_currency.
ENDIF.
" 增强字段
ls_zexten-posnr = lv_buzei.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = ls_input-kostl
IMPORTING
output = ls_zexten-kostl.
ls_zexten-zuonr = ls_input-zuonr.
ls_zexten-sgtxt = ls_input-sgtxt.
lt_ext2-structure = 'ZFIS003C'.
lt_ext2-valuepart1 = ls_zexten.
APPEND lt_ext2.
ENDLOOP.
"创建会计凭证
CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
EXPORTING
documentheader = ls_header
IMPORTING
obj_key = lv_key
TABLES
accountgl = lt_accountgl
accountpayable = lt_vendor
accounttax = lt_accounttax
currencyamount = lt_currency
return = lt_return
extension2 = lt_ext2.
READ TABLE lt_return WITH KEY type = 'E' TRANSPORTING NO FIELDS.
IF sy-subrc = 0. " 创建失败,存在异常
LOOP AT lt_return WHERE type = 'E'.
IF es_output-message IS INITIAL.
es_output-message = lt_return-message.
ELSE.
CONCATENATE lt_return-message es_output-message INTO es_output-message SEPARATED BY ';'.
ENDIF.
ENDLOOP.
es_output-okey = '0'.
es_output-message = TEXT-m02 && ';' && es_output-message. " 创建失败
lr_log->modify_header( i_statu = 'E' i_ifmsg = TEXT-m02 ). " 创建失败
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ELSE. " 创建成功
es_output-okey = '1'.
es_output-message = TEXT-m03 . " 创建成功
lr_log->modify_header( i_statu = 'S' i_ifmsg = TEXT-m03 ). " 创建成功
es_output-belnr = lv_key+0(10). " 凭证号
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ENDIF.