物料bOM 清单

 

*&---------------------------------------------------------------------*
*& REPORT  ZRPT_MM_WLKC                                                *
*&                                                                     *
*&---------------------------------------------------------------------*
*&  某系列物料下所有的零件平均用量                                                                   *
*&                                                                     *
*&---------------------------------------------------------------------*

REPORT  ZRPT_MM_WLKC                            .
TABLES:SSCRFIELDS,MARC,STPO,T023T,MARA,MAKT,T134T,MAST,ZMBOM,ZCBOM.
TYPE-POOLS:SLIS.
TYPES: BEGIN OF T_H_ITAB,"按系列平均显示
  MATKL LIKE MARA-MATKL,
  C_MATNR LIKE MARA-MATNR,
  C_MAKTX LIKE MAKT-MAKTX,
  WGBEZ LIKE T023T-WGBEZ,
  MENGE LIKE STPO-MENGE,"BOM用量
  EISBE LIKE MARC-EISBE,"安全库存
  SOBSL LIKE MARC-SOBSL,"特殊采购类型
  COUNT TYPE I,
END OF T_H_ITAB,
BEGIN OF T_ITAB, "按物料显示
  MATKL LIKE MARA-MATKL,
  M_MATNR LIKE MARA-MATNR,
  M_MAKTX LIKE MAKT-MAKTX,
  STLNR LIKE MAST-STLNR,"物料单号
  C_MATNR LIKE MARA-MATNR,
  C_MAKTX LIKE MAKT-MAKTX,
  MENGE LIKE STPO-MENGE,"BOM用量
  MEINS LIKE STPO-MEINS, "组件计量单位
  EISBE LIKE MARC-EISBE,"安全库存
  SOBSL LIKE MARC-SOBSL,"特殊采购类型
  WERKS LIKE MARC-WERKS,"工厂
  MTART LIKE MARA-MTART,"组件物料类型
  WGBEZ LIKE T023T-WGBEZ,
END OF T_ITAB
.
DATA:H_ITAB TYPE TABLE OF T_H_ITAB WITH HEADER LINE,
      ITAB1 TYPE TABLE OF T_ITAB WITH HEADER LINE,"半成品
      ITAB TYPE TABLE OF T_ITAB WITH HEADER LINE."成品
CONTROLS: TAB_CONTROL TYPE TABLEVIEW USING SCREEN 0200.
DATA:     OK_0200 LIKE SY-UCOMM.

DATA:STDATUM LIKE SY-DATUM,
      STUZEIT LIKE SY-UZEIT.


FIELD-SYMBOLS:<GOB_FS> TYPE STANDARD TABLE .

SELECTION-SCREEN BEGIN OF BLOCK BLK1 WITH FRAME TITLE TXT1 .
SELECT-OPTIONS:
MATNR FOR MARA-MATNR,                         "物料号
MATKL FOR MARA-MATKL,                         "物料组
MTART FOR MARA-MTART DEFAULT 'Z013' TO 'Z015' OBLIGATORY."默认成品物料类型展开

PARAMETERS:
TOTAL AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN END OF BLOCK BLK1.
SELECTION-SCREEN BEGIN OF BLOCK BLK2 WITH FRAME TITLE TXT2 .
"PARAMETERS:
"    WERKS LIKE MAST-WERKS DEFAULT '1000' OBLIGATORY.
SELECT-OPTIONS:
WERKS FOR MAST-WERKS DEFAULT '1000' OBLIGATORY,
STLAN FOR MAST-STLAN DEFAULT '1' OBLIGATORY,  "BOM用途
STLAL FOR MAST-STLAL,                         "选择BOM
SOBSL FOR MARC-SOBSL DEFAULT '30' OBLIGATORY "默认组件和散件都需要展开的物料
.
SELECTION-SCREEN END OF BLOCK BLK2.

SELECTION-SCREEN BEGIN OF BLOCK BLK3 WITH FRAME TITLE TXT3 .
PARAMETERS:ZTEST AS CHECKBOX USER-COMMAND CHECK DEFAULT 'X'."选择此条件表示将数据保存到数据库中
PARAMETERS:ZMUUPD AS CHECKBOX DEFAULT 'X'."更新到ZPP_MU01里
*PARAMETERS:P_EKGRP LIKE MARC-EKGRP.
SELECT-OPTIONS:
P_EKGRP FOR MARC-EKGRP,
S_MTART FOR MARA-MTART.
SELECTION-SCREEN END OF BLOCK BLK3.

