不知道业务怎么配置的,创建销售单时,一堆计划行类别,什么CN,DN。。。都有,但是审核后需要计划行变更为CP,这样在MD04才能看到需求。

原有逻辑是弄个后台程序,审核后调一下,更新一下计划行,这样是会有需求的。。。

但是,业务有个习惯喜欢VA02直接审,或者是交货后还来修改等等。。。这时候就需要在VA02里做增强。,

原本的开发还是调程序。。。这就产生了很多问题。后来我自己写增强审核的时候自动修改计划行类别,巴特,不产生需求。。。这特么鬼,后来各种找,各种DEBUG,找到根源了。。。

Now,来个增强,实现:MV45AFZZ  USEREXIT_SAVE_DOCUMENT_PREPARE

  1. IF ( i_stonO = '' AND i_stonN = '' ).
  2. LOOP AT XVBEP INTO GX_VBEP.
  3. LY_I = SY-TABIX.
  4. CASE VBAK-AUART.
  5. WHEN 'ZOR' .
  6. IF GX_VBEP-ETTYP <> 'CP' AND GX_VBEP-ETTYP <> 'ZD'.
  7. GX_VBEP-ETTYP = 'CP'.
  8. IF SY-TCODE = 'VA01'.
  9. ELSEIF SY-TCODE = 'VA02'.
  10. GX_VBEP-UPDKZ = 'U'.
  11. GX_VBEP-BEDSD = 'X'.
  12. GX_VBEP-BDAALT = ''.
  13. GX_VBEP-BDART = ''.
  14. GX_VBEP-PLART = ''.
  15. IF XVBBE[] IS INITIAL.
  16. GW_VBBE-MANDT = SY-MANDT.
  17. GW_VBBE-VBELN = GX_VBEP-VBELN.
  18. GW_VBBE-POSNR = GX_VBEP-POSNR.
  19. GW_VBBE-ETENR = GX_VBEP-ETENR.
  20. GW_VBBE-MBDAT = GX_VBEP-EDATU.
  21. GW_VBBE-VBTYP = 'C'.
  22. GW_VBBE-BDART = ''.
  23. GW_VBBE-PLART = ''.
  24. GW_VBBE-UPDKZ = 'I'.
  25. GW_VBBE-OMENG = GX_VBEP-LMENG.
  26. GW_VBBE-VMENG = GX_VBEP-BMENG.
  27. GW_VBBE-MEINS = GX_VBEP-VRKME.
  28. GW_VBBE-PZMNG = GX_VBEP-LMENG.
  29. GW_VBBE-AUART = XVBAK-AUART.
  30. GW_VBBE-KUNNR = XVBAK-KUNNR.
  31. READ TABLE XVBAP INTO GX_VBAP WITH KEY POSNR = GX_VBEP-POSNR.
  32. IF SY-SUBRC = .
  33. LY_J = SY-TABIX.
  34. GX_VBAP-SUMBD = 'A'.
  35. GX_VBAP-UPDKZ = 'U'.
  36. GX_VBAP-BEDUP = 'X'.
  37.  
  38. MODIFY XVBAP FROM GX_VBAP INDEX LY_J TRANSPORTING SUMBD UPDKZ BEDUP.
  39. GW_VBBE-MATNR = GX_VBAP-MATNR.
  40. GW_VBBE-WERKS = GX_VBAP-WERKS.
  41. GW_VBBE-LGORT = GX_VBAP-LGORT.
  42. GW_VBBE-CHARG = GX_VBAP-CHARG.
  43. GW_VBBE-AWAHR = GX_VBAP-AWAHR.
  44. GW_VBBE-VPZUO = GX_VBAP-VPZUO.
  45. ENDIF.
  46. INSERT GW_VBBE INTO XVBBE INDEX GX_VBEP-ETENR.
  47. ENDIF.
  48. ENDIF.
  49. ENDIF.
  50. WHEN 'ZKB' .
  51. IF GX_VBEP-ETTYP <> 'E1'.
  52. GX_VBEP-ETTYP = 'E1'.
  53. IF SY-TCODE = 'VA01'.
  54. ELSEIF SY-TCODE = 'VA02'.
  55. GX_VBEP-UPDKZ = 'U'.
  56. GX_VBEP-BEDSD = 'X'.
  57. GX_VBEP-BDAALT = ''.
  58. GX_VBEP-BDART = ''.
  59. GX_VBEP-PLART = ''.
  60. IF XVBBE[] IS INITIAL.
  61. GW_VBBE-MANDT = SY-MANDT.
  62. GW_VBBE-VBELN = GX_VBEP-VBELN.
  63. GW_VBBE-POSNR = GX_VBEP-POSNR.
  64. GW_VBBE-ETENR = GX_VBEP-ETENR.
  65. GW_VBBE-MBDAT = GX_VBEP-EDATU.
  66. GW_VBBE-VBTYP = 'C'.
  67. GW_VBBE-BDART = ''.
  68. GW_VBBE-PLART = ''.
  69. GW_VBBE-UPDKZ = 'I'.
  70. GW_VBBE-OMENG = GX_VBEP-LMENG.
  71. GW_VBBE-VMENG = GX_VBEP-BMENG.
  72. GW_VBBE-MEINS = GX_VBEP-VRKME.
  73. GW_VBBE-PZMNG = GX_VBEP-LMENG.
  74. GW_VBBE-AUART = XVBAK-AUART.
  75. GW_VBBE-KUNNR = XVBAK-KUNNR.
  76. READ TABLE XVBAP INTO GX_VBAP WITH KEY POSNR = GX_VBEP-POSNR.
  77. IF SY-SUBRC = .
  78. LY_J = SY-TABIX.
  79. GX_VBAP-SUMBD = 'A'.
  80. GX_VBAP-UPDKZ = 'U'.
  81. GX_VBAP-BEDUP = 'X'.
  82.  
  83. MODIFY XVBAP FROM GX_VBAP INDEX LY_J TRANSPORTING SUMBD UPDKZ BEDUP.
  84. GW_VBBE-MATNR = GX_VBAP-MATNR.
  85. GW_VBBE-WERKS = GX_VBAP-WERKS.
  86. GW_VBBE-LGORT = GX_VBAP-LGORT.
  87. GW_VBBE-CHARG = GX_VBAP-CHARG.
  88. GW_VBBE-AWAHR = GX_VBAP-AWAHR.
  89. GW_VBBE-VPZUO = GX_VBAP-VPZUO.
  90. ENDIF.
  91. INSERT GW_VBBE INTO XVBBE INDEX GX_VBEP-ETENR.
  92. ENDIF.
  93. ENDIF.
  94. ENDIF.
  95. WHEN 'ZSP' .
  96. READ TABLE XVBAP INTO GX_VBAP WITH KEY POSNR = GX_VBEP-POSNR.
  97. IF SY-SUBRC = .
  98. IF GX_VBAP-PSTYV = 'ZSNN' AND GX_VBEP-ETTYP <> 'ZN'.
  99. GX_VBEP-ETTYP = 'ZN'.
  100. IF SY-TCODE = 'VA01'.
  101. ELSEIF SY-TCODE = 'VA02'.
  102. GX_VBEP-UPDKZ = 'U'.
  103. GX_VBEP-BEDSD = 'X'.
  104. GX_VBEP-BDAALT = ''.
  105. GX_VBEP-BDART = ''.
  106. GX_VBEP-PLART = ''.
  107. IF XVBBE[] IS INITIAL.
  108. GW_VBBE-MANDT = SY-MANDT.
  109. GW_VBBE-VBELN = GX_VBEP-VBELN.
  110. GW_VBBE-POSNR = GX_VBEP-POSNR.
  111. GW_VBBE-ETENR = GX_VBEP-ETENR.
  112. GW_VBBE-MBDAT = GX_VBEP-EDATU.
  113. GW_VBBE-VBTYP = 'C'.
  114. GW_VBBE-BDART = ''.
  115. GW_VBBE-PLART = ''.
  116. GW_VBBE-UPDKZ = 'I'.
  117. GW_VBBE-OMENG = GX_VBEP-LMENG.
  118. GW_VBBE-VMENG = GX_VBEP-BMENG.
  119. GW_VBBE-MEINS = GX_VBEP-VRKME.
  120. GW_VBBE-PZMNG = GX_VBEP-LMENG.
  121. GW_VBBE-AUART = XVBAK-AUART.
  122. GW_VBBE-KUNNR = XVBAK-KUNNR.
  123. READ TABLE XVBAP INTO GX_VBAP WITH KEY POSNR = GX_VBEP-POSNR.
  124. IF SY-SUBRC = .
  125. LY_J = SY-TABIX.
  126. GX_VBAP-SUMBD = 'A'.
  127. GX_VBAP-UPDKZ = 'U'.
  128. GX_VBAP-BEDUP = 'X'.
  129.  
  130. MODIFY XVBAP FROM GX_VBAP INDEX LY_J TRANSPORTING SUMBD UPDKZ BEDUP.
  131. GW_VBBE-MATNR = GX_VBAP-MATNR.
  132. GW_VBBE-WERKS = GX_VBAP-WERKS.
  133. GW_VBBE-LGORT = GX_VBAP-LGORT.
  134. GW_VBBE-CHARG = GX_VBAP-CHARG.
  135. GW_VBBE-AWAHR = GX_VBAP-AWAHR.
  136. GW_VBBE-VPZUO = GX_VBAP-VPZUO.
  137. ENDIF.
  138. INSERT GW_VBBE INTO XVBBE INDEX GX_VBEP-ETENR.
  139. ENDIF.
  140. ENDIF.
  141. ELSEIF GX_VBAP-PSTYV = 'ZSAN' AND GX_VBEP-ETTYP <> 'CP'.
  142. GX_VBEP-ETTYP = 'CP'.
  143. IF SY-TCODE = 'VA01'.
  144. ELSEIF SY-TCODE = 'VA02'.
  145. GX_VBEP-UPDKZ = 'U'.
  146. GX_VBEP-BEDSD = 'X'.
  147. GX_VBEP-BDAALT = ''.
  148. GX_VBEP-BDART = ''.
  149. GX_VBEP-PLART = ''.
  150. IF XVBBE[] IS INITIAL.
  151. GW_VBBE-MANDT = SY-MANDT.
  152. GW_VBBE-VBELN = GX_VBEP-VBELN.
  153. GW_VBBE-POSNR = GX_VBEP-POSNR.
  154. GW_VBBE-ETENR = GX_VBEP-ETENR.
  155. GW_VBBE-MBDAT = GX_VBEP-EDATU.
  156. GW_VBBE-VBTYP = 'C'.
  157. GW_VBBE-BDART = ''.
  158. GW_VBBE-PLART = ''.
  159. GW_VBBE-UPDKZ = 'I'.
  160. GW_VBBE-OMENG = GX_VBEP-LMENG.
  161. GW_VBBE-VMENG = GX_VBEP-BMENG.
  162. GW_VBBE-MEINS = GX_VBEP-VRKME.
  163. GW_VBBE-PZMNG = GX_VBEP-LMENG.
  164. GW_VBBE-AUART = XVBAK-AUART.
  165. GW_VBBE-KUNNR = XVBAK-KUNNR.
  166. READ TABLE XVBAP INTO GX_VBAP WITH KEY POSNR = GX_VBEP-POSNR.
  167. IF SY-SUBRC = .
  168. LY_J = SY-TABIX.
  169. GX_VBAP-SUMBD = 'A'.
  170. GX_VBAP-UPDKZ = 'U'.
  171. GX_VBAP-BEDUP = 'X'.
  172.  
  173. MODIFY XVBAP FROM GX_VBAP INDEX LY_J TRANSPORTING SUMBD UPDKZ BEDUP.
  174. GW_VBBE-MATNR = GX_VBAP-MATNR.
  175. GW_VBBE-WERKS = GX_VBAP-WERKS.
  176. GW_VBBE-LGORT = GX_VBAP-LGORT.
  177. GW_VBBE-CHARG = GX_VBAP-CHARG.
  178. GW_VBBE-AWAHR = GX_VBAP-AWAHR.
  179. GW_VBBE-VPZUO = GX_VBAP-VPZUO.
  180. ENDIF.
  181. INSERT GW_VBBE INTO XVBBE INDEX GX_VBEP-ETENR.
  182. ENDIF.
  183. ENDIF.
  184. ENDIF .
  185. ENDIF.
  186. WHEN OTHERS.
  187. ENDCASE.
  188. MODIFY XVBEP FROM GX_VBEP.
  189. ENDLOOP.
  190. ENDIF.

