BPC日记-BAdI UJJ_CALCULATED_AMOUNT-保存问题

2020-09-15 18:26发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


亲爱的专家。

实施BAdI UJJ_CALCULATE_AMOUNT时出现问题。 当我保存日记帐且某些字段为空白时,会发生错误。

此后,我跟踪BAdI的检查条件。 我发现在此行的 CL_UJJ_JRN_MGR 方法 CHECK_CALCULATED_AMOUNTS 中出现了错误:

凭直觉,我试图确保BAdI的输出没有空白。 所以我将每个维度的值都更改为'#'。 更改所有内容后,便可以保存日记。 但是,日记帐发布时会出现新的问题。

现在,我不知道为什么会这样。

这是我的BAdI代码:

方法IF_UJJ_CALCULATED_AMOUNT〜CALCULATE_AMOUNTS。
     常数:
         dim_acct类型uj_dim_name值'ZGRPACCNO',
         dim_flow类型uj_dim_name值'ZFLOW',


         关闭流类型uj_dim_name值'F_999',
         递增流类型uj_dim_name值'F_410',
         减少流类型uj_dim_name值'F_420',


         net_income_cy_acct类型uj_dim_name值'0035000004',
         re_up_acct类型uj_dim_name值'0035000003'。


     数据:
         ls_journal_amounts类型ujj_s_badi_ca_journal_amounts,
         ls_journal_amounts2类型ujj_s_badi_ca_journal_amounts,
         l_dim_member类型uj_dim_member,
         l_is_leaf_of_1类型abap_bool,
         l_tabkey类型的tabkey,
         l_is_leaf_of_2键入abap_bool,
         l_is_leaf_of_f_tot类型abap_bool,
         l_acct_property类型uj_value,
         ls_amount_details类型ujj_s_badi_ca_amount,
         ls_amount类型ujj_s_badi_ca_amount,
         ls_amount2类型ujj_s_badi_ca_amount,
         lo_exception类型引用到cx_root,
         lo_static_check类型参考cx_static_check,


         l_acct_value类型uj_value,
         l_flow_value类型uj_value,


         l_flow_is_available类型abap_bool,
         l_acct_is_available类型abap_bool,


         member_temp类型ujj_s_keymem。




     字段符号:
         键入ujj_s_keymem,
         类型ujj_s_keymem,
         类型ujj_s_keymem,
         类型uj_value,
         类型ujj_s_badi_ca_amount,
         键入ujj_s_badi_ca_journal。


 *永远循环调试
 *数据flag_debug类型abap_bool值abap_true。
 * WHILE flag_debug = abap_true。
 *结束。


     尝试。
 *遍历所有日记
         循环到分配的it_journals。
             清除ls_journal_amounts。
             ls_journal_amounts-journal_id =  -jrn_id。


 *循环日记的每一行
             循环-分配的数量。
 *获取总帐帐户
                 l_tabkey = dim_acct。
                 读取表-成员,使用键tabkey = l_tabkey分配。
                 如果sy-subrc EQ 0。
                     l_acct_value = -成员。
                 万一。


 *获得流量
                 l_tabkey = dim_flow。
                 读取表-成员,使用键tabkey = l_tabkey分配。
                 如果sy-subrc EQ 0。
                     l_flow_value = -成员。
                 万一。


                 ls_amount = 。
                 清除ls_amount-members。
                 在中循环-分配的成员。
                     如果 -is_hdr_fld等于abap_false。
                         将对应的移动到member_temp。
                         IF member_temp-member =''。
                             member_temp-member ='#'。
                         万一。
                         将member_temp附加到ls_amount-members。
                     万一。
                 结束循环。


 *获取总帐科目的字段符号
                 l_tabkey = dim_acct。
                 读取表ls_amount-members,分配键为tabkey = l_tabkey的。
                 如果sy-subrc EQ 0。
                     l_acct_is_available = abap_true。
                 万一。
 *获取流程的字段符号
                 l_tabkey = dim_flow。
                 读取表ls_amount-members,使用键tabkey = l_tabkey分配。
                 如果sy-subrc EQ 0。
                     l_flow_is_available = abap_true。
                 万一。
 *检查会员流和帐户是否同时存在
                 如果l_flow_is_available EQ abap_true和l_acct_is_available EQ abap_true。


 *如果组帐户是资产负债表
                     如果l_acct_value> ='0010000000'并且l_acct_value <='0039999999'。
 *创建期末余额
                         如果l_flow_value <> close_flow。
                              -member =闭合流。
                             将ls_amount附加到ls_journal_amounts-amounts。
                         万一。
 *如果组帐户是盈亏
                     elseif l_acct_value> ='0040000000'和l_acct_value <='0089999999'。
 *将"损益"数据复制到流量为F_300的损益本年度
                          -member ='F_300'。
                         -成员= net_income_cy_acct。
                         将ls_amount附加到ls_journal_amounts-amounts。
 *将"利润和亏损"数据复制到流量关闭的当年利润和亏损
                          -member =闭合流。
                         -成员= net_income_cy_acct。
                         将ls_amount附加到ls_journal_amounts-amounts。
                     elseif l_acct_value> ='0090000000'和l_acct_value <='0099999999'。
                         如果l_acct_value ='0091100001'。
                              -member ='F_308'。
                              -member ='0034000001'。
                             将ls_amount附加到ls_journal_amounts-amounts。
                              -member =闭合流。
                             将ls_amount附加到ls_journal_amounts-amounts。
                         elseif l_acct_value ='0091100002'。
                              -member ='F_309'。
                              -member ='0034000002'。
                             将ls_amount附加到ls_journal_amounts-amounts。
                              -member =闭合流。
                             将ls_amount附加到ls_journal_amounts-amounts。
                         elseif l_acct_value ='0091100003'。
                              -member ='F_315'。
                              -member ='0034000006'。
                             将ls_amount附加到ls_journal_amounts-amounts。
                              -member =闭合流。
                             将ls_amount附加到ls_journal_amounts-amounts。
                         elseif l_acct_value ='0091100004'。
                              -member ='F_314'。
                              -member ='0034000005'。
                             将ls_amount附加到ls_journal_amounts-amounts。
                              -member =闭合流。
                             将ls_amount附加到ls_journal_amounts-amounts。
                         elseif l_acct_value ='0091199998'。
                              -member ='F_310'。
                              -member ='0034000004'。
                             将ls_amount附加到ls_journal_amounts-amounts。
                              -member =闭合流。
                             将ls_amount附加到ls_journal_amounts-amounts。
                         elseif l_acct_value ='0091105001'。
                              -member ='F_318'。
                              -member ='0034100001'。
                             将ls_amount附加到ls_journal_amounts-amounts。
                              -member =闭合流。
                             将ls_amount附加到ls_journal_amounts-amounts。
                         elseif l_acct_value ='0091105002'。
                              -member ='F_317'。
                              -member ='0034100002'。
                             将ls_amount附加到ls_journal_amounts-amounts。
                              -member =闭合流。
                             将ls_amount附加到ls_journal_amounts-amounts。
                         elseif l_acct_value ='0091200001'。
                              -member ='F_316'。
                              -member ='0034000007'。
                             将ls_amount附加到ls_journal_amounts-amounts。
                              -member =闭合流。
                             将ls_amount附加到ls_journal_amounts-amounts。
                         万一。
                     万一。
                 万一。
             结束循环。
             如果lines(ls_journal_amounts-amounts)> 0。
                 将ls_journal_amounts附加到et_calculated_amounts。
             万一。
         结束循环。
     将cx_root捕获到lo_exception中。
     引发异常类型cx_ujj_exception
         出口
             前一个= lo_exception
             textid = cx_ujj_exception => ex_badi_exception。
     努力。
 方法。


 

