CO01/CO02/CO40保存增强

转自:http://blog.csdn.net/zeewjj/article/details/7630279   

增强: PPCO0001


   DATA: BEGIN  OF  itab  OCCURS  0,
    matkl  TYPE  matkl,
    meins  TYPE  meins,
    bdmng  TYPE  bdmng,
     END  OF   itab.
   DATA  jtab  LIKE  TABLE  OF  itab  WITH  HEADER  LINE.
   DATA:  bom  LIKE  stpox  OCCURS  10  WITH  HEADER  LINE.
   DATA  msg  TYPE  string.
   DATA  iscb.
   DATA  ctab  LIKE  TABLE  OF  component_table  WITH  HEADER  LINE.
   CLEAR: itab,itab[],jtab,jtab[],bom,bom[],msg,iscb.

   IF  sy - tcode  EQ  'CO01'  OR  sy - tcode  EQ  'CO02'  OR  sy - tcode  EQ  'CO40'.
     READ  TABLE  header_table  INDEX  1.
     READ  TABLE  header_table_old  INDEX  1.
     IF  header_table - werks  EQ  '1005'  OR  header_table - werks  EQ  '1001'   OR  header_table - werks  EQ  '1000'
     OR   header_table_old - werks  EQ  '1005'  OR  header_table_old - werks  EQ  '1001'   OR  header_table_old - werks  EQ  '1000'.
       IF  header_table - auart  EQ  'ZP01'  OR  header_table - auart  EQ  'ZP02'  OR  header_table - auart  EQ  'ZP03'   OR  header_table - auart  EQ  'ZP04'  OR  header_table - auart  EQ  'ZP05'  OR  header_table - auart  EQ  'ZP06'
             OR  header_table_old - auart  EQ  'ZP01'  OR  header_table_old - auart  EQ  'ZP02'  OR  header_table_old - auart  EQ  'ZP03'   OR  header_table_old - auart  EQ  'ZP04'  OR  header_table_old - auart  EQ  'ZP05'  OR  header_table_old - auart  EQ  'ZP06'    .

         LOOP  AT  component_table  WHERE  xloek  NE  'X'.
           READ  TABLE  itab  WITH  KEY  matkl  component_table - matkl meins  component_table - meins.
           IF  sy - subrc  NE  0.
            itab - matkl  component_table - matkl.
            itab - meins  component_table - meins.
             APPEND  itab.
             CLEAR  itab.
           ENDIF.
           CLEAR  component_table.
         ENDLOOP.

         LOOP  AT  itab.
           LOOP  AT  component_table  WHERE  matkl  itab - matkl  AND  meins  itab - meins  AND  xloek  NE  'X'.
             IF  component_table - alpos  EQ  'X'.
              itab - bdmng  itab - bdmng + component_table - bdmng * component_table - ewahr.
             ELSE.
              itab - bdmng  itab - bdmng + component_table - bdmng.
             ENDIF.
             CLEAR  component_table.
           ENDLOOP.
           MODIFY  itab.
           CLEAR  itab.
         ENDLOOP.



         IF  sy - tcode  EQ  'CO01'  OR   sy - tcode  EQ   'CO40'   OR   sy - tcode  EQ   'CO02'.
           CALL  FUNCTION  'CS_BOM_EXPL_MAT_V2'
             EXPORTING
              capid                  'PP01'    "BOM Application
              datuv                  sy - datum   "有效开始日
              emeng                  header_table - gamng  "BASE QUANTITY数量
              mtnrv                  header_table - plnbez
                                                                                                                                                                                                                                 "MATERAILNUMBER物料
              stlan                  '1'  "bom用途
*             STLAL                 = P_STLAL
*             CUOBJ                 = CUOBJ
              mktls                  'X'