*SET SCREEN 200.
INITIALIZATION.
  TXT1 = '请输入选择条件'.
  TXT2 = '附加条件'.
  TXT3 = '特殊运行'.
*  MTART-LOW = 'Z011'.
*  MTART-OPTION = 'EQ'.
*  MTART-SIGN = 'I'.
*  APPEND MTART.
AT SELECTION-SCREEN.
  CASE SSCRFIELDS-UCOMM.
    WHEN 'CHECK'.
      IF ZTEST <> 'X' .                .
        CALL FUNCTION 'POPUP_TO_DISPLAY_TEXT_LO'
          EXPORTING
*           TITEL        = ' '
            TEXTLINE1    = '数据将保存到数据库表ZCBOM,ZMBOM中 '
*           TEXTLINE2    = ' '
*           TEXTLINE3    = ' '
            START_COLUMN = 25
            START_ROW    = 6.
        CLEAR: MATNR[],MATKL[].
      ENDIF.
  ENDCASE.

END-OF-SELECTION.
  STDATUM = SY-DATUM.
  STUZEIT = SY-UZEIT.
  PERFORM GET_DATA.
  IF TOTAL = 'X'.
    ASSIGN H_ITAB[] TO <GOB_FS>.
  ELSE.
    ASSIGN ITAB[] TO <GOB_FS>.
  ENDIF.

  PERFORM WRITERPTRUNRECORD.
  PERFORM DIS_ALV USING <GOB_FS> TOTAL.

*&---------------------------------------------------------------------*
*&      FORM  WRITERPTRUNRECORD
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
FORM WRITERPTRUNRECORD.
  DATA:L_WERKS LIKE T001W OCCURS 0 WITH HEADER LINE.

  SELECT * INTO TABLE L_WERKS
  FROM T001W
  WHERE WERKS IN  WERKS.
  LOOP AT L_WERKS.
    GET TIME.
    CALL FUNCTION 'ZSYS_RPT_RUNRECORD'
      EXPORTING
        TCODE     = SY-TCODE
        PROGRAMM  = SY-CPROG
            "BUKRS = BUKRS
        WERKS     = L_WERKS-WERKS
        DATUMRST  = STDATUM
        UZEITRST  = STUZEIT
        BATCH     = SY-BATCH
        DATUMREND = SY-DATUM
        UZEITREND = SY-UZEIT
        DATUMC    = '20060429'
        RUNNER    = SY-UNAME
        RPTSRC    = 'MM'.
  ENDLOOP.
ENDFORM.                    "WRITERPTRUNRECORD

*
*&---------------------------------------------------------------------*
*&      FORM  GET_DATA
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
*  -->  P1        TEXT
*  <--  P2        TEXT
*----------------------------------------------------------------------*
FORM GET_DATA .
  TYPES: BEGIN OF LOC_T_ITAB,
    MATKL LIKE MARA-MATKL,
    M_MATNR LIKE MARA-MATNR,
    M_MAKTX LIKE MAKT-MAKTX,
    STLNR LIKE MAST-STLNR,   "物料单号
    STLAL LIKE MAST-STLAL,
    STLAN LIKE MAST-STLAN,
    WERKS LIKE MAST-WERKS,
    WGBEZ LIKE T023T-WGBEZ,
  END OF LOC_T_ITAB
  .
*****       栈结构
  TYPES:
  BEGIN OF LOC_T_STK_TAB,
*      M_MANTR LIKE MARC-MATNR,
*      C_MATNR LIKE MARC-MATNR,
    STLNR LIKE MAST-STLNR ,
    STLAL LIKE MAST-STLAL,
    STLAN LIKE MAST-STLAN,
    WERKS LIKE MAST-WERKS,
*      SOBSL LIKE MAST-SOBSL,
    MENGE LIKE STPO-MENGE,
    SOBSL LIKE MARC-SOBSL,
  END OF LOC_T_STK_TAB
  .
