BAPI_ACC_DOCUMENT_POST 凭证过账及增强

ops/2024/9/23 10:50:59/
  METHOD document_post.DATA ls_documentheader TYPE bapiache09. "表头DATA ls_accountgl TYPE bapiacgl09.DATA lt_accountgl TYPE STANDARD TABLE OF bapiacgl09. "总账项目DATA ls_accountreceivable TYPE bapiacar09.DATA lt_accountreceivable TYPE STANDARD TABLE OF bapiacar09. "客户项目DATA ls_accountpayable TYPE  bapiacap09.DATA lt_accountpayable TYPE STANDARD TABLE OF bapiacap09. "供应商项目DATA ls_currencyamount TYPE bapiaccr09.DATA lt_currencyamount TYPE STANDARD TABLE OF bapiaccr09. "货币项目DATA lt_currencyamount_tax TYPE STANDARD TABLE OF bapiaccr09. "货币项目DATA ls_extension2 TYPE bapiparex.DATA lt_extension2 TYPE STANDARD TABLE OF bapiparex.     "扩展DATA lt_criteria TYPE STANDARD TABLE OF	bapiackec9.       "COPA字段表DATA ls_accounttax TYPE bapiactx09.DATA lt_accounttax TYPE STANDARD TABLE OF bapiactx09.DATA lv_obj_type TYPE bapiache09-obj_type.DATA lv_obj_key TYPE bapiache09-obj_key.DATA lv_obj_sys TYPE bapiache09-obj_sys.DATA ls_return TYPE bapiret2.DATA lt_return TYPE TABLE OF bapiret2.DATA ls_mwdat TYPE rtax1u15.DATA lt_mwdat TYPE STANDARD TABLE OF rtax1u15.
