SAP FI 清账接口和部分清账接口 例子
SAPFI清账接口和部分清账接口例子(20200817172651)

SAP FI清账接口和部分清账接口源码FICO模块编写者:陈楚庆日期: 2016-01-15目录3一、清账bapi : POSTING_INTERFACE_CLEARING ...........................................................................二、部分清账bapi: BAPI_ACC_DOCUMENT_POST (3)三、下面是完整的清账和部分清账的接口源码。
(3)1. 创建财务清账接口zfi_fk_post_clear (4)2. 创建凭证头结构 (4)3. 创建新入账行行项目结构 (5)4. 创建被清行行项目结构 (7)5. 创建清账接口日志表 (8)6. 创建清账接口日志表 (9)7. 清账接口源代码 (9)8. 凭证接口结构 (24)9.凭证接口源代码 (26)一、清账bapi : POSTING_INTERFACE_CLEARING这个function可用于全清,也可用于剩余清(剩余清原理也是全清,只是多了个新的行项目)二、部分清账bapi: BAPI_ACC_DOCUMENT_POST这个function可用于部份清账,其实它就是做凭证的bapi,需要把被清行的凭证号,年度,行项目写到凭证对应的 REBZG , REBZJ , REBZZ 字段上。
但这三个字段在标准字段是没有的,需要添加到extension2内。
三、下面是完整的清账和部分清账的接口源码。
1.创建财务清账接口zfi_fk_post_clear2.创建凭证头结构3.创建新入账行行项目结构4.创建被清行行项目结构7.清账接口源代码FUNCTION zfi_fk_post_clear.*"----------------------------------------------------------------------*"*"Local interface:*" IMPORTING*" VALUE(WA_FK_ITM) TYPE ZFI_FK_ITM OPTIONAL*" TABLES*" ZTAB_DOC_CLEAR STRUCTURE ZFI_FK_DOC*" CHANGING*" VALUE(WA_FK_ITA) TYPE ZFI_FK_PZT*"----------------------------------------------------------------------*"----------------------------------------------------------------------* DATA : wa_fk_pzt LIKE zfi_fk_pzt .* DATA : wa_fk_itm LIKE zfi_fk_itm .DATA : tab_fkhed_log TYPE STANDARD TABLE OF zfit_fkclear_004 , wa_fkhed_log TYPE zfit_fkclear_004 .DATA : tab_fkitm_log TYPE STANDARD TABLE OF zfit_fkclear_005 ,wa_fkitm_log TYPE zfit_fkclear_005 .DATA : zupdate_regz TYPE char1.DATA: tab_blntab TYPE TABLE OF blntab .DATA: wa_blntab TYPE blntab .DATA: tab_fttax TYPE TABLE OF fttax WITH HEADER LINE.DATA : wa_doc_clear LIKE zfi_fk_doc.DATA :tab_ftpost TYPE STANDARD TABLE OF ftpost . "入账行项目DATA : wa_ftpost TYPE ftpost .DATA : tab_ftclear TYPE STANDARD TABLE OF ftclear ."被清行项目DATA :wa_ftclear TYPE ftclear.DATA l_err_flag TYPE c.DATA zwrbtr TYPE bseg-wrbtr.DATA zclear_flag TYPE char10. "清账类型 P部分清,A2全清DATA zclear_num TYPE char10. "被清数量DATA wa_hed TYPE zfi_doc_head .DATA tab_hed TYPE STANDARD TABLE OF zfi_doc_head .DATA: l_prctr LIKE bseg-prctr. "判断利润中心是否与成本中心相符 DATA wa_itm TYPE zfi_doc_itm .DATA tab_itm TYPE STANDARD TABLE OF zfi_doc_itm .DATA wa_bseg TYPE bseg .DATA itm_num TYPE numc10 .DATA: akont LIKE knb1-akont .DATA: kunnr_num LIKE knb1-kunnr.CLEAR : akont , kunnr_num .CLEAR: tab_fkhed_log , wa_fkhed_log ,tab_fkitm_log ,wa_fkitm_log .CLEAR: wa_ftpost , wa_doc_clear ,wa_ftclear ,tab_ftpost ,tab_ftclear ,tab_blntab ,wa_blntab ,tab_fttax .CLEAR: wa_hed ,tab_hed ,wa_itm,tab_itm.CLEAR: wa_bseg ,itm_num .CLEAR: zclear_num ,zclear_flag .DEFINE populate_ftpost.wa_ftpost-stype = &1.wa_ftpost-count = &2.wa_ftpost-fnam = &3.wa_ftpost-fval = &4.condense wa_ftpost-fval .append wa_ftpost to tab_ftpost .END-OF-DEFINITION.INCLUDE lzfi01f01.*&计数看有多少个部份清LOOP AT ztab_doc_clear INTO wa_doc_clear WHERE flag = 'P' .zclear_num = zclear_num + 1 .*&判断是部份清还还是全清LOOP AT ztab_doc_clear INTO wa_doc_clear .zclear_flag = wa_doc_clear-flag.EXIT.ENDLOOP.CLEAR wa_doc_clear .LOOP AT ztab_doc_clear INTO wa_doc_clear WHERE flag <> zclear_flag .EXIT.ENDLOOP.IF wa_doc_clear IS NOT INITIAL.zclear_flag = 'E' . "不允许同时存在部份清和全清ENDIF.IF zclear_num > 1 .zclear_flag = 'E2' . "不允许存在多条部分清理论上业务不允许多条部分清账,这里做控制ENDIF.CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' "客户前导0 EXPORTINGinput = wa_fk_itm-customerIMPORTINGoutput = wa_fk_itm-customer .CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' "供应商前导0 EXPORTINGinput = wa_fk_itm-vendor_noIMPORTINGoutput = wa_fk_itm-vendor_no .*&校验统驭科目IF wa_fk_itm-customer IS NOT INITIAL . "客户CLEAR : akont ,kunnr_num .SELECT akont INTO akont FROM knb1 WHERE kunnr = wa_fk_itm-customer AND bukrs = wa_fk_itm-comp_code .ENDSELECT .kunnr_num = wa_fk_itm-customer(1) .IF kunnr_num = 'H' .IF akont <> '0011330307' .wa_fk_ita-err = ' 员工客户统SAP驭科目必需为11330307,请在SAP X K02更正' .wa_fk_ita-ref_key_1 = 'F' .CLEAR : wa_fk_itm ,ztab_doc_clear[] .RETURN.ENDIF.ENDIF.IF wa_fk_itm-vendor_no IS NOT INITIAL . "供应商CLEAR akont.SELECT akont INTO akont FROM lfb1 WHERE lifnr = wa_fk_itm-vendor_no AND bukrs = wa_fk_itm-comp_code .ENDSELECT .IF akont <> '0021210100' .wa_fk_ita-err = ' 供应商SAP统驭科目必需为21210100,请在SAP FK02更正' . wa_fk_ita-ref_key_1 = 'F' .CLEAR : wa_fk_itm ,ztab_doc_clear[] .RETURN.ENDIF.ENDIF.*&校验统成本中心和利润中心IF wa_fk_itm-costcenter IS NOT INITIAL AND wa_fk_itm-profit_ctr IS NOTINITIAL .CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' "成本中心前导0EXPORTINGinput = wa_fk_itm-costcenterIMPORTINGoutput = wa_fk_itm-costcenter .CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' "利润中心前导0EXPORTINGinput = wa_fk_itm-profit_ctrIMPORTINGoutput = wa_fk_itm-profit_ctr .CLEAR l_prctr .SELECT SINGLE p rctr INTO l_prctr FROM csks WHERE kokrs = '1000' AND k ostl = wa_fk_itm-costcenter and DATBI > SY-DATUM .IF l_prctr <> wa_fk_itm-profit_ctr .CONCATENATE '成本中心与利润中心必需有对应关系!利润中心可能是' l_prctr ',SAP可使用KS03查看' into wa_fk_ita-err .* wa_fk_ita-err = '成本中心与利润中心必需是有对应关系'.wa_fk_ita-ref_key_1 = 'F' .CLEAR : wa_fk_itm ,ztab_doc_clear[] .RETURN.ENDIF.** 校验原因代码IF wa_fk_itm-GL_ACCOUNT >= 10010000 and wa_fk_itm-GL_ACCOUNT <= 10999999 and wa_fk_itm-RSTGR is initial .CONCATENATE '银行/现金科目' wa_fk_itm-GL_ACCOUNT '原因代码不能为空' into wa_fk_ita-err .wa_fk_ita-ref_key_1 = 'F' .CLEAR : wa_fk_itm ,ztab_doc_clear[] .RETURN.endif.IF wa_fk_ita-ref_key_3 IS NOT INITIAL AND wa_fk_ita-comp_code = '1090' .wa_fk_ita-ref_doc_no = '' .CONCATENATE '000DD' wa_fk_ita-ref_key_3+5(5) INTOwa_fk_ita-ref_doc_no .wa_fk_itm-profit_ctr = '' .ENDIF.*&全清IF zclear_flag = 'A' OR zclear_flag = 'AA' OR zclear_flag = 'AC'. "全清*&----入库抬头行populate_ftpost: 'K' 1 'BKPF-BUKRS' wa_fk_ita-comp_code, "Company c ode 'K' 1 'BKPF-BLART' wa_fk_ita-doc_type,'K' 1 'BKPF-BLDAT' wa_fk_ita-doc_date,'K' 1 'BKPF-BUDAT' wa_fk_ita-pstng_date,* 'K' 1 'BKPF-WAERS' wa_fk_itm-currency ,'K' 1 'BKPF-BKTXT' wa_fk_ita-header_txt ,'K' 1 'BKPF-XBLNR' wa_fk_ita-ref_doc_no. "参考凭证号IF wa_fk_itm IS NOT INITIAL AND wa_fk_itm-obj_no = wa_fk_ita-obj_no .populate_ftpost: 'K' 1 'BKPF-WAERS' wa_fk_itm-currency .*&----入库抬头行populate_ftpost: 'P' 1 'RF05A-NEWBS' wa_fk_itm-newbs, "记账码'P' 1 'BSEG-SGTXT' wa_fk_itm-item_text,'P' 1 'BSEG-WRBTR' wa_fk_itm-amt_doccur .IF wa_fk_itm-umskz IS NOT INITIAL .populate_ftpost: 'P' 1 'RF05A-NEWUM' wa_fk_itm-umskz. "特别总账标识ENDIF.IF wa_fk_itm-newbs = '29' OR wa_fk_itm-newbs = '39' .populate_ftpost: 'P' 1 'BSEG-MWSKZ' 'J0'. "税码IF wa_fk_itm-umskz <> 'A' .populate_ftpost: 'P' 1 'BSEG-ZFBDT ' sy-datum . "日期ENDIF.ELSEIF wa_fk_itm-newbs = '09' OR wa_fk_itm-newbs = '19' . .populate_ftpost: 'P' 1 'BSEG-MWSKZ' 'X0'. "税码IF wa_fk_itm-umskz <> 'A' .populate_ftpost: 'P' 1 'BSEG-ZFBDT ' sy-datum . "日期ENDIF.ENDIF.IF wa_fk_itm-customer IS NOT INITIAL .populate_ftpost: 'P' 1 'BSEG-HKONT' wa_fk_itm-customer. "客户 ELSEIF wa_fk_itm-vendor_no IS NOT INITIAL .populate_ftpost: 'P' 1 'BSEG-HKONT' wa_fk_itm-vendor_no . "供应商 ELSEIF wa_fk_itm-gl_account IS NOT INITIAL .populate_ftpost: 'P' 1 'BSEG-HKONT' wa_fk_itm-gl_account . "总账 ENDIF.IF wa_fk_itm-rstgr IS NOT INITIAL.populate_ftpost: 'P' 1 'BSEG-RSTGR' wa_fk_itm-rstgr. "原因代码 ENDIF.IF wa_fk_itm-orderid IS NOT INITIAL .populate_ftpost: 'P' 1 'COBL-AUFNR' w a_fk_itm-orderid. "生产订单 ENDIF.IF wa_fk_itm-profit_ctr IS NOT INITIAL and wa_fk_itm-customer isinitial .populate_ftpost: 'P' 1 'BSEG-PRCTR' w a_fk_itm-profit_ctr. "利润中心ENDIF.IF wa_fk_itm-costcenter IS NOT INITIAL .populate_ftpost: 'P' 1 'COBL-KOSTL' wa_fk_itm-costcenter. "成本中心 ENDIF.IF wa_fk_itm-newbs <> '21' AND wa_fk_itm-vendor_no IS NOT INITIAL . zupdate_regz = '1' . "贷方供应商不允许输入参考发票号等信息ELSEIF wa_fk_itm-newbs <> '11' AND wa_fk_itm-customer IS NOTINITIAL.zupdate_regz = '1' .ELSE.IF wa_fk_itm-rebzg IS NOT INITIAL .populate_ftpost: 'P' 1 'BSEG-REBZG' w a_fk_itm-rebzg. "参考发票号 ENDIF.IF wa_fk_itm-rebzj IS NOT INITIAL .populate_ftpost: 'P' 1 'BSEG-REBZJ' wa_fk_itm-rebzj. "参考发票年 ENDIF.IF wa_fk_itm-rebzj IS NOT INITIAL .populate_ftpost: 'P' 1 'BSEG-REBZZ' wa_fk_itm-rebzz. "参考发票行项目ENDIF.ENDIF.ELSE.populate_ftpost: 'K' 1 'BKPF-WAERS' 'RMB' .ENDIF.* zwrbtr = wa_fk_itm-amt_doccur .*&---被清行项目LOOP AT ztab_doc_clear INTO wa_doc_clear .wa_ftclear-agkoa = wa_doc_clear-xpos1. "供应商是K,客户是D wa_ftclear-agkon = wa_doc_clear-account. "Customerwa_ftclear-agbuk = wa_doc_clear-comp_code. "Company codewa_ftclear-xnops = 'X'.wa_ftclear-agums = wa_doc_clear-umskz. "'J'.物料总账标识wa_ftclear-selfd = 'BELNR'.CONCATENATE wa_doc_clear-belnrwa_doc_clear-gjahrwa_doc_clear-buzei INTO wa_ftclear-selvon.* gs_ftclear-selvon = wa_input-belnr.wa_ftclear-selbis = wa_doc_clear-belnr.APPEND wa_ftclear TO tab_ftclear.ENDLOOP.CALL FUNCTION 'POSTING_INTERFACE_START'EXPORTINGi_function = 'C'i_keep = 'X'i_mode = 'N' "A for step by step,N default,forbackgroundEXCEPTIONSclient_incorrect = 1function_invalid = 2group_name_missing = 3mode_invalid = 4update_invalid = 5OTHERS = 6.*&----清账CALL FUNCTION 'POSTING_INTERFACE_CLEARING'EXPORTINGi_auglv = 'UMBUCHNG'i_tcode = 'FB05'i_sgfunct = 'C'IMPORTINGe_msgid = sy-msgide_msgno = sy-msgnoe_msgty = sy-msgtye_msgv1 = sy-msgv1e_msgv2 = sy-msgv2e_msgv3 = sy-msgv3e_msgv4 = sy-msgv4* E_SUBRC = SY-SUBRCTABLESt_blntab = tab_blntabt_ftclear = tab_ftcleart_ftpost = tab_ftpostt_fttax = tab_fttaxEXCEPTIONSclearing_procedure_invalid = 1clearing_procedure_missing = 2table_t041a_empty = 3transaction_code_invalid = 4amount_format_error = 5too_many_line_items = 6company_code_invalid = 7screen_not_found = 8no_authorization = 9OTHERS = 10.READ TABLE tab_blntab INTO wa_blntab INDEX 1.IF wa_blntab-belnr IS INITIAL.wa_fk_ita-ref_key_1 = 'F' .l_err_flag = 'X'.* CONCATENATE wa_input-belnr wa_input-buzei INTO WA_FK_PZT-ERR . IF sy-msgty IS INITIAL.wa_fk_itm-ref_key_3 = '未知异常.'.ELSE.MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgnoINTO wa_fk_ita-err WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.ENDIF.ELSE.wa_fk_ita-ref_key_1 = 'S' .CONCATENATE '凭证号码' wa_blntab-belnr '在公司代码' wa_blntab-bukrs '下记账成功' INTO wa_fk_ita-err.wa_fk_ita-ref_key_2 = wa_blntab-belnr .ENDIF.IF zupdate_regz = '1' AND wa_fk_ita-ref_key_1 = 'S' AND( wa_fk_itm-rebzg IS NOT I NITIAL AND wa_fk_itm-rebzg IS NOT INITIAL AND wa_fk_itm-rebzz IS NOT INITIAL ).UPDATE bseg SET r ebzg = wa_fk_itm-rebzg rebzj = wa_fk_itm-rebzj rebzz = wa_fk_itm-rebzzWHERE belnr = wa_blntab-belnr AND bukrs = wa_blntab-bukrs AND gjahr = wa_blntab-gjahr AND buzei = '001'.IF wa_fk_itm-customer IS NOT INITIAL .UPDATE bsid SET rebzg = wa_fk_itm-rebzg rebzj = wa_fk_itm-rebzjrebzz = wa_fk_itm-rebzzWHERE belnr = wa_blntab-belnr AND bukrs = wa_blntab-bukrs AND gjahr = wa_blntab-gjahr AND buzei = '001'.ELSEIF wa_fk_itm-vendor_no IS NOT INITIAL .UPDATE bsik SET rebzg = wa_fk_itm-rebzg rebzj = wa_fk_itm-rebzjrebzz = wa_fk_itm-rebzzWHERE belnr = wa_blntab-belnr AND bukrs = wa_blntab-bukrs AND gjahr = wa_blntab-gjahr AND buzei = '001'.ENDIF..ENDIF.*&部份清ELSEIF zclear_flag = 'P' . "部份清wa_hed-obj_no = wa_fk_ita-obj_no .wa_hed-username = wa_fk_ita-username .wa_hed-header_txt = wa_fk_ita-header_txt.wa_hed-comp_code = wa_fk_ita-comp_code.wa_hed-fisc_year = wa_fk_ita-fisc_year.wa_hed-fis_period = wa_fk_ita-fis_period .wa_hed-doc_date = wa_fk_ita-doc_date.wa_hed-pstng_date = wa_fk_ita-pstng_date.wa_hed-doc_type = wa_fk_ita-doc_type.wa_hed-ref_doc_no = wa_fk_ita-ref_doc_no.wa_hed-trans_date = wa_fk_ita-trans_date.wa_hed-ref_key_1 = wa_fk_ita-ref_key_1.wa_hed-ref_key_2 = wa_fk_ita-ref_key_2.wa_hed-ref_key_3 = wa_fk_ita-ref_key_3.wa_hed-err = wa_fk_ita-err.APPEND wa_hed TO tab_hed .IF wa_fk_itm IS NOT INITIAL .wa_itm-obj_no = wa_fk_itm-obj_no .wa_itm-itemno_acc = '1' .wa_itm-newbs = wa_fk_itm-newbs .wa_itm-gl_account = wa_fk_itm-gl_account .wa_itm-anbwa = wa_fk_itm-anbwa.wa_itm-asset_no = wa_fk_itm-asset_no.wa_itm-sub_number = wa_fk_itm-sub_number.wa_itm-comp_code = wa_fk_itm-comp_code.wa_itm-doc_type = wa_fk_itm-doc_type.wa_itm-profit_ctr = wa_fk_itm-profit_ctr.wa_itm-costcenter = wa_fk_itm-costcenter.wa_itm-customer = wa_fk_itm-customer.wa_itm-vendor_no = wa_fk_itm-vendor_no.wa_itm-orderid = wa_fk_itm-orderid.wa_itm-item_text = wa_fk_itm-item_text.wa_itm-currency = wa_fk_itm-currency.wa_itm-amt_doccur = wa_fk_itm-amt_doccur.wa_itm-rstgr = wa_fk_itm-rstgr.wa_itm-xnegp = wa_fk_itm-xnegp.wa_itm-umskz = wa_fk_itm-umskz.wa_itm-shkzg = wa_fk_itm-shkzg.wa_itm-ref_key_8 = wa_fk_itm-ref_key_8.wa_itm-ref_key_2 = wa_fk_itm-ref_key_2.wa_itm-ref_key_3 = wa_fk_itm-ref_key_3.APPEND wa_itm TO tab_itm .ENDIF.itm_num = wa_fk_itm-obj_no .LOOP AT ztab_doc_clear INTO wa_doc_clear .CLEAR wa_itm.CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' "总帐科目前导0EXPORTINGinput = wa_doc_clear-belnrIMPORTINGoutput = wa_doc_clear-belnr .SELECT * INTO CORRESPONDING FIELDS OF wa_bsegFROM bseg WHEREbukrs = wa_doc_clear-comp_codeAND belnr = wa_doc_clear-belnrAND gjahr = wa_doc_clear-gjahrAND buzei = wa_doc_clear-buzei .ENDSELECT.wa_itm-obj_no = wa_doc_clear-obj_no .itm_num = itm_num + 1 .wa_itm-itemno_acc = itm_num .IF wa_bseg-koart = 'K' . "供应商IF wa_bseg-bschl < '20' .wa_itm-newbs = wa_bseg-bschl + 10 . "记账码wa_itm-shkzg = 'H' .ELSE.wa_itm-newbs = wa_bseg-bschl - 10 .wa_itm-shkzg = 'S' .ENDIF.wa_itm-vendor_no = wa_doc_clear-account . "供应商编号ELSEIF wa_bseg-koart = 'D' . "客户IF wa_bseg-bschl < '10' .wa_itm-newbs = wa_bseg-bschl + 10 .wa_itm-shkzg = 'H' .ELSE.wa_itm-newbs = wa_bseg-bschl - 10 .wa_itm-shkzg = 'S' .ENDIF.wa_itm-customer = wa_doc_clear-account . "客户编号ENDIF.wa_itm-comp_code = wa_doc_clear-comp_code . "公司代码 wa_itm-doc_type = wa_fk_ita-doc_type. "凭证类型 wa_itm-currency = wa_bseg-pswsl . "贷币wa_itm-umskz = wa_bseg-umskz . "特别总账标识wa_itm-amt_doccur = wa_doc_clear-dmbtr_clear . "金额wa_itm-item_text = wa_fk_itm-item_text . "文本IF wa_itm-newbs <> '21' AND wa_itm-vendor_no IS NOT INITIAL .zupdate_regz = '1' . "贷方供应商不允许输入参考发票号等信息ELSEIF wa_itm-newbs <> '11' AND wa_itm-customer IS NOT INITIAL.zupdate_regz = '1' .ELSE.wa_itm-rebzg = wa_doc_clear-belnr . "参考凭证号 wa_itm-rebzj = wa_doc_clear-gjahr . "参考年度 wa_itm-rebzz = wa_doc_clear-buzei . "参考行项目 ENDIF.APPEND wa_itm TO tab_itm .ENDLOOP.CALL FUNCTION 'ZFI_POST_DOC' "通过凭证接口处理部分清账的业务TABLEStab_itm = tab_itmtab_hed = tab_hed.CLEAR wa_hed .LOOP AT tab_hed INTO wa_hed .wa_fk_ita-ref_key_1 = wa_hed-ref_key_1 .wa_fk_ita-ref_key_2 = wa_hed-ref_key_2 .wa_fk_ita-ref_key_3 = wa_hed-ref_key_3 .wa_fk_ita-err = wa_hed-err .IF zupdate_regz = '1' AND wa_fk_ita-ref_key_1 = 'S' AND( wa_doc_clear-belnr IS NOT INITIAL AND wa_doc_clear-gjahr IS NOT INITIAL AND wa_doc_clear-buzei IS NOT INITIAL ).WAIT UP TO 10 SECONDS.UPDATE bseg SET rebzg = wa_doc_clear-belnr rebzj =wa_doc_clear-gjahr rebzz = wa_doc_clear-buzeiWHERE belnr = wa_hed-ref_key_2 AND bukrs = wa_hed-comp_code ANDgjahr = wa_hed-fisc_year AND buzei = '002'.IF wa_itm-customer IS NOT INITIAL .UPDATE bsid SET rebzg = wa_doc_clear-belnr rebzj =wa_doc_clear-gjahr rebzz = wa_doc_clear-buzeiWHERE belnr = wa_hed-ref_key_2 AND bukrs = wa_hed-comp_codeAND gjahr = wa_hed-fisc_year AND buzei = '002'..ELSEIF wa_itm-vendor_no IS NOT INITIAL .UPDATE bsik SET rebzg = wa_doc_clear-belnr rebzj =wa_doc_clear-gjahr rebzz = wa_doc_clear-buzeiWHERE belnr = wa_hed-ref_key_2 AND bukrs = wa_hed-comp_code A ND gjahr = wa_hed-fisc_year AND buzei = '002'.ENDIF.ENDIF.ENDLOOP.ELSEIF zclear_flag = 'E' .wa_fk_ita-err = '被清行项目不允许存在部份清和全清!' .ELSEIF zclear_flag = 'E2' .wa_fk_ita-err = '不允许存在多条部分清!' .ELSE .wa_fk_ita-err = '未知的清账类型!' .ENDIF.***写入日志表CALL FUNCTION 'NUMBER_GET_NEXT'EXPORTINGnr_range_nr = '04'object = 'ZFKLU01'ignore_buffer = 'X'* QUANTITY = '1'* SUBOBJECT = ' '* TOYEAR = '0000'* IGNORE_BUFFER = ' 'IMPORTINGnumber = wa_fkhed_log-keyid* QUANTITY =* RETURNCODE =EXCEPTIONSinterval_not_found = 1number_range_not_intern = 2object_not_found = 3quantity_is_0 = 4quantity_is_not_1 = 5interval_overflow = 6buffer_overflow = 7OTHERS = 8 .* DATA : TAB_FKHED_LOG TYPE STANDARD TABLE OF ZFIT_FKCLEAR_004 , * WA_FKHED_LOG TYPE ZFIT_FKCLEAR_004 .** DATA : TAB_FKITM_LOG TYPE STANDARD TABLE OF ZFIT_FKCLEAR_005 ,* WA_FKITM_LOG TYPE ZFIT_FKCLEAR_005 .wa_fkhed_log-fis_period = wa_fk_ita-fis_period . wa_fkhed_log-doc_date = wa_fk_ita-doc_date .wa_fkhed_log-pstng_date = wa_fk_ita-pstng_date . wa_fkhed_log-doc_type = wa_fk_ita-doc_type .wa_fkhed_log-ref_doc_no = wa_fk_ita-ref_doc_no . wa_fkhed_log-trans_date = wa_fk_ita-trans_date . wa_fkhed_log-ref_key_1 = wa_fk_ita-ref_key_1 . wa_fkhed_log-ref_key_2 = wa_fk_ita-ref_key_2 . wa_fkhed_log-ref_key_3 = wa_fk_ita-ref_key_3 . wa_fkhed_log-err = wa_fk_ita-err .wa_fkhed_log-itemno_acc = wa_fk_itm-itemno_acc . wa_fkhed_log-newbs = wa_fk_itm-newbs .wa_fkhed_log-gl_account = wa_fk_itm-gl_account . wa_fkhed_log-anbwa = wa_fk_itm-anbwa .wa_fkhed_log-asset_no = wa_fk_itm-asset_no .wa_fkhed_log-sub_number = wa_fk_itm-sub_number . wa_fkhed_log-profit_ctr = wa_fk_itm-profit_ctr . wa_fkhed_log-costcenter = wa_fk_itm-costcenter . wa_fkhed_log-customer = wa_fk_itm-customer .wa_fkhed_log-vendor_no = wa_fk_itm-vendor_no . wa_fkhed_log-orderid = wa_fk_itm-orderid .wa_fkhed_log-item_text = wa_fk_itm-item_text . wa_fkhed_log-currency = wa_fk_itm-currency .wa_fkhed_log-amt_doccur = wa_fk_itm-amt_doccur . wa_fkhed_log-rstgr = wa_fk_itm-rstgr .wa_fkhed_log-xnegp = wa_fk_itm-xnegp .wa_fkhed_log-umskz = wa_fk_itm-umskz .wa_fkhed_log-shkzg = wa_fk_itm-shkzg .wa_fkhed_log-rebzg = wa_fk_itm-rebzg .wa_fkhed_log-rebzj = wa_fk_itm-rebzj .wa_fkhed_log-rebzz = wa_fk_itm-rebzz .wa_fkhed_log-ref_key_8 = wa_fk_itm-ref_key_8 . wa_fkhed_log-ref_key_2i = wa_fk_itm-ref_key_2 . wa_fkhed_log-ref_key_3i = wa_fk_itm-ref_key_3 . wa_fkhed_log-write_date = sy-datum .wa_fkhed_log-write_time = sy-uzeit .MODIFY zfit_fkclear_004 FROM wa_fkhed_log .CLEAR wa_doc_clear .LOOP AT ztab_doc_clear INTO wa_doc_clear .wa_fkitm_log-keyid = wa_fkhed_log-keyid .wa_fkitm_log-obj_no = wa_doc_clear-obj_no .wa_fkitm_log-flag = wa_doc_clear-flag .wa_fkitm_log-xpos1 = wa_doc_clear-xpos1 .wa_fkitm_log-account = wa_doc_clear-account .wa_fkitm_log-comp_code = wa_doc_clear-comp_code . wa_fkitm_log-xnops = wa_doc_clear-xnops .wa_fkitm_log-umskz = wa_doc_clear-umskz .wa_fkitm_log-belnr = wa_doc_clear-belnr .wa_fkitm_log-gjahr = wa_doc_clear-gjahr .wa_fkitm_log-buzei = wa_doc_clear-buzei .wa_fkitm_log-dmbtr = wa_doc_clear-dmbtr .wa_fkitm_log-dmbtr_clear = wa_doc_clear-dmbtr_clear . wa_fkitm_log-ref_key_8 = wa_doc_clear-ref_key_8 . wa_fkitm_log-ref_key_2 = wa_doc_clear-ref_key_2 . wa_fkitm_log-ref_key_3 = wa_doc_clear-ref_key_3 . wa_fkitm_log-write_date = sy-datum .wa_fkitm_log-write_time = sy-uzeit .MODIFY zfit_fkclear_005 FROM wa_fkitm_log .ENDLOOP .CLEAR : wa_fk_itm ,ztab_doc_clear[] .ENDFUNCTION.8.凭证接口结构9.凭证接口源代码FUNCTION ZFI_POST_DOC.*"---------------------------------------------------------------------- *"*"Local interface:*" TABLES*" TAB_ITM STRUCTURE ZFI_DOC_ITM*" TAB_HED STRUCTURE ZFI_DOC_HEAD *"---------------------------------------------------------------------- *" create by kin 2015-07-24DATA: retrun_num(2) TYPE c,p_datetime(14) TYPE c,ref_key(12) TYPE c,p_acc_sum(4) TYPE n,p_acc_suc(4) TYPE n,p_acc_fai(4) TYPE n,p_acc_num(4) TYPE n,p_str(200) TYPE c,p_answer(1) TYPE c,p_char,documentheader LIKE bapiache09,wa_zwyhd01_accit LIKE ZFK_ACCIT,p_customer TYPE bapiacgl09-customer,succe_flag.*---->定义凭证抬头DATA: wa_hd_sap_acc LIKE ZFI_DOC_HEAD,wa_hd_sap_acc_item LIKE ZFI_DOC_ITM.DATA: gt_hplog TYPE STANDARD TABLE OF zfit_hppz_002,wa_hplog TYPE zfit_hppz_002.DATA : BEGIN OF wa_data,icon(4), "预警图标obj_no LIKE bapiache09-obj_sys,itemno(2) TYPE c,datetime(14) TYPE c.INCLUDE STRUCTURE bapiret2.DATA END OF wa_data.DATA :accountgl LIKE bapiacgl09 OCCURS 0 WITH HEADER LINE,accountreceivable LIKE bapiacar09 OCCURS 0 WITH HEADER LINE,accountpayable LIKE bapiacap09 OCCURS 0 WITH HEADER LINE,currencyamount LIKE bapiaccr09 OCCURS 0 WITH HEADER LINE,criteria LIKE bapiackec9 OCCURS 0 WITHHEADER LINE,return LIKE bapiret2 OCCURS 0 WITHHEADER LINE,extension2 LIKE bapiparex OCCURS 0 WITH HEADER LINE,bapi_retn_info LIKE bapiret2 OCCURS 0 WITH HEADER LINE,t_hd_sap_acc LIKE wa_hd_sap_acc OCCURS 0 WITH HEADER LINE,t_hd_sap_acc_item LIKE wa_hd_sap_acc_item OCCURS 0 WITH HEADER LINE,t_data LIKE wa_data OCCURS 0 WITHHEADER LINE.DATA: errs LIKE TAB_HED-err.*---->权限控制AUTHORITY-CHECK OBJECT 'ZWYHD01'ID 'P_ACTIVE' FIELD '1'.IF sy-subrc <> '0'.MESSAGE '对不起,您没有权限传输凭证数据!' TYPE 'E'.ENDIF.*----->控制是否过账p_answer = 'C'.**---->开始导入凭证* SELECT * INTO CORRESPONGDING FIELDS OF TABLE t_hd_sap_acc* FROM TAB_HED.* SELECT * INTO CORRESPONGDING FIELDS OF TABLE t_hd_sap_acc_item.* FROM TAB_ITM.CLEAR : p_acc_sum,p_acc_suc,p_acc_fai,p_acc_num,gt_hplog,wa_hplog.LOOP AT TAB_HED INTO wa_hd_sap_acc.errs = ''.**---->赋值抬头CLEAR: documentheader ,p_customer.p_acc_sum = p_acc_sum + 1 ."记录总凭证数documentheader-bus_act = 'RFBU'.documentheader-username = sy-uname.documentheader-comp_code = wa_hd_sap_acc-comp_code.documentheader-header_txt = wa_hd_sap_acc-header_txt.documentheader-fisc_year = wa_hd_sap_acc-fisc_year.documentheader-ref_doc_no = wa_hd_sap_acc-ref_doc_no.CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' "会计期间前导0 EXPORTINGinput = wa_hd_sap_acc-fis_periodIMPORTINGoutput = wa_hd_sap_acc-fis_period .documentheader-fis_period = wa_hd_sap_acc-fis_period.documentheader-doc_type = wa_hd_sap_acc-doc_type.documentheader-pstng_date = wa_hd_sap_acc-pstng_date.documentheader-doc_date = wa_hd_sap_acc-doc_date.****************************************************************************************************************LOOP AT tab_itm INTO wa_hd_sap_acc_item WHERE obj_no =wa_hd_sap_acc-obj_no.**---->赋值行项目***---->先处理总帐科目、客户、供应商前导0CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' "总帐科目前导0 EXPORTINGinput = wa_hd_sap_acc_item-gl_accountIMPORTINGoutput = wa_hd_sap_acc_item-gl_account .CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' "客户前导0 EXPORTINGinput = wa_hd_sap_acc_item-customerIMPORTINGoutput = wa_hd_sap_acc_item-customer .CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' "供应商前导0 EXPORTINGinput = wa_hd_sap_acc_item-vendor_noIMPORTINGoutput = wa_hd_sap_acc_item-vendor_no .CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' "内部订单号前导0 EXPORTINGinput = wa_hd_sap_acc_item-orderidIMPORTINGoutput = wa_hd_sap_acc_item-orderid .CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' "固定资产号前导零 EXPORTINGinput = wa_hd_sap_acc_item-asset_noIMPORTINGoutput = wa_hd_sap_acc_item-asset_no .CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' "参考号前导零 EXPORTINGinput = wa_hd_sap_acc_item-REBZGIMPORTINGoutput = wa_hd_sap_acc_item-REBZG .CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' "参考号行项目前导零EXPORTINGinput = wa_hd_sap_acc_item-REBZZIMPORTINGoutput = wa_hd_sap_acc_item-REBZZ .***---->处理客户相关数据IF wa_hd_sap_acc_item-customer IS NOT INITIAL ANDwa_hd_sap_acc_item-gl_account NOT BETWEEN '0051010100' AND'0051010800'.CLEAR accountreceivable.accountreceivable-itemno_acc =wa_hd_sap_acc_item-itemno_acc .accountreceivable-customer = wa_hd_sap_acc_item-customer.accountreceivable-comp_code = wa_hd_sap_acc-comp_code.accountreceivable-item_text =wa_hd_sap_acc_item-item_text.accountreceivable-tax_code = 'X0'."税码APPEND accountreceivable.***---->处理供应商相关数据ELSEIF wa_hd_sap_acc_item-vendor_no IS NOT INITIAL.CLEAR accountpayable.accountpayable-itemno_acc = wa_hd_sap_acc_item-itemno_acc .accountpayable-vendor_no = wa_hd_sap_acc_item-vendor_no.accountpayable-comp_code = wa_hd_sap_acc-comp_code.accountpayable-item_text = wa_hd_sap_acc_item-item_text.accountpayable-tax_code = 'J0'."税码APPEND accountpayable.***---->处理供应商相关数据ELSEIF wa_hd_sap_acc_item-asset_no IS NOT INITIAL. "固定资产 CLEAR accountgl.documentheader-bus_act = 'RMWE'.accountgl-asset_no = wa_hd_sap_acc_item-asset_no .accountgl-sub_number = '0000' .accountgl-acct_type = 'A'.accountgl-itemno_acc = wa_hd_sap_acc_item-itemno_acc .accountgl-gl_account = wa_hd_sap_acc_item-gl_account.accountgl-item_text = wa_hd_sap_acc_item-item_text.accountgl-comp_code = wa_hd_sap_acc_item-comp_code.accountgl-fisc_year = wa_hd_sap_acc-fisc_year.accountgl-fis_period = wa_hd_sap_acc-fis_period.accountgl-pstng_date = wa_hd_sap_acc-pstng_date.APPEND accountgl.ELSE.***---->处理总帐相关数据CLEAR accountgl.accountgl-itemno_acc = wa_hd_sap_acc_item-itemno_acc .accountgl-gl_account = wa_hd_sap_acc_item-gl_account.accountgl-item_text = wa_hd_sap_acc_item-item_text.accountgl-comp_code = wa_hd_sap_acc_item-comp_code.accountgl-fisc_year = wa_hd_sap_acc-fisc_year.accountgl-fis_period = wa_hd_sap_acc-fis_period.accountgl-pstng_date = wa_hd_sap_acc-pstng_date.。
SAP FICO-GRIR自动清账

