惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

小众软件
小众软件
博客园_首页
M
MIT News - Artificial intelligence
雷峰网
雷峰网
GbyAI
GbyAI
博客园 - 叶小钗
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
V2EX
S
SegmentFault 最新的问题
H
Help Net Security
Apple Machine Learning Research
Apple Machine Learning Research
H
Hackread – Cybersecurity News, Data Breaches, AI and More
博客园 - 【当耐特】
V
Visual Studio Blog
月光博客
月光博客
G
Google Developers Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
腾讯CDC
云风的 BLOG
云风的 BLOG
美团技术团队
Microsoft Azure Blog
Microsoft Azure Blog
A
About on SuperTechFans
有赞技术团队
有赞技术团队

博客园 - zhumk

Kindle DX/2最低程度中文化 ABAP:更新供应商Email地址 How to search for BAdIs IP41 - 维护计划中的日期和周期 如何升级Mac Mini(二代)内存 Kindle Collection编辑器 Kindle 汉化终结版 ABAP:密码输入框 SAP相关下载链接 ABAP:在Dynpro屏幕中使用Selection Screen ALV popup based on classic style REUSE_ALV_POPUP_TO_SELECT function module ABAP: 如何让ALV Tree的注册事件在屏幕PAI之后触发 ABAP: Search Help for Date ABAP:运行中修改Table Control控件状态 BAPI:KBPP_EXTERN_UPDATE_CO, TCODE:CJ30/CJ40 第三部分 BAPI:KBPP_EXTERN_UPDATE_CO, TCODE:CJ30/CJ40 第二部分 BAPI:KBPP_EXTERN_UPDATE_CO, TCODE:CJ30/CJ40 第一部分 ABAP:WBS Element下层预算向上层汇总 DynDNS免费动态域名解析
BAPI:KBPP_EXTERN_UPDATE_CO, TCODE:CJ30/CJ40 第四部分
zhumk · 2011-03-05 · via 博客园 - zhumk

前面介绍使用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.