预算结构提供了预算地址、记账地址、索引预算地址的生成功能,在实际使用中可能存在预算地址、记账地址的特殊检查,或预算地址派生策略规则功能不满足需求的时候,可以使用预算结构的增强来达到满足用户需求的目标。
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为原地址中的承诺项目。(www.xing528.com)
第二步:如果第一步不成功,则调用函数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提供的标准函数?
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。