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

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

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

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

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

IF ( i_stonO = '' AND i_stonN = '' ).
LOOP AT XVBEP INTO GX_VBEP.
LY_I = SY-TABIX.
CASE VBAK-AUART.
WHEN 'ZOR' .
IF GX_VBEP-ETTYP <> 'CP' AND GX_VBEP-ETTYP <> 'ZD'.
GX_VBEP-ETTYP = 'CP'.
IF SY-TCODE = 'VA01'.
ELSEIF SY-TCODE = 'VA02'.
GX_VBEP-UPDKZ = 'U'.
GX_VBEP-BEDSD = 'X'.
GX_VBEP-BDAALT = ''.
GX_VBEP-BDART = ''.
GX_VBEP-PLART = ''.
IF XVBBE[] IS INITIAL.
GW_VBBE-MANDT = SY-MANDT.
GW_VBBE-VBELN = GX_VBEP-VBELN.
GW_VBBE-POSNR = GX_VBEP-POSNR.
GW_VBBE-ETENR = GX_VBEP-ETENR.
GW_VBBE-MBDAT = GX_VBEP-EDATU.
GW_VBBE-VBTYP = 'C'.
GW_VBBE-BDART = ''.
GW_VBBE-PLART = ''.
GW_VBBE-UPDKZ = 'I'.
GW_VBBE-OMENG = GX_VBEP-LMENG.
GW_VBBE-VMENG = GX_VBEP-BMENG.
GW_VBBE-MEINS = GX_VBEP-VRKME.
GW_VBBE-PZMNG = GX_VBEP-LMENG.
GW_VBBE-AUART = XVBAK-AUART.
GW_VBBE-KUNNR = XVBAK-KUNNR.
READ TABLE XVBAP INTO GX_VBAP WITH KEY POSNR = GX_VBEP-POSNR.
IF SY-SUBRC = .
LY_J = SY-TABIX.
GX_VBAP-SUMBD = 'A'.
GX_VBAP-UPDKZ = 'U'.
GX_VBAP-BEDUP = 'X'. MODIFY XVBAP FROM GX_VBAP INDEX LY_J TRANSPORTING SUMBD UPDKZ BEDUP.
GW_VBBE-MATNR = GX_VBAP-MATNR.
GW_VBBE-WERKS = GX_VBAP-WERKS.
GW_VBBE-LGORT = GX_VBAP-LGORT.
GW_VBBE-CHARG = GX_VBAP-CHARG.
GW_VBBE-AWAHR = GX_VBAP-AWAHR.
GW_VBBE-VPZUO = GX_VBAP-VPZUO.
ENDIF.
INSERT GW_VBBE INTO XVBBE INDEX GX_VBEP-ETENR.
ENDIF.
ENDIF.
ENDIF.
WHEN 'ZKB' .
IF GX_VBEP-ETTYP <> 'E1'.
GX_VBEP-ETTYP = 'E1'.
IF SY-TCODE = 'VA01'.
ELSEIF SY-TCODE = 'VA02'.
GX_VBEP-UPDKZ = 'U'.
GX_VBEP-BEDSD = 'X'.
GX_VBEP-BDAALT = ''.
GX_VBEP-BDART = ''.
GX_VBEP-PLART = ''.
IF XVBBE[] IS INITIAL.
GW_VBBE-MANDT = SY-MANDT.
GW_VBBE-VBELN = GX_VBEP-VBELN.
GW_VBBE-POSNR = GX_VBEP-POSNR.
GW_VBBE-ETENR = GX_VBEP-ETENR.
GW_VBBE-MBDAT = GX_VBEP-EDATU.
GW_VBBE-VBTYP = 'C'.
GW_VBBE-BDART = ''.
GW_VBBE-PLART = ''.
GW_VBBE-UPDKZ = 'I'.
GW_VBBE-OMENG = GX_VBEP-LMENG.
GW_VBBE-VMENG = GX_VBEP-BMENG.
GW_VBBE-MEINS = GX_VBEP-VRKME.
GW_VBBE-PZMNG = GX_VBEP-LMENG.
GW_VBBE-AUART = XVBAK-AUART.
GW_VBBE-KUNNR = XVBAK-KUNNR.
READ TABLE XVBAP INTO GX_VBAP WITH KEY POSNR = GX_VBEP-POSNR.
IF SY-SUBRC = .
LY_J = SY-TABIX.
GX_VBAP-SUMBD = 'A'.
GX_VBAP-UPDKZ = 'U'.
GX_VBAP-BEDUP = 'X'. MODIFY XVBAP FROM GX_VBAP INDEX LY_J TRANSPORTING SUMBD UPDKZ BEDUP.
GW_VBBE-MATNR = GX_VBAP-MATNR.
GW_VBBE-WERKS = GX_VBAP-WERKS.
GW_VBBE-LGORT = GX_VBAP-LGORT.
GW_VBBE-CHARG = GX_VBAP-CHARG.
GW_VBBE-AWAHR = GX_VBAP-AWAHR.
GW_VBBE-VPZUO = GX_VBAP-VPZUO.
ENDIF.
INSERT GW_VBBE INTO XVBBE INDEX GX_VBEP-ETENR.
ENDIF.
ENDIF.
ENDIF.
WHEN 'ZSP' .
READ TABLE XVBAP INTO GX_VBAP WITH KEY POSNR = GX_VBEP-POSNR.
IF SY-SUBRC = .
IF GX_VBAP-PSTYV = 'ZSNN' AND GX_VBEP-ETTYP <> 'ZN'.
GX_VBEP-ETTYP = 'ZN'.
IF SY-TCODE = 'VA01'.
ELSEIF SY-TCODE = 'VA02'.
GX_VBEP-UPDKZ = 'U'.
GX_VBEP-BEDSD = 'X'.
GX_VBEP-BDAALT = ''.
GX_VBEP-BDART = ''.
GX_VBEP-PLART = ''.
IF XVBBE[] IS INITIAL.
GW_VBBE-MANDT = SY-MANDT.
GW_VBBE-VBELN = GX_VBEP-VBELN.
GW_VBBE-POSNR = GX_VBEP-POSNR.
GW_VBBE-ETENR = GX_VBEP-ETENR.
GW_VBBE-MBDAT = GX_VBEP-EDATU.
GW_VBBE-VBTYP = 'C'.
GW_VBBE-BDART = ''.
GW_VBBE-PLART = ''.
GW_VBBE-UPDKZ = 'I'.
GW_VBBE-OMENG = GX_VBEP-LMENG.
GW_VBBE-VMENG = GX_VBEP-BMENG.
GW_VBBE-MEINS = GX_VBEP-VRKME.
GW_VBBE-PZMNG = GX_VBEP-LMENG.
GW_VBBE-AUART = XVBAK-AUART.
GW_VBBE-KUNNR = XVBAK-KUNNR.
READ TABLE XVBAP INTO GX_VBAP WITH KEY POSNR = GX_VBEP-POSNR.
IF SY-SUBRC = .
LY_J = SY-TABIX.
GX_VBAP-SUMBD = 'A'.
GX_VBAP-UPDKZ = 'U'.
GX_VBAP-BEDUP = 'X'. MODIFY XVBAP FROM GX_VBAP INDEX LY_J TRANSPORTING SUMBD UPDKZ BEDUP.
GW_VBBE-MATNR = GX_VBAP-MATNR.
GW_VBBE-WERKS = GX_VBAP-WERKS.
GW_VBBE-LGORT = GX_VBAP-LGORT.
GW_VBBE-CHARG = GX_VBAP-CHARG.
GW_VBBE-AWAHR = GX_VBAP-AWAHR.
GW_VBBE-VPZUO = GX_VBAP-VPZUO.
ENDIF.
INSERT GW_VBBE INTO XVBBE INDEX GX_VBEP-ETENR.
ENDIF.
ENDIF.
ELSEIF GX_VBAP-PSTYV = 'ZSAN' AND GX_VBEP-ETTYP <> 'CP'.
GX_VBEP-ETTYP = 'CP'.
IF SY-TCODE = 'VA01'.
ELSEIF SY-TCODE = 'VA02'.
GX_VBEP-UPDKZ = 'U'.
GX_VBEP-BEDSD = 'X'.
GX_VBEP-BDAALT = ''.
GX_VBEP-BDART = ''.
GX_VBEP-PLART = ''.
IF XVBBE[] IS INITIAL.
GW_VBBE-MANDT = SY-MANDT.
GW_VBBE-VBELN = GX_VBEP-VBELN.
GW_VBBE-POSNR = GX_VBEP-POSNR.
GW_VBBE-ETENR = GX_VBEP-ETENR.
GW_VBBE-MBDAT = GX_VBEP-EDATU.
GW_VBBE-VBTYP = 'C'.
GW_VBBE-BDART = ''.
GW_VBBE-PLART = ''.
GW_VBBE-UPDKZ = 'I'.
GW_VBBE-OMENG = GX_VBEP-LMENG.
GW_VBBE-VMENG = GX_VBEP-BMENG.
GW_VBBE-MEINS = GX_VBEP-VRKME.
GW_VBBE-PZMNG = GX_VBEP-LMENG.
GW_VBBE-AUART = XVBAK-AUART.
GW_VBBE-KUNNR = XVBAK-KUNNR.
READ TABLE XVBAP INTO GX_VBAP WITH KEY POSNR = GX_VBEP-POSNR.
IF SY-SUBRC = .
LY_J = SY-TABIX.
GX_VBAP-SUMBD = 'A'.
GX_VBAP-UPDKZ = 'U'.
GX_VBAP-BEDUP = 'X'. MODIFY XVBAP FROM GX_VBAP INDEX LY_J TRANSPORTING SUMBD UPDKZ BEDUP.
GW_VBBE-MATNR = GX_VBAP-MATNR.
GW_VBBE-WERKS = GX_VBAP-WERKS.
GW_VBBE-LGORT = GX_VBAP-LGORT.
GW_VBBE-CHARG = GX_VBAP-CHARG.
GW_VBBE-AWAHR = GX_VBAP-AWAHR.
GW_VBBE-VPZUO = GX_VBAP-VPZUO.
ENDIF.
INSERT GW_VBBE INTO XVBBE INDEX GX_VBEP-ETENR.
ENDIF.
ENDIF.
ENDIF .
ENDIF.
WHEN OTHERS.
ENDCASE.
MODIFY XVBEP FROM GX_VBEP.
ENDLOOP.
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. sql 基础练习题

    select * from Student;select * from Courseselect ;select* from Teacherselect ;select * from SC;--创建测 ...

  2. Linux内核OOM机制的详细分析(转)

    Linux 内核 有个机制叫OOM killer(Out-Of-Memory killer),该机制会监控那些占用内存过大,尤其是瞬间很快消耗大量内存的进程,为了 防止内存耗尽而内核会把该进程杀掉.典 ...

  3. jQuery里面的普通绑定事件和on委托事件

    以click事件为例: 普通绑定事件:$('.btn1').click(function(){}绑定 on绑定事件:$(document).on('click','.btn2',function(){ ...

  4. SQL.变量、运算符、if、while

    变量: SQL语言也跟其他编程语言一样,拥有变量.分支.循环等控制语句. 在SQL语言里面把变量分为局部变量和全局变量,全局变量又称系统变量. 局部变量: 使用declare关键字给变量声明,语法非常 ...

  5. js 立即执行函数,() .则前面的function 是表达式,不能是函数申明

    fnName(); function fnName(){     ... }//正常,因为‘提升’了函数声明,函数调用可在函数声明之前 fnName(); var fnName=function(){ ...

  6. OpenERP QWeb模板标签笔记

    在OpenERP中,通过QWeb来对模板进行渲染后加载到浏览器中,而模板中有许多的标签来定制各种需求变化,在这里记录学习过程中碰到的标签定义,以方便查询. 模板中的标签统一都是以"t-&qu ...

  7. thinkphp分页效果的制作,按查询条件分页正确做法

    PHP代码: <?php namespace Home\Controller; use Think\Controller; use Home\Clas\Cate; class IndexCont ...

  8. 基本分类方法——KNN(K近邻)算法

    在这篇文章 http://www.cnblogs.com/charlesblc/p/6193867.html 讲SVM的过程中,提到了KNN算法.有点熟悉,上网一查,居然就是K近邻算法,机器学习的入门 ...

  9. hdu 4870 Rating

    题目链接:hdu 4870 这题应该算是概率 dp 吧,刚开始看了好几个博客都一头雾水,总有些细节理不清楚,后来看了 hdu 4870 Rating (概率dp) 这篇博客终于有如醍醐灌顶,就好像是第 ...

  10. C++—函数探幽

    一.内联函数 1.内联函数的机制 内联函数是C++为提高程序运行速度而做的一项改进. 函数调用机制:常规函数调用使程序使程序跳到被掉函数的地址,并在函数结束时返回. 内联函数的机制:内联函数的代码与其 ...