3.2 使用账户分配要素-预算结构
简单讲预算结构就是预算和预算消耗间的映射关系。前文讲过,预算生成和预算消耗都需要使用账户分配元素的组合进行表达,我们把这叫作地址,因此在预算结构里预算生成对应的地址就是预算地址,预算消耗对应的地址就叫作记账地址,预算控制对应的地址就叫作控制地址。预算结构决定了预算地址和记账地址的映射关系,并提供其地址的有效性检查。首先充分理解图3.2-1:
(1)预算结构维护:在进行预算结构的维护时,先进行预算地址的维护,预算地址维护后,可对记账地址进行维护。记账地址维护时会启动映射的预算地址派生(把这个地址叫作索引预算地址,感觉叫这个比较贴切一点),形成记账地址和索引预算地址N∶1的关系。若映射的预算地址派生策略规则没有被配置或为空,则形成记账地址和索引预算地址1∶1关系。索引预算地址在预算结构中配置了检查,会启动检查索引预算地址在现有预算地址中是否存在,如果不存在,则产生报错消息。索引预算地址生成后,系统会同时保存记账地址和它的索引预算地址并记录两者之间的关系。
(2)预算生成:预算生成记账时,如果没有预算结构或有预算结构但预算版本不检查预算地址,则直接作为预算控制地址初始值(预算源),如果预算地址检查配置为检查时(事务码FMBOSTAT),则会检查该地址是否在预算地址中存在,不存在则报错。在后一种情况下,预算地址中存在的条目,才允许生成预算凭证。
图3.2-1
(3)预算消耗记账业务:在预算消耗记账业务(比如FI记账、采购订单创建)发生时,首先会启动记账地址的派生策略推导,推导后的记账地址,在无预算结构存在的情况下,记账地址不会被检查,记账地址直接形成预算控制地址(消耗类)。在有预算结构存在的情况下,预算结构配置为检查记账地址,推导出的记账地址必须在现有记账地址中存在(不存在则会报错),找到现有记账地址后,使用记账地址对应的索引预算地址作为预算控制地址(消耗类)。在有预算结构存在的情况下,预算结构配置不检查记账地址,如果记账地址不存在,会启动第(1)点中的记账地址维护过程,然后将记账地址对应的索引预算地址作为预算控制地址(消耗类)。
注:关于预算控制地址会在后续预算的可用性控制(AVC)中展示。
3.2.1 预算结构的配置
预算结构的配置如图3.2.1-1所示。
1)定义预算地址的派生策略
在图3.2.1-2中新建完成后,可以单击按钮,进行预算地址派生策略的详细配置,如图3.2.1-3中,单击按钮,可以增加相应推导步骤。这里暂时不讲如何建立派生策略规则,由于派生规则在FM中大量使用,非常重要,因此后面会单独用一节来讲派生策略推导规则的使用。这里简单讲一个案例的配置:指定公司代码的记账地址需根据承诺项目来找对应的预算是否存在,如果不存在就找上一级承诺项目,依次类推。假设承诺项目层次结构变式为非标的ZZZ,其层次结构深度最大为3,则推导规则步骤如下:
0001:根据基金中心找公司代码并将公司代码放入USERSTRING1。
注意:图3.2.1-4中目标字段到USERSTRING1(这是一个推导结构使用过程中的用户变量,由系统提供,如果不够用,可以增强推展结构)。目的:取出基金中心的公司代码,作为后继推导步骤执行的条件。注:实现方式有多种,这里用功能函数来实现。
图3.2.1-1
图3.2.1-2
图3.2.1-3
图3.2.1-4
0002:初始化读取预算地址是否成功标志USERSTRING2。
选项卡“条件”如图3.2.1-5所示。
图3.2.1-5
USERSTRING1在步骤0001中取值为基金中心的公司代码,这里用作条件判断。
选项卡“定义”如图3.2.1-6所示。
图3.2.1-6
在满足条件情况下清空读取预算地址是否成功标志USERSTRING2,为后面读取成功设置标识做准备。
0003:将记账地址的承诺项目传给USERCMMTITEM为初始值。
选项卡“条件”:同步骤0002中图3.2.1-5中的条件一样。
选项卡“定义”如图3.2.1-7所示。
图3.2.1-7
目标字段USERCMMTITEM,采用覆盖式分配。
0004:取记账地址是否在预算标识放入USERSTRING2(第一次取预算存在否)。
选项卡“条件”如图3.2.1-8所示。
图3.2.1-8
USERSTRING1的值在步骤0001中取值为基金中心的公司代码,这里用作条件判断,下同。
选项卡“定义”如图3.2.1-9所示。
图3.2.1-9
①功能函数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:预算地址没有取成功取层次变成ZZZ上一级承诺项目=>USERCMMTITEM。
选项卡“条件”如图3.2.1-10所示。
图3.2.1-10
图3.2.1-10中USERSTRING2是由上一步0004传过来的,这里的不等于X就代表取上一步取预算不成功。
选项卡“定义”如图3.2.1-11所示。
图3.2.1-11
①CIVARNT传入参数为承诺项目的层次变式,前面的承诺项目结构层次的配置中自定义了ZZZ备用的层次结构。
②将之前的承诺项目HELP_FIELDS~USERCMMTITEM值作为参数CMMT_ITEM的传入值。
③将取出的承诺项目上一级用覆盖方式再给HELP_FIELDS~USERCMMTITEM承诺项目,作为下一步再找预算地址的依据。
0006:重复定义一次0004步的定义。
0007:重复定义一次0005步的定义。
0008:重复定义一次0004步的定义。
注意,到这一步,一共定义了三次预算地址,假设承诺项目层次结构深度最大为3,那么就代表这三次一定会取到根节点。
0009:将9F预算类别中有预算的上一级承诺项目赋值给目标预算地址中的承诺项目。
选项卡“条件”如图3.2.1-12所示。
图3.2.1-12
图3.2.1-12中USERSTRING2=X,代表成功地取出了9F中的预算。
选项卡“定义”如图3.2.1-13所示。
图3.2.1-13
①源字段为之前步骤中成功取出有预算地址的HELP_FIELDS~USERCMMTITEM。
②目标字段BO_ADDRESS~CMMTITEM,采用新值覆盖方式分配给预算地址中的承诺项目字段。
整个派生策略规则步骤完成定义应如图3.2.1-14所示。
图3.2.1-14
现在可以进行测试了,测试前设定:
承诺项目结构层次如图3.2.1-15所示。
图3.2.1-15
预算如图3.2.1-16所示。
图3.2.1-16
测试结果:
推导前账户分配要素数据如图3.2.1-17所示。
图3.2.1-17
推导执行后的结果,如图3.2.1-18所示。
图3.2.1-18
查看图3.2.1-18中的推导日志,如图3.2.1-19所示。
图3.2.1-19
读者可以思考一下,如果承诺项目和基金中心的结构层次深度都是不定的,怎么办?SAP的派生策略推导规则功能强大,但其配置可移植性不强。每个公司需求不一样,需要的配置也不一样。
2)创建预算结构
为财务范围定义预算结构,用于预算结构的编制,如图3.2.1-20所示。案例这里配置了两个预算结构,一个是常规的预算结构,另一个是多级预算结构(也叫多层预算结构),两者的区别在于后者在生成预算结构的地址前,需要按照相关性的账户分配要素(例如基金中心和承诺项目)结构层次来生成一个预备的地址树,以供最后预算地址、记账地址的生成。用户可根据自己的需求来定义使用哪种。
图3.2.1-20
3)定义预算结构的设置
定义预算结构的设置如图3.2.1-21所示,预算结构使用的主要场景见表3.2.1-1。
图3.2.1-21
表3.2.1-1 预算结构使用的主要场景
后期的预算结构配置,主要针对第二类业务场景展开。了解预算结构使用的主要场景后,图3.2.1-21中的配置主要参数如下:
①地址检查:
B检查两个地址:检查过账地址又检查派生的索引预算地址。当维护记账地址时,其对应的索引预算地址不存在于预算地址主数据中时,产生报错消息。当业务过账生成的记账地址不存在于记账地址主数据中时报错预算消耗地址不允许。
D仅检查派生的预算地址:只检查派生的索引预算地址。当维护记账地址时,其对应的索引预算地址不存在于预算地址主数据中时,产生错误消息。
X仅检查过账地址清单:只检查记账地址。当记账地址过账时,记账地址不存在于记账地址主数据中时报错预算消耗地址不允许。
空:不检查预算结构中的记账地址和索引预算地址,不推荐这种方式。
②预算结构:为财务管理范围分配预算结构。
③BA的衍生策略:为预算结构分配派生策略推导规则。
④版本等级设置:双击“版本等级设置”,设置预算版本的特定指定,如图3.2.1-22所示。
图3.2.1-22
通常这里不需要配置。如果想要为特定的预算版本指定特定的预算结构并进行检查,可在这里指定特定的预算结构,比如两个平行版本的预算,它们对预算地址检查需求不一样,则可分版本来设定预算结构。通常不是特殊需求,这里不用配置。
⑤分类账等级设置:双击“分类账等级设置”进行记账分类账的特别设定,如图3.2.1-23所示。
图3.2.1-23
在一般设置完成后,可对不同的预算消耗记账的过账分类账进行与一般设置不一样的特定设置。例如同时激活了付款预算和承诺预算的情况下,不想对承诺预算的过账分类进行的检查,就把不检查地址、没有索引更新两个勾选。特别注意不是特殊业务(比如只激活单一的预算类别,预算类别后面会讲到),这里不需要进行配置(注:9A是针对付款预算的预算消耗过账分类账,9B是针对承诺预算的预算消耗过账分类账)。
4)激活多级预算结构
指定财务管理范围激活多级预算结构,如图3.2.1-24所示。如果激活后,在某一年度想要不激活多层级预算结构,需加一条配置,从这一年度不激活,“激活”参数不选即可。
图3.2.1-24
5)定义预算结构的层次结构设置
为多层预算结构指定多层次相关的账户分配要素,通常有层次结构的基金中心、承诺项目会被指定为多层,其他的账户分配要素被指定为不相关,如图3.2.1-25所示。如果无层次结构的账户分配要素指定为多层,会使用这些账户分配要素的组结构来作为层次使用,例如基金使用基金组。
图3.2.1-25
双击“分配FMAA排序顺序”,设定账户要素层次结构中各个要素排序的顺序,如图3.2.1-26所示。
图3.2.1-26
在图3.2.1-25中指定与层次相关的账户分配要素后,为账户分配要素的多层次展开指定顺序。排在前面的先展开并显示在前,然后在其每个节点上会展开后一个账户分配要素。比如上面的例子,展开顺序的树为基金中心、承诺项目,每一个基金中心都会展开分配一个承诺项目树,再汇成一根树,如图3.2.1-27所示。
图3.2.1-27
6)激活层次结构更改检查
在图3.2.1-28中,为财务管理范围新加一条,并选择激活的预算类别,再单击按钮,维护多层次预算结构维护时的检查点,如图3.2.1-29所示。
图3.2.1-28
图3.2.1-29
7)激活预算结构的更改日志
激活预算结构的维护记录日志,方便查看预算结构地址修改数据的历史日志,如图3.2.1-30所示。
图3.2.1-30
可以选择激活预算地址、过账地址的更改日志。
对预算结构配置完成后,可以通过事务码FMBS_STAT来查看预算结构配置业务场景情况,如图3.2.1-31所示。
图3.2.1-31
3.2.2 预算结构操作
1.预算地址维护
预算地址维护如图3.2.2-1所示。
图3.2.2-1
1)FMBSBO-单个处理
功能:手工维护预算地址,如图3.2.2-2所示。
图3.2.2-2
①预算类别:选择使用的预算类别,如果激活的是付款预算选择9F,如果激活的是承诺预算,则选择9G(注:预算类别在后面会有介绍的,下同,不再解释)。
②预算结构:选择当前年度使用的预算结构。
③基金管理科目分配选择:可以选择指定范围的账户分配要素值来维护预算地址。被限制为单一值的账户分配要素,不会在维护界面中进行维护。
参数录入后,按<Enter>键,进入维护界面如图3.2.2-3所示。
④图3.2.2-3:检查录入的保存前进行数据检查,存在错误会有消息报出。
⑤图3.2.2-3:工具栏。
:检查录入的保存前进行数据检查,存在错误会有消息报出。
:新增一行,录入地址数据。
:在指定行后插入一行录入地址数据。
:删除选定行数据。
数据录入完成单击按钮进行保存。建议可以根据预算数据在EXCEL中整理出相应的地址,然后复制到此界面的表格中即可。
图3.2.2-3
2)FMBSBO_MULT-批量处理
功能:批量维护预算地址。
①预算类别:选择使用的预算类别,如果激活的是付款预算,选择9F,如果激活的是承诺预算,则选择9G。
②预算结构:选择当前年度使用的预算结构。
③基金管理账户分配的限制:限制需要进行批量维护的账户分配要素范围。
④多重选择FM科目分配:单击此按钮,图3.2.2-4中第③点的选择限制功能被取消,将按照多重复杂的方式来选择账户分配要素范围批量生成预算地址,如图3.2.2-5所示。
图3.2.2-4
(1)基金:可以按照多项选择器来选择值,也可以按照基金中心组来选择值,也可以按照基金类型来选择值。
(2)基金中心:可以按照多项选择器来选择值,也可以按照基金中心组来选择值,还可以勾选选择范围内的所有下级基金中心。
图3.2.2-5
(3)承诺项目:可以按照结构层次来选择(包含其所有下级),也可以按照多项选择器来选择,还可以按照类别来选择等,用户可根据需要来定义条件。
(4)基金计划程序:可以按照多项选择器来选择值,也可以按照基金中心组来选择值,也可以按照基金类型来选择值。
(5)单击按钮,多重选择FM科目分配各项参数录入完成后,执行生成清单,如图3.2.2-6所示。
图3.2.2-6
在图3.2.2-6的清单中选中要生成的行,然后单击“复制值”按钮,返回到主选择界面(见图3.2.2-4)中。
⑤动作:可以选择是创建地址,还是删除已有地址。
⑥测试运行:勾选代表测试运行并可查看结果清单,但不保存数据。
完成参数录入后,按<F8>键生成预算地址数据,如图3.2.2-7所示。
总结:批量维护功能对账户分配要素的筛选条件强大,几乎满足了用户各种各样的需求来生成或删除预算地址。
3)FMBSBOS-显示:用来显示或查询已有的预算地址,其操作界面和参数输入与前面的FMBSBO一样,如图3.2.2-8所示。
4)FMBSBOHIS-显示更改日志:用来显示对预算地址的修改日志。
按<F8>键执行,即可显示预算地址的修改日志,如图3.2.2-9所示。
图3.2.2-7
图3.2.2-8
图3.2.2-9
2.过账地址维护
过账地址维护如图3.2.2-10所示。
图3.2.2-10
1)FMBSPO-单个处理
功能:手工维护记账地址,如图3.2.2-11所示。
图3.2.2-11
过账分类账:如果使用的是9F付款预算则选择9A,如果使用的是9G承诺预算则选择9B。其他参数及操作与前面讲的FMBSBO是一样的。需要注意的是,过账地址维护成功后会生成相应的索引预算地址。
2)FMBSPO_MULT-批量处理
功能:批量生成过账地址,如图3.2.2-12所示。
图3.2.2-12
过账分类账:如果使用的是9F付款预算则选择9A,如果使用的是9G承诺预算则选择9B。其他参数及操作与前面FMBSBO讲的是一样的,这里不再多讲。单击,执行后得到运行结果,如图3.2.2-13所示。
①左侧生成的是记账地址,预算消耗记账业务生成的记账地址会在这里进行检查(配置了检查需求)。
图3.2.2-13
②右侧生成的是记账地址对应的索引预算地址,配置了索引预算地址检查,则要求索引预算地址在预算地址主数据中存在。预算消耗记账业务生成的记账地址在记账地址主数据条目中找到后,会找到其对应的预算索引地址作为预算控制地址消耗源的初始值。
③预算结构存在派生策略规则且涉及条目的派生规则内容不为空时,派生规则的推导结果,形成了N∶1的映射结构。
④预算结构存在但派生规则为空,形成了1∶1的结构。
3)FMBSPOS-显示
查询并显示已存在的过账地址。操作界面参数与FMBSPO相同。
4)FMBSPOHIS-显示更改日志
查询并显示过账地址的修改日志,如图3.2.2-14所示。
图3.2.2-14
5)FMBSIDX_INCON-显示不一致
功能:预算地址的派生策略规则启用后生成了索引预算地址,当规则改变后或规则推导依靠的源数据改变,从而造成派生结果变化,必须重建索引预算地址。而FMBSIDX_INCON则提供现有的索引预算地址与现有派生结果之间的对比检查,如图3.2.2-15所示。
选择要检查的记账地址的分类账(9F预算类别对应9A,9G预算类别对应9B)后,在图3.2.2-15中按<F8>键执行,当有差异时会出现图3.2.2-16所示界面。
图3.2.2-15
图3.2.2-16
①当前的过账地址。
②当前的过账地址已保存在数据库中的索引预算地址。
③修改了前面派生策略规则中使用到的依赖数据源:预算数据,把预算数据冲销了,没有了预算数据,推导依赖数据源变化后,其推导结果发生变化,形成了新的索引预算地址,造成与原来的不一样。
6)FMBSIDX_RECON-重建
功能:预算地址的派生策略规则启用并生成索引预算地址后,当规则改变后或规则依靠的源数据改变,从而造成派生结果变化,必须重建索引预算地址。
图3.2.2-17中按<F8>键执行后,输出结果如图3.2.2-18所示。
图3.2.2-17
图3.2.2-18
可以看到,前面由于派生策略规则推导依赖数据源变化造成派生出的索引预算地址发生变化,已经进行了重新生成。
3.多层预算结构的维护
1)FMHIE_HIEID-编辑层次结构标识
为多层预算结构备用树定义一相标识ID,并定义相关属性,为之后生成备用地址树做准备。如图3.2.2-19所示,按以下步骤进行操作:
①在第一次进入这个事务码时,要求指定财务管理范围和预算结构,指定的预算结构必须配置为多层预算结构。用户在图3.2.2-20所示界面里可以单击进行修改。
图3.2.2-19
图3.2.2-20
②预算类别:选择预算结构的预算类别,付款预算为9F,承诺预算为9G。
③层次结构标识:给定一个标识名称即可,比如Z01。
④录入完成后,可以单击创建标识。如果原标识已存在,则可以单击进行修改,如图3.2.2-21所示。
图3.2.2-21
(1)BA定义规则:定义从多层预算结构备用地址树生成预算地址的有效节点。空白:层次结构中的所有地址都是有效的预算地址;N层次结构中非叶子节点的地址是有效的预算地址。通常在不能明确之前,最好将所有地址都当成有效的备选节点,即选前一个参数。
(2)PA定义规则:定义从多层预算结构备用地址树生成记账地址的有效节点。A层次结构中的所有地址都是有效的过账地址;L层次结构中仅叶子节点是有效的过账地址;空白:过账地址独立于层次结构,这意味着要用事务码FMBSPO/FMBSPO_MULT来生成过账地址,而不是FMBSPO_HIE_MULT来生成过账地址。如果企业要求预算的使用过程的核算做到最细,可以选择L,即只有叶子节点才可以生成记账地址。
2)FMHIE_GENERATION-生成
根据定义好的层次结构标识,可生成多层预算结构备用地址树,如图3.2.2-22所示。
图3.2.2-22
①层次结构标识:选定在事务码FMHIE_HIEID中维护好的层次结构标识ID。
②选择多层预算结构Z00002中定义的与层次结构相关的基金中心(注:在多层预算结构中定义与层次结构无关的账户分配要素就不显示出来了,见前面多层预算结构的配置),可采用清单式或结构式来限制基金中心值。如果选择清单式,可用后面的多项选择器来录入限制值;如果选择结构式,则需要选择主数据的结构层次或主数据组来录入限制值。在这里使用基金中心的标准层次变式0000,用户可根据自己的情况进行选择。
③在第②步中选择按结构来录入限制值时,对其结构中的账户分配要素按照多项选择器录入限制值。比如限制为基金中心标准层次不等于根节点ROOT。
④选择多层预算结构Z00002中定义的与层次结构相关的承诺项目,可采用清单式或结构式来限制承诺。类似②步的操作。在这里使用承诺项目的备用层次变式ZZZ,用户可根据自己的情况进行选择。
⑤在第④步中选择按结构来录入限制值时,其操作类似第③步。
⑥账户分配的顺序:默认来自多层预算结构的配置,用户可以视需求进行修改。顺序在前的先展开并放在前面,然后在其每个节点上展开后一个顺序账户分配要素。注:见多层次预算结构配置中的账户分配顺序。
⑦测试运行:选中代表测试运行,不选表示正式更新运行。通常先测试运行无错后进行正式更新运行。
参数录入后,单击执行生成多层预算结构备用地址树,如图3.2.2-23所示。
图3.2.2-23
3)FMHIE_CHANGE-更改
对已生成多层预算结构备用地址树进行人工修改调整,如图3.2.2-24所示。
图3.2.2-24
单击执行进入修改界面,如图3.2.2-25所示。
①:选中节点准备剪切走。
②:将第①步要粘贴到新选中的节点下。
③:删除选中的节点。
④在选中节点相同级次上插入节点,如图3.2.2-26所示。
手工插入节点:手工输入各个账户分配要素的值,比如这里的基金中心、承诺项目。
从变式/组插入:从账户分配要素的层次结构中或组中选择并插入。
从清单插入:使用多项选择器选择账户分配要素并插入。
⑤在选中节点之下插入节点。其他操作类同第④步。
⑥设置为最高节点:将当前节点设为无父节点。
⑦可以在树结构显示区域拖动节点来移动其所处位置。
图3.2.2-25
图3.2.2-26
⑧修改完成后,单击保存。
4)FMHIE_DISPLAY-显示
用来显示多层预算结构备用树的层次结构。
5)FMHIE_COPY-复制
用于复制多层次预算结构。比如预算结构没有什么变化时,可从上一年复制一个到下一年,如图3.2.2-27所示。
①指定复制源的参数,包括预算结构、财年、预算类别、层次结构标识。
②指定复制源中要限制的账户分配要素值范围。
③指定要复制生成的预算结构参数,其中层次结构标识在第一次录入时,会有弹出框要求指定层次结构参数的BA定义规则和PA定义规则。
④用途再分配:勾选则可启用对地址的重派生规则推导。例如:承诺项目或基金中心使用了年度相关性,且其中结构发生了较大变化,上一年结构地址可以使用重派生规则推导来生成下一年的结构地址。
图3.2.2-27
⑤测试运行:勾选表示测试运行,测试无误后进入正式运行。
6)FMHIE_DELETE-删除
用来删除多层预算结构的备用地址树和层次结构标识,如图3.2.2-28所示。
图3.2.2-28
选中删除层次结构标识时,在删除备用地址树的同时把层次结构标识也删除了。
7)FMBSBO_HIE_MULT-维护预算地址
根据层次结构标识生成的备用地址树来生成预算地址,如图3.2.2-29所示。
①指定多层预算结构的层次结构标识。
②指定层次结构标识备用地址树中用到的账户分配要素值的限制范围。
图3.2.2-29
③限制多层预算结构中被定义为无关的账户分配要素值的限制范围。比如这里没有使用到的基金和基金计划。
④动作:创建地址或删除地址,后面的“包括层次结构路径”,勾选代表除了生成预算地址外,还生成预算地址树,例如生成了预算地址的父、子结构后,可以在预算地址的派生规则中使用函数FMHIE_GET_PARENT_ADDRESS来取得其父节点。注意:非多层次预算结构形成的地址没有父、子节点关系,只是地址中的某个账户分配要素有父、子节点关系。
8)FMBSPO_HIE_MULT-维护过账地址
根据层次结构标识生成的备用地址树来生成记账地址,如图3.2.2-30所示。
①指定多层预算结构的层次结构标识。
②指定层次结构标识备用地址树中用到的账户分配要素值的限制范围。
③限制多层预算结构中被定义为无关的账户分配要素值的限制范围。比如这里没有使用到的基金和基金计划。
④动作:创建地址或删除地址。
在图3.2.2-30中按<F8>键执行更新如图3.2.2-31所示。
在层次结构标识中设置了PA规则,即L-只有叶子节点才有有效的过账地址,因此生成的过账地址都是备用地址树中的叶子节点。
图3.2.2-30
图3.2.2-31
3.2.3 预算结构增强扩展使用
预算结构提供了预算地址、记账地址、索引预算地址的生成功能,在实际使用中可能存在预算地址、记账地址的特殊检查,或预算地址派生策略规则功能不满足需求的时候,可以使用预算结构的增强来达到满足用户需求的目标。
1.预算地址派生规则的BADI增强
系统提供了BADI:FMBS_VALID_ADDRESS供用户使用进行增强。它提供以下功能:
FMBS_VALID_ADDRESS~VALIDATE_BO:增强预算地址的有效性检查,用户可以扩展在方法中加入自己的逻辑代码来实现。
FMBS_VALID_ADDRESS~VALIDATE_PO:增强记账地址的有效性检查,用户可以扩展在方法中加入自己的逻辑代码来实现。
FMBS_VALID_ADDRESS~FILL_ADDRESS_SUPPL:增强预算地址派生策略规则的数据源填写,用户可以写入自己的逻辑代码来实现。
比如前面讲到的派生策略规则的例子中,提出了基金中心和承诺项目都是不定深度的层次结构,如何完成推导呢?可以按照如下方法来进行:
(1)分析:要满足基金中心、承诺项目不定深度层次结构情况下其上级的预算成功存在,首先需要一个成功找到预算的标识,其次是返回预算存在的上级的承诺项目和基金中心值。那么最少给出预算源结构的三个字段:
ZZB_FUNDSCTR 上层基金中心
ZZB_CMMTITEM 上层承诺项目
ZZB_CHECK 预算存在标识(成功为X)
在该方法的CHANGING参数中,C_S_ADDRESS_SUPPL的关联类型为FMBS_S_BSAC_ADDRESS_SUPPL,如图3.2.3-1所示。
图3.2.3-1
在图3.2.3-1中,双击FMBS_S_BSAC_ADDRESS_SUPPL,显示如图3.2.3-2所示。
图3.2.3-2
其中预留了用户自定义扩展结构CI_FMBS_S_BSAC_ADDRESS_SUPPL,因此只需要把前面分析的三个字段扩展进去并激活,如图3.2.3-3所示。
图3.2.3-3
(2)实施该BADI(TCODE:SE19来实施),为FILL_ADDRESS_SUPPL写入自己的代码逻辑。基本逻辑如下:
第一步:根据记账地址源中的基金中心和承诺项目数据调用函数FMHIE_GET_BUDGET_ATTRIBUTES取预算地址等于记账地址是否有预算,取成功则标识ZZB_CHECK=X,ZZB_FUNDSCTR为原记账地址的基金中心,ZZB_CMMTITEM为原地址中的承诺项目。
第二步:如果第一步不成功,则调用函数FMDT_READ_HIER_CMMT_ITEM取上一级承诺项目,再用函数FMHIE_GET_BUDGET_ATTRIBUTES取上一级承诺项目(其他账户分配要素不变)的预算,不成功则循环这一过程,直到根节点承诺项目。成功则标识ZZB_CHECK=X,ZZB_FUNDSCTR为当前的基金中心,ZZB_CMMTITEM为上一级承诺项目。
第三步:如果第二步不成功,则调用函数FMDT_READ_HIER_FUNDS_CTR取基金中心的上一级,然后以上一级基金中心为当前基金中心重复第二步过程,不成功则循环这一过程,直到根节点基金中心。成功则标识ZZB_CHECK=X,ZZB_FUNDSCTR为上一级基金中心,ZZB_CMMTITEM为第二步过程中的承诺项目。
第四步:如果前三步都不成功,则标识ZZB_CHECK为空,ZZB_FUNDSCTR为空,ZZB_CMMTITEM为空,代表没能取得基金中心、承诺项目层次结构向上的预算存在。
详细参考伪代码:参考本书附录11.2中的伪代码。
完成上述开发后,就可以在预算地址的派生策略规则里进行使用了,例如为基金中心创建分配步骤定义如下:
选项卡“条件”的配置如图3.2.3-4所示。
图3.2.3-4
选项卡“定义”的配置如图3.2.3-5所示。
建好基金中心的分配步骤规则后,再为承诺项目再创建一个分配规则,与基金中心的类似。
图3.2.3-5
2.预算地址派生规则中用到的HELP_FIELDS字段扩展
在创建派生策略规则过程中,如果使用了比较复杂的推导规则,例如后一步是建立在前几步结果的基础上时,可能会出现辅助用于推导的HELP_FILEDs字段不够用,这个时候,SAP系统提供了可以扩展用户定义的HELP_FIELDs。预算地址派生用到的HELP_FIELDS结构为FMBS_S_BSAC_HELP_FIELDS,它预留了给用户扩展的结构CI_FMBS_S_BSAC_HELP_FIELDS,用户只需扩展定义并激活它即可,如图3.2.3-6所示。
图3.2.3-6
完成后,在预算派生地址规则的维护界面中,可以看到用户自定义扩展的字段,如图3.2.3-7所示。
图3.2.3-7
读者可以思考一下,能不能在推导规则中使用用户自己定义开发的函数,类似使用SAP提供的标准函数?