注意:
这是我的系统规范:

SAP NETWEAVER 7.5

亲切的问候,
钱德拉.M.P

(98.2 kB)

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


亲爱的专家。

实施BAdI UJJ_CALCULATE_AMOUNT时出现问题。 当我保存日记帐且某些字段为空白时,会发生错误。

此后,我跟踪BAdI的检查条件。 我发现在此行的 CL_UJJ_JRN_MGR 方法 CHECK_CALCULATED_AMOUNTS 中出现了错误:

凭直觉,我试图确保BAdI的输出没有空白。 所以我将每个维度的值都更改为'#'。 更改所有内容后,便可以保存日记。 但是,日记帐发布时会出现新的问题。

现在,我不知道为什么会这样。

这是我的BAdI代码:

方法IF_UJJ_CALCULATED_AMOUNT〜CALCULATE_AMOUNTS。
     常数:
         dim_acct类型uj_dim_name值'ZGRPACCNO',
         dim_flow类型uj_dim_name值'ZFLOW',


         关闭流类型uj_dim_name值'F_999',
         递增流类型uj_dim_name值'F_410',
         减少流类型uj_dim_name值'F_420',


         net_income_cy_acct类型uj_dim_name值'0035000004',
         re_up_acct类型uj_dim_name值'0035000003'。


     数据:
         ls_journal_amounts类型ujj_s_badi_ca_journal_amounts,
         ls_journal_amounts2类型ujj_s_badi_ca_journal_amounts,
         l_dim_member类型uj_dim_member,
         l_is_leaf_of_1类型abap_bool,
         l_tabkey类型的tabkey,
         l_is_leaf_of_2键入abap_bool,
         l_is_leaf_of_f_tot类型abap_bool,
         l_acct_property类型uj_value,
         ls_amount_details类型ujj_s_badi_ca_amount,
         ls_amount类型ujj_s_badi_ca_amount,
         ls_amount2类型ujj_s_badi_ca_amount,
         lo_exception类型引用到cx_root,
         lo_static_check类型参考cx_static_check,


         l_acct_value类型uj_value,
         l_flow_value类型uj_value,


         l_flow_is_available类型abap_bool,
         l_acct_is_available类型abap_bool,


         member_temp类型ujj_s_keymem。




     字段符号:
         键入ujj_s_keymem,
         类型ujj_s_keymem,
         类型ujj_s_keymem,
         类型uj_value,
         类型ujj_s_badi_ca_amount,
         键入ujj_s_badi_ca_journal。


 *永远循环调试
 *数据flag_debug类型abap_bool值abap_true。
 * WHILE flag_debug = abap_true。
 *结束。


     尝试。
 *遍历所有日记
         循环到分配的it_journals。
             清除ls_journal_amounts。
             ls_journal_amounts-journal_id =  -jrn_id。


 *循环日记的每一行
             循环-分配的数量。
 *获取总帐帐户
                 l_tabkey = dim_acct。
                 读取表-成员,使用键tabkey = l_tabkey分配。
                 如果sy-subrc EQ 0。
                     l_acct_value = -成员。
                 万一。


 *获得流量
                 l_tabkey = dim_flow。
                 读取表-成员,使用键tabkey = l_tabkey分配。
                 如果sy-subrc EQ 0。
                     l_flow_value = -成员。
                 万一。


                 ls_amount = 。
                 清除ls_amount-members。
                 在中循环-分配的成员。
                     如果 -is_hdr_fld等于abap_false。
                         将对应的移动到member_temp。
                         IF member_temp-member =''。
                             member_temp-member ='#'。
                         万一。
                         将member_temp附加到ls_amount-members。
                     万一。
                 结束循环。


 *获取总帐科目的字段符号
                 l_tabkey = dim_acct。
                 读取表ls_amount-members,分配键为tabkey = l_tabkey的。
                 如果sy-subrc EQ 0。
                     l_acct_is_available = abap_true。
                 万一。
 *获取流程的字段符号
                 l_tabkey = dim_flow。
                 读取表ls_amount-members,使用键tabkey = l_tabkey分配。
                 如果sy-subrc EQ 0。
                     l_flow_is_available = abap_true。
                 万一。
 *检查会员流和帐户是否同时存在
                 如果l_flow_is_available EQ abap_true和l_acct_is_available EQ abap_true。


 *如果组帐户是资产负债表
                     如果l_acct_value> ='0010000000'并且l_acct_value <='0039999999'。
 *创建期末余额
                         如果l_flow_value <> close_flow。
                              -member =闭合流。
                             将ls_amount附加到ls_journal_amounts-amounts。
                         万一。
 *如果组帐户是盈亏
                     elseif l_acct_value> ='0040000000'和l_acct_value <='0089999999'。
 *将"损益"数据复制到流量为F_300的损益本年度
                          -member ='F_300'。
                         -成员= net_income_cy_acct。
                         将ls_amount附加到ls_journal_amounts-amounts。
 *将"利润和亏损"数据复制到流量关闭的当年利润和亏损
                          -member =闭合流。
                         -成员= net_income_cy_acct。
                         将ls_amount附加到ls_journal_amounts-amounts。
                     elseif l_acct_value> ='0090000000'和l_acct_value <='0099999999'。
                         如果l_acct_value ='0091100001'。
                              -member ='F_308'。
                              -member ='0034000001'。
                             将ls_amount附加到ls_journal_amounts-amounts。
                              -member =闭合流。
                             将ls_amount附加到ls_journal_amounts-amounts。
                         elseif l_acct_value ='0091100002'。
                              -member ='F_309'。
                              -member ='0034000002'。
                             将ls_amount附加到ls_journal_amounts-amounts。
                              -member =闭合流。
                             将ls_amount附加到ls_journal_amounts-amounts。
                         elseif l_acct_value ='0091100003'。
                              -member ='F_315'。
                              -member ='0034000006'。
                             将ls_amount附加到ls_journal_amounts-amounts。
                              -member =闭合流。
                             将ls_amount附加到ls_journal_amounts-amounts。
                         elseif l_acct_value ='0091100004'。
                              -member ='F_314'。
                              -member ='0034000005'。
                             将ls_amount附加到ls_journal_amounts-amounts。
                              -member =闭合流。
                             将ls_amount附加到ls_journal_amounts-amounts。
                         elseif l_acct_value ='0091199998'。
                              -member ='F_310'。
                              -member ='0034000004'。
                             将ls_amount附加到ls_journal_amounts-amounts。
                              -member =闭合流。
                             将ls_amount附加到ls_journal_amounts-amounts。
                         elseif l_acct_value ='0091105001'。
                              -member ='F_318'。
                              -member ='0034100001'。
                             将ls_amount附加到ls_journal_amounts-amounts。
                              -member =闭合流。
                             将ls_amount附加到ls_journal_amounts-amounts。
                         elseif l_acct_value ='0091105002'。
                              -member ='F_317'。
                              -member ='0034100002'。
                             将ls_amount附加到ls_journal_amounts-amounts。
                              -member =闭合流。
                             将ls_amount附加到ls_journal_amounts-amounts。
                         elseif l_acct_value ='0091200001'。
                              -member ='F_316'。
                              -member ='0034000007'。
                             将ls_amount附加到ls_journal_amounts-amounts。
                              -member =闭合流。
                             将ls_amount附加到ls_journal_amounts-amounts。
                         万一。
                     万一。
                 万一。
             结束循环。
             如果lines(ls_journal_amounts-amounts)> 0。
                 将ls_journal_amounts附加到et_calculated_amounts。
             万一。
         结束循环。
     将cx_root捕获到lo_exception中。
     引发异常类型cx_ujj_exception
         出口
             前一个= lo_exception
             textid = cx_ujj_exception => ex_badi_exception。
     努力。
 方法。


 

注意:
这是我的系统规范:

SAP NETWEAVER 7.5

亲切的问候,
钱德拉.M.P

(98.2 kB)
付费偷看设置
发送
2条回答
打个大熊猫
1楼-- · 2020-09-15 19:14

问有关badi的问题,也不提供badi代码? 奇怪的方法!

SKY徐
2楼-- · 2020-09-15 19:06

我的糟糕:)
我在问题中添加了代码。

一周热门 更多>