业务场景

为了记录从客户或经销商询单到正式下达销售订单的过程并分析,需要记录销售订单创建和修改时的关键信息,其中包括:客户、物料、订单数量、交货日期、更改原因。

解决方案

创建销售订单时自动记录关键信息到自建表。
更改销售订单时弹出更改原因类别及更改明细说明到自建表。

增强点

使用到的增强点有两个:
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-销售订单增强:记录销售订单修改信息和修改原因相关推荐

  1. SAP ABAP 业务对象 BUS6021 AcctngSalesOrder 会计销售订单 BAPI 清单和相关 TCODE

    SAP ABAP 业务对象 BUS6021 AcctngSalesOrder 会计销售订单 BAPI 清单和相关 TCODE 简介: SAP ABAP 业务对象 BUS6021 AcctngSales ...

  2. SAP ABAP 业务对象 BUS6022 AcctngSalesQuotation 会计销售配额 BAPI 清单和相关 TCODE

    SAP ABAP 业务对象 BUS6022 AcctngSalesQuotation 会计销售配额 BAPI 清单和相关 TCODE 简介: SAP ABAP 业务对象 BUS6022 AcctngS ...

  3. SAP ABAP 工单增强

    前言部分 大家可以关注我的公众号,公众号里的排版更好,阅读更舒适. 正文部分 工单增强: 工单--工序--外部 BADI:MRO_CONTRACT    实现功能:外部中填入的物料组和维护的物料组是否 ...

  4. [SAP ABAP开发技术总结]SD销售订单定价过程

    16.3.2.     定价过程 16.3.2.1.           条件技术七要素 16.3.2.2.           条件表V/03.V/04.V/05 16.3.2.3.         ...

  5. SAP ABAP QA11屏幕增强 BADI QEVA_SUBSCREEN_1101

    QA11屏幕增强: 效果图: BADI: QEVA_SUBSCREEN_1101 SE11添加客制化字段:QALS或者决策表. 创建自定义函数组,添加屏幕信息: 全局定义: FUNCTION-POOL ...

  6. SAP ABAP QA01屏幕增强 SMOD QPL10004

    效果图如下: QALS添加客制化字段. CMOD创建增强实施. 根据不同的检验类型,显示不同的屏幕信息. 全局变量定义: TABLES: qals_cust. CONSTANTS: BEGIN OF  ...

  7. 《SAP后勤模块实施攻略—SAP在生产、采购、销售、物流中的应用》——2.3 按订单生产(MTO)...

    2.3 按订单生产(MTO) 按订单生产(MTO)是指接到客户订单后再进行生产,生产订单与销售订单是直接关联的,广义的MTO包括三种类型:狭义的MTO.ATO和ETO. 本节将通过三小节对MTO.AT ...

  8. SAP ABAP 我的文章合集:ABAP and Excel

    SAP ABAP 我的文章合集:ABAP and Excel 合集简介:本合集收录了我关于 ABAP and Excel 的相关文章,新的文章会被及时更新到本合集中. 文章目录 SAP ABAP 我的 ...

  9. SAP ABAP常用增强记录文档(不定期完善更新)

    在sap的开发中,如果遇到了标准系统实现不了的需要定制的功能.那么就需要用增强enhancement来实现. 这是一些常用的增强例子.有BADI,有修改.以供修改用. BADI-ADDRESS_UPD ...

最新文章

  1. MySQL多表查询核心优化
  2. python中判断变量的类型
  3. 【Python2】Keras_ResNet 在Cifar10数据集上分类,Flask框架部署目标检测模型
  4. Sublime Text 3 import Anaconda 无法正常补全模块名解决办法
  5. C++设计模式-Singleton
  6. 让你变成优秀程序员的几个小习惯
  7. 解决网卡无法自动获取ip的办法
  8. 策略模式Strategy——坐什么车回家?
  9. 怎么在Linux上抓包分析
  10. 计算机学硕编码,怎么区分学硕和专硕代码
  11. 100G QSFP28 AOC有源光缆的分类及应用
  12. php写抢红包,红包生成函数(微信抢红包)
  13. 研究生计算机方面有哪些专业,计算机类研究生有哪些专业?
  14. 福建师范大学2022年2月课程考试《计算机应用基础》作业考核试题
  15. 50天用JavaScript完成50个web项目,我学到了什么?
  16. 基于微信小程序的智慧社区系统
  17. houseoforange_hitcon_2016(House of orange, unsorted bin attack,FSOP)
  18. STM32配置读取BMP280气压传感器数据
  19. 解决spring boot 报错问题:Disconnected from the target VM, address: ‘127.0.0.1:51596
  20. java华为_华为 Java

热门文章

  1. 杜绝焦虑,如何提高执行力改变生活?
  2. tp5欢迎页 (获取系统信息)
  3. Mac OS X 遭遇 FileVault 加密异常无法升级系统的解决方案
  4. 微信小程序时间格式在IOS苹果手机上不识别
  5. 机器学习之二十一(读书笔记)
  6. Leco题目:两数之和
  7. jmeter菜鸟教程(jmeter安装教程)
  8. 干货来袭!!!3天0基础Python实战项目快速学会人工智能必学数学基础全套(含源码)(第1天)线性代数篇:矩阵、向量及python实战
  9. 操作系统镜像资源下载
  10. Learn OpenGL 笔记5.11 Anti Aliasing(抗锯齿)