abap 实现F-47过账增强

  • 需求说明
    前台操作事务代码F-47,产生的是单边凭证,此凭证在epic中可以运行出发票建议,现在要使用ABAP程序实现同样的单边凭证的效果,如图所:

  • 英文参考说明及网址

    参考网址:https://blogs.sap.com/2013/03/27/f-47-downpayment-request-using-bapiaccdocumentpost/

  • 增强BADi
    badi_acc_document

  • 实现步骤
    1.创建增强BADi,如下图所示,BADi名称自己按规范命名

    2.编写增强代码,代码位置:IF_EX_ACC_DOCUMENT~CHANGE(示例代码环境:S/4)

完整参考代码

METHOD if_ex_acc_document~change.DATA: wa_extension   TYPE bapiparex,ext_value(960) TYPE c,wa_accit       TYPE accit,l_ref          TYPE REF TO data.FIELD-SYMBOLS: <l_struc> TYPE any,<l_field> TYPE any.FIELD-SYMBOLS : <fs_accit>  TYPE accit.SORT c_extension2 BY structure.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>."判断是否是epic过账传输的增强结构IF wa_extension-structure = 'ZTMS_EPIC_EXTENSION'.ASSIGN COMPONENT 'POSNR' OF STRUCTURE <l_struc> TO <l_field>."得到凭证行READ TABLE c_accit ASSIGNING <fs_accit> WITH KEY posnr = <l_field>.IF sy-subrc = 0."凭证状态<fs_accit>-bstat = 'S'."特别总帐科目的分配号=流动项目ASSIGN COMPONENT 'ZFITM' OF STRUCTURE <l_struc> TO <l_field>.<fs_accit>-hzuon = <l_field>."目标特别总帐标志ASSIGN COMPONENT 'ZUMSK' OF STRUCTURE <l_struc> TO <l_field>.<fs_accit>-zumsk = <l_field>.
*        <fs_accit>-zumsk = 'A'.
*        wa_accit-xmwst = 'X'."过账事务代码ASSIGN COMPONENT 'TCODE' OF STRUCTURE <l_struc> TO <l_field>.<fs_accit>-xref2 = <l_field>.ENDIF."业务事务c_acchd-glvor = 'RFST'."过账事务代码ASSIGN COMPONENT 'TCODE' OF STRUCTURE <l_struc> TO <l_field>.c_acchd-tcode = <l_field>.
*------------------------------------------------------*ENDIF.ENDLOOP.
ENDMETHOD.

生成凭证的function

