金色传说:SAP-ABAP-销售订单增强:记录销售订单修改信息和修改原因
业务场景
为了记录从客户或经销商询单到正式下达销售订单的过程并分析,需要记录销售订单创建和修改时的关键信息,其中包括:客户、物料、订单数量、交货日期、更改原因。
解决方案
创建销售订单时自动记录关键信息到自建表。
更改销售订单时弹出更改原因类别及更改明细说明到自建表。
增强点
使用到的增强点有两个:
1.MV45AFZZ程序USEREXIT_SAVE_DOCUMENT_PREPARE:销售订单保存增强点。
2.MV45AFZA程序USEREXIT_REFRESH_DOCUMENT:这个增强点是销售订单刷新前的增强点。(小声bb:这是我能找到的,能用的,点完保存按钮之后最后执行的增强点)。金色传说这个增强点在创建销售订单时,能取到新产生的销售订单编号!
程序实现
1.自建表
这里就贴个图,大家根据自己的需要选择即可。
2.找到增强点位置,创建隐式增强(小声bb:创建隐式增强的方法百度一堆,这里就不占字数了)。
3.销售订单保存增强点代码;
*--------------------------------------------------------------------S↓*"S4 LJ 销售订单创建记录关键信息和修改时的关键信息,其中包括:客户、物料、订单数量、交货日期
* 销售订单修改订单数量和计划行日期时记录修改的关键信息,其中包括:客户、物料、订单数量、交货日期、更改原因 27.07.2021 10:13:05
* ZTSD_010 记录表 ZTSD_010A 原因类别表DATA:gt_data LIKE TABLE OF ztsd_010,gs_data LIKE LINE OF gt_data.IF sy-tcode EQ 'VA01'."创建时直接保存下关键数据即可CLEAR:gs_data.LOOP AT xvbap INTO DATA(ds_vbap).gs_data-vbeln = xvbak-vbeln.gs_data-kunnr = xvbak-kunnr.gs_data-uname = sy-uname.gs_data-datum = sy-datum.gs_data-uzeit = sy-uzeit.gs_data-posnr = ds_vbap-posnr.gs_data-matnr = ds_vbap-matnr.gs_data-wmeng = ds_vbap-kwmeng.gs_data-vrkme = ds_vbap-vrkme.LOOP AT xvbep INTO DATA(ds_xvbep) WHERE posnr = ds_vbap-posnr AND edatu IS NOT INITIAL.gs_data-etenr = ds_xvbep-etenr.gs_data-etdat = ds_xvbep-edatu.ENDLOOP.gs_data-zxglb = '9999'.gs_data-zxgxq = '新建'.APPEND gs_data TO gt_data.
* MODIFY ztsd_010 FROM gs_data.CLEAR:gs_data.ENDLOOP.EXPORT gt_data TO MEMORY ID 'ZSOCHANGELOG'.ELSE."VA02等修改订单时,要进行修改前后数据的对比DATA: lt_value TYPE TABLE OF sval,ls_value TYPE sval,lv_rtn_cd.DATA:zmsg TYPE string,zkwmeng TYPE vbap-kwmeng,zedatu TYPE vbep-edatu,zedatux TYPE vbep-edatu.CLEAR:lt_value,ls_value,lv_rtn_cd.
**** 组装弹出输入框窗口的原因类别和原因详情字段ls_value-tabname = 'ZTSD_010A'.ls_value-fieldname = 'ZXGLB'.ls_value-field_obl = 'X'."设置弹出框字段必输ls_value-value = ''."这里可以给字段默认值APPEND ls_value TO lt_value.CLEAR:ls_value.ls_value-tabname = 'ZTSD_010'.ls_value-fieldname = 'ZXGXQ'.ls_value-value = ''.APPEND ls_value TO lt_value.LOOP AT xvbap INTO DATA(ds_xvbap)."循环所有行,有变动的才记录SELECT SINGLE kwmeng INTO zkwmeng FROM vbap WHERE vbeln = ds_xvbap-vbeln AND posnr = ds_xvbap-posnr.SELECT SINGLE edatu INTO zedatu FROM vbep WHERE vbeln = ds_xvbap-vbeln AND posnr = ds_xvbap-posnr."改之前的READ TABLE xvbep INTO DATA(ds_edatu) WITH KEY vbeln = ds_xvbap-vbeln posnr = ds_xvbap-posnr."改之后的**** 销售单位订单数量和交货日期日期 时弹出IF zkwmeng NE ds_xvbap-kwmeng OR zedatu NE ds_edatu-edatu.zmsg = '输入 '&& xvbap-posnr && ' 行的修改原因类别和详情'.CALL FUNCTION 'POPUP_GET_VALUES'EXPORTINGpopup_title = zmsgIMPORTINGreturncode = lv_rtn_cdTABLESfields = lt_value.IF lv_rtn_cd IS INITIAL.gs_data-vbeln = xvbak-vbeln.gs_data-kunnr = xvbak-kunnr.gs_data-uname = sy-uname.gs_data-datum = sy-datum.gs_data-uzeit = sy-uzeit.gs_data-posnr = ds_xvbap-posnr.gs_data-matnr = ds_xvbap-matnr.gs_data-wmeng = ds_xvbap-kwmeng.gs_data-vrkme = ds_xvbap-vrkme.LOOP AT xvbep INTO DATA(ds_xvbep1) WHERE posnr = ds_xvbap-posnr AND edatu IS NOT INITIAL.gs_data-etenr = ds_xvbep1-etenr.gs_data-etdat = ds_xvbep1-edatu.CLEAR:ds_xvbep1.ENDLOOP.READ TABLE lt_value INTO ls_value WITH KEY fieldname = 'ZXGLB'.IF sy-subrc = 0.SELECT SINGLE zxglb INTO gs_data-zxglb FROM ztsd_010a WHERE zxglb = ls_value-value.IF gs_data-zxglb IS INITIAL.MESSAGE e005(zsd001).ENDIF.CLEAR ls_value.ENDIF.READ TABLE lt_value INTO ls_value WITH KEY fieldname = 'ZXGXQ'.IF sy-subrc = 0.gs_data-zxgxq = ls_value-value.CLEAR ls_value.ENDIF.APPEND gs_data TO gt_data.CLEAR:gs_data.ELSEIF lv_rtn_cd EQ 'A'."取消MESSAGE e004(zsd001).ENDIF.ENDIF.CLEAR:zkwmeng, zedatu.ENDLOOP.EXPORT gt_data TO MEMORY ID 'ZSOCHANGELOG'.ENDIF.
*--------------------------------------------------------------------E↑*
金色传说这一步非常重要,因为保存增强点中没有销售订单号,所有把数据放到内存中,在另外的增强点进行接收和更新自建表
4.销售订单刷新增强点代码:
FORM USEREXIT_REFRESH_DOCUMENT.
ENHANCEMENT 7 ZEN_SD_01. "active version
* 创建和修改时保存关键信息。 LJ 20210727IF sy-tcode EQ 'VA01' OR sy-tcode EQ 'VA02'.DATA:gt_data LIKE TABLE OF ztsd_010.IMPORT gt_data FROM MEMORY ID 'ZSOCHANGELOG'.LOOP AT gt_data INTO DATA(ds_data).ds_data-vbeln = xvbak-vbeln."写入订单号MODIFY ztsd_010 FROM ds_data.CLEAR:ds_data.ENDLOOP.FREE MEMORY ID 'ZSOCHANGELOG'.CLEAR:gt_data.ENDIF.
ENDENHANCEMENT.
ENDFORM.
金色传说用完的内存要记得及时释放
成果展示
所有修改了数量或者交货日期的行都会提示输入修改详情
如果点关闭或取消,则会提示要输入修改原因,会再次弹出上面的输入框。
以上
不妥之处欢迎留言指正。手动笑脸
欢迎关注公众号,每日更新:
金色传说:SAP-ABAP-销售订单增强:记录销售订单修改信息和修改原因相关推荐
- SAP ABAP 业务对象 BUS6021 AcctngSalesOrder 会计销售订单 BAPI 清单和相关 TCODE
SAP ABAP 业务对象 BUS6021 AcctngSalesOrder 会计销售订单 BAPI 清单和相关 TCODE 简介: SAP ABAP 业务对象 BUS6021 AcctngSales ...
- SAP ABAP 业务对象 BUS6022 AcctngSalesQuotation 会计销售配额 BAPI 清单和相关 TCODE
SAP ABAP 业务对象 BUS6022 AcctngSalesQuotation 会计销售配额 BAPI 清单和相关 TCODE 简介: SAP ABAP 业务对象 BUS6022 AcctngS ...
- SAP ABAP 工单增强
前言部分 大家可以关注我的公众号,公众号里的排版更好,阅读更舒适. 正文部分 工单增强: 工单--工序--外部 BADI:MRO_CONTRACT 实现功能:外部中填入的物料组和维护的物料组是否 ...
- [SAP ABAP开发技术总结]SD销售订单定价过程
16.3.2. 定价过程 16.3.2.1. 条件技术七要素 16.3.2.2. 条件表V/03.V/04.V/05 16.3.2.3. ...
- SAP ABAP QA11屏幕增强 BADI QEVA_SUBSCREEN_1101
QA11屏幕增强: 效果图: BADI: QEVA_SUBSCREEN_1101 SE11添加客制化字段:QALS或者决策表. 创建自定义函数组,添加屏幕信息: 全局定义: FUNCTION-POOL ...
- SAP ABAP QA01屏幕增强 SMOD QPL10004
效果图如下: QALS添加客制化字段. CMOD创建增强实施. 根据不同的检验类型,显示不同的屏幕信息. 全局变量定义: TABLES: qals_cust. CONSTANTS: BEGIN OF ...
- 《SAP后勤模块实施攻略—SAP在生产、采购、销售、物流中的应用》——2.3 按订单生产(MTO)...
2.3 按订单生产(MTO) 按订单生产(MTO)是指接到客户订单后再进行生产,生产订单与销售订单是直接关联的,广义的MTO包括三种类型:狭义的MTO.ATO和ETO. 本节将通过三小节对MTO.AT ...
- SAP ABAP 我的文章合集:ABAP and Excel
SAP ABAP 我的文章合集:ABAP and Excel 合集简介:本合集收录了我关于 ABAP and Excel 的相关文章,新的文章会被及时更新到本合集中. 文章目录 SAP ABAP 我的 ...
- SAP ABAP常用增强记录文档(不定期完善更新)
在sap的开发中,如果遇到了标准系统实现不了的需要定制的功能.那么就需要用增强enhancement来实现. 这是一些常用的增强例子.有BADI,有修改.以供修改用. BADI-ADDRESS_UPD ...
最新文章
- MySQL多表查询核心优化
- python中判断变量的类型
- 【Python2】Keras_ResNet 在Cifar10数据集上分类,Flask框架部署目标检测模型
- Sublime Text 3 import Anaconda 无法正常补全模块名解决办法
- C++设计模式-Singleton
- 让你变成优秀程序员的几个小习惯
- 解决网卡无法自动获取ip的办法
- 策略模式Strategy——坐什么车回家?
- 怎么在Linux上抓包分析
- 计算机学硕编码,怎么区分学硕和专硕代码
- 100G QSFP28 AOC有源光缆的分类及应用
- php写抢红包,红包生成函数(微信抢红包)
- 研究生计算机方面有哪些专业,计算机类研究生有哪些专业?
- 福建师范大学2022年2月课程考试《计算机应用基础》作业考核试题
- 50天用JavaScript完成50个web项目,我学到了什么?
- 基于微信小程序的智慧社区系统
- houseoforange_hitcon_2016(House of orange, unsorted bin attack,FSOP)
- STM32配置读取BMP280气压传感器数据
- 解决spring boot 报错问题:Disconnected from the target VM, address: ‘127.0.0.1:51596
- java华为_华为 Java