SAP销售订单状态修改(审核) 计划行自动产生需求,产生MD04需求的更多相关文章

  1. 【ABAP系列】SAP 销售订单的行项目里条件的增强

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP 销售订单的行项目里条件的 ...

  2. SAP 销售订单中采购标识无法修改

    VA03中的销售订单第四个物料没有ZA选项, 错误提示:计划行类别ZA未定义 原因: MM03中的 MRP2---采购类型未被定义

  3. SAP 销售订单交货对成本中心记账

    销售订单发货不计入主营业务成本,而是直接接入费用科目,与成本中心挂钩的业务经常发生.不少公司只是简单地处理交货,计入主营业务成本,然后财务再手工将成本归结到相关的成本中心.其实SAP系统是支持销售订单 ...

  4. SAP生产订单状态

    SAP系统的常见订单状态如下: ·        CRTD (创建):标识生产订单刚刚创建,此时禁止做后续发料和报工确认等操作: ·        PREL (部分下达):当生产订单部分下达时,如仅下 ...

  5. SAP销售订单屏幕字段控制隐藏,必输等

    1.T-CODE:shd0 创建变式  , 点击确认按钮后,SAP进入下一个屏幕,然后重复上面的操作,直到所有屏幕已完成设置. 如果后续屏幕不需要设置,可点击“退出并保存”按钮.保存后,进入下图所示页 ...

  6. SAP 销售订单的文本项目

    http://blog.itpub.net/9859323/viewspace-616508/ ls_hdname = wa_vbak-vbeln .     CALL FUNCTION 'READ_ ...

  7. 20170501xlVBA销售订单整理一行转多行

    Sub NextSeven_CodeFrame() Application.ScreenUpdating = False Application.DisplayAlerts = False Appli ...

  8. SAP销售订单需求类型的确定优秀级

    需求类型的确定优秀级:1.策略组里的需求类型:2.MRP组里的:3.SO行项目类别+MRP类型4.SO行项目类别 部分截图:

  9. SAP销售订单屏幕增强行项目屏幕增强

    1.在vbap表中 append一个自定义结构,如下图: 2.TCODE:SE80     程序名:SAPMV45A   屏幕:8459 如图: 3.标记增强的屏幕字段 4.屏幕增强的位置 *& ...