******************
  DATA:TMPIDNRK LIKE STPO-IDNRK.
  DATA: LOC_ITAB TYPE TABLE OF LOC_T_ITAB WITH HEADER LINE,
        L_MARA TYPE  TABLE OF MARA WITH HEADER LINE,
        LOC_WA_STK TYPE LOC_T_STK_TAB ,
        LOC_STK_TAB TYPE TABLE OF LOC_T_STK_TAB WITH HEADER LINE.
  DATA:BEGIN OF LOC_STPO OCCURS 0,
    C_MATNR LIKE STPO-IDNRK,
    C_MAKTX LIKE MAKT-MAKTX,
    MENGE LIKE STPO-MENGE,
    MEINS LIKE STPO-MEINS,  "组件计量单位
    SOBSL LIKE MARC-SOBSL,  "特殊采购标识
    EISBE LIKE MARC-EISBE,  "安全库存
    VERKZ LIKE MARC-VERKZ,  "版本标识符
    MTART LIKE MARA-MTART,  "物料类型
  END OF LOC_STPO.
  FIELD-SYMBOLS:<LOC_FS> TYPE T_H_ITAB.

  DATA:LT001W LIKE T001W OCCURS 0 WITH HEADER LINE.

  SELECT * INTO TABLE LT001W FROM T001W WHERE WERKS IN WERKS.

  LOOP AT LT001W.
    CLEAR LOC_ITAB[]. CLEAR LOC_STPO[].CLEAR ITAB[].CLEAR ITAB1[].CLEAR H_ITAB[].
***************选择出成品
    SELECT MARA~MATKL  "物料组

    MARA~MATNR  "物料
    MAKT~MAKTX  "物料描述
    MAST~STLNR  "物料单号
    MAST~STLAL
    MAST~STLAN
    MAST~WERKS
    INTO TABLE LOC_ITAB
    FROM MAST
    JOIN MARA ON ( MARA~MATNR = MAST~MATNR AND MARA~LVORM = SPACE )
    JOIN MAKT ON ( MAKT~MATNR = MAST~MATNR AND MAKT~SPRAS = '1' )
    WHERE MARA~MATNR IN MATNR AND
    MARA~MTART IN MTART AND
    MARA~MATKL IN MATKL AND
    MARA~LVORM = SPACE AND
    MAST~STLAL IN STLAL AND
    MAST~STLAN IN STLAN AND
    MAST~WERKS EQ LT001W-WERKS.

**********  处理每一个成品下BOM
    LOOP AT LOC_ITAB.
      CLEAR LOC_STK_TAB.
      SELECT SINGLE T023T~WGBEZ into LOC_ITAB-WGBEZ from T023T
        where T023T~MATKL = LOC_ITAB-MATKL AND T023T~SPRAS = '1'.
      modify LOC_ITAB.
      MOVE-CORRESPONDING LOC_ITAB TO LOC_STK_TAB.
      LOC_STK_TAB-MENGE = '1' .
****    循环初始化把一个产品的物料单号放入队列中
      APPEND LOC_STK_TAB.
      WHILE LOC_STK_TAB[] IS NOT INITIAL . "当队列中物料单号不为空时
        READ TABLE LOC_STK_TAB INDEX 1  .  "取出物料单号,展开其下的BOM
        DELETE LOC_STK_TAB INDEX 1 .       "删除从队列中
        SELECT   STPO~IDNRK
        MAKT~MAKTX
        STPO~MENGE
        STPO~MEINS  "组件计量单位
        MARC~SOBSL  "特殊采购标识
        MARC~EISBE  "安全库存
        MARC~VERKZ  "生产版本标识
        MARA~MTART  "组件类型
        INTO TABLE LOC_STPO
        FROM STPO
        JOIN STAS ON ( STAS~STLNR = STPO~STLNR AND STAS~STLTY = STPO~STLTY AND STAS~STLKN = STPO~STLKN )
        JOIN MAKT ON ( MAKT~MATNR = STPO~IDNRK AND MAKT~SPRAS = '1' )
        JOIN MARC ON ( MARC~MATNR = STPO~IDNRK AND MARC~WERKS = LOC_STK_TAB-WERKS AND MARC~LVORM = SPACE )
        JOIN MARA ON (  MARA~MATNR = STPO~IDNRK )
        WHERE STPO~STLTY = 'M' AND STAS~LKENZ <> 'X' AND
        STPO~STLNR = LOC_STK_TAB-STLNR AND
        STPO~LKENZ = SPACE .
        IF SY-SUBRC = 0 .
          LOOP AT LOC_STPO."处理子组件
            CLEAR ITAB.
            CLEAR ITAB1.
            LOC_STPO-MENGE = LOC_STK_TAB-MENGE * LOC_STPO-MENGE. "数量为队列中数据 * 其下数量
            MOVE-CORRESPONDING LOC_ITAB TO ITAB.               "抬头的主要数据
            MOVE-CORRESPONDING LOC_STPO TO ITAB.               "子零件的数据
            MOVE-CORRESPONDING LOC_ITAB TO ITAB1.               "抬头的主要数据
            MOVE-CORRESPONDING LOC_STPO TO ITAB1.               "子零件的数据