*             MEHRS                 = 'X' "多阶层bom展开
              werks                  header_table - werks     "'PDGM'工厂
             TABLES
              stb                    bom   "展开明细
             EXCEPTIONS
              alt_not_found          1
              call_invalid           2
              material_not_found     3
              missing_authorization  4
              no_bom_found           5
              no_plant_data          6
              no_suitable_bom_found  7
               OTHERS                 8.

           IF  sy - subrc  EQ  0.
             LOOP  AT  bom.
               IF  bom - ausch  IS   NOT  INITIAL.
                bom - mnglg  bom - mnglg *  + bom - ausch /  100  ).
                bom - mnglg  ceil bom - mnglg  ).
                 MODIFY  bom.
               ENDIF.
               READ  TABLE  jtab  WITH  KEY  matkl  bom - matkl meins  bom - meins.
               IF  sy - subrc  NE  0.
                jtab - matkl  bom - matkl.
                jtab - meins  bom - meins.
                 APPEND  jtab.
                 CLEAR  jtab.
               ENDIF.
               CLEAR  bom.
             ENDLOOP.

             LOOP  AT  jtab.
               LOOP  AT  bom  WHERE  matkl  jtab - matkl  AND  meins  jtab - meins.
                 IF  bom - alpos  EQ  'X'.
                  jtab - bdmng  jtab - bdmng + bom - mnglg * bom - ewahr  *  '1.01' .
                 ELSE.
                  jtab - bdmng  jtab - bdmng + bom - mnglg  *  '1.01'.
                 ENDIF.
                 CLEAR  bom.
               ENDLOOP.
               MODIFY  jtab.
               CLEAR  jtab.
             ENDLOOP.
           ENDIF.


         ENDIF.                                               "co01