SAP FICO-0021-GR/IR自动清账
1.概念
GR/IR科目是PO收货和发票检验时使用的过渡科目。
有可能在收货时发票并未到,或者做发票时货未收到,GR/IR科目就类似“应付暂估”和“在途物料”。
SAP中,在使用MIGO对PO进行收货时,产生的会计分录为:
Dr:原材料
Cr:GR/IR
收到供应商的发票,使用MIRO进行发票检验时,产生的会计分录为:
Dr:GR/IR
Cr:应付账款
按理说这两笔分录产生后,GR/IR科目借贷方实现了平衡,就应该被清掉。
但是系统不会自动帮你清理噢,需要我们去配置清账的规则以及执行相应的事务代码后系统才会自动清账GR/IR~
同时,能自动清账的一个前提是GR/IR科目里启用了未清项管理噢~
2. 后台配置
我们需要配置清账的规则,使用事务代码OB74
你可以配置多个维度进行自动清账。
该处我们公司配置的维度是ZUONR-分配字段。
而凭证中GR/IR 科目行项目的分配字段写入什么值,是根据排序码决定的噢~我们看看该科目的排序码。
那么解读清账规则就是:当会计凭证中GR/IR科目行项目的分配字段相同且金额相加等于0,就可以进行自动清账的操作啦~
在系统中挑一个例子给大家瞅瞅~
3. 前台操作执行GR/IR自动清账
使用事务代码F.13
拿掉测试运行,正式运行后,系统会生成清账凭证
使用FB03查看生成的凭证
清账凭证的行项目为空噢~因为GR/IR清账只是将借贷方进行对调而已,并未产生实质变化。
SAP清账及配置