******* 判断此物料组件下是否挂有BOM
            SELECT SINGLE * FROM MAST
            WHERE MAST~MATNR = LOC_STPO-C_MATNR AND
            MAST~WERKS = LT001W-WERKS AND
            MAST~STLAN IN STLAN AND
            MAST~STLAL IN STLAL AND
            EXISTS ( SELECT * FROM MARC WHERE MARC~MATNR = MAST~MATNR AND MARC~WERKS = MAST~WERKS AND MARC~LVORM = SPACE AND WERKS = LT001W-WERKS )
            .
            IF SY-SUBRC = 0 ."挂有组件
              IF WERKS EQ '2100'."委外加工组件
                IF ( LOC_STPO-MTART EQ 'Z001' OR
                LOC_STPO-MTART EQ 'Z002' OR
                LOC_STPO-MTART EQ 'Z003' OR
                LOC_STPO-MTART EQ 'Z004' OR
                LOC_STPO-MTART EQ 'Z008' ) AND LOC_STPO-SOBSL NOT IN SOBSL.
                  COLLECT ITAB.
                  CLEAR ITAB.
                  CONTINUE.
                ENDIF.
              ENDIF.

              IF LOC_STPO-SOBSL IN SOBSL."委外加工组件
                COLLECT ITAB.
                CLEAR ITAB.
              ENDIF.
              CLEAR LOC_WA_STK .
              MOVE-CORRESPONDING MAST TO LOC_WA_STK .
              LOC_WA_STK-MENGE = LOC_STPO-MENGE.
              APPEND LOC_WA_STK TO LOC_STK_TAB."把此BOM组件加入到栈中
              CLEAR LOC_WA_STK .
              COLLECT ITAB1.
              CLEAR ITAB1.
            ELSE.            "无组件
              CLEAR L_MARA.
              SELECT * FROM MARA INTO L_MARA
              WHERE MATNR =  LOC_STPO-C_MATNR AND MTART IN  ('Z006','Z007','Z008','Z009','Z010','Z011').
              ENDSELECT.
              IF SY-SUBRC = 0 ."物料  半成品没有转成自制零件情况会放到这里
                COLLECT ITAB1.
                CLEAR ITAB1.
              ELSE.
                "20210514 ADD  处理挂着BOM 后面又不用了的
                CLEAR TMPIDNRK.
                SELECT STPO~IDNRK INTO  TMPIDNRK FROM STAS
                JOIN STPO ON STPO~STLTY = STAS~STLTY AND STPO~STLNR  = STAS~STLNR AND
                STPO~STLKN = STAS~STLKN AND STPO~AEDAT  = STAS~ANDAT
                AND STAS~ANNAM  = STPO~AENAM AND  STPO~AENNR = STAS~AENNR
                WHERE STAS~DATUV < SY-DATUM AND
                STPO~IDNRK  = LOC_STPO-C_MATNR AND STAS~AENNR <> SPACE AND
                STPO~STLNR = LOC_STK_TAB-STLNR.
                ENDSELECT.
                IF  SY-SUBRC <> 0 AND TMPIDNRK IS INITIAL.
                  COLLECT ITAB.
                  CLEAR ITAB.
                ENDIF.
              ENDIF.
            ENDIF.
          ENDLOOP.
        ENDIF.
      ENDWHILE.
    ENDLOOP.
    IF ZTEST = SPACE.
      PERFORM INS_TAB USING LT001W-WERKS.
      PERFORM INS_TAB1 USING LT001W-WERKS.
    ENDIF.
    IF TOTAL = 'X'.
      LOOP AT ITAB.
        MOVE-CORRESPONDING ITAB TO H_ITAB.
        H_ITAB-COUNT = 1 .
        COLLECT H_ITAB.
        CLEAR H_ITAB.
      ENDLOOP.
*    CLEAR ITAB[].
      LOOP AT H_ITAB ASSIGNING <LOC_FS>.
        <LOC_FS>-MENGE = <LOC_FS>-MENGE / <LOC_FS>-COUNT.
      ENDLOOP.
    ENDIF.
  ENDLOOP.