随机推荐

  1. Hibernate 具体代码

    package com.shuyinghengxie.doudou; import static org.junit.Assert.*; import java.util.Date; import j ...

  2. jdk安装环境变量设置

    设置JAVA_HOME,点击新建,变量名:JAVA_HOME,变量值:D:\java\jdk1.7.0,即刚才jdk安装的路径.   设置CLASSPATH属性,变量名:CLASSPATH,变量值:. ...

  3. QQ音乐项目(OC版) - 实现细节

    QQ 音乐看似简单,但自己手动实现起来,才发现没有那么简单,有好多细节,需要注意. github : https://github.com/keenleung/QQMusic-OC 一.业务逻辑 首先 ...

  4. winform打开唯一窗体、构造函数传值

    制作登入窗体: 制作一个登陆窗体,实现点击按钮关闭此窗体并打开另一个窗体 直接在按钮点击事件中,实例化一个想要打开的窗体 使用show方法打开,并把登陆窗体的visible属性改为false Form ...

  5. python使用open经常报错:TypeError: an integer is required的解决方案

    错误是由于从os模块引入了所有的函数导致的,os模块下有一个open函数,接受整型的文件描述符和打开模式,from os import *引入os模块的open函数,覆盖了python内建的open函 ...

  6. Android网络编程系列 一 TCP/IP协议族之链路层

    这篇借鉴的文章主要是用于后续文章知识点的扩散,在此特作备份和扩散学习交流. 数据链路层有三个目的: 为IP模块发送和 接收IP数据报. 为ARP模块发送ARP请求和接收ARP应答. 为RARP发送RA ...

  7. JavaWeb学习计划

    1 HTML2 CSS3 JavaScript4 XML5 Tomcat6 Servlet7 HTTP8 Cookie Session9 JSP10 JSTL11 MySQL12 JDBC13 过滤器 ...

  8. Android控件之RadioGroup与RadioButton(单选控件)

    一.RadioGroup与RadioButton 1.什么是RadioGroup: RadioButton的一个集合,提供多选机制 2.什么是RadioButton: RadioButton包裹在Ra ...

  9. linux特殊字符

    linux特殊字符: * 匹配文件名中的任何字符串,包括空字符串. ? 匹配文件名中的任何单个字符. [...] 匹配[ ]中所包含的任何字符. [!...] 匹配[ ]中非感叹号!之后的字符. 当s ...

  10. 根据用户输入的二代身份证号码自动为其计算生成出生日期的javascript方法

    if(idTypeIsChecked.checked == true){//如果选中的是二代身份证 var birthDateValue = document.getElementById('idNu ...