*行项目扩展DATA ls_fi003  TYPE zsfi003.DATA ls_fi004  TYPE zsfi004.DATA ls_et_return TYPE LINE OF ztt_zsapex001.DATA et_return TYPE ztt_zsapex001.DATA lv_line_no TYPE i.DATA lv_has_error TYPE c VALUE ''.DATA ls_result TYPE zsfi_return.
* 定义日志变量DATA lv_xml_in TYPE string.DATA lv_xml_out TYPE string.DATA lv_guid TYPE guid_32.DATA ls_ztfi009 TYPE ztfi009.
*票据 ZSFI007DATA ls_zsfi007 TYPE zsfi007. "票据DATA lt_zsfi007 TYPE STANDARD TABLE OF zsfi007. "票据CLEAR:ev_belnr,ev_gjahr,ev_rtype,ev_rtmsg.
*   凭证检查document_check( EXPORTING is_bkpf  = is_bkpfCHANGING  it_bseg  = it_bseget_result  = et_result ).READ TABLE et_result TRANSPORTING NO FIELDS WITH KEY msgts = 'E'.IF sy-subrc EQ 0.ev_rtype = 'E'.ev_rtmsg = '会计凭证过账失败'(002).EXIT.ENDIF.CLEAR et_result.
*过帐码类型SELECT * INTO TABLE @DATA(lt_tbsl)FROM tbsl.SORT lt_tbsl BY bschl.CLEAR ls_documentheader.CLEAR lt_accountgl.CLEAR lt_accountreceivable.CLEAR lt_accountpayable.CLEAR lt_currencyamount.CLEAR lt_criteria.CLEAR lt_zsfi007.CLEAR lt_extension2.CLEAR lt_accounttax.CLEAR lt_currencyamount_tax.*凭证抬头赋值ls_documentheader-comp_code     =  is_bkpf-bukrs.    "公司代码ls_documentheader-doc_type      =  is_bkpf-blart.    "凭证类型ls_documentheader-pstng_date    =  is_bkpf-budat.    "记账日期ls_documentheader-doc_date      =  is_bkpf-bldat.    "凭证日期ls_documentheader-fis_period    =  is_bkpf-monat.    "会计期间ls_documentheader-header_txt    =  is_bkpf-bktxt.    "抬头文本ls_documentheader-ref_doc_no    =  is_bkpf-xblnr.    "参考凭证ls_documentheader-username      =  sy-uname.        "用户名ls_documentheader-obj_type      =  is_bkpf-awtyp.    "参考过程ls_documentheader-obj_key       =  is_bkpf-awkey.     "对象键值ls_documentheader-glo_ref1_hd      =  is_bkpf-glo_ref1_hd.        "凭证中的国家/地区特定的参考 1ls_documentheader-glo_ref4_hd      =  is_bkpf-glo_ref4_hd.        "凭证中的国家/地区特定的参考 4lv_has_error = ''."用于判断行项目是否存在异常,如果存在跳出该凭证
*表头扩展CLEAR ls_extension2.IF is_bkpf-ldgrp IS NOT INITIAL.ls_extension2-structure = 'ZSFI002'.ls_extension2-valuepart1 = is_bkpf-ldgrp.  "分类账组APPEND ls_extension2 TO lt_extension2.ENDIF.
*预制凭证CLEAR ls_extension2.IF iv_test EQ 'X'.ls_extension2-structure = 'PARK'.APPEND ls_extension2 TO lt_extension2.ENDIF.CLEAR: ls_fi004."ls_fi004-xblnr_alt = is_bkpf-xblnr_alt."备选参考ls_fi004-xref1_hd = is_bkpf-xref1_hd."参考码 (标题) 1zcl_pass=>zsfi004 = ls_fi004.SORT it_bseg BY buzei.lv_line_no = 1.LOOP AT it_bseg ASSIGNING FIELD-SYMBOL(<fs_bseg>).CLEAR ls_et_return.READ TABLE lt_tbsl INTO DATA(ls_tbsl) WITH KEY bschl = <fs_bseg>-bschl BINARY SEARCH.IF ls_tbsl-koart = 'D' . "客户项目CLEAR ls_accountreceivable.ls_accountreceivable-pmnttrms          = <fs_bseg>-zterm.  "付款条件ls_accountreceivable-profit_ctr        = <fs_bseg>-prctr. " 利润中心ls_accountreceivable-itemno_acc        = <fs_bseg>-buzei. "会计凭证行项目编号ls_accountreceivable-customer          = <fs_bseg>-kunnr.  "客户编号ls_accountreceivable-gl_account        = <fs_bseg>-hkont.ls_accountreceivable-sp_gl_ind         = <fs_bseg>-umskz.  "特别总账标识ls_accountreceivable-tax_code          = <fs_bseg>-mwskz.  "税码ls_accountreceivable-bline_date        = <fs_bseg>-zfbdt.  "基准日期ls_accountreceivable-alloc_nmbr        = <fs_bseg>-zuonr.  "分配编号ls_accountreceivable-item_text         = <fs_bseg>-sgtxt.  "行项目文本ls_accountreceivable-ref_key_1         = <fs_bseg>-xref1.  "参考1ls_accountreceivable-ref_key_2         = <fs_bseg>-xref2.  "参考2ls_accountreceivable-ref_key_3         = <fs_bseg>-xref3.  "参考3ls_accountreceivable-sepa_mandate_id = <fs_bseg>-mndid."托管参考IF  NOT <fs_bseg>-bseg_zfbdt IS INITIAL.ls_accountreceivable-bline_date = <fs_bseg>-bseg_zfbdt ."ENDIF."应收票据  票据号. 写入行项目文本IF NOT <fs_bseg>-bseg_zuonr IS INITIALAND ( <fs_bseg>-umskz = '1' OR <fs_bseg>-umskz = '2' ).ls_accountreceivable-item_text = <fs_bseg>-bseg_zuonr."票据号.ENDIF.APPEND ls_accountreceivable TO lt_accountreceivable.*应收票据 当特殊总账为1或者2时,需要添加票据IF <fs_bseg>-umskz = '1' OR <fs_bseg>-umskz = '2'.MOVE-CORRESPONDING <fs_bseg> TO ls_zsfi007.READ TABLE it_bsed INTO DATA(ls_bsed) WITH KEY buzei = <fs_bseg>-buzei.IF sy-subrc = 0.MOVE-CORRESPONDING ls_bsed TO ls_zsfi007.ENDIF.ls_zsfi007-banks = <fs_bseg>-banks."银行所属国家/地区代码ls_zsfi007-bankl = ls_bsed-bank."银行代码ls_zsfi007-bankn = ls_bsed-accou."银行账户号码ls_zsfi007-posnr = <fs_bseg>-buzei.APPEND ls_zsfi007 TO lt_zsfi007.CLEAR:ls_zsfi007,ls_bsed.ENDIF.ELSEIF ls_tbsl-koart = 'K'. "供应商项目CLEAR ls_accountpayable.ls_accountpayable-pmnttrms          = <fs_bseg>-zterm.  "付款条件ls_accountpayable-profit_ctr        = <fs_bseg>-prctr. " 利润中心ls_accountpayable-itemno_acc        = <fs_bseg>-buzei. "会计凭证行项目编号ls_accountpayable-vendor_no         = <fs_bseg>-lifnr.  "供应商编号ls_accountpayable-gl_account        = <fs_bseg>-hkont.ls_accountpayable-sp_gl_ind         = <fs_bseg>-umskz.  "特别总账标识ls_accountpayable-tax_code          = <fs_bseg>-mwskz.  "税码ls_accountpayable-bline_date        = <fs_bseg>-zfbdt.  "基准日期ls_accountpayable-alloc_nmbr        = <fs_bseg>-zuonr.  "分配编号ls_accountpayable-item_text         = <fs_bseg>-sgtxt.  "行项目文本ls_accountpayable-ref_key_1         = <fs_bseg>-xref1.  "参考1ls_accountpayable-ref_key_2         = <fs_bseg>-xref2.  "参考2ls_accountpayable-ref_key_3         = <fs_bseg>-xref3.  "参考3ls_accountpayable-pmnt_block         = <fs_bseg>-zlspr .  "收付款冻结码IF  NOT <fs_bseg>-bseg_zfbdt IS INITIAL.ls_accountpayable-bline_date = <fs_bseg>-bseg_zfbdt ."到期日ENDIF.IF NOT <fs_bseg>-bseg_zuonr IS INITIALAND ( <fs_bseg>-umskz = 'T' OR <fs_bseg>-umskz = 'W').ls_accountpayable-item_text = <fs_bseg>-bseg_zuonr."票据号ENDIF.APPEND ls_accountpayable TO lt_accountpayable.*       应付票据 当特殊总账为T或者W时,需要添加票据IF <fs_bseg>-umskz = 'T' OR <fs_bseg>-umskz = 'W'.MOVE-CORRESPONDING <fs_bseg> TO ls_zsfi007.READ TABLE it_bsed INTO ls_bsed WITH KEY buzei = <fs_bseg>-buzei.IF sy-subrc = 0.MOVE-CORRESPONDING ls_bsed TO ls_zsfi007.ENDIF.ls_zsfi007-banks = <fs_bseg>-banks."银行所属国家/地区代码ls_zsfi007-bankl = ls_bsed-bank."银行代码ls_zsfi007-bankn = ls_bsed-accou."银行账户号码ls_zsfi007-posnr = <fs_bseg>-buzei.APPEND ls_zsfi007 TO lt_zsfi007.CLEAR:ls_zsfi007,ls_bsed.ENDIF.ELSEIF ls_tbsl-koart = 'S' OR ls_tbsl-koart = 'A'."总账科目&资产科目"CLEAR ls_accountgl.ls_accountgl-itemno_acc        = <fs_bseg>-buzei. "会计凭证行项目编号ls_accountgl-gl_account        = <fs_bseg>-hkont. " 总账科目 (供应商/客户号/总账科目/资产科目)ls_accountgl-costcenter        = <fs_bseg>-kostl. " 成本中心ls_accountgl-profit_ctr      = COND #( WHEN <fs_bseg>-prctr IS NOT INITIAL THEN <fs_bseg>-prctr ELSE ls_accountgl-profit_ctr ). " 利润中心ls_accountgl-orderid           = <fs_bseg>-aufnr. "内部订单ls_accountgl-trade_id          = <fs_bseg>-vbund.  "VBUND 贸易伙伴的公司代码ls_accountgl-tax_code          = <fs_bseg>-mwskz.  "税码ls_accountgl-func_area         = <fs_bseg>-fkber.  "功能范围ls_accountgl-plant             = <fs_bseg>-werks.  "工厂ls_accountgl-material          = <fs_bseg>-matnr.  "物料ls_accountgl-quantity          = <fs_bseg>-menge.  "数量ls_accountgl-base_uom          = <fs_bseg>-meins. "单位ls_accountgl-alloc_nmbr        = <fs_bseg>-zuonr.  "分配编号ls_accountgl-item_text         = <fs_bseg>-sgtxt.  "行项目文本ls_accountgl-ref_key_1         = <fs_bseg>-xref1.  "参考1ls_accountgl-ref_key_2         = <fs_bseg>-xref2.  "参考2ls_accountgl-ref_key_3         = <fs_bseg>-xref3.  "参考3ls_accountgl-po_number = COND #( WHEN <fs_bseg>-ebeln IS NOT INITIAL THEN <fs_bseg>-ebeln ELSE ls_accountgl-po_number ) ."采购凭证ls_accountgl-po_item = COND #( WHEN <fs_bseg>-ebelp IS  NOT INITIAL THEN <fs_bseg>-ebelp ELSE ls_accountgl-po_item )."采购凭证行项目ls_accountgl-wbs_element = COND #( WHEN <fs_bseg>-posid IS NOT INITIAL THEN <fs_bseg>-posid ELSE ls_accountgl-wbs_element )." WBS元素ls_accountgl-asset_no = <fs_bseg>-anln1."主资产号IF ls_accountgl-asset_no IS NOT INITIAL.ls_accountgl-sub_number = '0000'."次资产号ls_accountgl-acct_type = 'A'.ENDIF.APPEND ls_accountgl TO lt_accountgl.ENDIF.* 凭证金额*货币项目IF <fs_bseg>-wrbtr IS NOT INITIAL.CLEAR ls_currencyamount.ls_currencyamount-itemno_acc   = <fs_bseg>-buzei.   "货币行项目ls_currencyamount-curr_type    = '00'.              "凭证货币ls_currencyamount-currency     = is_bkpf-waers.ls_currencyamount-amt_doccur   = <fs_bseg>-wrbtr .  "凭证金额
*日元处理change_amount_to_sapdiaplay( EXPORTING currency = ls_currencyamount-currencyCHANGING amt_doccur = ls_currencyamount-amt_doccur ).IF ls_tbsl-shkzg = 'H' .ls_currencyamount-amt_doccur = 0 -  ls_currencyamount-amt_doccur .ENDIF.ls_currencyamount-exch_rate = is_bkpf-kursf.       "汇率APPEND ls_currencyamount TO lt_currencyamount.ENDIF.
*本币金额IF <fs_bseg>-dmbtr IS NOT INITIAL.CLEAR ls_currencyamount.ls_currencyamount-itemno_acc   = <fs_bseg>-buzei.   "货币行项目ls_currencyamount-curr_type    = '10'.              "本币金额ls_currencyamount-amt_doccur   = <fs_bseg>-dmbtr .  "本币金额SELECT SINGLE bukrs,waers FROM t001 INTO @DATA(ls_t001) WHERE bukrs = @is_bkpf-bukrs .IF sy-subrc = 0.ls_currencyamount-currency   =  ls_t001-waers.ENDIF.
*      如果为贷方,金额为负数IF  ls_tbsl-shkzg = 'H' .ls_currencyamount-amt_doccur = 0 -  ls_currencyamount-amt_doccur .ENDIF.ls_currencyamount-exch_rate    = is_bkpf-kursf.       "汇率APPEND ls_currencyamount TO lt_currencyamount.ENDIF.
*行项目扩展CLEAR ls_fi003.CLEAR ls_extension2.IF <fs_bseg>-umskz EQ 'A'  AND is_bkpf-blart EQ 'ZB'.ls_fi003-bstat = 'S'.    "预付申请需将bstat设置成'S'ls_fi003-umskz = 'F'.ls_fi003-zumsk = 'A'.ENDIF.ls_fi003-mndid = COND #( WHEN ls_tbsl-koart = 'K'  THEN <fs_bseg>-mndid ELSE '' )..    "每个收款方的托管唯一参考ls_fi003-rstgr = <fs_bseg>-rstgr.    "付款原因ls_fi003-ebeln = <fs_bseg>-ebeln.    "采购订单ls_fi003-ebelp = <fs_bseg>-ebelp.    "采购订单项目ls_fi003-anbwa = <fs_bseg>-anbwa.    "资产交易类型ls_fi003-xnegp = <fs_bseg>-xnegp.    "反记账标识IF NOT ls_fi003 IS INITIAL.ls_fi003-posnr = <fs_bseg>-buzei.ls_extension2-valuepart1 = ls_fi003.ls_extension2-structure = 'ZSFI003'.APPEND ls_extension2 TO lt_extension2.ENDIF.*获利能力COPA字段IF  <fs_bseg>-prctr IS NOT INITIAL.lt_criteria = VALUE #( BASE lt_criteria ( itemno_acc = <fs_bseg>-buzei  fieldname = 'PRCTR' character = <fs_bseg>-prctr ) ).ENDIF.IF  <fs_bseg>-werks_pa IS NOT INITIAL.lt_criteria = VALUE #( BASE lt_criteria ( itemno_acc = <fs_bseg>-buzei  fieldname = 'WERKS' character = <fs_bseg>-werks_pa ) ).ENDIF.IF <fs_bseg>-artnr_pa IS NOT INITIAL.lt_criteria = VALUE #( BASE lt_criteria ( itemno_acc = <fs_bseg>-buzei  fieldname = 'ARTNR' character = <fs_bseg>-artnr_pa ) ).ENDIF.IF <fs_bseg>-kndnr_pa IS NOT INITIAL.lt_criteria = VALUE #( BASE lt_criteria  ( itemno_acc = <fs_bseg>-buzei  fieldname = 'KNDNR' character = <fs_bseg>-kndnr_pa ) ).ENDIF.lv_line_no = lv_line_no + 1.ENDLOOP.*客户项目含有税码LOOP AT lt_accountreceivable INTO ls_accountreceivable WHERE tax_code IS NOT INITIAL.READ TABLE it_bseg INTO DATA(ls_bseg) WITH KEY buzei = ls_accountreceivable-itemno_acc.IF sy-subrc = 0 .calculate_amount( EXPORTING iv_bukrs = is_bkpf-bukrsiv_tax_code = ls_accountreceivable-tax_codeiv_waers = is_bkpf-waersIMPORTING et_mwdat = lt_mwdat ).READ TABLE lt_mwdat INDEX 1 INTO ls_mwdat.CHECK sy-subrc EQ 0.ls_accounttax-itemno_acc        = lv_line_no.ls_accounttax-gl_account        = ls_mwdat-hkont.ls_accounttax-cond_key          = ls_mwdat-kschl.ls_accounttax-tax_code          = ls_accountreceivable-tax_code.APPEND ls_accounttax TO lt_accounttax.LOOP AT lt_currencyamount INTO ls_currencyamount WHERE itemno_acc EQ ls_accountreceivable-itemno_acc.APPEND INITIAL LINE TO lt_currencyamount_tax ASSIGNING FIELD-SYMBOL(<fs_amount>).<fs_amount>-itemno_acc   = lv_line_no.   "货币行项目<fs_amount>-curr_type    = ls_currencyamount-curr_type.         "本币金额<fs_amount>-currency     = ls_currencyamount-currency. "功能性货币单位<fs_amount>-amt_doccur   = 0.         "功能性货币金额<fs_amount>-amt_base     = ls_currencyamount-amt_doccur.ENDLOOP.ADD 1 TO lv_line_no.CLEAR:lt_mwdat,ls_accounttax.ENDIF.CLEAR ls_bseg.ENDLOOP.*供应商项目含有税码LOOP AT lt_accountpayable INTO ls_accountpayable WHERE tax_code IS NOT INITIAL.READ TABLE it_bseg INTO ls_bseg WITH KEY buzei = ls_accountpayable-itemno_acc.IF sy-subrc = 0 .calculate_amount( EXPORTING iv_bukrs = is_bkpf-bukrsiv_tax_code = ls_accountpayable-tax_codeiv_waers = is_bkpf-waersIMPORTING et_mwdat = lt_mwdat ).READ TABLE lt_mwdat INDEX 1 INTO ls_mwdat.CHECK sy-subrc EQ 0.ls_accounttax-itemno_acc        = lv_line_no.ls_accounttax-gl_account        = ls_mwdat-hkont.ls_accounttax-cond_key          = ls_mwdat-kschl.ls_accounttax-tax_code          = ls_accountpayable-tax_code.APPEND ls_accounttax TO lt_accounttax.LOOP AT lt_currencyamount INTO ls_currencyamount WHERE itemno_acc EQ ls_accountpayable-itemno_acc.APPEND INITIAL LINE TO lt_currencyamount_tax ASSIGNING <fs_amount>.<fs_amount>-itemno_acc   = lv_line_no.   "货币行项目<fs_amount>-curr_type    = ls_currencyamount-curr_type.         "本币金额<fs_amount>-currency     = ls_currencyamount-currency. "功能性货币单位<fs_amount>-amt_doccur   = 0.         "功能性货币金额READ TABLE it_bseg INTO ls_bseg WITH KEY  buzei = ls_accountpayable-itemno_acc.IF sy-subrc = 0.<fs_amount>-amt_doccur   = ls_bseg-wmwst.         "税额ENDIF.<fs_amount>-amt_base     = ls_currencyamount-amt_doccur.ENDLOOP.CLEAR:lt_mwdat,ls_accounttax.ENDIF.CLEAR ls_bseg.ENDLOOP.APPEND LINES OF lt_currencyamount_tax TO lt_currencyamount.*     调用凭证导入BAPIIF lines( lt_zsfi007 ) > 0.SET PARAMETER ID 'ZZSP_GL_IND' FIELD 'W'.EXPORT lt_zsfi007 = lt_zsfi007 TO  MEMORY ID 'ZCI_COBL'.ENDIF.SET UPDATE TASK LOCAL.CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'EXPORTINGdocumentheader    = ls_documentheaderIMPORTINGobj_type          = lv_obj_typeobj_key           = lv_obj_keyobj_sys           = lv_obj_sysTABLESaccountgl         = lt_accountglaccountreceivable = lt_accountreceivableaccountpayable    = lt_accountpayableaccounttax        = lt_accounttaxcurrencyamount    = lt_currencyamountextension2        = lt_extension2criteria          = lt_criteriareturn            = lt_return.CLEAR: ev_rtype,ev_rtmsg.LOOP AT lt_return INTO ls_return WHERE type CA 'AEX'.MESSAGE ID ls_return-id TYPE ls_return-type NUMBER ls_return-numberWITH ls_return-message_v1 ls_return-message_v2ls_return-message_v3 ls_return-message_v4INTO  DATA(lv_msg).ev_rtype = 'E'.ev_rtmsg = |{ ev_rtmsg }{ lv_msg };|.ENDLOOP.IF sy-subrc NE 0.ev_belnr = lv_obj_key(10).ev_gjahr = lv_obj_key+14(4).ev_rtype = 'S'.ev_rtmsg = TEXT-001 .CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'EXPORTINGwait = 'X'.ELSE.ev_rtype = 'E'.ev_rtmsg = TEXT-002 && ev_rtmsg.CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.ENDIF.LOOP AT it_bseg INTO DATA(ls_temp).ls_result = VALUE #( glo_ref4_hd = is_bkpf-glo_ref4_hd docln = ls_temp-buzei bukrs = is_bkpf-bukrs monat = is_bkpf-monatbelnr = ev_belnr gjahr = ev_gjahr msgts = ev_rtype  ).ls_result-text = COND #( WHEN ev_rtype  EQ 'E' THEN  ev_rtmsgELSE |{ is_bkpf-bukrs }/{ ev_gjahr }/{ ev_belnr ALPHA = OUT }/{ is_bkpf-monat }/{ TEXT-001 }| ).CONDENSE ls_result-text NO-GAPS.APPEND ls_result TO et_result.CLEAR ls_result.ENDLOOP.ENDMETHOD.
  • 预制凭证增强
    新增表头扩展接口(例子:PARK)标识未预制凭证,添加到扩展表中,如下