ENDFORM.                    " GET_DATA
*&---------------------------------------------------------------------*
*&      FORM  DIS_ALV
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
*  -->  P1        TEXT
*  <--  P2        TEXT
*----------------------------------------------------------------------*
FORM DIS_ALV USING LOC_ITAB TYPE STANDARD TABLE
      LOC_TOTAL TYPE C.
  DATA: IT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
        IS_VARIANT LIKE DISVARIANT,
        IT_EVENTS   TYPE SLIS_T_EVENT,
        IS_LAYOUT   TYPE SLIS_LAYOUT_ALV,
        TITLE       TYPE LVC_TITLE,
        I_CALLBACK_PROGRAM TYPE SY-REPID,
        IT_SORT     TYPE SLIS_T_SORTINFO_ALV WITH HEADER LINE
        .
  PERFORM FIELDCAT_INIT USING IT_FIELDCAT
        LOC_TOTAL.
  PERFORM LAYOUT_INIT USING IS_LAYOUT.
  IF LOC_TOTAL <> 'F'.
    PERFORM EVENTTAB_BUILD USING IT_EVENTS.
  ENDIF.
  TITLE = '按产品展开BOM'.
  IF  LOC_TOTAL = 'F'.
    CONCATENATE TITLE '-显示部件' ITAB-C_MAKTX '用处' INTO TITLE.
  ENDIF.
  I_CALLBACK_PROGRAM = SY-REPID.
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
  EXPORTING
*     I_INTERFACE_CHECK                 = ' '
*     I_BYPASSING_BUFFER                = ' '
*     I_BUFFER_ACTIVE                   = ' '
    I_CALLBACK_PROGRAM                = I_CALLBACK_PROGRAM
*     I_CALLBACK_PF_STATUS_SET          = ' '
*     I_CALLBACK_USER_COMMAND           = ' '
*     I_CALLBACK_TOP_OF_PAGE            = ' '
*     I_CALLBACK_HTML_TOP_OF_PAGE       = 'TOP_OF_PAGE'
*     I_CALLBACK_HTML_END_OF_LIST       = ' '
*     I_STRUCTURE_NAME                  =
*     I_BACKGROUND_ID                   = ' '
    I_GRID_TITLE                      = TITLE
*     I_GRID_SETTINGS                   =
    IS_LAYOUT                         = IS_LAYOUT
    IT_FIELDCAT                       = IT_FIELDCAT
*     IT_EXCLUDING                      =
*     IT_SPECIAL_GROUPS                 =
*     IT_SORT                           =
*     IT_FILTER                         =
*     IS_SEL_HIDE                       =
*     I_DEFAULT                         = 'X'
*     I_SAVE                            = ' '
*     IS_VARIANT                        = IS_VARIANT
    IT_EVENTS                         = IT_EVENTS
*     IT_EVENT_EXIT                     =
*     IS_PRINT                          =
*     IS_REPREP_ID                      =
*     I_SCREEN_START_COLUMN             = 0
*     I_SCREEN_START_LINE               = 0
*     I_SCREEN_END_COLUMN               = 0
*     I_SCREEN_END_LINE                 = 0
*     IT_ALV_GRAPHICS                   =
*     IT_HYPERLINK                      =
*     IT_ADD_FIELDCAT                   =
*     IT_EXCEPT_QINFO                   =
*     I_HTML_HEIGHT_TOP                 =
*     I_HTML_HEIGHT_END                 =
*   IMPORTING
*     E_EXIT_CAUSED_BY_CALLER           =
*     ES_EXIT_CAUSED_BY_USER            =
  TABLES
    T_OUTTAB                          = LOC_ITAB
  EXCEPTIONS
    PROGRAM_ERROR                     = 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.
  clear LOC_ITAB[].
ENDFORM.                    " DIS_ALV
*&---------------------------------------------------------------------*
*&      FORM  FIELDCAT_INIT
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
*      -->P_IT_FIELDCAT  TEXT
*----------------------------------------------------------------------*
FORM FIELDCAT_INIT  USING  IT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV
      LOC_TOTAL TYPE C.
  DATA: LS_FIELDCAT TYPE SLIS_FIELDCAT_ALV.

  LS_FIELDCAT-FIELDNAME = 'MATKL'.
**  LS_FIELDCAT-DATATYPE  = 'C'.
  LS_FIELDCAT-REPTEXT_DDIC  = '物料组'.