SAP清账及配置什么是清账用简单的话来说,清账只是链接两个FI凭证。
为什么要链接两个FI凭证现在,让我们以ECC系统来跟踪其业务的组织为例。
假设组织从供应商那里购买了一些商品。
此后,供应商发送购买商品的发票(或账单)。
组织中的负责人在收到发票后在SAP系统中输入发票。
现在该付款了。
组织将发票金额支付给供应商。
此付款也以单据形式输入到SAP系统中。
目前,我们在SAP系统中有两个凭证1)发票2)付款已将付款支付给供应商,但SAP系统不知道哪个付款是针对哪个发票的。
那么该怎么办?好吧,只需将发票与相应的付款相关联,这称为清账。
清账在行项目级别进行,即FI凭证中的各个行根据行项目中的科目类型(供应商,客户或总账科目)通过各种标准交易进行清账。
不同类型的清账及其完成方式1)供应商帐户清账F.13 自动清账使您可以在一次交易中清账许多供应商帐户。
F-44 手动清账您需要选择要手动清账的项目。
2)客户账户清账F.13 自动清账使您可以在一次交易中清账许多客户帐户。
F-32 手动清账您需要选择要手动清账的项目。
3)总账科目清账F.13 自动清账使您可以在一次交易中清账许多总账科目。
FB1S 手动清账您需要选择要手动清账的项目。
清账的先决条件•帐户必须按未清项目进行管理•必须定义要清账的帐户SAP自动清账不能清除的项目为:•票据项目•统计过帐和某些特殊的总账交易(预付款和汇票)•有预扣税项的项目SAP自动清账的配置让我们简要概述一下如何在SAP中配置自动清账,转到SPRO事务。
SPRO中用于自动清账配置的菜单路径为:财务会计(新)->总帐会计->业务交易->未清项目清算->准备自动清算– S_ALR_87004879 –准备自动清算(OB74)Financial Accounting (New) -> General Ledger Accounting -> Business Transactions -> Open item Clearing ->Prepare Automatic clearing –S_ALR_87004879 –Prepare automatic Clearing (OB74)SAP自动清账规则SAP自动清账规则-会计科目表第一个条件:定义要自动清账的帐户类型(客户,供应商和总帐科目)。
3.SAP-FI速成手册-总账结清业务

3.SAP-FI速成手册-总账结清业务业务背景:履约保函到期,业务人员从顾客处取得履约保函原件交出纳退送银行,完成履约保函清帐流程。
设置路径:一.设置1.相关会计科目设置(Tcode:FS00)Open item management=YesLine item display=Yes需要说明的一点是对于客户及供应商统驭科目,不需要这样设置系统也认为是Open item的管理,但是对于G/L账户,就必须首先在这里启用Open item管理。
2.为总账科目定义容差组Path: IMG->…->Clearing Differences->Define Tolerance Groups for G/L Accounts如果在Tol.group字段上填写值,则在做结清的时候会报错“The entry 1101 is missing in table T043S”,目前还没有搞清楚是为什么。
这一步设置也可以通过SE12直接为表T043S输入一个条目实现。
3.为员工定义容差组Path: IMG->…->Clearing Differences->Define Tolerance Groups for Employees4.为用户分配容差组Path: IMG->…->Clearing Differences->Assign Users to Tolerance Groups二.业务假设1101公司与客户金昌石油化学工业公司洽谈销售业务,为保证合同正常执行,履约保函10000元。
Tcode:FB50Path: Accounting->Financial Accounting->General Ledger->Posting->…这一步的会计分录为:Dr:10090101其他货币资金-银行保函-履约保函10000Cr:10020101银行存款-交行-95588033* 10000三.结清假设现在履约保函到期,做结清处理,回收9800元,发生200元的财务费用。
SAP FI 清账接口和部分清账接口 例子