对BADI :BADI_ACC_DOCUMENT(在调用科目接口前更改外部凭证)新增增强实施,在IF_EX_ACC_DOCUMENT~CHANGE中更改ACCHD-STATUS_NEW = ‘2’

*预制凭证增强READ TABLE c_extension2 INTO wa_extension WITH KEY structure = 'PARK'.IF sy-subrc = 0.MOVE '2' TO c_acchd-status_new.DELETE c_extension2 INDEX sy-tabix.ENDIF.
  • 预付申请增强

通预制凭证类似,再调用BAPI创建之前向扩展表新增预付申请标识,次数新增了行项目扩展接口fi003,将bstat,umskz, zumsk这是如下值

*行项目扩展CLEAR ls_fi003.CLEAR ls_extension2.IF <fs_bseg>-umskz EQ 'A'  AND is_bkpf-blart EQ 'ZB'.ls_fi003-bstat = 'S'.    "预付申请需将bstat设置成'S'ls_fi003-umskz = 'F'.ls_fi003-zumsk = 'A'.ENDIF.

 同理需要再BADI_ACC_DOCUMENT(在调用科目接口前更改外部凭证)新增增强实施IF_EX_ACC_DOCUMENT~CHANGE中以上值疯爱到对应行项目中,同时更改表头c_acchd-glvor = 'RFST'.此处包含行项目其他字段的增强

 LOOP AT c_extension2 INTO wa_extension.AT NEW structure.CREATE DATA l_ref TYPE (wa_extension-structure).ASSIGN l_ref->* TO <l_struc>.ENDAT.CONCATENATE wa_extension-valuepart1 wa_extension-valuepart2wa_extension-valuepart3 wa_extension-valuepart4INTO ext_value.MOVE ext_value TO <l_struc>.ASSIGN COMPONENT 'POSNR' OF STRUCTURE <l_struc> TO <l_field>.READ TABLE c_accit WITH KEY posnr = <l_field>INTO wa_accit.IF sy-subrc IS INITIAL."预付申请增强BSTAT = 'S'IF wa_extension-structure = 'ZSFI003'.MOVE-CORRESPONDING <l_struc> TO ls_zsfi003.IF ls_zsfi003-bstat EQ 'S'.c_acchd-glvor = 'RFST'. "预付申请凭证表头glvor 需设置成 'RFST'ELSE.ls_zsfi003-umskz = wa_accit-umskz.ls_zsfi003-zumsk = wa_accit-zumsk.ENDIF.ls_zsfi003-mndid = COND #( WHEN ls_zsfi003-mndid IS  INITIAL THEN wa_accit-mndid ELSE ls_zsfi003-mndid ).ls_zsfi003-xnegp = COND #( WHEN ls_zsfi003-xnegp IS  INITIAL THEN wa_accit-xnegp ELSE ls_zsfi003-xnegp ).MOVE-CORRESPONDING ls_zsfi003 TO  <l_struc> .ENDIF."预申请增强BSTAT = 'S'MOVE-CORRESPONDING <l_struc> TO wa_accit.MODIFY c_accit FROM wa_accit INDEX sy-tabix.ENDIF.ENDLOOP.
  • 表头xref1_hd 字段增强写入