*  LS_FIELDCAT-NO_ZERO = 'X'.
*  LS_FIELDCAT-HOTSPOT = 'X'.
*  LS_FIELDCAT-KEY = 'X'.
  APPEND LS_FIELDCAT TO IT_FIELDCAT.
  CLEAR LS_FIELDCAT.

  LS_FIELDCAT-FIELDNAME = 'WGBEZ'.
  LS_FIELDCAT-REPTEXT_DDIC  = '物料组描述'.
  APPEND LS_FIELDCAT TO IT_FIELDCAT.
  CLEAR LS_FIELDCAT.
  IF LOC_TOTAL <> 'X'.
    LS_FIELDCAT-FIELDNAME = 'M_MATNR'.
    LS_FIELDCAT-REPTEXT_DDIC  = '成品号'.
    LS_FIELDCAT-NO_ZERO = 'X'.
    APPEND LS_FIELDCAT TO IT_FIELDCAT.
    CLEAR LS_FIELDCAT.

    LS_FIELDCAT-FIELDNAME = 'M_MAKTX'.
    LS_FIELDCAT-REPTEXT_DDIC  = '产品描述'.
    APPEND LS_FIELDCAT TO IT_FIELDCAT.
    CLEAR LS_FIELDCAT.
  ENDIF.
  LS_FIELDCAT-FIELDNAME = 'C_MATNR'.
  LS_FIELDCAT-REPTEXT_DDIC  = '部件号'.
  LS_FIELDCAT-NO_ZERO = 'X'.
  IF LOC_TOTAL <> 'F'.
    LS_FIELDCAT-HOTSPOT = 'X'.
  ENDIF.
  APPEND LS_FIELDCAT TO IT_FIELDCAT.
  CLEAR LS_FIELDCAT.

  LS_FIELDCAT-FIELDNAME = 'C_MAKTX'.
  LS_FIELDCAT-REPTEXT_DDIC  = '部件描述'.
  APPEND LS_FIELDCAT TO IT_FIELDCAT.
  CLEAR LS_FIELDCAT.

  LS_FIELDCAT-FIELDNAME = 'MENGE'.
  LS_FIELDCAT-REPTEXT_DDIC  = '所需数量'.
  LS_FIELDCAT-NO_ZERO = 'X'.
  APPEND LS_FIELDCAT TO IT_FIELDCAT.
  CLEAR LS_FIELDCAT.

  LS_FIELDCAT-FIELDNAME = 'SOBSL'.
  LS_FIELDCAT-REPTEXT_DDIC  = '特殊采购类型'.
  APPEND LS_FIELDCAT TO IT_FIELDCAT.
  CLEAR LS_FIELDCAT.
ENDFORM.                    " FIELDCAT_INIT
*&---------------------------------------------------------------------*
*&      FORM  LAYOUT_INIT
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
*      -->P_IS_LAYOUT  TEXT
*----------------------------------------------------------------------*
FORM LAYOUT_INIT  USING    IS_LAYOUT TYPE SLIS_LAYOUT_ALV.
  IS_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
  IS_LAYOUT-F2CODE = 'ZDET'.
*  IS_LAYOUT-LIGHTS_FIELDNAME ='VIEWED' .
*  IS_LAYOUT-LIGHTS_TABNAME =
*  IS_LAYOUT-BOX_FIELDNAME = 'SELECTED'.
ENDFORM.                    " LAYOUT_INIT
*&---------------------------------------------------------------------*
*&      FORM  EVENTTAB_BUILD
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
*      -->P_IT_EVENTS  TEXT
*----------------------------------------------------------------------*
FORM EVENTTAB_BUILD  USING    IT_EVENTS TYPE SLIS_T_EVENT .
  DATA: LS_EVENT TYPE SLIS_ALV_EVENT.

*  MOVE 'PF_STATUS_SET' TO LS_EVENT-NAME.
*  MOVE 'PF_STATUS_SET' TO LS_EVENT-FORM.
*  APPEND LS_EVENT TO IT_EVENTS.
*  CLEAR LS_EVENT.

  MOVE 'USER_COMMAND' TO LS_EVENT-NAME.
  MOVE 'USER_COMMAND' TO LS_EVENT-FORM.
  APPEND LS_EVENT TO IT_EVENTS.
  CLEAR LS_EVENT.