FUNCTION ztm_epic_006.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     VALUE(IV_ONLY_CHECK) TYPE  CHAR1 DEFAULT 'X'
*"     VALUE(IS_POST_STRUCT) TYPE  ZTMS_EPIC_006
*"  EXPORTING
*"     VALUE(EV_BELNR) TYPE  BELNR_D
*"     VALUE(EV_BUDAT) TYPE  BUDAT
*"  TABLES
*"      ET_MESSAGE STRUCTURE  ZTMS_EPIC_003 OPTIONAL
*"----------------------------------------------------------------------DATA:ls_message          TYPE ztms_epic_003.DATA:ls_documentheader   TYPE bapiache09.DATA:lt_accountgl        TYPE TABLE OF bapiacgl09 WITH HEADER LINE,lt_accountpayable   TYPE TABLE OF bapiacap09 WITH HEADER LINE,lt_currencyamount   TYPE TABLE OF bapiaccr09 WITH HEADER LINE,lt_return           TYPE TABLE OF bapiret2   WITH HEADER LINE.DATA:lt_extension        TYPE TABLE OF bapiparex  WITH HEADER LINE.DATA:ls_zexten           TYPE ztms_epic_extension.        "增强结构DATA:lv_zumsk            TYPE dzumsk.DATA:lv_zuonr            TYPE bseg-zuonr.                 "分配"清空字段CLEAR : ls_documentheader,lt_accountgl,lt_currencyamount,lt_return.CLEAR : lt_accountgl[],lt_currencyamount[],lt_return[],et_message[]."过账结构中没有数据,返回IF is_post_struct IS INITIAL.RETURN.ENDIF."凭证抬头字段ls_documentheader-header_txt  = is_post_struct-bktxt.  "抬头文本ls_documentheader-comp_code   = is_post_struct-bukrs.  "公司代码ls_documentheader-doc_date    = is_post_struct-zreqd. "凭证日期ls_documentheader-pstng_date  = is_post_struct-budat.  "过账日期ls_documentheader-username    = sy-uname.       "用户ls_documentheader-doc_type    = 'SA'.           "凭证类型ls_documentheader-obj_type    = 'BKPFF'.       "参考过程"供应商行lt_accountpayable-itemno_acc   = '0000000010'.  "行项目编号lt_accountpayable-vendor_no    = is_post_struct-lifnr. "供应商编码lt_accountpayable-tax_code     = 'J0'.          "税码CONDENSE is_post_struct-zaprn.lv_zuonr = is_post_struct-zaprn.IF lv_zuonr IS INITIAL.lv_zuonr = TEXT-010.ENDIF.lt_accountpayable-alloc_nmbr   = lv_zuonr.          "分配lt_accountpayable-item_text    = is_post_struct-zunit.          "部门
*  lt_accountpayable-comp_code    = is_post_struct-bukrs.lt_accountpayable-sp_gl_ind    = 'F'.           "特殊总分类帐标志
*  lv_zumsk = is_post_struct-zumsk."目标特别总帐标志IF is_post_struct-zptyp = 'A'.        "预付lv_zumsk = 'A'.                "目标特别总帐标志ELSEIF is_post_struct-zptyp = 'O'.   "应付lv_zumsk = 'Z'.                "目标特别总帐标志ENDIF.*  lt_accountpayable-pymt_meth    = '1'.                  "付款方式lt_accountpayable-bline_date   = is_post_struct-zfbdt. "到期日,资金申请lt_accountpayable-partner_bk   = is_post_struct-bvtyp. "对方开户行类型
*  lt_accountpayable-ref_key_1    = is_post_struct-zhtbh. "合同编号APPEND lt_accountpayable.CLEAR lt_accountpayable."金额行lt_currencyamount-itemno_acc = '0000000010'.  "行项目编号lt_currencyamount-amt_doccur = 0 - is_post_struct-zpram. "金额lt_currencyamount-currency   = is_post_struct-waer1.     "货币码
*  lt_currencyamount-amt_doccur = 0 - is_post_struct-dmbtr. "金额
*  lt_currencyamount-currency   = is_post_struct-waer2. "货币码APPEND lt_currencyamount .CLEAR lt_currencyamount."EXTENSION2扩展字段增强部分ls_zexten-posnr = '0000000010'.        "凭证行项目ls_zexten-zfitm = is_post_struct-zfitm."流动性项目ls_zexten-zumsk = lv_zumsk.            "目标特别总帐标志ls_zexten-tcode = is_post_struct-tcode."事务代码lt_extension-structure  = 'ZTMS_EPIC_EXTENSION'.lt_extension-valuepart1 = ls_zexten.APPEND lt_extension.CLEAR : lt_return."调用凭证检查CALL FUNCTION 'BAPI_ACC_DOCUMENT_CHECK'EXPORTINGdocumentheader          = ls_documentheaderTABLES
*      accountgl               = lt_accountglaccountpayable          = lt_accountpayablecurrencyamount          = lt_currencyamountextension2              = lt_extensionreturn                  = lt_return.CLEAR : et_message,et_message[]."返回检查结果LOOP AT lt_return WHERE type = 'E' OR type = 'A'.ls_message-msgty = lt_return-type.ls_message-index = is_post_struct-index.CONCATENATE TEXT-003 lt_return-parameterINTO ls_message-msgv1 SEPARATED BY ':' .CONCATENATE lt_return-message_v1 lt_return-message_v2lt_return-message_v1 lt_return-message_v2INTO ls_message-msgv2.ls_message-msgv3 = lt_return-message.APPEND ls_message TO et_message.CLEAR : lt_return,ls_message.ENDLOOP.IF iv_only_check = 'X'."只检查过账RETURN.ELSE."需要过账,并且检查没有错误,则过账IF et_message[] IS INITIAL.CLEAR : lt_return[],lt_return."调用凭证过账CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'EXPORTINGdocumentheader          = ls_documentheaderTABLES
*          accountgl               = lt_accountglaccountpayable          = lt_accountpayablecurrencyamount          = lt_currencyamountextension2              = lt_extensionreturn                  = lt_return.CLEAR : et_message[],et_message."返回检查结果LOOP AT lt_return WHERE type = 'E' OR type = 'A'.ls_message-msgty = lt_return-type.ls_message-index = is_post_struct-index.CONCATENATE TEXT-003 lt_return-parameterINTO ls_message-msgv1 SEPARATED BY ':' .CONCATENATE lt_return-message_v1 lt_return-message_v2lt_return-message_v1 lt_return-message_v2INTO ls_message-msgv2.ls_message-msgv3 = lt_return-message.APPEND ls_message TO et_message.CLEAR : lt_return,ls_message.ENDLOOP.IF et_message[] IS INITIAL."提交CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'EXPORTINGwait          = 'X'  .READ TABLE lt_return INDEX 1.ev_belnr = lt_return-message_v2+0(10).  "凭证号ev_budat = is_post_struct-zreqd.        "过账日期ELSE."回滚CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK' .ENDIF.ENDIF.ENDIF.
ENDFUNCTION.