ls_fi004-xref1_hd = is_bkpf-xref1_hd."参考码 (标题) 1
zcl_pass=>zsfi004 = ls_fi004.

 同理需要在BADI_ACC_DOCUMENT(在调用科目接口前更改外部凭证)新增的增强实施IF_EX_ACC_DOCUMENT~CHANGE方法中将xref1_hd赋值给表头对应字段

    DATA: lt_xbseg TYPE STANDARD TABLE OF bseg,ls_xbseg TYPE bseg,ls_xbkpf TYPE bkpf,lt_xbkpf TYPE STANDARD TABLE OF bkpf.MOVE-CORRESPONDING c_acchd TO ls_xbkpf.ls_zsfi004 = zcl_pass=>zsfi004." 备选参考,参考码 增强LOOP AT c_accit INTO DATA(ls_accit)."add by zhaojiajia for wuhaoxian 2024/3/27 备选参考,参考码 增强IF ls_zsfi004-xref1_hd IS NOT INITIAL.ls_accit-xref1_hd = ls_zsfi004-xref1_hd.MODIFY c_accit FROM ls_accit.ENDIF."备选参考,参考码 增强MOVE-CORRESPONDING ls_accit TO ls_xbkpf.MOVE-CORRESPONDING ls_accit TO ls_xbseg.ls_xbseg-buzei = ls_accit-posnr+7(3).APPEND ls_xbseg TO lt_xbseg.ENDLOOP.MOVE-CORRESPONDING ls_zsfi004 TO ls_xbkpf."备选参考,参考码 增强APPEND ls_xbkpf TO lt_xbkpf.CALL FUNCTION 'FI_SUBSTITUTION_DOC'TABLESio_xbseg = lt_xbsegio_xbkpf = lt_xbkpf.
  •  xblnr_alt字段增强写入

   同xref1_hd增强类似,调用BAPI_ACC_DOCUMENT_POST之前将xblnr_alt字段赋值到凭证表头扩展结构中,但是比较特别的是此字段在BADI_ACC_DOCUMENT(在调用科目接口前更改外部凭证)新增的增强实施IF_EX_ACC_DOCUMENT~CHANGE方法中更改表头字段无效.

