abap 实现F-47过账增强
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过账增强相关推荐
- 关于SAP S/4HANA里ABAP源代码管理功能的增强
关于SAP S/4HANA里ABAP源代码管理功能的增强 和以前老的ECC里的版本管理功能相比,S/4HANA里增添了两个按钮:Fetch Remote Version和Search: 前者可以直接将 ...
- 【ABAP】采购申请审批增强Demo
[ABAP]采购申请审批增强Demo 需求:将审批通过后的采购申请信息推送至外部系统. 分析:当前SAP中有外部系统调用自定义函数审批的情况,也有手动单个/批量审批的情况,需要找到通用的解决方案. 1 ...
- ABAP 资产类BAPI过账 BAPI_ACC_DOCUMENT_POST
博客转移,点击进入:ABAP 资产类BAPI过账 BAPI_ACC_DOCUMENT_POST 我在公众号里写了很多SAP的文章 有兴趣可以关注一下 公众号:SAP Technical
- ABAP 快速找到第二代增强的方法(基于函数出口增强function)
SAP系统带有增强出口检查函数如下: MODX_ALL_ACTIVE_MENUENTRIES (菜单增强) MODX_FUNCTION_ACTIVE_CHECK (出口函数增强) MODX_MENUE ...
- 财务凭证过账增强 BAPI_ACC_DOCUMENT_POST
这也是sap惯用的一招 CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST' EXPORTING DOCUMENTHEADER = GT_ACC_HD ...
- ABAP Development Tools的语法增强
ABAP Development Tools的前端是Java,根本识别不了ABAP.那么在ADT里的ABAP语法高亮是如何实现的? 第一次打开一个report时,显示在ADT里的代码是没有任何语法高亮 ...
- ABAP VF01 / VF04销售开票增强 增加校验
需求描述: 销售开票时检查行项目净值是否为0,如果为0则报错不允许开票,涉及Tcode VF01和VF04. 实现过程: 销售开票VF01和VF04底层都是调用的函数RV_INVOICE_CREATE ...
- 【SAP Abap】记录一次增强开发之销售交货开票VF04增强
记录一次增强开发之销售交货开票VF04增强 1.增强需求 2.增强查找 2.1.查找增强点 2.2.查看增强 3.增强实现 3.1.创建增强项目 3.2.添加增强 3.3.实现增强 3.4.激活项目 ...
- ABAP 外向交货单取消过账+删除批次拆分
SAP 与WMS 集成之后,会出现这么一种情况,就是外向交货单发货过账之后, WMS 端发起取消发货,那么接口需要将已经过账的外向交货单冲销,并将已经做了批次拆分的外向交货单,还原成未拆分的. 外向交 ...
最新文章
- C++ 用vector创建数组对象
- 机房存在哪些安全隐患?需要排查哪些地方?
- Jquery 获取 radio选中值
- [css] 假如设计稿使用了非标准的字体,你该如何去实现它?
- 【渗透测试】SQL注入笔记
- php fwrite服务器上写不进去_使用PHP来简单的创建一个RPC服务
- 使用xftp工具修改文件权限
- 找到7天内要过生日的记录
- 【JAVA】poi操作,excel读取数据。
- 基于机器学习的“能源之星”得分预测的完整演练
- 8.高等数学-两个重要的极限定理
- 【HBZ】生产环境下如何解决CPU飙高 与排查CPU飙高问题 与如何解决内存泄漏
- MySQL数据库授权与索引
- 苹果手机显示没有连接服务器怎么办啊,苹果手机更新连接到服务器出现问题怎么办...
- word制作表格详细教程
- 元模型驱动架构(M-MDA)思想及应用
- 华为魔术magic2拆机图_荣耀Magic2拆解:蝶式五轨滑屏 + 前后六摄
- MATLAB仿真Gough-Stewart并联机器人斯图尔特6自由度并联机器人逆运动学仿真 动力学控制pid控制
- kvm 1.创建虚拟机
- php 登录 登出,个人博客—用户登陆登出
热门文章
- 三国麻将攻城的java_Java 攻城狮学习线路图
- 第三届能源、材料科学与环境工程国际学术会议-ICEMSEE2022
- python 将函数标准输出存至变量问题
- 对一元二次方程ax2+bx+c=0,输入该方程的三个实系数a,b,c(输入的数值应保证方程有实根),计算并输出该方程的两个实根。
- TCP中的流量控制和拥塞控制机制
- 从指定位置删除指定长度的字符串(串)
- Mac电脑上最好的3个mobi阅读器
- 如何清理过大的日志文件?
- 基于Aprion算法的电影推荐
- Linux作业 北京各监测站的PM2.5浓度