*        IF SY-TCODE EQ 'CO02'.
*
*          CTAB[] = COMPONENT_TABLE[].
*          LOOP AT COMPONENT_TABLE_OLD WHERE XLOEK NE 'X'.
*            READ TABLE CTAB WITH KEY RSNUM = COMPONENT_TABLE_OLD-RSNUM RSPOS = COMPONENT_TABLE_OLD-RSPOS.
*            IF SY-SUBRC EQ 0.
*              DELETE CTAB WHERE RSNUM = COMPONENT_TABLE_OLD-RSNUM AND RSPOS = COMPONENT_TABLE_OLD-RSPOS.
*              APPEND COMPONENT_TABLE_OLD TO CTAB.
*            ENDIF.
*            CLEAR:COMPONENT_TABLE_OLD,CTAB.
*          ENDLOOP.
*          SORT CTAB ASCENDING BY RSNUM RSPOS.
*          LOOP AT CTAB WHERE XLOEK NE 'X'.
*            READ TABLE JTAB WITH KEY MATKL = CTAB-MATKL MEINS = CTAB-MEINS.
*            IF SY-SUBRC NE 0.
*              JTAB-MATKL = CTAB-MATKL.
*              JTAB-MEINS = CTAB-MEINS.
*              APPEND JTAB.
*              CLEAR JTAB.
*            ENDIF.
*            CLEAR CTAB.
*          ENDLOOP.
*
*          LOOP AT JTAB.
*            LOOP AT CTAB WHERE MATKL = JTAB-MATKL AND MEINS = JTAB-MEINS AND XLOEK NE 'X'.
*              IF CTAB-ALPOS EQ 'X'.
*                JTAB-BDMNG = JTAB-BDMNG + CTAB-BDMNG * CTAB-EWAHR  * '1.01'.
*              ELSE.
*                JTAB-BDMNG = JTAB-BDMNG + CTAB-BDMNG  * '1.01'.
*              ENDIF.
*              CLEAR CTAB.
*            ENDLOOP.
*            MODIFY JTAB.
*            CLEAR JTAB.
*          ENDLOOP.
*        ENDIF.                                              "CO02
         "判断超标
         IF  jtab[]  IS  NOT  INITIAL.
           LOOP  AT  itab.
             READ  TABLE  jtab  WITH  KEY   matkl  itab - matkl meins  itab - meins.
             IF  itab - bdmng  GT  jtab - bdmng.
              iscb  'X'.
               LOOP  AT  component_table  WHERE  matkl  itab - matkl  AND  meins  itab - meins  AND  xloek  NE  'X'.
                 SHIFT  component_table - matnr  LEFT  DELETING  LEADING  '0'.
                 CONCATENATE  msg component_table - matnr  INTO  msg  SEPARATED  BY  '/'.
                 CLEAR  component_table.
               ENDLOOP.
               SHIFT  msg  LEFT  DELETING  LEADING  '/'.
               CONCATENATE  '物料组为'  itab - matkl  ' 单位为'  itab - meins  ' 的物料 '  msg  '超标,保存失败'  INTO  msg.
               MESSAGE  msg  TYPE  'I' .
               CLEAR  msg.
             ENDIF.
             CLEAR: itab,jtab..
           ENDLOOP.
         ENDIF.
         IF  iscb  IS  NOT  INITIAL.
           CLEAR  iscb.
           LEAVE  TO  TRANSACTION   sy - tcode.
         ENDIF.
       ENDIF.
     ENDIF.
   ENDIF.
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: SAP CO02增强模块允许用户限制订单数量。在SAP系统中,订单数量限制可以通过以下步骤实现: 1. 首先,进入SAP系统,并打开CO02增强模块。 2. 在订单编辑页面上,找到并选择需要限制数量的订单。 3. 在订单编辑页面的顶部工具栏上,点击“设置”或“定制”按钮,这取决于系统配置。 4. 在弹出菜单中,选择“订单限制”或类似选项。 5. 在订单限制窗口中,您可以看到各种限制选项,如最大数量限制和最小数量限制。 6. 根据需要,在相应的字段中输入所需的限制数量。 7. 在保存更改之前,确保您已经输入了正确的限制数量。 8. 点击“保存”按钮以保存所做的更改。 9. 系统将验证所输入的数量限制是否有效。 10. 如果数量限制有效,系统将接受更改并将其应用于订单。 11. 如果数量限制无效,系统将显示错误消息,并要求您正确输入数量限制。 12. 在成功应用限制数量后,您可以关闭CO02增强模块并继续使用SAP系统进行其他操作。 通过使用SAP CO02增强模块的订单数量限制功能,用户可以轻松控制订单的数量,确保订单量在预定范围内,从而提高生产和供应链的效率。 ### 回答2: 在SAP中,可以通过增强CO02交易来限制订单数量。CO02是用于编辑和维护生产订单的交易码。 首先,我们可以使用ABAP(高级商务应用程序编程)来增强CO02交易。通过自定义的ABAP代码,我们可以在CO02交易的开始添加一些额外的逻辑来限制订单数量。 例如,我们可以添加一个逻辑,当订单数量已达到设定的限制,系统会在CO02交易的开始给出警告或错误消息。这样,当用户尝试编辑或维护已达到限制数量的生产订单,系统会发出警告,提醒用户已达到订单数量上限。 另外,我们还可以使用用户自定义的字段或参数来实现订单数量限制。通过在CO02交易中添加一个自定义字段来输入订单数量,并编写相应的逻辑代码,当用户输入的订单数量超过设定的限制,系统会给出警告或错误消息,阻止用户提交或保存订单。 除了ABAP编程以外,我们还可以使用SAP自带的用户自定义字段和屏幕维护功能来实现订单数量限制。通过在CO02交易中的屏幕布局中添加一个自定义的订单数量字段,并使用数据字典中的数据类型、域和参考表,结合逻辑校验规则来限制输入的订单数量。 总而言之,通过增强CO02交易以限制订单数量,我们可以使用ABAP编程、自定义字段和屏幕维护功能来实现。这样,可以帮助企业有效管理生产订单数量,避免超过设定的限制。 ### 回答3: SAP CO02增强可以通过设置限制订单数量来控制订单的数量。在SAP系统中,CO02是用于修改已存在的生产订单的事务代码。 为了限制订单数量,我们可以进行如下操作: 1. 在SAP系统中,使用SE38事务代码打开ABAP编辑器。 2. 在ABAP编辑器中,创建一个新的ABAP程序。 3. 在程序中,我们可以使用CO02增强的用户出口来进行订单数量限制的逻辑编写。 4. 在逻辑编写中,我们可以通过获取订单的相关信息,如订单号和订单数量,并对其进行限制判断。 5. 如果订单数量超过了限制,可以根据需求进行相应的处理,如给出警告或者阻止修改订单的操作。 6. 编写逻辑完成后,保存并激活该ABAP程序。 7. 在SAP系统中,使用SE38或者SMOD等事务代码打开事务代码CO02增强框架。 8. 在增强框架中,添加刚才创建的ABAP程序作为增强操作。 9. 保存并激活增强框架的变更。 10. 现在,在使用CO02修改生产订单,系统会自动执行刚才编写的逻辑,根据限制条件判断是否允许修改订单数量。 通过以上步骤,我们可以轻松地实现SAP CO02的订单数量限制。这样可以帮助企业更好地管理订单的数量,并确保订单符合制定的规则和限制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值