增强可加入到凭证表头的替代事件中(00001120),步骤如下:

Tocde:FIBF

点击函数模块会跳转到标准的增强模版函数,复制SAMPLE_PROCESS_00001120添加增强代码如下,在此处更改凭证表头参数,此处一定得更改T_BKPFSUB表对应字段,否则不生效

  • 汇票凭证信息写入BSED、BSEC表

票据信息也是同理在调用过账BAPI之前将值记录到行项目扩展结构中,在包含文件LFACIF5D中新增隐式增强如下

 LOOP AT XBSEG WHERE  UMSKZ = 'W' or umskz = 'T' or umskz = '1'  or umskz = '2'.MOVE-CORRESPONDING XBSEG TO XBSED.LV_ITEMNO_ACC = XBSEG-BUZEI.CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'EXPORTINGINPUT         = LV_ITEMNO_ACCIMPORTINGOUTPUT        = LV_ITEMNO_ACC.READ TABLE LT_zsfi007 WITH KEY POSNR = LV_ITEMNO_ACC.IF SY-SUBRC = 0.XBSED-WDATE = LT_zsfi007-WDATE     .XBSED-WNAME = LT_zsfi007-WNAME.XBSED-WBZOG = LT_zsfi007-WBZOG.XBSED-WBANK = LT_zsfi007-WBANK.XBSED-WELGF = cond #( when LT_zsfi007-WELGF is not INITIAL then LT_zsfi007-WELGF  else XBSED-WELGF ).XBSED-BANK = cond #( when LT_zsfi007-BANKL is not INITIAL then LT_zsfi007-BANKL  else XBSED-BANK )."出票银行代码XBSED-ACCOU = cond #( when LT_zsfi007-BANKN is not INITIAL then LT_zsfi007-BANKN  else XBSED-ACCOU )."银行账户CLEAR XBSEc.XBSEc-BANKL = cond #( when LT_zsfi007-BANKL is not INITIAL then LT_zsfi007-BANKL  else XBSEc-BANKL )."银行代码XBSEc-BANKS = cond #( when LT_zsfi007-BANKS is not INITIAL then LT_zsfi007-BANKS  else XBSEc-BANKS )."银行国家XBSEc-BANKN = cond #( when LT_zsfi007-BANKN is not INITIAL then LT_zsfi007-BANKN  else XBSEc-BANKN )."银行账户IF XBSEC IS NOT INITIAL.READ TABLE XBSEc  WITH KEY BUZEI = XBSEG-BUZEI.IF SY-SUBRC NE 0.XBSEc = VALUE #( BASE  XBSEc BUKRS = XBSED-BUKRS BELNR = XBSED-BELNR GJAHR = XBSED-GJAHR BUZEI = XBSED-BUZEI ).ENDIF.APPEND XBSEC.XBSEG-XCPDD = 'X'."此处如果不打标识'X'的话前台页面部分票据信息会不展示MODIFY XBSEG.ENDIF.APPEND XBSED.ENDIF.ENDLOOP.

