ABAP PS更改计划成本和计划收入(CJ40/CJ42)

调用函数 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执行的效果不同,会报 “总计划值少于已分配的计划值” 的错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值