SAP FI清账接口和部分清账接口源码FICO模块编写者:陈楚庆日期: 2016-01-15目录一、清账bapi : POSTING_INTERFACE_CLEARING (3)二、部分清账bapi: BAPI_ACC_DOCUMENT_POST (3)三、下面是完整的清账和部分清账的接口源码。
(3)1. 创建财务清账接口zfi_fk_post_clear (4)2. 创建凭证头结构 (4)3. 创建新入账行行项目结构 (5)4. 创建被清行行项目结构 (7)5. 创建清账接口日志表 (8)6. 创建清账接口日志表 (9)7. 清账接口源代码 (9)8. 凭证接口结构 (24)9.凭证接口源代码 (26)一、清账bapi : POSTING_INTERFACE_CLEARING这个function可用于全清,也可用于剩余清(剩余清原理也是全清,只是多了个新的行项目)二、部分清账bapi: BAPI_ACC_DOCUMENT_POST这个function可用于部份清账,其实它就是做凭证的bapi,需要把被清行的凭证号,年度,行项目写到凭证对应的 REBZG , REBZJ , REBZZ 字段上。
但这三个字段在标准字段是没有的,需要添加到extension2内。
三、下面是完整的清账和部分清账的接口源码。
1.创建财务清账接口zfi_fk_post_clear2.创建凭证头结构3.创建新入账行行项目结构4.创建被清行行项目结构7.清账接口源代码FUNCTION zfi_fk_post_clear.*"---------------------------------------------------------------------- *"*"Local interface:*" IMPORTING*" VALUE(WA_FK_ITM) TYPE ZFI_FK_ITM OPTIONAL*" TABLES*" ZTAB_DOC_CLEAR STRUCTURE ZFI_FK_DOC*" CHANGING*" VALUE(WA_FK_ITA) TYPE ZFI_FK_PZT*"----------------------------------------------------------------------*"----------------------------------------------------------------------* DATA : wa_fk_pzt LIKE zfi_fk_pzt .* DATA : wa_fk_itm LIKE zfi_fk_itm .DATA : tab_fkhed_log TYPE STANDARD TABLE OF zfit_fkclear_004 ,wa_fkhed_log TYPE zfit_fkclear_004 .DATA : tab_fkitm_log TYPE STANDARD TABLE OF zfit_fkclear_005 ,wa_fkitm_log TYPE zfit_fkclear_005 .DATA : zupdate_regz TYPE char1.DATA: tab_blntab TYPE TABLE OF blntab .DATA: wa_blntab TYPE blntab .DATA: tab_fttax TYPE TABLE OF fttax WITH HEADER LINE.DATA : wa_doc_clear LIKE zfi_fk_doc.DATA :tab_ftpost TYPE STANDARD TABLE OF ftpost . "入账行项目DATA : wa_ftpost TYPE ftpost .DATA : tab_ftclear TYPE STANDARD TABLE OF ftclear ."被清行项目DATA :wa_ftclear TYPE ftclear.DATA l_err_flag TYPE c.DATA zwrbtr TYPE bseg-wrbtr.DATA zclear_flag TYPE char10. "清账类型 P部分清,A2全清DATA zclear_num TYPE char10. "被清数量DATA wa_hed TYPE zfi_doc_head .DATA tab_hed TYPE STANDARD TABLE OF zfi_doc_head .DATA: l_prctr LIKE bseg-prctr. "判断利润中心是否与成本中心相符 DATA wa_itm TYPE zfi_doc_itm .DATA tab_itm TYPE STANDARD TABLE OF zfi_doc_itm .DATA wa_bseg TYPE bseg .DATA itm_num TYPE numc10 .DATA: akont LIKE knb1-akont .DATA: kunnr_num LIKE knb1-kunnr.CLEAR : akont , kunnr_num .CLEAR: tab_fkhed_log , wa_fkhed_log ,tab_fkitm_log ,wa_fkitm_log . CLEAR: wa_ftpost , wa_doc_clear ,wa_ftclear ,tab_ftpost ,tab_ftclear ,tab_blntab ,wa_blntab ,tab_fttax .CLEAR: wa_hed ,tab_hed ,wa_itm,tab_itm.CLEAR: wa_bseg ,itm_num .CLEAR: zclear_num ,zclear_flag .DEFINE populate_ftpost.wa_ftpost-stype = &1.wa_ftpost-count = &2.wa_ftpost-fnam = &3.wa_ftpost-fval = &4.condense wa_ftpost-fval .append wa_ftpost to tab_ftpost .END-OF-DEFINITION.INCLUDE lzfi01f01.*&计数看有多少个部份清LOOP AT ztab_doc_clear INTO wa_doc_clear WHERE flag = 'P' .zclear_num = zclear_num + 1 .*&判断是部份清还还是全清LOOP AT ztab_doc_clear INTO wa_doc_clear .zclear_flag = wa_doc_clear-flag.EXIT.ENDLOOP.CLEAR wa_doc_clear .LOOP AT ztab_doc_clear INTO wa_doc_clear WHERE flag <> zclear_flag .EXIT.ENDLOOP.IF wa_doc_clear IS NOT INITIAL.zclear_flag = 'E' . "不允许同时存在部份清和全清ENDIF.IF zclear_num > 1 .zclear_flag = 'E2' . "不允许存在多条部分清理论上业务不允许多条部分清账,这里做控制ENDIF.CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' "客户前导0EXPORTINGinput = wa_fk_itm-customerIMPORTINGoutput = wa_fk_itm-customer .CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' "供应商前导0EXPORTINGinput = wa_fk_itm-vendor_noIMPORTINGoutput = wa_fk_itm-vendor_no .*&校验统驭科目IF wa_fk_itm-customer IS NOT INITIAL . "客户CLEAR : akont ,kunnr_num .SELECT akont INTO akont FROM knb1 WHERE kunnr = wa_fk_itm-customer AND bukrs = wa_fk_itm-comp_code .ENDSELECT .kunnr_num = wa_fk_itm-customer(1) .IF kunnr_num = 'H' .IF akont <> '0011330307' .wa_fk_ita-err = ' 员工客户统SAP驭科目必需为11330307,请在SAP XK02更正' .wa_fk_ita-ref_key_1 = 'F' .CLEAR : wa_fk_itm ,ztab_doc_clear[] .RETURN.ENDIF.ENDIF.IF wa_fk_itm-vendor_no IS NOT INITIAL . "供应商CLEAR akont.SELECT akont INTO akont FROM lfb1 WHERE lifnr = wa_fk_itm-vendor_no AND bukrs = wa_fk_itm-comp_code .ENDSELECT .IF akont <> '0021210100' .wa_fk_ita-err = ' 供应商SAP统驭科目必需为21210100,请在SAP FK02更正' .wa_fk_ita-ref_key_1 = 'F' .CLEAR : wa_fk_itm ,ztab_doc_clear[] .RETURN.ENDIF.ENDIF.*&校验统成本中心和利润中心IF wa_fk_itm-costcenter IS NOT INITIAL AND wa_fk_itm-profit_ctr IS NOT INITIAL .CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' "成本中心前导EXPORTINGinput = wa_fk_itm-costcenterIMPORTINGoutput = wa_fk_itm-costcenter .CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' "利润中心前导EXPORTINGinput = wa_fk_itm-profit_ctrIMPORTINGoutput = wa_fk_itm-profit_ctr .CLEAR l_prctr .SELECT SINGLE prctr INTO l_prctr FROM csks WHERE kokrs = '1000' AND kostl= wa_fk_itm-costcenter and DATBI > SY-DATUM .IF l_prctr <> wa_fk_itm-profit_ctr .CONCATENATE '成本中心与利润中心必需有对应关系!利润中心可能是'l_prctr ',SAP可使用KS03查看' into wa_fk_ita-err .* wa_fk_ita-err = '成本中心与利润中心必需是有对应关系'.wa_fk_ita-ref_key_1 = 'F' .CLEAR : wa_fk_itm ,ztab_doc_clear[] .RETURN.ENDIF.** 校验原因代码IF wa_fk_itm-GL_ACCOUNT >= 10010000 and wa_fk_itm-GL_ACCOUNT <= 10999999 and wa_fk_itm-RSTGR is initial .CONCATENATE '银行/现金科目' wa_fk_itm-GL_ACCOUNT '原因代码不能为空' into wa_fk_ita-err .wa_fk_ita-ref_key_1 = 'F' .CLEAR : wa_fk_itm ,ztab_doc_clear[] .RETURN.endif.IF wa_fk_ita-ref_key_3 IS NOT INITIAL AND wa_fk_ita-comp_code = '1090' . wa_fk_ita-ref_doc_no = '' .CONCATENATE '000DD' wa_fk_ita-ref_key_3+5(5) INTOwa_fk_ita-ref_doc_no .wa_fk_itm-profit_ctr = '' .ENDIF.*&全清IF zclear_flag = 'A' OR zclear_flag = 'AA' OR zclear_flag = 'AC'. "全清*&----入库抬头行populate_ftpost: 'K' 1 'BKPF-BUKRS' wa_fk_ita-comp_code, "Company code 'K' 1 'BKPF-BLART' wa_fk_ita-doc_type,'K' 1 'BKPF-BLDAT' wa_fk_ita-doc_date,'K' 1 'BKPF-BUDAT' wa_fk_ita-pstng_date,* 'K' 1 'BKPF-WAERS' wa_fk_itm-currency ,'K' 1 'BKPF-BKTXT' wa_fk_ita-header_txt ,'K' 1 'BKPF-XBLNR' wa_fk_ita-ref_doc_no. "参考凭证号IF wa_fk_itm IS NOT INITIAL AND wa_fk_itm-obj_no = wa_fk_ita-obj_no . populate_ftpost: 'K' 1 'BKPF-WAERS' wa_fk_itm-currency .*&----入库抬头行populate_ftpost: 'P' 1 'RF05A-NEWBS' wa_fk_itm-newbs, "记账码'P' 1 'BSEG-SGTXT' wa_fk_itm-item_text,'P' 1 'BSEG-WRBTR' wa_fk_itm-amt_doccur .IF wa_fk_itm-umskz IS NOT INITIAL .populate_ftpost: 'P' 1 'RF05A-NEWUM' wa_fk_itm-umskz. "特别总账标识ENDIF.IF wa_fk_itm-newbs = '29' OR wa_fk_itm-newbs = '39' .populate_ftpost: 'P' 1 'BSEG-MWSKZ' 'J0'. "税码IF wa_fk_itm-umskz <> 'A' .populate_ftpost: 'P' 1 'BSEG-ZFBDT ' sy-datum . "日期ENDIF.ELSEIF wa_fk_itm-newbs = '09' OR wa_fk_itm-newbs = '19' . .populate_ftpost: 'P' 1 'BSEG-MWSKZ' 'X0'. "税码IF wa_fk_itm-umskz <> 'A' .populate_ftpost: 'P' 1 'BSEG-ZFBDT ' sy-datum . "日期ENDIF.ENDIF.IF wa_fk_itm-customer IS NOT INITIAL .populate_ftpost: 'P' 1 'BSEG-HKONT' wa_fk_itm-customer. "客户 ELSEIF wa_fk_itm-vendor_no IS NOT INITIAL .populate_ftpost: 'P' 1 'BSEG-HKONT' wa_fk_itm-vendor_no . "供应商 ELSEIF wa_fk_itm-gl_account IS NOT INITIAL .populate_ftpost: 'P' 1 'BSEG-HKONT' wa_fk_itm-gl_account . "总账 ENDIF.IF wa_fk_itm-rstgr IS NOT INITIAL.populate_ftpost: 'P' 1 'BSEG-RSTGR' wa_fk_itm-rstgr. "原因代码 ENDIF.IF wa_fk_itm-orderid IS NOT INITIAL .populate_ftpost: 'P' 1 'COBL-AUFNR' wa_fk_itm-orderid. "生产订单 ENDIF.IF wa_fk_itm-profit_ctr IS NOT INITIAL and wa_fk_itm-customer is initial .populate_ftpost: 'P' 1 'BSEG-PRCTR' wa_fk_itm-profit_ctr. "利润中心ENDIF.IF wa_fk_itm-costcenter IS NOT INITIAL .populate_ftpost: 'P' 1 'COBL-KOSTL' wa_fk_itm-costcenter. "成本中心 ENDIF.IF wa_fk_itm-newbs <> '21' AND wa_fk_itm-vendor_no IS NOT INITIAL . zupdate_regz = '1' . "贷方供应商不允许输入参考发票号等信息ELSEIF wa_fk_itm-newbs <> '11' AND wa_fk_itm-customer IS NOT INITIAL.zupdate_regz = '1' .ELSE.IF wa_fk_itm-rebzg IS NOT INITIAL .populate_ftpost: 'P' 1 'BSEG-REBZG' wa_fk_itm-rebzg. "参考发票号 ENDIF.IF wa_fk_itm-rebzj IS NOT INITIAL .populate_ftpost: 'P' 1 'BSEG-REBZJ' wa_fk_itm-rebzj. "参考发票年 ENDIF.IF wa_fk_itm-rebzj IS NOT INITIAL .populate_ftpost: 'P' 1 'BSEG-REBZZ' wa_fk_itm-rebzz. "参考发票行项目ENDIF.ENDIF.ELSE.populate_ftpost: 'K' 1 'BKPF-WAERS' 'RMB' .ENDIF.* zwrbtr = wa_fk_itm-amt_doccur .*&---被清行项目LOOP AT ztab_doc_clear INTO wa_doc_clear .wa_ftclear-agkoa = wa_doc_clear-xpos1. "供应商是K,客户是D wa_ftclear-agkon = wa_doc_clear-account. "Customerwa_ftclear-agbuk = wa_doc_clear-comp_code. "Company codewa_ftclear-xnops = 'X'.wa_ftclear-agums = wa_doc_clear-umskz. "'J'.物料总账标识 wa_ftclear-selfd = 'BELNR'.CONCATENATE wa_doc_clear-belnrwa_doc_clear-gjahrwa_doc_clear-buzei INTO wa_ftclear-selvon.* gs_ftclear-selvon = wa_input-belnr.wa_ftclear-selbis = wa_doc_clear-belnr.APPEND wa_ftclear TO tab_ftclear.ENDLOOP.CALL FUNCTION 'POSTING_INTERFACE_START'EXPORTINGi_function = 'C'i_keep = 'X'i_mode = 'N' "A for step by step,N default,for backgroundEXCEPTIONSclient_incorrect = 1function_invalid = 2group_name_missing = 3mode_invalid = 4update_invalid = 5OTHERS = 6.*&----清账CALL FUNCTION 'POSTING_INTERFACE_CLEARING'EXPORTINGi_auglv = 'UMBUCHNG'i_tcode = 'FB05'i_sgfunct = 'C'IMPORTINGe_msgid = sy-msgide_msgno = sy-msgnoe_msgty = sy-msgtye_msgv1 = sy-msgv1e_msgv2 = sy-msgv2e_msgv3 = sy-msgv3e_msgv4 = sy-msgv4* E_SUBRC = SY-SUBRCTABLESt_blntab = tab_blntabt_ftclear = tab_ftcleart_ftpost = tab_ftpostt_fttax = tab_fttaxEXCEPTIONSclearing_procedure_invalid = 1clearing_procedure_missing = 2table_t041a_empty = 3transaction_code_invalid = 4amount_format_error = 5too_many_line_items = 6company_code_invalid = 7screen_not_found = 8no_authorization = 9OTHERS = 10.READ TABLE tab_blntab INTO wa_blntab INDEX 1.IF wa_blntab-belnr IS INITIAL.wa_fk_ita-ref_key_1 = 'F' .l_err_flag = 'X'.* CONCATENATE wa_input-belnr wa_input-buzei INTO WA_FK_PZT-ERR . IF sy-msgty IS INITIAL.wa_fk_itm-ref_key_3 = '未知异常.'.ELSE.MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgnoINTO wa_fk_ita-err WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF.ELSE.wa_fk_ita-ref_key_1 = 'S' .CONCATENATE '凭证号码' wa_blntab-belnr '在公司代码' wa_blntab-bukrs '下记账成功' INTO wa_fk_ita-err.wa_fk_ita-ref_key_2 = wa_blntab-belnr .ENDIF.IF zupdate_regz = '1' AND wa_fk_ita-ref_key_1 = 'S' AND( wa_fk_itm-rebzg IS NOT INITIAL AND wa_fk_itm-rebzg IS NOT INITIAL AND wa_fk_itm-rebzz IS NOT INITIAL ).UPDATE bseg SET rebzg = wa_fk_itm-rebzg rebzj = wa_fk_itm-rebzj rebzz = wa_fk_itm-rebzzWHERE belnr = wa_blntab-belnr AND bukrs = wa_blntab-bukrs AND gjahr = wa_blntab-gjahr AND buzei = '001'.IF wa_fk_itm-customer IS NOT INITIAL .UPDATE bsid SET rebzg = wa_fk_itm-rebzg rebzj = wa_fk_itm-rebzj rebzz = wa_fk_itm-rebzzWHERE belnr = wa_blntab-belnr AND bukrs = wa_blntab-bukrs AND gjahr = wa_blntab-gjahr AND buzei = '001'.ELSEIF wa_fk_itm-vendor_no IS NOT INITIAL .UPDATE bsik SET rebzg = wa_fk_itm-rebzg rebzj = wa_fk_itm-rebzj rebzz = wa_fk_itm-rebzzWHERE belnr = wa_blntab-belnr AND bukrs = wa_blntab-bukrs AND gjahr = wa_blntab-gjahr AND buzei = '001'.ENDIF..ENDIF.*&部份清ELSEIF zclear_flag = 'P' . "部份清wa_hed-obj_no = wa_fk_ita-obj_no .wa_hed-username = wa_fk_ita-username .wa_hed-header_txt = wa_fk_ita-header_txt.wa_hed-comp_code = wa_fk_ita-comp_code.wa_hed-fisc_year = wa_fk_ita-fisc_year.wa_hed-fis_period = wa_fk_ita-fis_period .wa_hed-doc_date = wa_fk_ita-doc_date.wa_hed-pstng_date = wa_fk_ita-pstng_date.wa_hed-doc_type = wa_fk_ita-doc_type.wa_hed-ref_doc_no = wa_fk_ita-ref_doc_no.wa_hed-trans_date = wa_fk_ita-trans_date.wa_hed-ref_key_1 = wa_fk_ita-ref_key_1.wa_hed-ref_key_2 = wa_fk_ita-ref_key_2.wa_hed-ref_key_3 = wa_fk_ita-ref_key_3.wa_hed-err = wa_fk_ita-err.APPEND wa_hed TO tab_hed .IF wa_fk_itm IS NOT INITIAL .wa_itm-obj_no = wa_fk_itm-obj_no .wa_itm-itemno_acc = '1' .wa_itm-newbs = wa_fk_itm-newbs .wa_itm-gl_account = wa_fk_itm-gl_account .wa_itm-anbwa = wa_fk_itm-anbwa.wa_itm-asset_no = wa_fk_itm-asset_no.wa_itm-sub_number = wa_fk_itm-sub_number.wa_itm-comp_code = wa_fk_itm-comp_code.wa_itm-doc_type = wa_fk_itm-doc_type.wa_itm-profit_ctr = wa_fk_itm-profit_ctr.wa_itm-costcenter = wa_fk_itm-costcenter.wa_itm-customer = wa_fk_itm-customer.wa_itm-vendor_no = wa_fk_itm-vendor_no.wa_itm-orderid = wa_fk_itm-orderid.wa_itm-item_text = wa_fk_itm-item_text.wa_itm-currency = wa_fk_itm-currency.wa_itm-amt_doccur = wa_fk_itm-amt_doccur.wa_itm-rstgr = wa_fk_itm-rstgr.wa_itm-xnegp = wa_fk_itm-xnegp.wa_itm-umskz = wa_fk_itm-umskz.wa_itm-shkzg = wa_fk_itm-shkzg.wa_itm-ref_key_8 = wa_fk_itm-ref_key_8.wa_itm-ref_key_2 = wa_fk_itm-ref_key_2.wa_itm-ref_key_3 = wa_fk_itm-ref_key_3.APPEND wa_itm TO tab_itm .ENDIF.itm_num = wa_fk_itm-obj_no .LOOP AT ztab_doc_clear INTO wa_doc_clear .CLEAR wa_itm.CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' "总帐科目前导0EXPORTINGinput = wa_doc_clear-belnrIMPORTINGoutput = wa_doc_clear-belnr .SELECT * INTO CORRESPONDING FIELDS OF wa_bsegFROM bseg WHEREbukrs = wa_doc_clear-comp_codeAND belnr = wa_doc_clear-belnrAND gjahr = wa_doc_clear-gjahrAND buzei = wa_doc_clear-buzei .ENDSELECT.wa_itm-obj_no = wa_doc_clear-obj_no .itm_num = itm_num + 1 .wa_itm-itemno_acc = itm_num .IF wa_bseg-koart = 'K' . "供应商IF wa_bseg-bschl < '20' .wa_itm-newbs = wa_bseg-bschl + 10 . "记账码wa_itm-shkzg = 'H' .ELSE.wa_itm-newbs = wa_bseg-bschl - 10 .wa_itm-shkzg = 'S' .ENDIF.wa_itm-vendor_no = wa_doc_clear-account . "供应商编号ELSEIF wa_bseg-koart = 'D' . "客户IF wa_bseg-bschl < '10' .wa_itm-newbs = wa_bseg-bschl + 10 .wa_itm-shkzg = 'H' .ELSE.wa_itm-newbs = wa_bseg-bschl - 10 .wa_itm-shkzg = 'S' .ENDIF.wa_itm-customer = wa_doc_clear-account . "客户编号ENDIF.wa_itm-comp_code = wa_doc_clear-comp_code . "公司代码wa_itm-doc_type = wa_fk_ita-doc_type. "凭证类型wa_itm-currency = wa_bseg-pswsl . "贷币wa_itm-umskz = wa_bseg-umskz . "特别总账标识wa_itm-amt_doccur = wa_doc_clear-dmbtr_clear . "金额wa_itm-item_text = wa_fk_itm-item_text . "文本IF wa_itm-newbs <> '21' AND wa_itm-vendor_no IS NOT INITIAL .zupdate_regz = '1' . "贷方供应商不允许输入参考发票号等信息ELSEIF wa_itm-newbs <> '11' AND wa_itm-customer IS NOT INITIAL. zupdate_regz = '1' .ELSE.wa_itm-rebzg = wa_doc_clear-belnr . "参考凭证号 wa_itm-rebzj = wa_doc_clear-gjahr . "参考年度 wa_itm-rebzz = wa_doc_clear-buzei . "参考行项目 ENDIF.APPEND wa_itm TO tab_itm .ENDLOOP.CALL FUNCTION 'ZFI_POST_DOC' "通过凭证接口处理部分清账的业务 TABLEStab_itm = tab_itmtab_hed = tab_hed.CLEAR wa_hed .LOOP AT tab_hed INTO wa_hed .wa_fk_ita-ref_key_1 = wa_hed-ref_key_1 .wa_fk_ita-ref_key_2 = wa_hed-ref_key_2 .wa_fk_ita-ref_key_3 = wa_hed-ref_key_3 .wa_fk_ita-err = wa_hed-err .IF zupdate_regz = '1' AND wa_fk_ita-ref_key_1 = 'S' AND( wa_doc_clear-belnr IS NOT INITIAL AND wa_doc_clear-gjahr IS NOT INITIAL AND wa_doc_clear-buzei IS NOT INITIAL ).WAIT UP TO 10 SECONDS.UPDATE bseg SET rebzg = wa_doc_clear-belnr rebzj =wa_doc_clear-gjahr rebzz = wa_doc_clear-buzeiWHERE belnr = wa_hed-ref_key_2 AND bukrs = wa_hed-comp_code AND gjahr = wa_hed-fisc_year AND buzei = '002'.IF wa_itm-customer IS NOT INITIAL .UPDATE bsid SET rebzg = wa_doc_clear-belnr rebzj =wa_doc_clear-gjahr rebzz = wa_doc_clear-buzeiWHERE belnr = wa_hed-ref_key_2 AND bukrs = wa_hed-comp_code AND gjahr = wa_hed-fisc_year AND buzei = '002'..ELSEIF wa_itm-vendor_no IS NOT INITIAL .UPDATE bsik SET rebzg = wa_doc_clear-belnr rebzj =wa_doc_clear-gjahr rebzz = wa_doc_clear-buzeiWHERE belnr = wa_hed-ref_key_2 AND bukrs = wa_hed-comp_code AND gjahr = wa_hed-fisc_year AND buzei = '002'.ENDIF.ENDIF.ENDLOOP.ELSEIF zclear_flag = 'E' .wa_fk_ita-err = '被清行项目不允许存在部份清和全清!' .ELSEIF zclear_flag = 'E2' .wa_fk_ita-err = '不允许存在多条部分清!' .ELSE .wa_fk_ita-err = '未知的清账类型!' .ENDIF.***写入日志表CALL FUNCTION 'NUMBER_GET_NEXT'EXPORTINGnr_range_nr = '04'object = 'ZFKLU01'ignore_buffer = 'X'* QUANTITY = '1'* SUBOBJECT = ' '* TOYEAR = '0000'* IGNORE_BUFFER = ' 'IMPORTINGnumber = wa_fkhed_log-keyid* QUANTITY =* RETURNCODE =EXCEPTIONSinterval_not_found = 1number_range_not_intern = 2object_not_found = 3quantity_is_0 = 4quantity_is_not_1 = 5interval_overflow = 6buffer_overflow = 7OTHERS = 8 .* DATA : TAB_FKHED_LOG TYPE STANDARD TABLE OF ZFIT_FKCLEAR_004 , * WA_FKHED_LOG TYPE ZFIT_FKCLEAR_004 .** DATA : TAB_FKITM_LOG TYPE STANDARD TABLE OF ZFIT_FKCLEAR_005 ,* WA_FKITM_LOG TYPE ZFIT_FKCLEAR_005 .wa_fkhed_log-fis_period = wa_fk_ita-fis_period . wa_fkhed_log-doc_date = wa_fk_ita-doc_date .wa_fkhed_log-pstng_date = wa_fk_ita-pstng_date . wa_fkhed_log-doc_type = wa_fk_ita-doc_type .wa_fkhed_log-ref_doc_no = wa_fk_ita-ref_doc_no . wa_fkhed_log-trans_date = wa_fk_ita-trans_date . wa_fkhed_log-ref_key_1 = wa_fk_ita-ref_key_1 . wa_fkhed_log-ref_key_2 = wa_fk_ita-ref_key_2 . wa_fkhed_log-ref_key_3 = wa_fk_ita-ref_key_3 . wa_fkhed_log-err = wa_fk_ita-err .wa_fkhed_log-itemno_acc = wa_fk_itm-itemno_acc . wa_fkhed_log-newbs = wa_fk_itm-newbs .wa_fkhed_log-gl_account = wa_fk_itm-gl_account . wa_fkhed_log-anbwa = wa_fk_itm-anbwa .wa_fkhed_log-asset_no = wa_fk_itm-asset_no .wa_fkhed_log-sub_number = wa_fk_itm-sub_number . wa_fkhed_log-profit_ctr = wa_fk_itm-profit_ctr . wa_fkhed_log-costcenter = wa_fk_itm-costcenter . wa_fkhed_log-customer = wa_fk_itm-customer .wa_fkhed_log-vendor_no = wa_fk_itm-vendor_no . wa_fkhed_log-orderid = wa_fk_itm-orderid .wa_fkhed_log-item_text = wa_fk_itm-item_text . wa_fkhed_log-currency = wa_fk_itm-currency .wa_fkhed_log-amt_doccur = wa_fk_itm-amt_doccur . wa_fkhed_log-rstgr = wa_fk_itm-rstgr .wa_fkhed_log-xnegp = wa_fk_itm-xnegp .wa_fkhed_log-umskz = wa_fk_itm-umskz .wa_fkhed_log-shkzg = wa_fk_itm-shkzg .wa_fkhed_log-rebzg = wa_fk_itm-rebzg .wa_fkhed_log-rebzj = wa_fk_itm-rebzj .wa_fkhed_log-rebzz = wa_fk_itm-rebzz .wa_fkhed_log-ref_key_8 = wa_fk_itm-ref_key_8 . wa_fkhed_log-ref_key_2i = wa_fk_itm-ref_key_2 . wa_fkhed_log-ref_key_3i = wa_fk_itm-ref_key_3 . wa_fkhed_log-write_date = sy-datum .wa_fkhed_log-write_time = sy-uzeit .MODIFY zfit_fkclear_004 FROM wa_fkhed_log .CLEAR wa_doc_clear .LOOP AT ztab_doc_clear INTO wa_doc_clear .wa_fkitm_log-keyid = wa_fkhed_log-keyid .wa_fkitm_log-obj_no = wa_doc_clear-obj_no .wa_fkitm_log-flag = wa_doc_clear-flag .wa_fkitm_log-xpos1 = wa_doc_clear-xpos1 .wa_fkitm_log-account = wa_doc_clear-account .wa_fkitm_log-comp_code = wa_doc_clear-comp_code . wa_fkitm_log-xnops = wa_doc_clear-xnops .wa_fkitm_log-umskz = wa_doc_clear-umskz .wa_fkitm_log-belnr = wa_doc_clear-belnr .wa_fkitm_log-gjahr = wa_doc_clear-gjahr .wa_fkitm_log-buzei = wa_doc_clear-buzei .wa_fkitm_log-dmbtr = wa_doc_clear-dmbtr .wa_fkitm_log-dmbtr_clear = wa_doc_clear-dmbtr_clear . wa_fkitm_log-ref_key_8 = wa_doc_clear-ref_key_8 . wa_fkitm_log-ref_key_2 = wa_doc_clear-ref_key_2 . wa_fkitm_log-ref_key_3 = wa_doc_clear-ref_key_3 . wa_fkitm_log-write_date = sy-datum .wa_fkitm_log-write_time = sy-uzeit .MODIFY zfit_fkclear_005 FROM wa_fkitm_log .ENDLOOP .CLEAR : wa_fk_itm ,ztab_doc_clear[] .ENDFUNCTION.8.凭证接口结构9.凭证接口源代码FUNCTION ZFI_POST_DOC.*"---------------------------------------------------------------------- *"*"Local interface:*" TABLES*" TAB_ITM STRUCTURE ZFI_DOC_ITM*" TAB_HED STRUCTURE ZFI_DOC_HEAD*"---------------------------------------------------------------------- *" create by kin 2015-07-24DATA: retrun_num(2) TYPE c,p_datetime(14) TYPE c,ref_key(12) TYPE c,p_acc_sum(4) TYPE n,p_acc_suc(4) TYPE n,p_acc_fai(4) TYPE n,p_acc_num(4) TYPE n,p_str(200) TYPE c,p_answer(1) TYPE c,p_char,documentheader LIKE bapiache09,wa_zwyhd01_accit LIKE ZFK_ACCIT,p_customer TYPE bapiacgl09-customer,succe_flag.*---->定义凭证抬头DATA: wa_hd_sap_acc LIKE ZFI_DOC_HEAD,wa_hd_sap_acc_item LIKE ZFI_DOC_ITM.DATA: gt_hplog TYPE STANDARD TABLE OF zfit_hppz_002,wa_hplog TYPE zfit_hppz_002.DATA : BEGIN OF wa_data,icon(4), "预警图标obj_no LIKE bapiache09-obj_sys,itemno(2) TYPE c,datetime(14) TYPE c.INCLUDE STRUCTURE bapiret2.DATA END OF wa_data.DATA :accountgl LIKE bapiacgl09 OCCURS 0 WITH HEADER LINE,accountreceivable LIKE bapiacar09 OCCURS 0 WITH HEADER LINE,accountpayable LIKE bapiacap09 OCCURS 0 WITH HEADER LINE,currencyamount LIKE bapiaccr09 OCCURS 0 WITH HEADER LINE,criteria LIKE bapiackec9 OCCURS 0 WITH HEADER LINE,return LIKE bapiret2 OCCURS 0 WITH HEADER LINE,extension2 LIKE bapiparex OCCURS 0 WITH HEADER LINE,bapi_retn_info LIKE bapiret2 OCCURS 0 WITH HEADER LINE,t_hd_sap_acc LIKE wa_hd_sap_acc OCCURS 0 WITH HEADER LINE,t_hd_sap_acc_item LIKE wa_hd_sap_acc_item OCCURS 0 WITH HEADER LINE,t_data LIKE wa_data OCCURS 0 WITH HEADER LINE.DATA: errs LIKE TAB_HED-err.*---->权限控制AUTHORITY-CHECK OBJECT 'ZWYHD01'ID 'P_ACTIVE' FIELD '1'.IF sy-subrc <> '0'.MESSAGE '对不起,您没有权限传输凭证数据!' TYPE 'E'.ENDIF.*----->控制是否过账p_answer = 'C'.**---->开始导入凭证* SELECT * INTO CORRESPONGDING FIELDS OF TABLE t_hd_sap_acc* FROM TAB_HED.* SELECT * INTO CORRESPONGDING FIELDS OF TABLE t_hd_sap_acc_item.* FROM TAB_ITM.CLEAR : p_acc_sum,p_acc_suc,p_acc_fai,p_acc_num,gt_hplog,wa_hplog.LOOP AT TAB_HED INTO wa_hd_sap_acc.errs = ''.**---->赋值抬头CLEAR: documentheader ,p_customer.p_acc_sum = p_acc_sum + 1 . "记录总凭证数documentheader-bus_act = 'RFBU'.documentheader-username = sy-uname.documentheader-comp_code = wa_hd_sap_acc-comp_code.documentheader-header_txt = wa_hd_sap_acc-header_txt.documentheader-fisc_year = wa_hd_sap_acc-fisc_year.documentheader-ref_doc_no = wa_hd_sap_acc-ref_doc_no.CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' "会计期间前导0EXPORTINGinput = wa_hd_sap_acc-fis_periodIMPORTINGoutput = wa_hd_sap_acc-fis_period .documentheader-fis_period = wa_hd_sap_acc-fis_period.documentheader-doc_type = wa_hd_sap_acc-doc_type.documentheader-pstng_date = wa_hd_sap_acc-pstng_date.documentheader-doc_date = wa_hd_sap_acc-doc_date.****************************************************************************************************************LOOP AT tab_itm INTO wa_hd_sap_acc_item WHERE obj_no =wa_hd_sap_acc-obj_no.**---->赋值行项目***---->先处理总帐科目、客户、供应商前导0CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' "总帐科目前导0EXPORTINGinput = wa_hd_sap_acc_item-gl_accountIMPORTINGoutput = wa_hd_sap_acc_item-gl_account .CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' "客户前导0 EXPORTINGinput = wa_hd_sap_acc_item-customerIMPORTINGoutput = wa_hd_sap_acc_item-customer .CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' "供应商前导0 EXPORTINGinput = wa_hd_sap_acc_item-vendor_noIMPORTINGoutput = wa_hd_sap_acc_item-vendor_no .CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' "内部订单号前导0 EXPORTINGinput = wa_hd_sap_acc_item-orderidIMPORTINGoutput = wa_hd_sap_acc_item-orderid .CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' "固定资产号前导零 EXPORTINGinput = wa_hd_sap_acc_item-asset_noIMPORTINGoutput = wa_hd_sap_acc_item-asset_no .CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' "参考号前导零 EXPORTINGinput = wa_hd_sap_acc_item-REBZGIMPORTINGoutput = wa_hd_sap_acc_item-REBZG .CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' "参考号行项目前导零EXPORTINGinput = wa_hd_sap_acc_item-REBZZIMPORTINGoutput = wa_hd_sap_acc_item-REBZZ .***---->处理客户相关数据IF wa_hd_sap_acc_item-customer IS NOT INITIAL ANDwa_hd_sap_acc_item-gl_account NOT BETWEEN '0051010100' AND '0051010800'.CLEAR accountreceivable.accountreceivable-itemno_acc =wa_hd_sap_acc_item-itemno_acc .accountreceivable-customer = wa_hd_sap_acc_item-customer. accountreceivable-comp_code = wa_hd_sap_acc-comp_code.accountreceivable-item_text =wa_hd_sap_acc_item-item_text.accountreceivable-tax_code = 'X0'. "税码APPEND accountreceivable.***---->处理供应商相关数据ELSEIF wa_hd_sap_acc_item-vendor_no IS NOT INITIAL.CLEAR accountpayable.accountpayable-itemno_acc = wa_hd_sap_acc_item-itemno_acc .accountpayable-vendor_no = wa_hd_sap_acc_item-vendor_no.accountpayable-comp_code = wa_hd_sap_acc-comp_code.accountpayable-item_text = wa_hd_sap_acc_item-item_text.accountpayable-tax_code = 'J0'. "税码APPEND accountpayable.***---->处理供应商相关数据ELSEIF wa_hd_sap_acc_item-asset_no IS NOT INITIAL. "固定资产CLEAR accountgl.documentheader-bus_act = 'RMWE'.accountgl-asset_no = wa_hd_sap_acc_item-asset_no .accountgl-sub_number = '0000' .accountgl-acct_type = 'A'.accountgl-itemno_acc = wa_hd_sap_acc_item-itemno_acc .accountgl-gl_account = wa_hd_sap_acc_item-gl_account.accountgl-item_text = wa_hd_sap_acc_item-item_text.accountgl-comp_code = wa_hd_sap_acc_item-comp_code.accountgl-fisc_year = wa_hd_sap_acc-fisc_year.accountgl-fis_period = wa_hd_sap_acc-fis_period.accountgl-pstng_date = wa_hd_sap_acc-pstng_date.APPEND accountgl.ELSE.***---->处理总帐相关数据CLEAR accountgl.accountgl-itemno_acc = wa_hd_sap_acc_item-itemno_acc .accountgl-gl_account = wa_hd_sap_acc_item-gl_account.accountgl-item_text = wa_hd_sap_acc_item-item_text.accountgl-comp_code = wa_hd_sap_acc_item-comp_code.accountgl-fisc_year = wa_hd_sap_acc-fisc_year.accountgl-fis_period = wa_hd_sap_acc-fis_period.accountgl-pstng_date = wa_hd_sap_acc-pstng_date.。
SAP部分清账和剩余清账下的账龄计算