函数FI_DOCUMENT_CHECK的开始和结尾去修改CHAR_W的值。函数开始判断特别总账标识为W,将CHAR_W改为'U',函数结尾将CHAR_W改回去

ENHANCEMENT 1  ZFI_DOC_POST_BOE.    "active version
*BAPI_ACC_DOCUMENT_POST 过账时,特殊总账标记W无法记账DATA:LV_SP_GL_IND TYPE BAPIACAR09-SP_GL_IND.CLEAR:LV_SP_GL_IND.GET PARAMETER ID 'ZZSP_GL_IND' FIELD LV_SP_GL_IND.IF LV_SP_GL_IND = 'W'.CHAR_W = 'U'.ENDIF.
ENDENHANCEMENT.
ENHANCEMENT 2  ZFI_DOC_POST_BOE.    "active version
*BAPI_ACC_DOCUMENT_POST 过账时,特殊总账标记W无法记账CLEAR:LV_SP_GL_IND.GET PARAMETER ID 'ZZSP_GL_IND' FIELD LV_SP_GL_IND.IF LV_SP_GL_IND = 'W'.CHAR_W = 'W'.ENDIF.
ENDENHANCEMENT.
*$*$-End:   (2)---------------------------------------------------------------------------------$*$*
ENDFUNCTION.


