您的位置:首页 > 其它

CO01/CO02/CO40保存增强点

2012-06-04 12:55 288 查看
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 * ( 1 + 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.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  table authorization header