SAPERP系统SD模块常用增强之一:VA01VA02创建或修改SO的输入检查

标签:
增强sapliumengficoabap |
分类: 增强 |

在SAP/ERP项目的实施中销售管理模块(SD)的创建和修改销售订单必定会有输入字段校验检查的需求,来防止业务人员录入错误或少录入数据,SAP这方面的配置功能也非常强大,通常情况下不需要写开发代码,业务顾问通过配置不完整日志就可以非常容易实现大部分需求,但是在实际项目中还是会遇到一些特殊的需求,不能通过配置实现,需要进行增强开发。
下面通过一个项目案例来介绍下如何通过增强实现销售订单创建和修改的字段输入的合规性检查。
业务需求如下:
某公司销售模块的业务要求:销售组织为S010在创建ZPE类型的销售订单时候,如果销售订单行项目类型为Z001时,要求检查销售订单行项目的订单号必须输入(如下图说明)。
类似上面这样的复杂的业务需求,就很难通过不完全日志的配置来实现,只能通过增强开发实现。
下面详细介绍下实施步骤:增强点:USEREXIT_SAVE_DOCUMENT_PREPARE,此增强用户出口主要用来对销售订单保存前的各字段的约束条件的检查。实施方法:使用隐式增强方法,隐式增强点位如下:

备注:SD方面的增强很多是USEREXIT这类用户出口,属于一代增强点,需要开发KEY直接在空的子程序中添加代码,这相当于修改了标准源码,升级会被覆盖,四代增强出现后目前一般建议不要直接去修改程序,而是在这子程序里实施隐式增强。
详细具体实施步骤:
上面找到隐方增强点后,继续按如下步骤操作:
上图点击确认后,这个增强需求的实施步骤就全部完成了。
增强代码如下:
IF VBAK-VKORG = 'S010' AND VBAK-AUART = 'ZPE'. LOOP AT XVBAP.
IF XVBAP-PSTYV = 'Z001' .
IF XVBAP-AUFNR IS INITIAL AND XVBAP-UPDKZ <> 'D'.
MESSAGE '订单号必须输入!' TYPE 'E' DISPLAY LIKE 'E'.
ENDIF.
ENDIF.
ENDLOOP.
ENDIF.
备注:XVBAP-UPDKZ
实际实施效果如下图:
当上面VA01创建订单时候,如果满足销售组织S010,订单类型:ZPE,类别:Z001
时候,SO保存时候,系统报错提示。