SAP VA01销售订单标准功能逻辑增强

SAP VA01销售订单标准功能逻辑增强
SAP VA01销售订单标准功能逻辑增强

1、VA01/VA02/VA03标准功能逻辑增强实例

目的:在VA01创建销售订单时,输入物料、工厂、批次(不输数量)后通过回车键提示可用库存,当输入数量时则校验数量是否超过可用库存。

说明:需要找到光标在批次处按回车后的事件处理位置。

涉及内容:第四代增强(Framework)。

1.1 VA01通过DEBUG找到可增强点

第四代增强一个难点就是先找到需增强位置(如销售订单行项目中的订单数量)所以对应的屏幕,然后在屏幕流中进行DEBUG,找到能够对增强位置进行逻辑控制的可增强点,通常可增强点有多个。也就是说要能够实现第四代增强,需要一定的DEBUG能力。

1.1.1 通过业务操作找到增强点所在屏幕

步骤如下:

1、T-CODE:VA01进入创建销售订单初始界面,输入订单类型等信息(具体可咨询业务顾问),然后回车,如图1.1.1-1:

图1.1.1-1

说明:

a、回车后进入销售订单创建界面。

2、在销售订单创建界面中,将光标放置在需要进行逻辑控制的字段处,该实例是对订单数量字段进行逻辑处理,所以将光标放置在订单数量处,如图1.1.1-2:

图1.1.1-2

3、光标在订单数量时按“F1”键,弹出高级助手窗口,如图1.1.1-3:

图1.1.1-3

4、图1.1.1-3中点击“技术信息”按钮,弹出技术信息窗口,如图1.1.1-4:

图1.1.1-4

说明:

a、图中可以看出订单数量对应的程序是"SAPMV45A",对应的屏幕号"4900",对应表结构"RV45A",对应表结构字段名称"KWMENG"。

到这里,屏幕号,字段对应的表都找到了。

1.1.2 在屏幕流中找到可增强点

在程序中找到可增强点是指在程序中找到一个位置将增强的代码放在那,执行增强代码后会将代码的控制逻辑进行生效。而找到增强点的逻辑则是通过设置断点,然后在断点处进行变量赋值(假设的值),继续执行后假设的值符合需求,

则假设值的那个点就是可以进行增强的位置,就可考虑在那个位置进行增强。

另外,可增强的点可能有多个,具体选择根据业务进行尽可能的找到最合适的增强点。

查找增强点的步骤如下:

1、图1.1.1-4中双击屏幕号"4900",进入程序"SAPMV45A"的屏幕"4900"的逻辑流界面,如图1.1.2-1:

图1.1.2-1

说明:

a、在屏幕的逻辑流中如何找到增强点是第四代增强的一大难点,本练习介绍的方法就是:根据逻辑流中MODULE的名字进行大概理解,然后在方法中进行断点尝试;

b、因为本练习是通过按回车键来触发逻辑控制,所以首先考虑断点的设置是在PAI中;

c、因为订单数量是在行项目中,也就是跟VBAP(销售凭证:项目数据)表相关,所以优先考虑MODULE名跟VBAP相关的MODULE进行断点设置,如果没有相关的就只能一个一个MODULE进行断点设置;

d、根据业务操作分析可设置断点的位置。

2、根据步骤1中的说明,首先考虑业务操作中会有的提示,在VA01中,如果行项目中不输入数量,在输入批次后回车,提示输入数量信息,如图1.1.2-2:

图1.1.2-2

说明:

a、由图可以考虑在弹出订单数量提示窗口之前就提示可使用库存;

b、如果未找到像图中显示的可以选择的位置,则根据第一步的说明使用别的方法继续查找。

3、由第二步可知,需要在提示输入订单数量的警告之前就弹出增强需要的提示信息,那么就要找到程序在何处弹出提示输入订单数量的警告,那么就进入到表格所在的屏幕,在屏幕流中进行断点设置,因为触发的是回车事件,所以优先考虑在屏幕的PAI中进行断点设置,如图1.1.2-3:

图1.1.2-3

4、首先,在第一个MODULE中的第一个方法中设置断点,也可以放在最后一个方法中,具体位置看个人习惯,如图1.1.2-4:

图1.1.2-4

5、新开窗口,重新进行销售订单创建,维护常规订单需要维护的信息(但不输入数量),然后在行项-批次字段处输入批次后按回车,观察是否有提示“输入订单数量”信息,如果没有提示,则程序会执行到断点处,如图1.1.2-5:

图1.1.2-5

说明:

a、图中可以看出,程序执行到了屏幕PAI的第一MODULE中的第一个方法出,但创建销售订单界面没有出现“输入订单数量”警告,也就说明了出发警告的代码在第一个MODULE的第一个方法以后,那为了提高调试效率,就在PAI的第二个MODULE的第一个方法出再设置断点,然后在DEBUG界面执行“F8”,继续往下执行,如果在执行到下一个断点处之前就提示了“输入订单数量”的警告,则说明警告的触发代码在第一个MODULE的第一个方法到第二个MODULE的第一个方法之间(已缩小查找范围),进而再重新创建订单,并在第一个MODULE和第二个MODULE之间的方法中逐一进行断点设置,进行调试,直至找到触发警告的代码处(如果多层方法调用,同理进行断点设置);而若是不在第二个MODULE的第一个方法之前,则在第三个MODULE中进行断点设置,直至找到触发警告的代码。

6、经过第五步的循环操作,直至找到增强点位置,本练习的增强点位置位于图1.1.2-6中:

图1.1.2-6

如此,增强点的位置就找到了。

下一章将介绍如何实现第四代增强。

1.2 SE38(或SE80)进行逻辑增强