*  MOVE 'HTML_TOP_OF_PAGE' TO LS_EVENT-NAME.
*  MOVE 'TOP_OF_PAGE' TO LS_EVENT-FORM.
*  APPEND LS_EVENT TO IT_EVENTS.
*  CLEAR LS_EVENT.
ENDFORM.                    " EVENTTAB_BUILD


*&--------------------------------------------------------------------*
*&      FORM  USER_COMMAND_1
*&--------------------------------------------------------------------*
*       TEXT
*---------------------------------------------------------------------*
*      -->RF_UCOMM   TEXT
*      -->RS_SELFIELDTEXT
*---------------------------------------------------------------------*
FORM USER_COMMAND USING RF_UCOMM    LIKE SY-UCOMM
      RS_SELFIELD TYPE SLIS_SELFIELD.                       "#EC CALLED
*  DATA: EBELN TYPE EBELN.
  DATA:LOC_ITAB TYPE TABLE OF T_ITAB WITH HEADER LINE.
  FIELD-SYMBOLS:<LOC_FS>,<LOC_FS1>.
  CASE RF_UCOMM.
    WHEN 'ZDET'.
      IF RS_SELFIELD-TABINDEX > 0 .
        READ TABLE <GOB_FS> INDEX RS_SELFIELD-TABINDEX  ASSIGNING <LOC_FS>.
        IF SY-SUBRC = 0 .
          ASSIGN COMPONENT 'C_MATNR' OF STRUCTURE <LOC_FS> TO <LOC_FS1>.
          IF SY-SUBRC = 0 .
            LOOP AT ITAB WHERE C_MATNR = <LOC_FS1>.
              APPEND ITAB TO LOC_ITAB.
            ENDLOOP.
            PERFORM DIS_ALV USING LOC_ITAB[] 'F'.
          ENDIF.
        ENDIF.
      ELSE.
        MESSAGE W004(ZJACK_ERR).
      ENDIF.
  ENDCASE.
ENDFORM.                    "USER_COMMAND

*&---------------------------------------------------------------------*
*&      FORM  INS_TAB
*&---------------------------------------------------------------------*
*----------------------------------------------------------------------*
FORM INS_TAB USING PWERKS TYPE WERKS_D.
  DATA:LOC_CBOM LIKE TABLE OF ZCBOM WITH HEADER LINE,
        LOC_MBOM LIKE TABLE OF ZMBOM WITH HEADER LINE.
  DATA:LOC_COUNT TYPE I VALUE 0.
  AUTHORITY-CHECK OBJECT 'Z_MM_CMBOM'