http://www.ppmy.cn/ops/21247.html

相关文章

JavaScript 基础语法

JavaScript 基础语法 输出语法 语法1: document.write(我是输出语法) document.write(<h1>我是标题一输出语法</h1>)作用: 向body内输出内容 注意: 如果输出的内容写的是标签, 也会被解析成网页元素 语法2: alert(弹出的内容)作用: 页面弹出警告对话框 语法…

使用 FFmpeg 实现录屏和录音

FFmpeg 是一个非常强大的开源工具&#xff0c;可以用来处理音频和视频。可以实现录屏和录音&#xff0c;也可以进行简单的剪辑。 要使用 FFmpeg 进行录屏和录音&#xff0c;需要首先确保系统已经安装了 FFmpeg。在大多数 Linux 发行版中&#xff0c;可以通过包管理器&#xff0…

Gateway服务网关

一.为什么需要服务网 关 两大特性&#xff1a;高可用和高性能 1、高性能&#xff1a;采用异步的方式调用服务。 在服务的调用方式上面&#xff0c;网关也有一定的要求&#xff0c;API 网关最好是支持 I/O 异步、同步非阻塞的&#xff0c;如果服务是同步阻塞调用&#xff0c;可…

spi接口的基本概念、引脚定义及注意事项

目录 基本概念 引脚定义 注意事项 SPI&#xff08;Serial Peripheral Interface&#xff09;是一种同步串行接口技术&#xff0c;广泛应用于微控制器和各种外围设备之间的短距离通信。 基本概念 SPI接口允许微控制器以串行方式与一个或多个外围设备进行通信。它是一种高速、…