SAP部分清账和剩余清账下的账龄计算SAP提供了三种清账方法: 标准清账, 部分清账, 剩余清账.1,标准清账即完全清账. 比如我们对客户31开了一张发票,金额1234, 基准日期为2012.1.31, 我们采用0001付款方式, 立即付款, 用FBL5N查询未清项:假设我们在2月1日收到款项1234元, 我们用F-28收款清账, 过账日期2月2日,再次用FBL5N查看, 显示未清项已转为已清项. 收款的行项目, 其Baseline Date为2012.2.1, 为F-28的凭证日期, 收款没有支付条件.到期日与baseline date相同.2,部分清账多用于分次付款, 这样可以清楚的显示每次付款的记录. 部分清账时并不会更改发票未清项, 每一笔部分收款都会产生一个新的未清项,收款的Baseline date也是收款凭证的凭证日期.3, 剩余清账即将原来的未清项重新生成新的未清项,好处在于可以随时实时的反映未清项余额, 尤其在使用客户信贷管理时很重要, 但缺点是无法清楚地看到付款记录, 而且会虚增发生额.有关产生的新未清项,其Baseline Date有两种情况, 一是采用和原未清项相同的时间, 二是采用产生新未清项凭证的时间, 这是在OBA3客户容差组里定义的,容差组又在客户主数据中进行分配.如果选中"Payment Term from invoice", 那么则将原未清项的时间和付款条件带至新未清项假设同样做一个凭证客户31,开票4567元,Baseline Date: 2012/1/31, 付款条件:00012012/2/1付款4000元,采用剩余清账,我们看到虽然付款凭证日期是2012/2/1,但是新未清项的Baseline Date和支付条件同原未清项。
假设我们在OBA3中不选择“Payment Tern from Invoice”,同样的进行清账,再次FBL5N查看未清项。
SAP常用事务码附FI解析汇报

