BAPI:KBPP_EXTERN_UPDATE_CO, TCODE:CJ30/CJ40
要實現CJ30更新或者追加項目(WBS)的預算,可以使用如下函數:?KBPP_EXTERN_UPDATE_CO
?我現在要實現的是修改年度預算和增加總體的預算,如下步驟可以實現需要的功能:
1、????DATA:?lt_bpak?TYPE?STANDARD?TABLE?OF?bpak?WITH?HEADER?LINE.
????????DATA:lt_bpak_n?TYPE?STANDARD?TABLE?OF?bpak?WITH?HEADER?LINE.
?? ? ? ?DATA:?lt_retturn?TYPE?STANDARD?TABLE?OF?bapiret2?WITH?HEADER?LINE.
2、?LOOP?AT?gt_itab.
????CLEAR?l_wtjhr.
????DATA:?l_pspnr?LIKE?prps-pspnr.
????CALL?FUNCTION?'CONVERSION_EXIT_ABPSP_INPUT'
??????EXPORTING
????????input?????=?gt_itab-posid
??????IMPORTING
????????output????=?l_pspnr
??????EXCEPTIONS
????????not_found?=?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.
????ENDIF.
????SELECT?SINGLE?objnr?INTO?lt_bpak-e_objnr?FROM?prps?WHERE?pspnr?=?l_pspnr.
????IF?sy-subrc?EQ?0.
??????lt_bpak-e_vorga?=?'KBUD'.
??????lt_bpak-twaer?=?'CNY'.
??????lt_bpak-wert?=?gt_itab-wtjhr.
??????lt_bpak-e_vorga?=?'KBUD'.
?SELECT?wtjhr?INTO?l_wtjhr?FROM??bpja?
WHERE?objnr?=?lt_bpak-e_objnr?
AND?wrttp?=?'41'??
AND?vorga?=?'KBUD'?
AND?twaer?=?'CNY'?
AND?gjahr?NE?p_gjahr.
????????lt_bpak-wert?=?lt_bpak-wert?+?l_wtjhr.
????????CLEAR?l_wtjhr.
??????ENDSELECT.
??????APPEND?lt_bpak.
??????MOVE-CORRESPONDING?lt_bpak?TO?lt_bpak_n.
??????lt_bpak_n-e_gjahr?=?p_gjahr.
??????lt_bpak_n-wert?=?gt_itab-wtjhr.
??????APPEND?lt_bpak_n.
????ENDIF.
????CLEAR:?lt_bpak,lt_bpak_n.
??ENDLOOP.
**修改總體預算(一定要先修改總體的,不然增強年度預算的時候會檢查總體預算不夠,就會報錯
????CALL?FUNCTION?'KBPP_EXTERN_UPDATE_CO'
???EXPORTING
?????i_budget_activity????????????=?'KBUD'
*?????i_budget_activ_sup_ret???????=?'X'
*?????I_COMMIT_DATA????????????????=?'X'
?????i_delta_amounts??????????????=?''
?????i_rollup_data????????????????=?''
*????I_CHECK_PLAN_DATA????????????=?'X'
*????i_application????????????????=?'P'
????i_commit_all?????????????????=?'X'
*?IMPORTING
*???E_ERRORS_FOUND???????????????=
???TABLES
?????it_bpak??????????????????????=?lt_bpak[]
?????it_return????????????????????=?lt_retturn[]
??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.
??ENDIF.
**修改年度預算
????REFRESH?lt_retturn.
??CALL?FUNCTION?'KBPP_EXTERN_UPDATE_CO'
???EXPORTING
?????i_budget_activity????????????=?'KBUD'
*?????i_budget_activ_sup_ret???????=?'X'
*?????I_COMMIT_DATA????????????????=?'X'
?????i_delta_amounts??????????????=?''
?????i_rollup_data????????????????=?''
*????I_CHECK_PLAN_DATA????????????=?'X'
????i_application????????????????=?'P'
????i_commit_all?????????????????=?'X'
*?IMPORTING
*???E_ERRORS_FOUND???????????????=
???TABLES
?????it_bpak??????????????????????=?lt_bpak_n[]
?????it_return????????????????????=?lt_retturn[]
??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.
??ENDIF.
注意點:
1、一定要先修改頂層WBS,再一層一層往下修改,不然的話,檢查上層預算不夠,就會報錯
2、i_delta_amounts這個參數等于'X'的話,就是追加,等于'',就是修改
3、i_rollup_data這個參數等于'X'的話,就會自動往上層的WBS上加預算,等于'',就不會自動加
4、另外個人覺得這個函數寫的有一點點問題,函數里面有個???SORT?it_bpak?BY?e_ges?DESCENDING?.
??但是,當我們是修改總體預算的時候,E_GES都是'X',那么排序的時候就會亂掉,有可能會把底層的WBS放到上面,上層的WBS放到下面,這個時候再修改預算的時候,尤其是一個新的wbs,就會報錯說,下層WBS預算大于上層WBS預算,我找了很久參數,也沒實現這個問題,于是自己把標準程序改了一下,變成了?SORT?it_bpak?BY?e_ges?DESCENDING?E_OBJNR?ASCENDING.
總結
以上是生活随笔為你收集整理的BAPI:KBPP_EXTERN_UPDATE_CO, TCODE:CJ30/CJ40的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: EXCEL文件上传与下载
- 下一篇: 获取日期对应的财务期间