Product Information
使用工作流审批含折扣的销售订单
本文通过一个实际案例向大家描述如何通过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上的工作流工具实现。