FI事务码解析6一、FI清帐事务码61.总账清帐~F-03 62.客户清帐~F-32 63.供应商清帐~F-44 64.收客户款记账清帐~F-28=F-06 65.付供应商款记账并清帐~F-53=F-07 66.万能过账清帐~F-04=F-30 67.万能自动清帐~F.13 7二、FI基础数据事务码71.总账科目维护~FS00 72.创建客户~FD01=XD01 73.创建供应商~FK01=XK01 74.创建固定资产~AS01 7三、FI业务操作事务码71.总账科目记账~F-02 7四、FI报表查询事务码81.客户余额查询-FD10N 8 2供应商余额查询-FK10N 83.总账余额查询-FS10N 84.客户行项目查询-FBL5N 85.供应商行项目查询-FBL1N 86.总账行项目查询-FBL3N 87.检查交货单是否生成会计凭证-VFX3 8 8查询移动类型明细-MB51 8 9查询库存明细-MB5B 8五、固定资产事务码81.创建资产主数据-AS01 82.主数据修改调拨-AS02 83.主数据冻结/删除-AS05/AS06 84.查看固定资产详细信息-AW01N 8 5固定资产报废-ABAVN 86固定资产公司间调拨-ABT1N 87.固定资产折旧运行-AFAB 88.资产明细账和总账的校对-ABST2 8 9资产会计年度更改-AJRW 8 10.资产年末余额结转-AJAB 9 11在建工程分配设定-AIAB 9 12.在建结算(转固定)-AIBU 9CO事务码解析9一、主数据91.创建初级要素-KA01 92.创建次级要素-KA06 93.维护成本中心-KS01、2、3、4 94.维护统计指标-KK01、2、3、4 95.维护成本中心组-KSH1、2、3、4 9 6作业类型维护-KL01、2、3 9 7内部订单-KO01、2、3 9 8分配维护-KSV1、2、3 9 9分摊维护-KSU1、2、3 9 10.统计指标参数维护-KB31N 9二、业务操作91.执行分配-KSV5 92.执行分摊-KSU5 93.维护作业计划价格-KP26 94.单个估算成品物料-CK11N 105.批量估算成品物料-CK40N 106.成本估算价格标记发布-CK40 107.实际费用归集成作业类型-KSS2 108.实际作业价格计算-KSS I109.工单重估-CON2 1010.在制品计算-KAAO 1011.生产订单结算-CO88 1012.生产订单成本分析-KOC4 1013.成本中心重过账-KB11N(费用凭证成本中心冲销)10三、CO报表101.成本中心报表-S-ALR-87013611 10 2内部订单报表-S-ALR-87012993 103.批量成本估算报表-S-ALR-87099930 104.生产订单成本分析报表-CO03转分析10 MM事务码解析10一、主数据101.主数据维护-MM01、2、6 102.创建信息记录-ME11、12、15 10二、MM业务操作111.询价单-ME41、42、45、47 112.创建采购申请-ME51N 113.采购订单维护-ME21N、22、29 114.购订单收货-MIGO 115.发货-MB1A 116.转移记账-MB1B 117.其他收货-MB1C 118.MB02-更改物料凭证119.取消发票凭证-MR8M 1110.发票总览-MIR6 1111.维护盘点凭证-MI01、02 1112.输入盘点结果-MI04 1113.盘点差异过账-MI07 11三、MM报表111.物料清单-MM60 112.显示信息记录-ME13 113.审核信息记录-ZTM004 114.显示供应商-XK03 115.库存总览-MMBE 116.供应商清单显示-MKVZ 127.采购申请清单显示-ME5A 128.按供应商显示采购订单-ME2L 129.按物料显示采购订单-ME2M 1210.物料凭证清单显示-MB51 1211.物料的会计凭证-MR51 1212.显示仓库现有库存-MB52 1213.记账日期库存-MB5B 1214.查询在途库存-MB5T 12MM开发事务代码12PP 12工艺路线导入-ZPP001 12 BOM批量导入-ZPP002 12订货会需求查看-ZPP003 12营销订单预排协同-ZPP005 12营销订单拆成生产指令单-ZPP006 12工序外协批量下达-ZPP007 12 MRP监视报表-ZPP008 12鞋贴打印与补打-ZPP010 12唯一码生成-ZPP011 12手工报工-ZPP012 13扫描入库-ZPP013 13工艺路线批量查询-ZPP016 13生产指令单打印-ZPP018 13 MM 13鞋类成品库存报表查询-ZMM001 13工厂间调拨查询报表-ZMM002 13费用类订单查询报表-ZMM007 13采购信息记录查询报表-ZMM018 13 AFS总仓收货内向交货单下发WMS-ZMM010 13 AFS总仓退货至供应商内向交货单下发WMS-ZMM012 13按货号创建大货材料采购订单-ZMM026 13用料明细审批-ZMM026A 13制定采购收获计划-ZMM027 13领料单创建-ZMM027A13领料单查看编辑-ZMM027B13领料单发货-ZMM027C 13领料单冲销-ZMM027D 13异常事件分类配置表维护-ZMM028 13成品生产发货-ZMM038A 13成品总仓收货-ZMM038B14成品总仓销售收货-ZMM038C 14成品总仓销售退货收货-ZMM038D 14 AFS采购订单查询报表-ZMM006 14订货会需求转成品采购订单-ZMM040 14鞋类成品拆装箱-ZMM041 14维护成品物流运输异常事件-ZMM042、43、44 14成品入库凭证打印-ZMM045 14材料入库凭证打印-ZMM046 14工序外协物料入库凭证打印-ZMM047 14材料公司间调拨-ZMM052 14采购信息记录导入-ZMM057 14工序外协采购订单打印-ZMM058 14盘点批量创建处理-ZMM059 14非箱码成品扫描入库-Z MM059A 14SD事务码解析14一、主数据141.创建销售客户-XD01 14 2客户清单- 14二、SD业务操作151.创建销售订单-VA01 152.创建合同-VA41 153.销售开票-VF01 154.创建交货-VL01N 15三、SD报表151.查看销售订单-VA03 152.销售订单清单-VA05 15 3销售合同清单-VA45 15 4查看合同-VA43 15 5查看交货单-VL03N 15PP事务码解析15一、主数据15二、PP业务操作161.创建生产订单-CO01 162.生产订单工序报工-CO11N 163.生产订单多工序报工-CO12 16 4取消生产订单报工-CO13 16 5工厂运行MRP-MD01 16 6物料MRP运行-MD02 167.生产订单收货-MB31 168.生产订单排产-ZC06 169.批量生产订单下达-CO05/CO05N 16三、PP报表161.BOM显示-CS03 162.BOM各种显示-CS11、12、13 163.BOM批量查询-XXX待开发164.工作中心显示-CR03 165.工作中心清单查询-CR05 166.工作中心的成本中心查询-CR06 167.工艺路线显示-CA03 168.生产订单报工显示-CO14 169.按物料查询生产订单-CO21 16 FI事务码解析1.总账清帐~F-03这个是对总账的一个清帐,结果显示查看FBL3N,红灯变绿灯,表示清帐成功。
SAP常用事务码