verilog 从入门到看得懂---matlab 自动生成verilog

matlab 的强大不用多说&#xff0c;以前经常用simulink 生成c&#xff0c;最近尝试用simulink进行了verilog的生成&#xff0c;方法也很简单。 一个简单的示例如下。 1&#xff0c;新建一个模型文件&#xff0c;并且根据需要进行模型搭建 2.配置HDL生成模块 3.点击 generation…

Android 跨进程通信

Android中常用的跨进程通信方法有以下几种&#xff1a; Intent、Binder、AIDL、Messenger、ContentProvider。 Intent 可以通过Intent传递数据和消息&#xff0c;但是只能传递一些简单的数据类型&#xff0c;比如字符串、整数等。 示例&#xff1a; 从一个应用程序发送一个字…

【紫光同创盘古PGX-Lite 7K教程】——(盘古PGX-Lite 7K开发板/PGC7KD-6IMBG256第七章)数字钟实验例程

本原创教程由深圳市小眼睛科技有限公司创作&#xff0c;版权归本公司所有&#xff0c;如需转载&#xff0c;需授权并注明出处&#xff08;www.meyesemi.com) 适用于板卡型号&#xff1a; 紫光同创PGC7KD-6IMBG256开发平台&#xff08;盘古PGX-Lite 7K&#xff09; 仅需一根Ty…

成为程序员后我们都明白了什么?

成为程序员后我们都明白了什么&#xff1f; 作为一名程序员&#xff0c;我获得了很多收获和体会。首先&#xff0c;我发现编程是一项极具挑战性和创造性的工作&#xff0c;让我可以不断学习和成长。通过解决问题和构建应用程序&#xff0c;我可以看到自己的成果&#xff0c;这…