CJ30的BAPI

本文介绍如何使用SAP ABAP编程中的KBPP_EXTERN_UPDATE_CO函数来实现CJ30项目的年度预算更新及总体预算的调整。包括数据准备、调用函数进行预算修改的具体步骤,并强调了先修改顶层WBS的重要性。
部署运行你感兴趣的模型镜像

 要实现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.

 

其他参数大家自己研究下,本人还没研究那么透彻,呵

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

SAP CJ30事务代码用于项目管理模块中,主要功能是修改项目及WBS(Work Breakdown Structure)元素。对于需要在CJ30事务代码中实现增强点或自定义开发的需求,可以通过以下几种方法进行: 1. **隐式增强**:通过隐式增强选项(Implicit Enhancement Options),可以在标准程序中插入自定义逻辑。这些增强点通常由SAP预留的特殊标记界定,例如`< enhancement >`和`</ enhancement >`标签之间的区域。开发者可以在这些区域内添加自己的ABAP代码,而不会影响到标准程序的升级兼容性。 2. **显式增强**:使用显式增强选项(Explicit Enhancement Options),可以将自定义逻辑绑定到特定的函数模块、类方法或表单中。这种方法适用于需要在多个位置复用增强逻辑的情况。 3. **出口函数模块**:SAP提供了一些标准的出口函数模块,如`EXIT_SAPLCNAU_001`和`EXIT_SAPLCNAU_002`,这些模块可以在CJ30事务代码执行过程中被调用,以实现特定的业务需求。例如,在创建或更改WBS时,可以通过这些出口函数模块进行公司代码权限校验[^1]。用户可以根据实际需求编写相应的逻辑,并将其集成到这些出口函数中。 4. **BADI(Business Add-In)**:SAP还提供了基于BADI的增强机制,允许开发者通过实现接口来扩展标准功能。BADI是一种面向对象的方法,能够提供更强的灵活性和可维护性。为了找到与CJ30相关的BADI,可以使用事务码`SE18`(定义BADI)和`SE19`(实现BADI)进行查询和配置。 5. **用户退出(User Exits)**:传统的用户退出方式仍然适用。用户退出通常是预定义的子程序或函数模块,开发者可以在其中插入自定义逻辑。例如,在CJ30事务代码中,可能会涉及到项目创建、修改等操作,此时可以通过用户退出来实现额外的数据验证或业务规则应用。 6. **屏幕增强**:如果需要对CJ30事务代码中的屏幕进行定制化修改,可以使用屏幕增强技术。这包括向现有屏幕上添加新的字段、按钮或其他控件,并为这些控件编写事件处理逻辑。屏幕增强可以通过`SE80`事务码中的增强视图来实现。 7. **数据字典增强**:在某些情况下,可能需要对现有的数据库表进行扩展,以便存储更多的业务信息。SAP支持通过追加字段到现有表中来实现这一目标。这种增强方式称为数据字典增强,可以通过事务码`SE11`进行操作。 ### 示例代码:使用出口函数模块进行权限校验 ```abap FUNCTION EXIT_SAPLCNAU_001. *"---------------------------------------------------------------------- *"*"本地接口: *" IMPORTING *" REFERENCE(CUSTOMER_FUNCTION) TYPE C OPTIONAL *" EXPORTING *" REFERENCE(EXPORT_PARAMETER) TYPE C OPTIONAL *"---------------------------------------------------------------------- DATA: lv_subrc TYPE sy-subrc. IF sy-tcode = 'CJ30'. IF sap_prps-pbukr IS NOT INITIAL. AUTHORITY-CHECK OBJECT 'F_BKPF_BUK' ID 'BUKRS' FIELD sap_prps-pbukr ID 'ACTVT' FIELD '03'. IF sy-subrc <> 0. MESSAGE e016(zfi) WITH sap_prps-pbukr. ENDIF. ENDIF. ENDIF. ENDFUNCTION. ``` 此示例展示了如何在`EXIT_SAPLCNAU_001`出口函数模块中实现权限校验逻辑。当用户尝试通过CJ30事务代码修改项目时,系统会检查其是否具有访问指定公司代码的权限。如果没有权限,系统将抛出错误消息并阻止操作继续执行[^1]。 ### 总结 SAP CJ30事务代码的增强点和自定义开发方法主要包括隐式增强、显式增强、出口函数模块、BADI、屏幕增强以及数据字典增强等多种途径。每种方法都有其适用场景和优缺点,开发者应根据具体的业务需求和技术条件选择合适的方式。通过合理利用这些增强机制,可以有效地扩展SAP系统的功能,满足企业的个性化需求。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值