FI事务码解析错误!未定义书签。
一、FI清帐事务码错误!未定义书签。
1.总账清帐~F-03 错误!未定义书签。
2.客户清帐~F-32 错误!未定义书签。
3.供应商清帐~F-44 错误!未定义书签。
4.收客户款记账清帐~F-28=F-06 错误!未定义书签。
5.付供应商款记账并清帐~F-53=F-07 错误!未定义书签。
6.万能过账清帐~F-04=F-30 错误!未定义书签。
7.万能自动清帐~ 错误!未定义书签。
二、FI基础数据事务码错误!未定义书签。
1.总账科目维护~FS00 错误!未定义书签。
2.创建客户~FD01=XD01 错误!未定义书签。
3.创建供应商~FK01=XK01 错误!未定义书签。
4.创建固定资产~AS01 错误!未定义书签。
三、FI业务操作事务码错误!未定义书签。
1.总账科目记账~F-02 错误!未定义书签。
四、FI报表查询事务码错误!未定义书签。
1.客户余额查询-FD10N 错误!未定义书签。
2供应商余额查询-FK10N 错误!未定义书签。
3.总账余额查询-FS10N 错误!未定义书签。
4.客户行项目查询-FBL5N 错误!未定义书签。
5.供应商行项目查询-FBL1N 错误!未定义书签。
6.总账行项目查询-FBL3N 错误!未定义书签。
7.检查交货单是否生成会计凭证-VFX3 错误!未定义书签。
8查询移动类型明细-MB51 错误!未定义书签。
9查询库存明细-MB5B 错误!未定义书签。
五、固定资产事务码错误!未定义书签。
1.创建资产主数据-AS01 错误!未定义书签。
2.主数据修改调拨-AS02 错误!未定义书签。
3.主数据冻结/删除-AS05/AS06 错误!未定义书签。
4.查看固定资产详细信息-AW01N 错误!未定义书签。
5固定资产报废-ABAVN 错误!未定义书签。
6固定资产公司间调拨-ABT1N 错误!未定义书签。
7.固定资产折旧运行-AFAB 错误!未定义书签。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SAP FI清账接口和部分清账接口源码FICO模块编写者:陈楚庆日期: 2016-01-15目录一、清账bapi : POSTING_INTERFACE_CLEARING (3)二、部分清账bapi: BAPI_ACC_DOCUMENT_POST (3)三、下面是完整的清账和部分清账的接口源码。
(3)1. 创建财务清账接口zfi_fk_post_clear (4)2. 创建凭证头结构 (4)3. 创建新入账行行项目结构 (5)4. 创建被清行行项目结构 (7)5. 创建清账接口日志表 (8)6. 创建清账接口日志表 (9)7. 清账接口源代码 (9)8. 凭证接口结构 (24)9.凭证接口源代码 (26)一、清账bapi : POSTING_INTERFACE_CLEARING这个function可用于全清,也可用于剩余清(剩余清原理也是全清,只是多了个新的行项目)二、部分清账bapi: BAPI_ACC_DOCUMENT_POST这个function可用于部份清账,其实它就是做凭证的bapi,需要把被清行的凭证号,年度,行项目写到凭证对应的 REBZG , REBZJ , REBZZ 字段上。
但这三个字段在标准字段是没有的,需要添加到extension2内。
三、下面是完整的清账和部分清账的接口源码。
1.创建财务清账接口zfi_fk_post_clear2.创建凭证头结构3.创建新入账行行项目结构4.创建被清行行项目结构7.清账接口源代码FUNCTION zfi_fk_post_clear.*"---------------------------------------------------------------------- *"*"Local interface:*" IMPORTING*" VALUE(WA_FK_ITM) TYPE ZFI_FK_ITM OPTIONAL*" TABLES*" ZTAB_DOC_CLEAR STRUCTURE ZFI_FK_DOC*" CHANGING*" VALUE(WA_FK_ITA) TYPE ZFI_FK_PZT*"----------------------------------------------------------------------*"----------------------------------------------------------------------* DATA : wa_fk_pzt LIKE zfi_fk_pzt .* DATA : wa_fk_itm LIKE zfi_fk_itm .DATA : tab_fkhed_log TYPE STANDARD TABLE OF zfit_fkclear_004 ,wa_fkhed_log TYPE zfit_fkclear_004 .DATA : tab_fkitm_log TYPE STANDARD TABLE OF zfit_fkclear_005 ,wa_fkitm_log TYPE zfit_fkclear_005 .DATA : zupdate_regz TYPE char1.DATA: tab_blntab TYPE TABLE OF blntab .DATA: wa_blntab TYPE blntab .DATA: tab_fttax TYPE TABLE OF fttax WITH HEADER LINE.DATA : wa_doc_clear LIKE zfi_fk_doc.DATA :tab_ftpost TYPE STANDARD TABLE OF ftpost . "入账行项目DATA : wa_ftpost TYPE ftpost .DATA : tab_ftclear TYPE STANDARD TABLE OF ftclear ."被清行项目DATA :wa_ftclear TYPE ftclear.DATA l_err_flag TYPE c.DATA zwrbtr TYPE bseg-wrbtr.DATA zclear_flag TYPE char10. "清账类型 P部分清,A2全清DATA zclear_num TYPE char10. "被清数量DATA wa_hed TYPE zfi_doc_head .DATA tab_hed TYPE STANDARD TABLE OF zfi_doc_head .DATA: l_prctr LIKE bseg-prctr. "判断利润中心是否与成本中心相符 DATA wa_itm TYPE zfi_doc_itm .DATA tab_itm TYPE STANDARD TABLE OF zfi_doc_itm .DATA wa_bseg TYPE bseg .DATA itm_num TYPE numc10 .DATA: akont LIKE knb1-akont .DATA: kunnr_num LIKE knb1-kunnr.CLEAR : akont , kunnr_num .CLEAR: tab_fkhed_log , wa_fkhed_log ,tab_fkitm_log ,wa_fkitm_log . CLEAR: wa_ftpost , wa_doc_clear ,wa_ftclear ,tab_ftpost ,tab_ftclear ,tab_blntab ,wa_blntab ,tab_fttax .CLEAR: wa_hed ,tab_hed ,wa_itm,tab_itm.CLEAR: wa_bseg ,itm_num .CLEAR: zclear_num ,zclear_flag .DEFINE populate_ftpost.wa_ftpost-stype = &1.wa_ftpost-count = &2.wa_ftpost-fnam = &3.wa_ftpost-fval = &4.condense wa_ftpost-fval .append wa_ftpost to tab_ftpost .END-OF-DEFINITION.INCLUDE lzfi01f01.*&计数看有多少个部份清LOOP AT ztab_doc_clear INTO wa_doc_clear WHERE flag = 'P' .zclear_num = zclear_num + 1 .*&判断是部份清还还是全清LOOP AT ztab_doc_clear INTO wa_doc_clear .zclear_flag = wa_doc_clear-flag.EXIT.ENDLOOP.CLEAR wa_doc_clear .LOOP AT ztab_doc_clear INTO wa_doc_clear WHERE flag <> zclear_flag .EXIT.ENDLOOP.IF wa_doc_clear IS NOT INITIAL.zclear_flag = 'E' . "不允许同时存在部份清和全清ENDIF.IF zclear_num > 1 .zclear_flag = 'E2' . "不允许存在多条部分清理论上业务不允许多条部分清账,这里做控制ENDIF.CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' "客户前导0EXPORTINGinput = wa_fk_itm-customerIMPORTINGoutput = wa_fk_itm-customer .CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' "供应商前导0EXPORTINGinput = wa_fk_itm-vendor_noIMPORTINGoutput = wa_fk_itm-vendor_no .*&校验统驭科目IF wa_fk_itm-customer IS NOT INITIAL . "客户CLEAR : akont ,kunnr_num .SELECT akont INTO akont FROM knb1 WHERE kunnr = wa_fk_itm-customer AND bukrs = wa_fk_itm-comp_code .ENDSELECT .kunnr_num = wa_fk_itm-customer(1) .IF kunnr_num = 'H' .IF akont <> '0011330307' .wa_fk_ita-err = ' 员工客户统SAP驭科目必需为11330307,请在SAP XK02更正' .wa_fk_ita-ref_key_1 = 'F' .CLEAR : wa_fk_itm ,ztab_doc_clear[] .RETURN.ENDIF.ENDIF.IF wa_fk_itm-vendor_no IS NOT INITIAL . "供应商CLEAR akont.SELECT akont INTO akont FROM lfb1 WHERE lifnr = wa_fk_itm-vendor_no AND bukrs = wa_fk_itm-comp_code .ENDSELECT .IF akont <> '0021210100' .wa_fk_ita-err = ' 供应商SAP统驭科目必需为21210100,请在SAP FK02更正' .wa_fk_ita-ref_key_1 = 'F' .CLEAR : wa_fk_itm ,ztab_doc_clear[] .RETURN.ENDIF.ENDIF.*&校验统成本中心和利润中心IF wa_fk_itm-costcenter IS NOT INITIAL AND wa_fk_itm-profit_ctr IS NOT INITIAL .CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' "成本中心前导EXPORTINGinput = wa_fk_itm-costcenterIMPORTINGoutput = wa_fk_itm-costcenter .CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' "利润中心前导EXPORTINGinput = wa_fk_itm-profit_ctrIMPORTINGoutput = wa_fk_itm-profit_ctr .CLEAR l_prctr .SELECT SINGLE prctr INTO l_prctr FROM csks WHERE kokrs = '1000' AND kostl= wa_fk_itm-costcenter and DATBI > SY-DATUM .IF l_prctr <> wa_fk_itm-profit_ctr .CONCATENATE '成本中心与利润中心必需有对应关系!利润中心可能是'l_prctr ',SAP可使用KS03查看' into wa_fk_ita-err .* wa_fk_ita-err = '成本中心与利润中心必需是有对应关系'.wa_fk_ita-ref_key_1 = 'F' .CLEAR : wa_fk_itm ,ztab_doc_clear[] .RETURN.ENDIF.** 校验原因代码IF wa_fk_itm-GL_ACCOUNT >= 10010000 and wa_fk_itm-GL_ACCOUNT <= 10999999 and wa_fk_itm-RSTGR is initial .CONCATENATE '银行/现金科目' wa_fk_itm-GL_ACCOUNT '原因代码不能为空' into wa_fk_ita-err .wa_fk_ita-ref_key_1 = 'F' .CLEAR : wa_fk_itm ,ztab_doc_clear[] .RETURN.endif.IF wa_fk_ita-ref_key_3 IS NOT INITIAL AND wa_fk_ita-comp_code = '1090' . wa_fk_ita-ref_doc_no = '' .CONCATENATE '000DD' wa_fk_ita-ref_key_3+5(5) INTOwa_fk_ita-ref_doc_no .wa_fk_itm-profit_ctr = '' .ENDIF.*&全清IF zclear_flag = 'A' OR zclear_flag = 'AA' OR zclear_flag = 'AC'. "全清*&----入库抬头行populate_ftpost: 'K' 1 'BKPF-BUKRS' wa_fk_ita-comp_code, "Company code 'K' 1 'BKPF-BLART' wa_fk_ita-doc_type,'K' 1 'BKPF-BLDAT' wa_fk_ita-doc_date,'K' 1 'BKPF-BUDAT' wa_fk_ita-pstng_date,* 'K' 1 'BKPF-WAERS' wa_fk_itm-currency ,'K' 1 'BKPF-BKTXT' wa_fk_ita-header_txt ,'K' 1 'BKPF-XBLNR' wa_fk_ita-ref_doc_no. "参考凭证号IF wa_fk_itm IS NOT INITIAL AND wa_fk_itm-obj_no = wa_fk_ita-obj_no . populate_ftpost: 'K' 1 'BKPF-WAERS' wa_fk_itm-currency .*&----入库抬头行populate_ftpost: 'P' 1 'RF05A-NEWBS' wa_fk_itm-newbs, "记账码'P' 1 'BSEG-SGTXT' wa_fk_itm-item_text,'P' 1 'BSEG-WRBTR' wa_fk_itm-amt_doccur .IF wa_fk_itm-umskz IS NOT INITIAL .populate_ftpost: 'P' 1 'RF05A-NEWUM' wa_fk_itm-umskz. "特别总账标识ENDIF.IF wa_fk_itm-newbs = '29' OR wa_fk_itm-newbs = '39' .populate_ftpost: 'P' 1 'BSEG-MWSKZ' 'J0'. "税码IF wa_fk_itm-umskz <> 'A' .populate_ftpost: 'P' 1 'BSEG-ZFBDT ' sy-datum . "日期ENDIF.ELSEIF wa_fk_itm-newbs = '09' OR wa_fk_itm-newbs = '19' . .populate_ftpost: 'P' 1 'BSEG-MWSKZ' 'X0'. "税码IF wa_fk_itm-umskz <> 'A' .populate_ftpost: 'P' 1 'BSEG-ZFBDT ' sy-datum . "日期ENDIF.ENDIF.IF wa_fk_itm-customer IS NOT INITIAL .populate_ftpost: 'P' 1 'BSEG-HKONT' wa_fk_itm-customer. "客户 ELSEIF wa_fk_itm-vendor_no IS NOT INITIAL .populate_ftpost: 'P' 1 'BSEG-HKONT' wa_fk_itm-vendor_no . "供应商 ELSEIF wa_fk_itm-gl_account IS NOT INITIAL .populate_ftpost: 'P' 1 'BSEG-HKONT' wa_fk_itm-gl_account . "总账 ENDIF.IF wa_fk_itm-rstgr IS NOT INITIAL.populate_ftpost: 'P' 1 'BSEG-RSTGR' wa_fk_itm-rstgr. "原因代码 ENDIF.IF wa_fk_itm-orderid IS NOT INITIAL .populate_ftpost: 'P' 1 'COBL-AUFNR' wa_fk_itm-orderid. "生产订单 ENDIF.IF wa_fk_itm-profit_ctr IS NOT INITIAL and wa_fk_itm-customer is initial .populate_ftpost: 'P' 1 'BSEG-PRCTR' wa_fk_itm-profit_ctr. "利润中心ENDIF.IF wa_fk_itm-costcenter IS NOT INITIAL .populate_ftpost: 'P' 1 'COBL-KOSTL' wa_fk_itm-costcenter. "成本中心 ENDIF.IF wa_fk_itm-newbs <> '21' AND wa_fk_itm-vendor_no IS NOT INITIAL . zupdate_regz = '1' . "贷方供应商不允许输入参考发票号等信息ELSEIF wa_fk_itm-newbs <> '11' AND wa_fk_itm-customer IS NOT INITIAL.zupdate_regz = '1' .ELSE.IF wa_fk_itm-rebzg IS NOT INITIAL .populate_ftpost: 'P' 1 'BSEG-REBZG' wa_fk_itm-rebzg. "参考发票号 ENDIF.IF wa_fk_itm-rebzj IS NOT INITIAL .populate_ftpost: 'P' 1 'BSEG-REBZJ' wa_fk_itm-rebzj. "参考发票年 ENDIF.IF wa_fk_itm-rebzj IS NOT INITIAL .populate_ftpost: 'P' 1 'BSEG-REBZZ' wa_fk_itm-rebzz. "参考发票行项目ENDIF.ENDIF.ELSE.populate_ftpost: 'K' 1 'BKPF-WAERS' 'RMB' .ENDIF.* zwrbtr = wa_fk_itm-amt_doccur .*&---被清行项目LOOP AT ztab_doc_clear INTO wa_doc_clear .wa_ftclear-agkoa = wa_doc_clear-xpos1. "供应商是K,客户是D wa_ftclear-agkon = wa_doc_clear-account. "Customerwa_ftclear-agbuk = wa_doc_clear-comp_code. "Company codewa_ftclear-xnops = 'X'.wa_ftclear-agums = wa_doc_clear-umskz. "'J'.物料总账标识 wa_ftclear-selfd = 'BELNR'.CONCATENATE wa_doc_clear-belnrwa_doc_clear-gjahrwa_doc_clear-buzei INTO wa_ftclear-selvon.* gs_ftclear-selvon = wa_input-belnr.wa_ftclear-selbis = wa_doc_clear-belnr.APPEND wa_ftclear TO tab_ftclear.ENDLOOP.CALL FUNCTION 'POSTING_INTERFACE_START'EXPORTINGi_function = 'C'i_keep = 'X'i_mode = 'N' "A for step by step,N default,for backgroundEXCEPTIONSclient_incorrect = 1function_invalid = 2group_name_missing = 3mode_invalid = 4update_invalid = 5OTHERS = 6.*&----清账CALL FUNCTION 'POSTING_INTERFACE_CLEARING'EXPORTINGi_auglv = 'UMBUCHNG'i_tcode = 'FB05'i_sgfunct = 'C'IMPORTINGe_msgid = sy-msgide_msgno = sy-msgnoe_msgty = sy-msgtye_msgv1 = sy-msgv1e_msgv2 = sy-msgv2e_msgv3 = sy-msgv3e_msgv4 = sy-msgv4* E_SUBRC = SY-SUBRCTABLESt_blntab = tab_blntabt_ftclear = tab_ftcleart_ftpost = tab_ftpostt_fttax = tab_fttaxEXCEPTIONSclearing_procedure_invalid = 1clearing_procedure_missing = 2table_t041a_empty = 3transaction_code_invalid = 4amount_format_error = 5too_many_line_items = 6company_code_invalid = 7screen_not_found = 8no_authorization = 9OTHERS = 10.READ TABLE tab_blntab INTO wa_blntab INDEX 1.IF wa_blntab-belnr IS INITIAL.wa_fk_ita-ref_key_1 = 'F' .l_err_flag = 'X'.* CONCATENATE wa_input-belnr wa_input-buzei INTO WA_FK_PZT-ERR . IF sy-msgty IS INITIAL.wa_fk_itm-ref_key_3 = '未知异常.'.ELSE.MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgnoINTO wa_fk_ita-err WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF.ELSE.wa_fk_ita-ref_key_1 = 'S' .CONCATENATE '凭证号码' wa_blntab-belnr '在公司代码' wa_blntab-bukrs '下记账成功' INTO wa_fk_ita-err.wa_fk_ita-ref_key_2 = wa_blntab-belnr .ENDIF.IF zupdate_regz = '1' AND wa_fk_ita-ref_key_1 = 'S' AND( wa_fk_itm-rebzg IS NOT INITIAL AND wa_fk_itm-rebzg IS NOT INITIAL AND wa_fk_itm-rebzz IS NOT INITIAL ).UPDATE bseg SET rebzg = wa_fk_itm-rebzg rebzj = wa_fk_itm-rebzj rebzz = wa_fk_itm-rebzzWHERE belnr = wa_blntab-belnr AND bukrs = wa_blntab-bukrs AND gjahr = wa_blntab-gjahr AND buzei = '001'.IF wa_fk_itm-customer IS NOT INITIAL .UPDATE bsid SET rebzg = wa_fk_itm-rebzg rebzj = wa_fk_itm-rebzj rebzz = wa_fk_itm-rebzzWHERE belnr = wa_blntab-belnr AND bukrs = wa_blntab-bukrs AND gjahr = wa_blntab-gjahr AND buzei = '001'.ELSEIF wa_fk_itm-vendor_no IS NOT INITIAL .UPDATE bsik SET rebzg = wa_fk_itm-rebzg rebzj = wa_fk_itm-rebzj rebzz = wa_fk_itm-rebzzWHERE belnr = wa_blntab-belnr AND bukrs = wa_blntab-bukrs AND gjahr = wa_blntab-gjahr AND buzei = '001'.ENDIF..ENDIF.*&部份清ELSEIF zclear_flag = 'P' . "部份清wa_hed-obj_no = wa_fk_ita-obj_no .wa_hed-username = wa_fk_ita-username .wa_hed-header_txt = wa_fk_ita-header_txt.wa_hed-comp_code = wa_fk_ita-comp_code.wa_hed-fisc_year = wa_fk_ita-fisc_year.wa_hed-fis_period = wa_fk_ita-fis_period .wa_hed-doc_date = wa_fk_ita-doc_date.wa_hed-pstng_date = wa_fk_ita-pstng_date.wa_hed-doc_type = wa_fk_ita-doc_type.wa_hed-ref_doc_no = wa_fk_ita-ref_doc_no.wa_hed-trans_date = wa_fk_ita-trans_date.wa_hed-ref_key_1 = wa_fk_ita-ref_key_1.wa_hed-ref_key_2 = wa_fk_ita-ref_key_2.wa_hed-ref_key_3 = wa_fk_ita-ref_key_3.wa_hed-err = wa_fk_ita-err.APPEND wa_hed TO tab_hed .IF wa_fk_itm IS NOT INITIAL .wa_itm-obj_no = wa_fk_itm-obj_no .wa_itm-itemno_acc = '1' .wa_itm-newbs = wa_fk_itm-newbs .wa_itm-gl_account = wa_fk_itm-gl_account .wa_itm-anbwa = wa_fk_itm-anbwa.wa_itm-asset_no = wa_fk_itm-asset_no.wa_itm-sub_number = wa_fk_itm-sub_number.wa_itm-comp_code = wa_fk_itm-comp_code.wa_itm-doc_type = wa_fk_itm-doc_type.wa_itm-profit_ctr = wa_fk_itm-profit_ctr.wa_itm-costcenter = wa_fk_itm-costcenter.wa_itm-customer = wa_fk_itm-customer.wa_itm-vendor_no = wa_fk_itm-vendor_no.wa_itm-orderid = wa_fk_itm-orderid.wa_itm-item_text = wa_fk_itm-item_text.wa_itm-currency = wa_fk_itm-currency.wa_itm-amt_doccur = wa_fk_itm-amt_doccur.wa_itm-rstgr = wa_fk_itm-rstgr.wa_itm-xnegp = wa_fk_itm-xnegp.wa_itm-umskz = wa_fk_itm-umskz.wa_itm-shkzg = wa_fk_itm-shkzg.wa_itm-ref_key_8 = wa_fk_itm-ref_key_8.wa_itm-ref_key_2 = wa_fk_itm-ref_key_2.wa_itm-ref_key_3 = wa_fk_itm-ref_key_3.APPEND wa_itm TO tab_itm .ENDIF.itm_num = wa_fk_itm-obj_no .LOOP AT ztab_doc_clear INTO wa_doc_clear .CLEAR wa_itm.CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' "总帐科目前导0EXPORTINGinput = wa_doc_clear-belnrIMPORTINGoutput = wa_doc_clear-belnr .SELECT * INTO CORRESPONDING FIELDS OF wa_bsegFROM bseg WHEREbukrs = wa_doc_clear-comp_codeAND belnr = wa_doc_clear-belnrAND gjahr = wa_doc_clear-gjahrAND buzei = wa_doc_clear-buzei .ENDSELECT.wa_itm-obj_no = wa_doc_clear-obj_no .itm_num = itm_num + 1 .wa_itm-itemno_acc = itm_num .IF wa_bseg-koart = 'K' . "供应商IF wa_bseg-bschl < '20' .wa_itm-newbs = wa_bseg-bschl + 10 . "记账码wa_itm-shkzg = 'H' .ELSE.wa_itm-newbs = wa_bseg-bschl - 10 .wa_itm-shkzg = 'S' .ENDIF.wa_itm-vendor_no = wa_doc_clear-account . "供应商编号ELSEIF wa_bseg-koart = 'D' . "客户IF wa_bseg-bschl < '10' .wa_itm-newbs = wa_bseg-bschl + 10 .wa_itm-shkzg = 'H' .ELSE.wa_itm-newbs = wa_bseg-bschl - 10 .wa_itm-shkzg = 'S' .ENDIF.wa_itm-customer = wa_doc_clear-account . "客户编号ENDIF.wa_itm-comp_code = wa_doc_clear-comp_code . "公司代码wa_itm-doc_type = wa_fk_ita-doc_type. "凭证类型wa_itm-currency = wa_bseg-pswsl . "贷币wa_itm-umskz = wa_bseg-umskz . "特别总账标识wa_itm-amt_doccur = wa_doc_clear-dmbtr_clear . "金额wa_itm-item_text = wa_fk_itm-item_text . "文本IF wa_itm-newbs <> '21' AND wa_itm-vendor_no IS NOT INITIAL .zupdate_regz = '1' . "贷方供应商不允许输入参考发票号等信息ELSEIF wa_itm-newbs <> '11' AND wa_itm-customer IS NOT INITIAL. zupdate_regz = '1' .ELSE.wa_itm-rebzg = wa_doc_clear-belnr . "参考凭证号 wa_itm-rebzj = wa_doc_clear-gjahr . "参考年度 wa_itm-rebzz = wa_doc_clear-buzei . "参考行项目 ENDIF.APPEND wa_itm TO tab_itm .ENDLOOP.CALL FUNCTION 'ZFI_POST_DOC' "通过凭证接口处理部分清账的业务 TABLEStab_itm = tab_itmtab_hed = tab_hed.CLEAR wa_hed .LOOP AT tab_hed INTO wa_hed .wa_fk_ita-ref_key_1 = wa_hed-ref_key_1 .wa_fk_ita-ref_key_2 = wa_hed-ref_key_2 .wa_fk_ita-ref_key_3 = wa_hed-ref_key_3 .wa_fk_ita-err = wa_hed-err .IF zupdate_regz = '1' AND wa_fk_ita-ref_key_1 = 'S' AND( wa_doc_clear-belnr IS NOT INITIAL AND wa_doc_clear-gjahr IS NOT INITIAL AND wa_doc_clear-buzei IS NOT INITIAL ).WAIT UP TO 10 SECONDS.UPDATE bseg SET rebzg = wa_doc_clear-belnr rebzj =wa_doc_clear-gjahr rebzz = wa_doc_clear-buzeiWHERE belnr = wa_hed-ref_key_2 AND bukrs = wa_hed-comp_code AND gjahr = wa_hed-fisc_year AND buzei = '002'.IF wa_itm-customer IS NOT INITIAL .UPDATE bsid SET rebzg = wa_doc_clear-belnr rebzj =wa_doc_clear-gjahr rebzz = wa_doc_clear-buzeiWHERE belnr = wa_hed-ref_key_2 AND bukrs = wa_hed-comp_code AND gjahr = wa_hed-fisc_year AND buzei = '002'..ELSEIF wa_itm-vendor_no IS NOT INITIAL .UPDATE bsik SET rebzg = wa_doc_clear-belnr rebzj =wa_doc_clear-gjahr rebzz = wa_doc_clear-buzeiWHERE belnr = wa_hed-ref_key_2 AND bukrs = wa_hed-comp_code AND gjahr = wa_hed-fisc_year AND buzei = '002'.ENDIF.ENDIF.ENDLOOP.ELSEIF zclear_flag = 'E' .wa_fk_ita-err = '被清行项目不允许存在部份清和全清!' .ELSEIF zclear_flag = 'E2' .wa_fk_ita-err = '不允许存在多条部分清!' .ELSE .wa_fk_ita-err = '未知的清账类型!' .ENDIF.***写入日志表CALL FUNCTION 'NUMBER_GET_NEXT'EXPORTINGnr_range_nr = '04'object = 'ZFKLU01'ignore_buffer = 'X'* QUANTITY = '1'* SUBOBJECT = ' '* TOYEAR = '0000'* IGNORE_BUFFER = ' 'IMPORTINGnumber = wa_fkhed_log-keyid* QUANTITY =* RETURNCODE =EXCEPTIONSinterval_not_found = 1number_range_not_intern = 2object_not_found = 3quantity_is_0 = 4quantity_is_not_1 = 5interval_overflow = 6buffer_overflow = 7OTHERS = 8 .* DATA : TAB_FKHED_LOG TYPE STANDARD TABLE OF ZFIT_FKCLEAR_004 , * WA_FKHED_LOG TYPE ZFIT_FKCLEAR_004 .** DATA : TAB_FKITM_LOG TYPE STANDARD TABLE OF ZFIT_FKCLEAR_005 ,* WA_FKITM_LOG TYPE ZFIT_FKCLEAR_005 .wa_fkhed_log-fis_period = wa_fk_ita-fis_period . wa_fkhed_log-doc_date = wa_fk_ita-doc_date .wa_fkhed_log-pstng_date = wa_fk_ita-pstng_date . wa_fkhed_log-doc_type = wa_fk_ita-doc_type .wa_fkhed_log-ref_doc_no = wa_fk_ita-ref_doc_no . wa_fkhed_log-trans_date = wa_fk_ita-trans_date . wa_fkhed_log-ref_key_1 = wa_fk_ita-ref_key_1 . wa_fkhed_log-ref_key_2 = wa_fk_ita-ref_key_2 . wa_fkhed_log-ref_key_3 = wa_fk_ita-ref_key_3 . wa_fkhed_log-err = wa_fk_ita-err .wa_fkhed_log-itemno_acc = wa_fk_itm-itemno_acc . wa_fkhed_log-newbs = wa_fk_itm-newbs .wa_fkhed_log-gl_account = wa_fk_itm-gl_account . wa_fkhed_log-anbwa = wa_fk_itm-anbwa .wa_fkhed_log-asset_no = wa_fk_itm-asset_no .wa_fkhed_log-sub_number = wa_fk_itm-sub_number . wa_fkhed_log-profit_ctr = wa_fk_itm-profit_ctr . wa_fkhed_log-costcenter = wa_fk_itm-costcenter . wa_fkhed_log-customer = wa_fk_itm-customer .wa_fkhed_log-vendor_no = wa_fk_itm-vendor_no . wa_fkhed_log-orderid = wa_fk_itm-orderid .wa_fkhed_log-item_text = wa_fk_itm-item_text . wa_fkhed_log-currency = wa_fk_itm-currency .wa_fkhed_log-amt_doccur = wa_fk_itm-amt_doccur . wa_fkhed_log-rstgr = wa_fk_itm-rstgr .wa_fkhed_log-xnegp = wa_fk_itm-xnegp .wa_fkhed_log-umskz = wa_fk_itm-umskz .wa_fkhed_log-shkzg = wa_fk_itm-shkzg .wa_fkhed_log-rebzg = wa_fk_itm-rebzg .wa_fkhed_log-rebzj = wa_fk_itm-rebzj .wa_fkhed_log-rebzz = wa_fk_itm-rebzz .wa_fkhed_log-ref_key_8 = wa_fk_itm-ref_key_8 . wa_fkhed_log-ref_key_2i = wa_fk_itm-ref_key_2 . wa_fkhed_log-ref_key_3i = wa_fk_itm-ref_key_3 . wa_fkhed_log-write_date = sy-datum .wa_fkhed_log-write_time = sy-uzeit .MODIFY zfit_fkclear_004 FROM wa_fkhed_log .CLEAR wa_doc_clear .LOOP AT ztab_doc_clear INTO wa_doc_clear .wa_fkitm_log-keyid = wa_fkhed_log-keyid .wa_fkitm_log-obj_no = wa_doc_clear-obj_no .wa_fkitm_log-flag = wa_doc_clear-flag .wa_fkitm_log-xpos1 = wa_doc_clear-xpos1 .wa_fkitm_log-account = wa_doc_clear-account .wa_fkitm_log-comp_code = wa_doc_clear-comp_code . wa_fkitm_log-xnops = wa_doc_clear-xnops .wa_fkitm_log-umskz = wa_doc_clear-umskz .wa_fkitm_log-belnr = wa_doc_clear-belnr .wa_fkitm_log-gjahr = wa_doc_clear-gjahr .wa_fkitm_log-buzei = wa_doc_clear-buzei .wa_fkitm_log-dmbtr = wa_doc_clear-dmbtr .wa_fkitm_log-dmbtr_clear = wa_doc_clear-dmbtr_clear . wa_fkitm_log-ref_key_8 = wa_doc_clear-ref_key_8 . wa_fkitm_log-ref_key_2 = wa_doc_clear-ref_key_2 . wa_fkitm_log-ref_key_3 = wa_doc_clear-ref_key_3 . wa_fkitm_log-write_date = sy-datum .wa_fkitm_log-write_time = sy-uzeit .MODIFY zfit_fkclear_005 FROM wa_fkitm_log .ENDLOOP .CLEAR : wa_fk_itm ,ztab_doc_clear[] .ENDFUNCTION.8.凭证接口结构9.凭证接口源代码FUNCTION ZFI_POST_DOC.*"---------------------------------------------------------------------- *"*"Local interface:*" TABLES*" TAB_ITM STRUCTURE ZFI_DOC_ITM*" TAB_HED STRUCTURE ZFI_DOC_HEAD*"---------------------------------------------------------------------- *" create by kin 2015-07-24DATA: retrun_num(2) TYPE c,p_datetime(14) TYPE c,ref_key(12) TYPE c,p_acc_sum(4) TYPE n,p_acc_suc(4) TYPE n,p_acc_fai(4) TYPE n,p_acc_num(4) TYPE n,p_str(200) TYPE c,p_answer(1) TYPE c,p_char,documentheader LIKE bapiache09,wa_zwyhd01_accit LIKE ZFK_ACCIT,p_customer TYPE bapiacgl09-customer,succe_flag.*---->定义凭证抬头DATA: wa_hd_sap_acc LIKE ZFI_DOC_HEAD,wa_hd_sap_acc_item LIKE ZFI_DOC_ITM.DATA: gt_hplog TYPE STANDARD TABLE OF zfit_hppz_002,wa_hplog TYPE zfit_hppz_002.DATA : BEGIN OF wa_data,icon(4), "预警图标obj_no LIKE bapiache09-obj_sys,itemno(2) TYPE c,datetime(14) TYPE c.INCLUDE STRUCTURE bapiret2.DATA END OF wa_data.DATA :accountgl LIKE bapiacgl09 OCCURS 0 WITH HEADER LINE,accountreceivable LIKE bapiacar09 OCCURS 0 WITH HEADER LINE,accountpayable LIKE bapiacap09 OCCURS 0 WITH HEADER LINE,currencyamount LIKE bapiaccr09 OCCURS 0 WITH HEADER LINE,criteria LIKE bapiackec9 OCCURS 0 WITH HEADER LINE,return LIKE bapiret2 OCCURS 0 WITH HEADER LINE,extension2 LIKE bapiparex OCCURS 0 WITH HEADER LINE,bapi_retn_info LIKE bapiret2 OCCURS 0 WITH HEADER LINE,t_hd_sap_acc LIKE wa_hd_sap_acc OCCURS 0 WITH HEADER LINE,t_hd_sap_acc_item LIKE wa_hd_sap_acc_item OCCURS 0 WITH HEADER LINE,t_data LIKE wa_data OCCURS 0 WITH HEADER LINE.DATA: errs LIKE TAB_HED-err.*---->权限控制AUTHORITY-CHECK OBJECT 'ZWYHD01'ID 'P_ACTIVE' FIELD '1'.IF sy-subrc <> '0'.MESSAGE '对不起,您没有权限传输凭证数据!' TYPE 'E'.ENDIF.*----->控制是否过账p_answer = 'C'.**---->开始导入凭证* SELECT * INTO CORRESPONGDING FIELDS OF TABLE t_hd_sap_acc* FROM TAB_HED.* SELECT * INTO CORRESPONGDING FIELDS OF TABLE t_hd_sap_acc_item.* FROM TAB_ITM.CLEAR : p_acc_sum,p_acc_suc,p_acc_fai,p_acc_num,gt_hplog,wa_hplog.LOOP AT TAB_HED INTO wa_hd_sap_acc.errs = ''.**---->赋值抬头CLEAR: documentheader ,p_customer.p_acc_sum = p_acc_sum + 1 . "记录总凭证数documentheader-bus_act = 'RFBU'.documentheader-username = sy-uname.documentheader-comp_code = wa_hd_sap_acc-comp_code.documentheader-header_txt = wa_hd_sap_acc-header_txt.documentheader-fisc_year = wa_hd_sap_acc-fisc_year.documentheader-ref_doc_no = wa_hd_sap_acc-ref_doc_no.CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' "会计期间前导0EXPORTINGinput = wa_hd_sap_acc-fis_periodIMPORTINGoutput = wa_hd_sap_acc-fis_period .documentheader-fis_period = wa_hd_sap_acc-fis_period.documentheader-doc_type = wa_hd_sap_acc-doc_type.documentheader-pstng_date = wa_hd_sap_acc-pstng_date.documentheader-doc_date = wa_hd_sap_acc-doc_date.****************************************************************************************************************LOOP AT tab_itm INTO wa_hd_sap_acc_item WHERE obj_no =wa_hd_sap_acc-obj_no.**---->赋值行项目***---->先处理总帐科目、客户、供应商前导0CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' "总帐科目前导0EXPORTINGinput = wa_hd_sap_acc_item-gl_accountIMPORTINGoutput = wa_hd_sap_acc_item-gl_account .CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' "客户前导0 EXPORTINGinput = wa_hd_sap_acc_item-customerIMPORTINGoutput = wa_hd_sap_acc_item-customer .CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' "供应商前导0 EXPORTINGinput = wa_hd_sap_acc_item-vendor_noIMPORTINGoutput = wa_hd_sap_acc_item-vendor_no .CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' "内部订单号前导0 EXPORTINGinput = wa_hd_sap_acc_item-orderidIMPORTINGoutput = wa_hd_sap_acc_item-orderid .CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' "固定资产号前导零 EXPORTINGinput = wa_hd_sap_acc_item-asset_noIMPORTINGoutput = wa_hd_sap_acc_item-asset_no .CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' "参考号前导零 EXPORTINGinput = wa_hd_sap_acc_item-REBZGIMPORTINGoutput = wa_hd_sap_acc_item-REBZG .CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' "参考号行项目前导零EXPORTINGinput = wa_hd_sap_acc_item-REBZZIMPORTINGoutput = wa_hd_sap_acc_item-REBZZ .***---->处理客户相关数据IF wa_hd_sap_acc_item-customer IS NOT INITIAL ANDwa_hd_sap_acc_item-gl_account NOT BETWEEN '0051010100' AND '0051010800'.CLEAR accountreceivable.accountreceivable-itemno_acc =wa_hd_sap_acc_item-itemno_acc .accountreceivable-customer = wa_hd_sap_acc_item-customer. accountreceivable-comp_code = wa_hd_sap_acc-comp_code.accountreceivable-item_text =wa_hd_sap_acc_item-item_text.accountreceivable-tax_code = 'X0'. "税码APPEND accountreceivable.***---->处理供应商相关数据ELSEIF wa_hd_sap_acc_item-vendor_no IS NOT INITIAL.CLEAR accountpayable.accountpayable-itemno_acc = wa_hd_sap_acc_item-itemno_acc .accountpayable-vendor_no = wa_hd_sap_acc_item-vendor_no.accountpayable-comp_code = wa_hd_sap_acc-comp_code.accountpayable-item_text = wa_hd_sap_acc_item-item_text.accountpayable-tax_code = 'J0'. "税码APPEND accountpayable.***---->处理供应商相关数据ELSEIF wa_hd_sap_acc_item-asset_no IS NOT INITIAL. "固定资产CLEAR accountgl.documentheader-bus_act = 'RMWE'.accountgl-asset_no = wa_hd_sap_acc_item-asset_no .accountgl-sub_number = '0000' .accountgl-acct_type = 'A'.accountgl-itemno_acc = wa_hd_sap_acc_item-itemno_acc .accountgl-gl_account = wa_hd_sap_acc_item-gl_account.accountgl-item_text = wa_hd_sap_acc_item-item_text.accountgl-comp_code = wa_hd_sap_acc_item-comp_code.accountgl-fisc_year = wa_hd_sap_acc-fisc_year.accountgl-fis_period = wa_hd_sap_acc-fis_period.accountgl-pstng_date = wa_hd_sap_acc-pstng_date.APPEND accountgl.ELSE.***---->处理总帐相关数据CLEAR accountgl.accountgl-itemno_acc = wa_hd_sap_acc_item-itemno_acc .accountgl-gl_account = wa_hd_sap_acc_item-gl_account.accountgl-item_text = wa_hd_sap_acc_item-item_text.accountgl-comp_code = wa_hd_sap_acc_item-comp_code.accountgl-fisc_year = wa_hd_sap_acc-fisc_year.accountgl-fis_period = wa_hd_sap_acc-fis_period.accountgl-pstng_date = wa_hd_sap_acc-pstng_date.。