abap 实现F-47过账增强相关推荐

  1. 关于SAP S/4HANA里ABAP源代码管理功能的增强

    关于SAP S/4HANA里ABAP源代码管理功能的增强 和以前老的ECC里的版本管理功能相比,S/4HANA里增添了两个按钮:Fetch Remote Version和Search: 前者可以直接将 ...

  2. 【ABAP】采购申请审批增强Demo

    [ABAP]采购申请审批增强Demo 需求:将审批通过后的采购申请信息推送至外部系统. 分析:当前SAP中有外部系统调用自定义函数审批的情况,也有手动单个/批量审批的情况,需要找到通用的解决方案. 1 ...

  3. ABAP 资产类BAPI过账 BAPI_ACC_DOCUMENT_POST

    博客转移,点击进入:ABAP 资产类BAPI过账 BAPI_ACC_DOCUMENT_POST 我在公众号里写了很多SAP的文章 有兴趣可以关注一下 公众号:SAP Technical

  4. ABAP 快速找到第二代增强的方法(基于函数出口增强function)

    SAP系统带有增强出口检查函数如下: MODX_ALL_ACTIVE_MENUENTRIES (菜单增强) MODX_FUNCTION_ACTIVE_CHECK (出口函数增强) MODX_MENUE ...

  5. 财务凭证过账增强 BAPI_ACC_DOCUMENT_POST

    这也是sap惯用的一招   CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'     EXPORTING       DOCUMENTHEADER = GT_ACC_HD ...

  6. ABAP Development Tools的语法增强

    ABAP Development Tools的前端是Java,根本识别不了ABAP.那么在ADT里的ABAP语法高亮是如何实现的? 第一次打开一个report时,显示在ADT里的代码是没有任何语法高亮 ...

  7. ABAP VF01 / VF04销售开票增强 增加校验

    需求描述: 销售开票时检查行项目净值是否为0,如果为0则报错不允许开票,涉及Tcode VF01和VF04. 实现过程: 销售开票VF01和VF04底层都是调用的函数RV_INVOICE_CREATE ...

  8. 【SAP Abap】记录一次增强开发之销售交货开票VF04增强

    记录一次增强开发之销售交货开票VF04增强 1.增强需求 2.增强查找 2.1.查找增强点 2.2.查看增强 3.增强实现 3.1.创建增强项目 3.2.添加增强 3.3.实现增强 3.4.激活项目 ...

  9. ABAP 外向交货单取消过账+删除批次拆分

    SAP 与WMS 集成之后,会出现这么一种情况,就是外向交货单发货过账之后, WMS 端发起取消发货,那么接口需要将已经过账的外向交货单冲销,并将已经做了批次拆分的外向交货单,还原成未拆分的. 外向交 ...

最新文章

  1. C++ 用vector创建数组对象
  2. 机房存在哪些安全隐患?需要排查哪些地方?
  3. Jquery 获取 radio选中值
  4. [css] 假如设计稿使用了非标准的字体,你该如何去实现它?
  5. 【渗透测试】SQL注入笔记
  6. php fwrite服务器上写不进去_使用PHP来简单的创建一个RPC服务
  7. 使用xftp工具修改文件权限
  8. 找到7天内要过生日的记录
  9. 【JAVA】poi操作,excel读取数据。
  10. 基于机器学习的“能源之星”得分预测的完整演练
  11. 8.高等数学-两个重要的极限定理
  12. 【HBZ】生产环境下如何解决CPU飙高 与排查CPU飙高问题 与如何解决内存泄漏
  13. MySQL数据库授权与索引
  14. 苹果手机显示没有连接服务器怎么办啊,苹果手机更新连接到服务器出现问题怎么办...
  15. word制作表格详细教程
  16. 元模型驱动架构(M-MDA)思想及应用
  17. 华为魔术magic2拆机图_荣耀Magic2拆解:蝶式五轨滑屏 + 前后六摄
  18. MATLAB仿真Gough-Stewart并联机器人斯图尔特6自由度并联机器人逆运动学仿真 动力学控制pid控制
  19. kvm 1.创建虚拟机
  20. php 登录 登出,个人博客—用户登陆登出

热门文章

  1. 三国麻将攻城的java_Java 攻城狮学习线路图
  2. 第三届能源、材料科学与环境工程国际学术会议-ICEMSEE2022
  3. python 将函数标准输出存至变量问题
  4. 对一元二次方程ax2+bx+c=0,输入该方程的三个实系数a,b,c(输入的数值应保证方程有实根),计算并输出该方程的两个实根。
  5. TCP中的流量控制和拥塞控制机制
  6. 从指定位置删除指定长度的字符串(串)
  7. Mac电脑上最好的3个mobi阅读器
  8. 如何清理过大的日志文件?
  9. 基于Aprion算法的电影推荐
  10. Linux作业 北京各监测站的PM2.5浓度