前面介绍使用Function Module:KBPP_EXTERN_UPDATE_CO进行CJ41时,可能出现概算不能完全更新的问题,提示概算比已有的概算小等等,其他几篇博文也提到该问题,总之,想要一次更新全部的概算,成功的机会不大。

分析问题原因,如果我需要将一个WBS节点的概算调大,如果你不从该WBS的上层先加大概算,那么直接修改就会报错,反之如果需要将一个WBS节点的概算调整小,那么应该从根节点向上层次逐层修改,可是,如果出现有的层次调整变大,有的变小,那么就复杂了。

有没有简单的办法呢?经过调试,其实即使报错,也有部分节点更新成功,使用同一组数据,多执行几次,就全部修改完了。所以为了简化程序,将同一组数据多次调用该函数,发现有错误就再次调用,完全没有错误,就停止执行。执行的次数,同你的数据中WBS有几层,示例代码如下:


   sort lt_wbs by stufe.

   loop at lt_wbs into ls_wbs.

     clear lt_bpak.
     select single objnr into lt_bpak-e_objnr
       from prps
       where pspnr ls_wbs-pspnr.

     lt_bpak-e_vorga 'KSTP'.
     lt_bpak-e_versn '000'.
     lt_bpak-twaer   cns_waers.
     lt_bpak-wert    ls_wbs-zgssum.
     append lt_bpak.
   endloop.

   "循环调用BAPI,次数与项目层次数量相同
   data:l_times type i.
   datal_flag type c.

   sort lt_wbs by stufe descending.
   read table lt_wbs into ls_wbs index 1.
   l_times ls_wbs-stufe.

   do l_times times.

     refresh lt_return[].

     call function 'KBPP_EXTERN_UPDATE_CO'
      exporting
        i_budget_activity            'KSTP'
*       I_BUDGET_ACTIV_SUP_RET       = ' '
*       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               =
       tables
         it_bpak                      lt_bpak
         it_return                    lt_return
       exceptions
         no_update                    1
         others                       2
               .
     clear l_flag.
     loop at lt_return where type 'E'.
       l_flag 'X'.
     endloop.

     if l_flag is initial.
       exit.  "若没有错误,退出循环
     endif.

   enddo.


   loop at lt_return where type 'E'.
     l_flag 'X'.
     exit.
*     message E000 with '项目概算更新失败:' LT_RETURN-MESSAGE.
   endloop.

   if l_flag is initial.
     commit work.
     message s000 with '项目' p_pspid '概算更新成功。'.
   else.
     rollback work.

  endif.

posted on 2011-03-05 15:12  zhumk  阅读(1743)  评论(1编辑  收藏  举报