调用函数 KBPP_EXTERN_UPDATE_CO
CJ40
IF <fs_tab>-wert1_cb IS NOT INITIAL.
* cj40
ls_bpak-e_objnr = <fs_tab>-objnr.
ls_bpak-e_vorga = 'KSTP'. "执行了CJ40 后可查看RPSCO表 的预算类型字段VORGA
ls_bpak-e_versn = '000'. "RPSCO表的版本号
ls_bpak-twaer = <fs_tab>-pwpos_cb. "币别
ls_bpak-wert = <fs_tab>-wert1_cb. "金额
APPEND ls_bpak TO lt_bpak.
*修改总体预算(一定要先修改总体的,不然增强年度预算的时候会检查总体预算不够,就会报错 cj40
CALL FUNCTION 'KBPP_EXTERN_UPDATE_CO'
EXPORTING
i_budget_activity = 'KSTP'
i_budget_activ_sup_ret = ''
i_budget_distribution_allowed = ''
i_commit_data = ''
i_delta_amounts = '' "X表示追加,空表示替代
i_rollup_data = '' "X表示向顶层汇总
i_check_plan_data = ''
i_application = ''
i_commit_all = 'X' "提交
IMPORTING
e_errors_found = lv_oax
TABLES
it_bpak = lt_bpak
it_return = lt_return
EXCEPTIONS
no_update = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
DATA lv_string TYPE string.
CLEAR lv_string.
IF line_exists( lt_return[ type = 'E' ] ) AND line_exists( lt_return[ type = 'I' ] ) .
<fs_tab>-icon = '@0A@'.
LOOP AT lt_return WHERE type = 'E' OR type = 'I' .
lv_string = lv_string && lt_return-message.
ENDLOOP.
<fs_tab>-message = lv_string.
CLEAR:<fs_tab>-wert1_cb.
CONTINUE.
ELSE.
<fs_tab>-icon = '@08@'.
<fs_tab>-message = <fs_tab>-posid && '更改计划成本成功!'.
<fs_tab>-success = 'X'.
ENDIF.
ENDIF.
ENDIF.
CJ42
IF <fs_tab>-wert1_sr IS NOT INITIAL.
ls_bpak_sr-e_objnr = <fs_tab>-objnr.
ls_bpak_sr-e_vorga = 'KSTR'.
ls_bpak_sr-e_versn = '000'.
ls_bpak_sr-twaer = <fs_tab>-pwpos_sr.
ls_bpak_sr-wert = - <fs_tab>-wert1_sr.
APPEND ls_bpak_sr TO lt_bpak_sr.
CALL FUNCTION 'KBPP_EXTERN_UPDATE_CO'
EXPORTING
i_budget_activity = 'KSTR' "与CJ40不同的地方
i_budget_activ_sup_ret = ''
i_budget_distribution_allowed = ''
i_commit_data = ''
i_delta_amounts = ''
i_rollup_data = ''
i_check_plan_data = ''
i_application = ''
i_commit_all = 'X'
IMPORTING
e_errors_found = lv_oax
TABLES
it_bpak = lt_bpak_sr
it_return = lt_return
EXCEPTIONS
no_update = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
IF line_exists( lt_return[ type = 'E' ] ) AND line_exists( lt_return[ type = 'I' ] ) .
<fs_tab>-icon = '@0A@'.
LOOP AT lt_return WHERE type = 'E' OR type = 'I' .
lv_string = lv_string && lt_return-message.
ENDLOOP.
<fs_tab>-message = <fs_tab>-message && lv_string.
CLEAR:<fs_tab>-wert1_sr.
CONTINUE.
ELSE.
<fs_tab>-icon = '@08@'.
<fs_tab>-message = <fs_tab>-message && <fs_tab>-posid && '更改计划收入成功!'.
<fs_tab>-success = 'X'.
ENDIF.
ENDIF.
ENDIF.
IF ls_bpak_sr-wert IS INITIAL AND ls_bpak-wert IS INITIAL.
* MESSAGE '请维护计划成本/计划收入' TYPE 'S' DISPLAY LIKE 'E'.
<fs_tab>-icon = '@09@'.
<fs_tab>-message = '请维护计划成本/计划收入!'.
ENDIF.
ENDLOOP.
提示
这里我试过在CJ42的时候把为空的参数不传值(直接注释),但是程序执行下来和直接SE37执行的效果不同,会报 “总计划值少于已分配的计划值” 的错误。
&spm=1001.2101.3001.5002&articleId=141635048&d=1&t=3&u=28213367f0404d39a9e9a40ebdaf445d)
356

被折叠的 条评论
为什么被折叠?



