本文通过一个实际案例向大家描述如何通过S4HC自带的工作流工具实现对含折扣的销售订单(或报价)的审批。

下面描述一个需求场景:

对于一般销售订单,由于价格都取自标准定价条件,若标准价格设定不允许手动更改,销售经理认为并不需要审批一般的销售订单。

但对于具有折扣条的销售订单,则需要特别审批,并希望根据折扣金额设置相关的审批层级(两级)。

如何通过S4HC自带的工作流功能实现这个功能呢?

**********************

1. 定义审批请求的原因码。SSCUI: 102751

创建两个审批代码,如:

Z001 一级折扣审批

Z002 二级折扣审批

2. 分配审批请求的原因。SSCUI: 102752

将Z001和Z002 分配给销售订单“C”。

3. 配置定价过程。 SSCUI:  101117

创建自定义定价过程。将需要审批的折扣定价条件设置小计(如小计6或小计5等)

此处的折扣小计可以针对某个单一的定价条件,也可以设置若干个折扣的合计值(参考300步骤)。

4. 设置定价程序确定。 SSCUI:  101118

将自定义的定价程序分配给相关销售范围和客户/凭证定价组合。

5. 创建In-app BADI. app:  "自定义字段和逻辑“ 

创建自定义逻辑:

写入代码如下:

______________________________________________________________

DATA: ls_salesdocumentitem TYPE line of TDT_BD_SD_APM_ITEM.

DATA: lv_sumkzwi6 TYPE KZWI6.

 

* Sales order approval workflow with discount

 

IF salesdocument-sddocumentcategory = 'C' .

    LOOP AT salesdocumentitem INTO ls_salesdocumentitem.

        IF ls_salesdocumentitem-subtotal6amount NE 0.

          lv_sumkzwi6 = lv_sumkzwi6 + ls_salesdocumentitem-subtotal6amount.

        ENDIF.

        CLEAR ls_salesdocumentitem.

    ENDLOOP.

 

    IF lv_sumkzwi6 >= 10000.

     salesdocapprovalreason = 'Z002'.

         ELSEIF lv_sumkzwi6 > 0.

     salesdocapprovalreason = 'Z001'.

    ENDIF.

CLEAR lv_sumkzwi6.

ENDIF.

______________________________________________________

该段BADI的逻辑为:

(1) 读取销售订单行项目中的小计字段(代码中使用的小计6),并逐行累加。

(2) 判断销售订单中的小计累计值(累计折扣值)若大于10000元则进行二级审批,否则执行一级审批。

可按需调整此段代码逻辑。

测试后,激活BADI。

6. 创建销售订单工作流。

设置相应工作流, Z001审批原因代码为折扣一级审批,Z002审批原因代码为折扣二级审批。

关于工作流,设定相关的开始条件和审批步骤。

开始条件:按照申请原因代码,也可以加入组织结构限制。

审批步骤:可以直接分配给用户,也可使用角色(只有两级),配合“管理团队和职责” 使用。

**********************

以上是如何利用现有S4HC内嵌的工作流实现带折扣的销售订单审批,思路供大家参考。

更为复杂的逻辑和计算如不能通过in-app BADI实现,则无法在S4HC中直接实现,可以考虑使用SCP上的工作流工具实现。