3.2.1 预算结构的配置
1)定义预算地址的派生策略
新建完成后,可以点击 “放大镜”,进行预算地址派生规则的详细配置
点击 “新增”,可以增加相应推导步骤。这里暂时不讲如何使用派生规则,由于派生规则在FM大量的使用,其非常重要,因此后面会单独用一节来讲派生规则的使用。这里简单讲一个案例的配置:指定的公司代码的记账地址需根据承诺项目来找对应的预算是否存在,如果不存在就找上一级承诺项目,依次类推。假设承诺项目层次结构变式为非标的ZZZ,其最深为3,那推导规则如下:
0001:根据基金中心找公司代码并将公司代码放入USERSTRING1
注意目标字段到USERSTRING1(这是一个推导使用结构过程中的用户变量,由SAP提供,如果不够用,可以推展增强结构的,后面会讲)。
目的:取出基金中心的公司代码,作为后继推导步骤执行的条件。
注:方式可以由多种,这里用的是功能函数来取的。
0002:初始化读取预算地址是成功标志USERSTRING2
执行条件:
USERSTRING1的值在0001步时取值基金中心的公司代码,这里用作条件判断。
清空读取预算地址是成功标志USERSTRING2,为后面读取成功设置标示做准备。
0003:将记账地址的承诺项目传给USERCMMTITEM为初始值
条件:同第0002条件一样
分配:
目标字段字段USERCMMTITEM,采用覆盖式分配。
0004:取记账地址是否在预算的标识放入USERSTRING2
条件:
USERSTRING1的值在0001步时取值基金中心的公司代码,这里用作条件判断,下同。
定义:
① 函数功能函数FMHIE_GET_BUDGET_ATTRIBUTES调用的传入参数LDNR,被设置了为9F,这里设置9F的目的是为了取预算是否存在,在付款预算中的分类账为9F(后续会讲到)。
② 传入参数CMMTITEM对应值来自HELP_FIELDS~USERCMMTITEM,即0003步取的承诺项目值。
③ 输出能参数BUDGET_EXISTS,在这里代表的意思是指预算存在,它输出值为:X。
④ 功能函数FMHIE_GET_BUDGET_ATTRIBUTES的输出参数BUDGET_EXISTS的值采用覆盖式赋值给USERSTRING2,然后USERSTRING2的值如果为X,代表取成功了。反之没有取成功,为下一步取承诺项目的上一级做准备。
0005:预算地址没有取成功取上一级承诺项目=>USERCMMTITEM.
执行条件
USERSTRING2由上一步0004传过来的,这里的不等于X 就代表取上一步取预算不成功。
① CIVARNT传入参数为承诺项目的层次变式,前面的承诺项目结构层次的配置当中自定义了ZZZ备用的层次结构。
② 将之前的承诺项目HELP_FIELDS~USERCMMTITEM值为作参数CMMT_ITEM的传入值
③ 将取出的承诺项目上一级用覆盖方式再给HELP_FIELDS~USERCMMTITEM承诺项目,作为下一步再找预算地址的依据。
0006:重复定义一次0004步的定义
0007:重定义义一次0005步的定义
0008:重复定义一次0004步的定义
0009:重定义义一次0005步的定义。
注意到这一步,一共定义取了三次预算地址,假设
承诺项目层次结构深度最大为三,那么就代表这三次一定会取到了根节点。
0010:将9F预算类别中有预算的上一级承诺项目覆值给目标预算地址中承诺项目。
条件:
USERSTRING2 = X,代表了,成功的取出了9F当中的预算。
分配:
① 源字段为之前步骤中成功取出有预算地址的HELP_FIELDS~USERCMMTITEM
② 目标字段BO_ADDRESS~CMMTITEM,采用覆盖方式分配的值的预算地址中的承诺项目字段。
完成整个定义应如下:
现在可以进行测试了,测试前设定:
承诺项目结构层次如下:
预算如下:
测试结果:
推导前
推导后结果
推导日志见下
看完上面这个例子,可以休息一会,顺便考虑下同样的业务需求,如果承诺项目和基金中心的结构层次深度都是不定,怎么办呢?SAP的派生规则功能太变态,其配置可移置性实在不强,因为每个公司需求不一样,配置就要完全重新弄。
未完待续...