在1.1.2中已经找到增强点的位置,接下来这一节就介绍如何通过增强实现行项目可用数量提示信息。

1.2.1 创建增强

1、将光标置于需要增强的位置,如图1.2.1-1:

图1.2.1-1

2、将光标放置在需增强位置,然后点击“增强”按钮,如图1.2.1-2:

图1.2.1-2

说明:

a、点击“增强”按钮后才能进行增强创建、修改、撤销等等操作。

3、点击增强按钮后,选择“编辑->增强操作->显示隐式增强选项”菜单显示隐式增强选项,如图1.2.1-3:

图1.2.1-3

4、选择“显示隐式增强选项”菜单后,从需增强的位置往前找,直至找到一个箭头(箭头指向处可以实施增强)(如果找不到,则往前一个方法进行尝试),

如图1.2.1-4:

图1.2.1-4

5、将光标放置在箭头指向的行中,然后选择“创建实施”,如图1.2.1-5:

图1.2.1-5

6、本练习增强选择“代码”增强类型,如图1.2.1-6:

图1.2.1-6

7、点击“新建”按钮创建增强的名称,如图1.2.1-7:

图1.2.1-7

8、输入增强的名称及描述,然后打钩,如图1.2.1-8:

图1.2.1-8

9、创建了增强后选中,然后打钩,如图1.2.1-9:

图1.2.1-9

10、成功创建增强,增强名称为自定义增强名称,如图1.2.1-10:

图1.2.1-10

到此就成功了创建了增强。

1.2.2 增强逻辑设计

上一节已经创建了增强,这一节就介绍增强的逻辑设计(具体根据实际业务需求而定)。

1、增强代码如下:

ENHANCEMENT 2 ZSD_SO_ITEM_CHECK1. "active version

IF SY-TCODE = 'VA01' and sy-DYNNR = '4900'.

DATA WA_MCHB LIKE MCHB.

DATA ZCLABS TYPE STRING.

DATA ZMATNR TYPE STRING.

DATA MSG1 TYPE STRING.

IF ( VBAP-KWMENG = 0 OR VBAP-KWMENG IS INITIAL )

AND VBAP-MATNR IS NOT INITIAL

AND VBAP-WERKS IS NOT INITIAL

AND VBAP-CHARG IS NOT INITIAL.

CLEAR WA_MCHB.

SELECT SINGLE * FROM MCHB INTO WA_MCHB

WHERE WERKS = VBAP-WERKS

AND MATNR = VBAP-MATNR

"AND LGORT = WA_VBAP-LGORT

AND CHARG = VBAP-CHARG.

ZCLABS = WA_MCHB-CLABS.

ZMATNR = VBAP-MATNR.

SHIFT ZMATNR LEFT DELETING LEADING '0'.

CLEAR MSG1.

CONCATENATE '物料/批次(' ZMATNR '/' VBAP-CHARG ')有可用库存' ZCLABS VBAP-MEINS '.' INTO MSG1.

MESSAGE W000(001) WITH MSG1.

ENDIF.

IF VBAP-WERKS > 0

AND VBAP-MATNR IS NOT INITIAL

AND VBAP-KWMENG IS NOT INITIAL

AND VBAP-CHARG IS NOT INITIAL.

CLEAR WA_MCHB.

SELECT SINGLE * FROM MCHB INTO WA_MCHB

WHERE WERKS = VBAP-WERKS

AND MATNR = VBAP-MATNR

"AND LGORT = WA_VBAP-LGORT

AND CHARG = VBAP-CHARG.

ZCLABS = WA_MCHB-CLABS.

ZMATNR = VBAP-MATNR.

SHIFT ZMATNR LEFT DELETING LEADING '0'.

IF VBAP-KWMENG > WA_MCHB-CLABS.

CLEAR MSG1.

CONCATENATE '物料/批次(' ZMATNR '/' VBAP-CHARG ')可用库存为' ZCLABS VBAP-MEINS '.' INTO MSG1.

MESSAGE E000(001) WITH MSG1.

ENDIF.

ENDIF.

ENDIF.

ENDENHANCEMENT.

说明:

a、有开发基础则能看懂代码。

1.2.3 激活增强

1、增强逻辑设计完成后,检查语法,如果无误,则激活增强,如图1.2.3-1:

图1.2.3-1

到这里增强就完成了,接下去就可进行调试、修改。

1.3 SE38(或SE80)修改、撤销增强

对标准程序进行增强后,可以对其进行修改或者撤销。

1.3.1 修改增强

增强修改为可编辑模式跟自定义程序(直接点击“编辑”按钮即可)的操作不同,如下为具体步骤:

1、找到增强位置,光标置于增强处,然后点击“增强”按钮,如图1.3.1-1:

图1.3.1-1

2、点击“增强”后增强的代码还不能编辑,需要选择“编辑->增强操作->更改实施”菜单,更改增强为可编辑模式,如图1.3.1-2:

图1.3.1-2

3、选择“更改实施”菜单后可以看出增强中的代码为可编辑状态,如图1.3.1-3:

图1.3.1-3

说明:

a、增强完成后同样需要激活增强。

1.3.2 撤销增强

增强后如果需要撤销,具体步骤如下:

1、找到增强位置,光标置于增强处,如图1.3.2-1:

图1.3.2-1

2、选择“编辑->增强操作->撤销实施”菜单,如图1.3.2-2:

图1.3.2-2

操作后增强部分的代码就不存在界面中了。

说明:

a、撤销增强只是把增强的代码从增强点中删除,但是增强的名称依然还在增强列表中,可供继续使用或者在别的增强点中使用。

相关主题
相关文档
最新文档