*                ID 'ZMM_PRINT'  DUMMY
*******         ID 'OBJTYPE' FIELD 'PROG'
*******         ID 'OBJNAME'  DUMMY
*******         ID 'P_GROUP'  DUMMY
  ID 'ACTVT' FIELD '01'
  .
  IF SY-SUBRC <> 0.
    MESSAGE E001(00) WITH '没有更新数据的权限'.
    EXIT.
  ENDIF.
  SORT ITAB BY C_MATNR.
  LOOP AT ITAB.
    LOC_CBOM-M_MATNR = ITAB-M_MATNR.
    LOC_CBOM-MATKL = ITAB-MATKL.
    LOC_CBOM-C_MATNR = ITAB-C_MATNR.
    LOC_CBOM-MENGE = ITAB-MENGE.
    LOC_CBOM-MEINS = ITAB-MEINS.
    LOC_CBOM-AEDAT = SY-DATUM.
    LOC_CBOM-WERKS = ITAB-WERKS.
    APPEND LOC_CBOM.

    IF ITAB-C_MATNR = LOC_MBOM-C_MATNR.
      LOC_MBOM-MENGE = ITAB-MENGE + LOC_MBOM-MENGE.
      LOC_COUNT = LOC_COUNT + 1 .
    ELSE.
      IF LOC_MBOM-C_MATNR <> SPACE.
        LOC_MBOM-MENGE = LOC_MBOM-MENGE / LOC_COUNT.
        APPEND LOC_MBOM.
        CLEAR LOC_MBOM.
      ENDIF.
      LOC_MBOM-C_MATNR = ITAB-C_MATNR.
      LOC_MBOM-MENGE = ITAB-MENGE.
      LOC_MBOM-MEINS = ITAB-MEINS.
      LOC_MBOM-AEDAT = SY-DATUM.
      LOC_MBOM-WERKS = ITAB-WERKS.
      LOC_COUNT = 1 .
    ENDIF.
  ENDLOOP.
  DELETE FROM ZCBOM WHERE ZCBOM~WERKS EQ PWERKS.
  DELETE FROM ZMBOM WHERE ZMBOM~WERKS EQ PWERKS.
  COMMIT WORK.
  INSERT ZCBOM FROM TABLE LOC_CBOM ACCEPTING DUPLICATE KEYS.
  INSERT ZMBOM FROM TABLE LOC_MBOM ACCEPTING DUPLICATE KEYS.
  COMMIT WORK.

  "更新到计划排产组件ADD BY PETER
  FREE LOC_MBOM.
  DATA:L_UPDATE TYPE CHAR1.
  DATA:LTS_MAPLP TYPE TABLE OF ZPP_MAPLP WITH HEADER LINE.

  IF  ZMUUPD = 'X'.
    SORT LOC_CBOM BY M_MATNR.
    LOOP AT LOC_CBOM .
      AT NEW M_MATNR.
        CLEAR L_UPDATE.
        REFRESH LTS_MAPLP.
        SELECT SINGLE MPLNR INTO LOC_CBOM-M_MATNR
        FROM ZPP_MAPLP WHERE MPLNR = LOC_CBOM-M_MATNR
        AND WERKS EQ LOC_CBOM-WERKS.
        IF SY-SUBRC = 0.
          L_UPDATE = 'X'.
          DELETE FROM ZPP_MAPLP WHERE MPLNR = LOC_CBOM-M_MATNR AND WERKS EQ LOC_CBOM-WERKS.
        ENDIF.
      ENDAT.
      IF L_UPDATE = 'X'.
        SELECT SINGLE MARA~MATNR INTO LOC_CBOM-C_MATNR
        FROM MARA JOIN MARC
        ON MARA~MATNR = MARC~MATNR
        WHERE MARA~MATNR = LOC_CBOM-C_MATNR
        AND MARA~MTART IN S_MTART
        AND MARC~EKGRP = P_EKGRP
        AND MARC~WERKS = LOC_CBOM-WERKS.

        IF SY-SUBRC = 0.
          LTS_MAPLP-WERKS = LOC_CBOM-WERKS.
          LTS_MAPLP-MPLNR = LOC_CBOM-M_MATNR.
          LTS_MAPLP-MATNR = LOC_CBOM-C_MATNR.
          LTS_MAPLP-KMPMG = LOC_CBOM-MENGE.
          LTS_MAPLP-CERNAM = SY-UNAME.
          LTS_MAPLP-CERDAT = SY-DATUM.
          APPEND LTS_MAPLP.
        ENDIF.
      ENDIF.
    ENDLOOP.
    IF LTS_MAPLP[] IS NOT INITIAL.
      INSERT ZPP_MAPLP FROM TABLE LTS_MAPLP ACCEPTING DUPLICATE KEYS.
    ENDIF.
  ENDIF.

ENDFORM.                    " INS_TAB
*&---------------------------------------------------------------------*
*&      FORM  INS_TAB1
*&      成品-半成品(下挂BOM)的+ 半成品 物料类型 保存 到 ZBOM1中
*&---------------------------------------------------------------------*
*----------------------------------------------------------------------*
FORM INS_TAB1 USING PWERKS TYPE T001W-WERKS.
  DATA:LOC_CBOM LIKE TABLE OF ZCBOM1 WITH HEADER LINE.
  DATA:LOC_COUNT TYPE I VALUE 0.

  SORT ITAB BY C_MATNR.
  LOOP AT ITAB1.
    LOC_CBOM-M_MATNR = ITAB1-M_MATNR.
    LOC_CBOM-MATKL = ITAB1-MATKL.
    LOC_CBOM-C_MATNR = ITAB1-C_MATNR.
    LOC_CBOM-MENGE = ITAB1-MENGE.
    LOC_CBOM-MEINS = ITAB1-MEINS.
    LOC_CBOM-AEDAT = SY-DATUM.
    LOC_CBOM-WERKS = ITAB1-WERKS.
    LOC_CBOM-MTART = ITAB1-MTART.
    APPEND LOC_CBOM.
  ENDLOOP.
  DELETE FROM ZCBOM1 WHERE ZCBOM1~WERKS EQ PWERKS.
  COMMIT WORK.
  INSERT ZCBOM1 FROM TABLE LOC_CBOM ACCEPTING DUPLICATE KEYS.
  COMMIT WORK.
ENDFORM.                    "INS_TAB1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gavin_gxh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值