分享

SAP ERP系统SD模块常用增强之一:VA01&VA02创建或修改SO的输入检查

 ERP文库 2023-05-03 发布于广东

在SAP/ERP项目的实施中销售管理模块(SD)的创建和修改销售订单必定会有输入字段校验检查的需求,来防止业务人员录入错误或少录入数据,SAP这方面的配置功能也非常强大,通常情况下不需要写开发代码,业务顾问通过配置不完整日志就可以非常容易实现大部分需求,但是在实际项目中还是会遇到一些特殊的需求,不能通过配置实现,需要进行增强开发。

下面通过一个项目案例来介绍下如何通过增强实现销售订单创建和修改的字段输入的合规性检查。

业务需求如下:

某公司销售模块的业务要求:销售组织为S010在创建ZPE类型的销售订单时候,如果销售订单行项目类型为Z001时,要求检查销售订单行项目的订单号必须输入(如下图说明)。

类似上面这样的复杂的业务需求,就很难通过不完全日志的配置来实现,只能通过增强开发实现。

下面详细介绍下实施步骤:

增强点:
USEREXIT_SAVE_DOCUMENT_PREPARE,此增强用户出口主要用来对销售订单保存前的各字段的约束条件的检查。
实施方法:使用隐式增强方法,隐式增强点位如下:

备注:SD方面的增强很多是USEREXIT这类用户出口,属于一代增强点,需要开发KEY直接在空的子程序中添加代码,这相当于修改了标准源码,升级会被覆盖,四代增强出现后目前一般建议不要直接去修改程序,而是在这子程序里实施隐式增强。

详细具体实施步骤:

上面找到隐方增强点后,继续按如下步骤操作:

点击螺旋图标后,会显示创建图表(如下)
备注:这里选择声明和代码的区别,可以参见如下文章解析:

SAP ERP系统实施隐式增强中"声明"和"代码"的区别和用途介绍

备注:如果需要传输的,必须选择包,如果自己的学习系统,不需要传输的,包可以选择$TMP或点击本地对象保存即可。

备注:SO行项目数据被保存在内表XVBAP,可以从此内表读取到维护的行项目值。

上面位置写上增强代码后点击保存->激活。

上图点击确认后,这个增强需求的实施步骤就全部完成了。

增强代码如下:

 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  = 'D'  表示删除行,XVBAP-UPDKZ   =' I '表示插入行。VA01/VA02创建SO时候,当行项目维护多条数据后,删除其中的一条或者多条,被删除的行项目依在内表XVBAP中,如果没有增加这XVBAP-UPDKZ<>'D'的条件,会发现一个现象:未删除的行项目满足字段必输的条件了,系统依然给出提示:“订单号必须输入!”

实际实施效果如下图:

当上面VA01创建订单时候,如果满足销售组织S010,订单类型:ZPE,类别:Z001 时候,SO保存时候,系统报错提示。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多