SAP ABAP 付款流程接口
METHOD zii_si_fii008_s4_ib_syn~si_fii008_s4_ib_syn.
*** **** INSERT IMPLEMENTATION HERE **** ***
DATA:ls_header TYPE bapiache09,
lt_accountgl TYPE STANDARD TABLE OF bapiacgl09,
ls_accountgl TYPE bapiacgl09,
lt_acc_kunnr TYPE STANDARD TABLE OF bapiacar09,
ls_acc_kunnr TYPE bapiacar09,
lt_acc_lifnr TYPE STANDARD TABLE OF bapiacap09,
ls_acc_lifnr TYPE bapiacap09,
lt_maount TYPE STANDARD TABLE OF bapiaccr09,
ls_mount TYPE bapiaccr09,
lt_extension TYPE STANDARD TABLE OF bapiparex,
ls_extension TYPE bapiparex,
lt_return TYPE STANDARD TABLE OF bapiret2,
ls_return TYPE bapiret2.
DATA:ls_item TYPE zdt_fii008_s4_req_item,
lv_shkzg TYPE shkzg,
lv_str TYPE string,
ls_ext TYPE zsfi004,
lt_out TYPE zdt_fii008_s4_res_return_i_tab,
ls_out TYPE zdt_fii008_s4_res_return_item.
*-------------------------------------------------------------------
" 抬头信息
ls_header-comp_code = input-mt_fii008_s4_req-head-bukrs. "公司代码
ls_header-doc_type = input-mt_fii008_s4_req-head-blart. "凭证类型
ls_header-doc_date = input-mt_fii008_s4_req-head-bldat. "凭证日期
ls_header-pstng_date = input-mt_fii008_s4_req-head-budat. "过账日期
ls_header-header_txt = input-mt_fii008_s4_req-head-bktxt. "抬头文本
ls_header-ref_doc_no = input-mt_fii008_s4_req-head-xblnr. "参考
ls_header-username = sy-uname. "用户名
" 表头必输校验
IF input-mt_fii008_s4_req-head-bukrs IS INITIAL.
ls_out-type = 'E'.
ls_out-mess = '公司代码必填;'.
ENDIF.
IF input-mt_fii008_s4_req-head-blart IS INITIAL.
ls_out-type = 'E'.
ls_out-mess = ls_out-mess && '凭证类型必填;'.
ENDIF.
IF input-mt_fii008_s4_req-head-bldat IS INITIAL.
ls_out-type = 'E'.
ls_out-mess = ls_out-mess && '凭证日期必填;'.
ENDIF.
IF input-mt_fii008_s4_req-head-budat IS INITIAL.
ls_out-type = 'E'.
ls_out-mess = ls_out-mess && '过账日期必填;'.
ENDIF.
IF input-mt_fii008_s4_req-head-bktxt IS INITIAL.
ls_out-type = 'E'.
ls_out-mess = ls_out-mess && '抬头文本必填;'.
ENDIF.
IF input-mt_fii008_s4_req-head-xblnr IS INITIAL.
ls_out-type = 'E'.
ls_out-mess = ls_out-mess && '参考必填;'.
ENDIF.
IF input-mt_fii008_s4_req-head-waers IS INITIAL.
ls_out-type = 'E'.
ls_out-mess = ls_out-mess && '货币码必填;'.
ENDIF.
IF ls_out IS NOT INITIAL.
APPEND ls_out TO lt_out.
CLEAR:ls_out.
ENDIF.
*-------------------------------------------------------------------
" 行项目信息
LOOP AT input-mt_fii008_s4_req-head-item INTO ls_item.
" 项目必输校验
IF ls_item-posnr IS INITIAL OR ls_item-bschl IS INITIAL OR ls_item-shkzg IS INITIAL
OR ls_item-dmbtr IS INITIAL OR ls_item-sgtxt IS INITIAL OR ls_item-zuonr IS INITIAL.
ls_out-type = 'E'.
ls_out-mess = ls_out-mess && '行' && ls_item-posnr && ':'.
IF ls_item-posnr IS INITIAL.
ls_out-mess = ls_out-mess && '行号,'.
ENDIF.
IF ls_item-bschl IS INITIAL.
ls_out-mess = ls_out-mess && '过账码,'.
ENDIF.
IF ls_item-shkzg IS INITIAL.
ls_out-mess = ls_out-mess && '借方/贷方标识,'.
ENDIF.
IF ls_item-dmbtr IS INITIAL.
ls_out-mess = ls_out-mess && '金额,'.
ENDIF.
IF ls_item-sgtxt IS INITIAL.
ls_out-mess = ls_out-mess && '项目文本,'.
ENDIF.
IF ls_item-zuonr IS INITIAL.
ls_out-mess = ls_out-mess && '分配编号,'.
ENDIF.
ls_out-mess = ls_out-mess && '必填'.
APPEND ls_out TO lt_out.
CLEAR:ls_out.
CONTINUE.
ENDIF.
IF ls_item-hkont IS NOT INITIAL AND ls_item-lifnr IS INITIAL.
" 总帐行项目
ls_accountgl-itemno_acc = ls_item-posnr. "项目编号
ls_accountgl-gl_account = ls_item-hkont . "总账科目
ls_accountgl-gl_account = |{ ls_accountgl-gl_account ALPHA = IN }|.
ls_accountgl-costcenter = ls_item-kostl. "成本中心
ls_accountgl-costcenter = |{ ls_accountgl-costcenter ALPHA = IN }|.
ls_accountgl-profit_ctr = ls_item-prctr. "利润中心 ls_accountgl-orderid = ls_item-aufnr. "内部订单号 ls_accountgl-orderid = |{ ls_accountgl-orderid ALPHA = IN }|. ls_accountgl-item_text = ls_item-sgtxt. "文本 ls_accountgl-alloc_nmbr = ls_item-zuonr. "分配 ls_accountgl-bus_area = ls_item-gsber. "业务范围 ls_accountgl-tax_code = ls_item-mwskz. "税码 ls_accountgl-po_number = ls_item-ebeln. "采购订单 ls_accountgl-po_number = |{ ls_accountgl-po_number ALPHA = IN }|. ls_accountgl-po_item = ls_item-ebelp. "采购订单行项目 ls_accountgl-material = ls_item-matnr. "物料编码 ls_accountgl-material = |{ ls_accountgl-material ALPHA = IN }|. CONDENSE ls_item-menge NO-GAPS. ls_accountgl-quantity = ls_item-menge. "数量 ls_accountgl-base_uom = ls_item-meins. "单位 ls_accountgl-base_uom = |{ ls_accountgl-base_uom ALPHA = IN }|. APPEND ls_accountgl TO lt_accountgl. CLEAR ls_accountgl. ELSEIF ls_item-lifnr IS NOT INITIAL AND ls_item-hkont IS INITIAL. " 供应商行项目 ls_acc_lifnr-itemno_acc = ls_item-posnr. "项目编号 ls_acc_lifnr-vendor_no = ls_item-lifnr . "供应商 ls_acc_lifnr-vendor_no = |{ ls_acc_lifnr-vendor_no ALPHA = IN }|. ls_acc_lifnr-alloc_nmbr = ls_item-zuonr. "分配 ls_acc_lifnr-item_text = ls_item-sgtxt. "文本 ls_acc_lifnr-tax_code = ls_item-mwskz. "税码 ls_acc_lifnr-bline_date = ls_item-zfbdt. "到期日计算的基限日期 ls_acc_lifnr-sp_gl_ind = ls_item-newum. "特别总账标识 ls_acc_lifnr-bus_area = ls_item-gsber. "业务范围 APPEND ls_acc_lifnr TO lt_acc_lifnr. CLEAR ls_acc_lifnr. ELSE. ls_out-type = 'E'. ls_out-mess = ls_out-mess && '行' && ls_item-posnr && ':供应商/科目必填且只填其中一个'. APPEND ls_out TO lt_out. CLEAR:ls_out. CONTINUE. ENDIF. " 项目金额 CLEAR:lv_shkzg. ls_mount-itemno_acc = ls_item-posnr. "项目编号 ls_mount-currency = input-mt_fii008_s4_req-head-waers. "货币码 IF input-mt_fii008_s4_req-head-kursf IS INITIAL. ls_mount-exch_rate = 1. "汇率 ELSE. ls_mount-exch_rate = input-mt_fii008_s4_req-head-kursf. "汇率 ENDIF.
SELECT SINGLE shkzg INTO l_shkzg FROM tbsl WHERE bschl = lw_upload-bschl. lv_shkzg = ls_item-shkzg. CONDENSE ls_item-dmbtr NO-GAPS. IF lv_shkzg = 'H'. ls_mount-amt_doccur = ls_item-dmbtr * ( -1 ). "货币金额 ELSEIF lv_shkzg = 'S'. ls_mount-amt_doccur = ls_item-dmbtr . "货币金额 ENDIF. APPEND ls_mount TO lt_maount. CLEAR ls_mount. " 拓展字段 ls_ext-posnr = ls_item-posnr. ls_ext-bschl = ls_item-bschl. "过账码 ls_ext-umskz = ls_item-newum. "特别总账标识 ls_ext-zzxjllm = ls_item-zzxjllm. "现金流量码 CLEAR: lv_str. CALL METHOD cl_abap_container_utilities=>fill_container_c EXPORTING im_value = ls_ext IMPORTING ex_container = lv_str EXCEPTIONS illegal_parameter_type = 1 OTHERS = 2. DATA(lv_len) = strlen( lv_str ). CLEAR: ls_extension. DO 4 TIMES. IF lv_len <= 0. EXIT. ENDIF. CASE sy-index. WHEN 1. ls_extension-valuepart1 = lv_str. WHEN 2. ls_extension-valuepart2 = lv_str+240. WHEN 3. ls_extension-valuepart3 = lv_str+480. WHEN 4. ls_extension-valuepart4 = lv_str+720. WHEN OTHERS. ENDCASE. SUBTRACT 240 FROM lv_len. ENDDO. ls_extension-structure = 'ZSFI004'. APPEND ls_extension TO lt_extension.
ENDLOOP.
*-------------------------------------------------------------------
IF lt_out IS INITIAL.
" 创建会计凭证
CALL FUNCTION ‘BAPI_ACC_DOCUMENT_POST’
EXPORTING
documentheader = ls_header
CUSTOMERCPD =
CONTRACTHEADER =
IMPORTING
OBJ_TYPE =
OBJ_KEY = LV_OBJKEY
OBJ_SYS = TABLES accountgl = lt_accountgl accountreceivable = lt_acc_kunnr accountpayable = lt_acc_lifnr
accounttax = currencyamount = lt_maount
criteria = lt_criteria[]
VALUEFIELD =
EXTENSION1 = return = lt_return
PAYMENTCARD =
CONTRACTITEM = extension2 = lt_extension
REALESTATE =
ACCOUNTWT = . CLEAR: ls_out. LOOP AT lt_return INTO ls_return WHERE type CA 'AEX'. ls_out-type = 'E'. IF ls_out-mess IS INITIAL. ls_out-mess = ls_return-message. ELSE. ls_out-mess = ls_out-mess && ';' && ls_return-message. ENDIF. ENDLOOP. IF ls_out-type = 'E'. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. ELSE. ls_out-type = 'S'. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'. READ TABLE lt_return INTO ls_return INDEX 1. ls_out-belnr = ls_return-message_v2+0(10). ls_out-bukrs = ls_header-comp_code. ls_out-mess = ls_out-belnr && '会计凭证创建成功'. ENDIF. IF ls_out IS INITIAL. ls_out-type = 'E'. ls_out-mess = '会计凭证创建失败'. ENDIF. IF ls_out IS NOT INITIAL. APPEND ls_out TO lt_out. ENDIF.
ENDIF.
" 变量清空
CLEAR:ls_header,ls_return.
REFRESH:lt_accountgl,lt_acc_kunnr,lt_acc_lifnr,lt_maount,lt_return , lt_extension.
*-------------------------------------------------------------------
" 消息反馈
output-mt_fii008_s4_res-return_item = lt_out.
ENDMETHOD.
文章来自于网络,如果侵犯了您的权益,请联系站长删除!