⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bom.txt

📁 sap abap 编写的 BOM拆分程序
💻 TXT
📖 第 1 页 / 共 2 页
字号:
*&FP 2RUN BOM拆分程序    &*
REPORT ZTS_SCM_BOM
           LINE-SIZE 230 NO STANDARD PAGE HEADING LINE-COUNT 65.
TABLES:STPO,MAST,STAS,MAKT,ZLCSPLANT,ZATPBOMTIMES,STKO,MARC,ZBOM,ZBOM1,
               ZSCM_EXP_STATS.

DATA:PM_MTNRV LIKE MARA-MATNR,
     PM_CAPID LIKE TC04-CAPID VALUE 'PP01',
     PM_DATUV LIKE STKO-DATUV,
     PM_EMENG LIKE STKO-BMENG VALUE '1',
     PM_EHNDL(1)    VALUE '1',
     PM_DSPRF      LIKE KLAH-CLASS VALUE 'SAPCSMLVMP01'.
DATA:DSN LIKE RLGRAP-FILENAME  VALUE 'C:\ts_scm_bom_2run.txt'.
DATA:DSN1 LIKE RLGRAP-FILENAME  VALUE 'C:\bomconstraint_2run.txt'.

*DATA DSNA(80) VALUE
*'/interface/data3/I2/flatfile/ts_scm_bom_2run.txt'.
*DATA DSNA1(80) VALUE
*'/interface/data3/I2/flatfile/bomconstraint_2run.txt'.
***Add by Michael Zhang for MCS OPEN DATASET at 2006/06/20***EGSK900567***
DATA DSNA(80) VALUE 'ZINTG_DATA3_I2_FLATFILE'.
***Add by Michael Zhang for MCS OPEN DATASET at 2006/06/20***EGSK900567***

DATA  ZIDNRK LIKE AUSP-OBJEK.
DATA:BEGIN OF ZHEAD OCCURS 10,         "BOM表头选取有效BOM
     STLNR LIKE MAST-STLNR,            "BOM#号
     MATNR LIKE MAST-MATNR,            "物料号
     WERKS LIKE MAST-WERKS,
     STLAN LIKE MAST-STLAN,
     DATUV LIKE STKO-DATUV,
END OF ZHEAD.
DATA: BEGIN OF ZMATNR OCCURS 0,
        MATNR LIKE MARC-MATNR,
        WERKS LIKE MARC-WERKS,
      END OF ZMATNR.
DATA:BEGIN OF ZHEAD1 OCCURS 10,        "BOM表头选取有效BOMOM
     STLNR LIKE MAST-STLNR,            "BOM号
     MATNR LIKE MAST-MATNR,            "物料号
     WERKS LIKE MAST-WERKS,
     STLAN LIKE MAST-STLAN,
END OF ZHEAD1.
DATA:BEGIN OF ZHEADBE OCCURS 10,
     MATNR LIKE MAST-MATNR,             "物料号
     STLNR LIKE MAST-STLNR,             "BOM号
     STLKN LIKE STAS-STLKN,
     WERKS LIKE MAST-WERKS,
     STLAN LIKE MAST-STLAN,
END OF ZHEADBE.
DATA:  BEGIN OF BOMBLOCK OCCURS 0,
       STLTY LIKE STKO-STLTY,
       STLNR LIKE STKO-STLNR,
       STKOZ LIKE STKO-STKOZ,
       STLST LIKE STKO-STLST,
       DATUV LIKE STKO-DATUV,
       END OF BOMBLOCK.
DATA: LIN TYPE I.
DATA: BEGIN OF ZSTAS OCCURS 20,
       STLTY LIKE STAS-STLTY,
       STLNR LIKE STAS-STLNR,
       STLAL LIKE STAS-STLAL,
       STLKN LIKE STAS-STLKN,
       AENNR LIKE STAS-AENNR,
      END OF ZSTAS.
DATA: BEGIN OF IBOM OCCURS 0,
         NAME LIKE STPOX-IDNRK,
         WERKS LIKE MAST-WERKS,
         STUFE LIKE STPOX-STUFE,
         FATHER LIKE STPOX-IDNRK,
         IDNRK LIKE STPOX-IDNRK,
         DUMPS LIKE STPOX-DUMPS,
         MENGE LIKE STPOX-MENGE,
         DATUV LIKE STPOX-DATUV,
         DATUB LIKE STPOX-DATUB,
         ALPGR LIKE STPOX-ALPGR,
         ALPRF LIKE STPOX-ALPRF,
         EWAHR LIKE STPOX-EWAHR,
         KEY  LIKE MARC-MAABC,
         DATUV1 LIKE STPOX-DATUV,
         DATUB1 LIKE STPOX-DATUB,
         EWAHR1 LIKE STPOX-ALPGR,
         INDEX(10),
         SANFE LIKE STPOX-SANFE,
      END OF IBOM.
DATA: BEGIN OF IBOMH OCCURS 0,
         NAME LIKE STPOX-IDNRK,
         WERKS LIKE MAST-WERKS,
         STUFE(2),  "like stpox-stufe,
         FATHER LIKE STPOX-IDNRK,
         IDNRK LIKE STPOX-IDNRK,
         DUMPS LIKE STPOX-DUMPS,
         MENGE(13), " like stpox-menge,
         DATUV(10),  " like stpox-datuv,
         DATUB(10),  " like stpox-datub,
         ALPGR LIKE STPOX-ALPGR,
         ALPRF LIKE STPOX-ALPRF,
         EWAHR(3),  " like stpox-ewahr,
         KEY  LIKE MARC-MAABC,
         DATUV1(10),  " like stpox-datuv,
         DATUB1(10),  " like stpox-datub,
         EWAHR1 LIKE STPOX-ALPGR,
         INDEX(10),
         SANFE LIKE STPOX-SANFE,
      END OF IBOMH.
DATA: BEGIN OF IZBOM OCCURS 100,
          MATNR LIKE ZBOM-MATNR,
          WERKS LIKE ZBOM-WERKS,
          IDNRK1 LIKE ZBOM-IDNRK1,
          IDNRK2 LIKE ZBOM-IDNRK2,
          RELATION LIKE ZBOM-RELATION,
          FLAG LIKE ZBOM-FLAG,
      END OF IZBOM.
DATA ZINDEX(10) VALUE '0'.
DATA: BEGIN OF IERROR OCCURS 0,
         NAME LIKE STPOX-IDNRK,
         WERKS LIKE MAST-WERKS,
         FATHER LIKE STPOX-IDNRK,
         IDNRK LIKE STPOX-IDNRK,
      END OF IERROR.
DATA:IZSCM_EXP_STATS LIKE ZSCM_EXP_STATS OCCURS 0 WITH HEADER LINE.
SELECTION-SCREEN BEGIN OF BLOCK BL1 WITH FRAME TITLE TEXT-BL1.
PARAMETERS:  DAY LIKE MAST-ANDAT OBLIGATORY.
SELECT-OPTIONS IWERKS FOR MAST-WERKS.
SELECT-OPTIONS IMATNR FOR MAST-MATNR.
SELECT-OPTIONS ISTLAN FOR MAST-STLAN.
SELECTION-SCREEN END OF BLOCK BL1.
PARAMETER SOPT AS CHECKBOX.

  PM_DATUV = SY-DATUM.
*工厂级冻结标识不为2的,小BOM失效
  SELECT MATNR WERKS FROM MARC INTO TABLE ZMATNR
                     WHERE MATNR IN IMATNR
                       AND WERKS IN IWERKS
                       AND MMSTA <> '02'
                       AND MMSTA <> '04'
                       AND PSTAT NOT LIKE '%E%'
                       AND LVORM = ''.
*查找对应BOM号
  SELECT STLNR MATNR WERKS STLAN FROM MAST
                       APPENDING CORRESPONDING FIELDS OF TABLE ZHEAD1
                        FOR ALL ENTRIES IN ZMATNR
                        WHERE  WERKS = ZMATNR-WERKS
                          AND  MATNR = ZMATNR-MATNR
                          AND STLAN IN ISTLAN
                       AND STLAL = '01'
                       AND ANDAT = DAY.
*当前及未来有效的BOM
  DESCRIBE TABLE ZHEAD1 LINES LIN.
  IF LIN > 0.
  SELECT STLTY STLNR STKOZ STLST DATUV
               FROM STKO INTO TABLE BOMBLOCK
               FOR ALL ENTRIES IN ZHEAD1
               WHERE  STLNR = ZHEAD1-STLNR
                AND   STLTY = 'M'
                AND   STLAL = '01'.
  ENDIF.
  SORT ZHEAD1 BY STLNR.
  SORT BOMBLOCK BY STLNR ASCENDING STKOZ DESCENDING.
LOOP AT BOMBLOCK.
   ON CHANGE OF BOMBLOCK-STLNR.
    IF BOMBLOCK-STLST <> '02'.
      LOOP AT ZHEAD1 WHERE STLNR = BOMBLOCK-STLNR.
        MOVE-CORRESPONDING ZHEAD1 TO ZHEAD.
        IF BOMBLOCK-DATUV > SY-DATUM.
          ZHEAD-DATUV = BOMBLOCK-DATUV.
        ELSE.
          ZHEAD-DATUV = SY-DATUM.
        ENDIF.
        APPEND ZHEAD.
      ENDLOOP.
    ELSEIF BOMBLOCK-DATUV > SY-DATUM.
      LOOP AT ZHEAD1 WHERE STLNR = BOMBLOCK-STLNR.
        MOVE-CORRESPONDING ZHEAD1 TO ZHEAD.
        ZHEAD-DATUV = SY-DATUM.
        APPEND ZHEAD.
      ENDLOOP.
    ENDIF.
   ENDON.
ENDLOOP.
*BOM多层展开
  LOOP AT ZHEAD.
    CLEAR IBOM.
    REFRESH IBOM.
    PERFORM BOMEXP  TABLES IBOM
                    USING ZHEAD-MATNR
                          ZHEAD-WERKS
                          ZHEAD-DATUV
                          ZHEAD-STLAN
                          ZINDEX.
    LOOP AT IBOM.
*     文本项、软盘物料不导出
      IF IBOM-IDNRK <> '' AND IBOM-IDNRK <> '0038001070'
                          AND IBOM-IDNRK <> '0031000454'.
      CONCATENATE '00000000' IBOM-IDNRK INTO ZIDNRK.
      SELECT SINGLE MMSTA FROM MARC INTO MARC-MMSTA
                    WHERE MATNR = ZIDNRK
                      AND WERKS = IBOM-WERKS.
       IF MARC-MMSTA <> '02' AND  MARC-MMSTA <> '04'.  "非02、04物料
        MOVE-CORRESPONDING IBOM TO IBOMH.
        CONDENSE IBOMH-INDEX.
        IF IBOM-DATUB NE '99991231'.
          IBOM-DATUB = IBOM-DATUB - 1.  "有效期减一,MP需求
          IBOMH-DATUB = IBOM-DATUB.
        ENDIF.
        IF IBOM-DUMPS = 'x'.
*           除两个特殊虚拟件外,所有虚拟件均不设关键件
            IF IBOM-IDNRK <> '0069007620'
                                     AND IBOM-IDNRK <> '0069007621'.
              IBOMH-KEY = ''.
            ELSE.
              IBOMH-KEY = 'x'.
            ENDIF.
        ENDIF.
        APPEND IBOMH.
       ELSE.
         MOVE-CORRESPONDING IBOM TO IERROR.
         APPEND IERROR.
       ENDIF.
      ENDIF.
    ENDLOOP.
  ENDLOOP.
*导出物料制约关系
SELECT MATNR WERKS IDNRK1 IDNRK2 RELATION FLAG
                                       FROM ZBOM INTO TABLE IZBOM.
SELECT MATNR WERKS IDNRK1 IDNRK2 RELATION FLAG
                                       FROM ZBOM1
                                       APPENDING TABLE IZBOM.
  IF SOPT EQ 'X'.
    PERFORM EXPORT_DATA_FT.
  ELSE.
    PERFORM EXPORT_DATA_BG.            "######unix
    IZSCM_EXP_STATS-FILENAME = 'ZTS_SCM_BOM'.
    IZSCM_EXP_STATS-FILEMODE = ' '.
    APPEND IZSCM_EXP_STATS.
    MODIFY ZSCM_EXP_STATS FROM IZSCM_EXP_STATS.
  ENDIF.
LOOP AT IERROR.  "写日志
  IF SY-TABIX = 1.
      WRITE: / '状态为04的物料:'.
  ENDIF.
  READ TABLE IBOM WITH KEY NAME = IERROR-NAME
                           WERKS = IERROR-WERKS
                           INDEX = IERROR-FATHER.
  WRITE AT /1(10) IERROR-NAME+0(10).
  WRITE AT 15  IERROR-WERKS.
  WRITE AT 25(10) IBOM-IDNRK+0(10).
  WRITE AT 40(10) IERROR-IDNRK+0(10).
ENDLOOP.
FORM EXPORT_DATA_FT.

*{   REPLACE        EGSK900146                                        1
*\  CALL FUNCTION 'WS_DOWNLOAD'
*\      EXPORTING
*\*         BIN_FILESIZE            = ' '
*\*         CODEPAGE                = ' '
*\           FILENAME                = DSN
*\           FILETYPE                = 'DAT'
*\*         MODE                    = ' '
*\*         WK1_N_FORMAT            = ' '
*\*         WK1_N_SIZE              = ' '
*\*         WK1_T_FORMAT            = ' '
*\*         WK1_T_SIZE              = ' '
*\*         COL_SELECT              = ' '
*\*         COL_SELECTMASK          = ' '
*\*         NO_AUTH_CHECK           = ' '
*\*    IMPORTING
*\*         FILELENGTH              =
*\       TABLES
*\            DATA_TAB                = IBOMH
*\*         FIELDNAMES              =
*\       EXCEPTIONS
*\            FILE_OPEN_ERROR         = 1
*\            FILE_WRITE_ERROR        = 2
*\            INVALID_FILESIZE        = 3
*\            INVALID_TABLE_WIDTH     = 4
*\            INVALID_TYPE            = 5
*\            NO_BATCH                = 6
*\            UNKNOWN_ERROR           = 7
*\            GUI_REFUSE_FILETRANSFER = 8
*\            OTHERS                  = 9.
**Added by Pengle for MCS UCCHECK at 2006/06/06 ***EGSK900146***
DATA: CODEPAGE TYPE ABAP_ENCOD VALUE '8400'.
DATA: PS_FILE TYPE STRING.

PS_FILE = DSN.

CALL METHOD CL_GUI_FRONTEND_SERVICES=>GUI_DOWNLOAD
  EXPORTING
    FILENAME                  = PS_FILE
    FILETYPE                  = 'DAT'
    CODEPAGE                  =  CODEPAGE
  CHANGING
    DATA_TAB                  = IBOMH[]
  EXCEPTIONS
    FILE_WRITE_ERROR          = 1
    NO_BATCH                  = 2
    GUI_REFUSE_FILETRANSFER   = 3
    INVALID_TYPE              = 4
    NO_AUTHORITY              = 5
    UNKNOWN_ERROR             = 6
    HEADER_NOT_ALLOWED        = 7
    SEPARATOR_NOT_ALLOWED     = 8
    FILESIZE_NOT_ALLOWED      = 9
    HEADER_TOO_LONG           = 10
    DP_ERROR_CREATE           = 11
    DP_ERROR_SEND             = 12
    DP_ERROR_WRITE            = 13
    UNKNOWN_DP_ERROR          = 14
    ACCESS_DENIED             = 15
    DP_OUT_OF_MEMORY          = 16
    DISK_FULL                 = 17
    DP_TIMEOUT                = 18
    FILE_NOT_FOUND            = 19
    DATAPROVIDER_EXCEPTION    = 20
    CONTROL_FLUSH_ERROR       = 21
    NOT_SUPPORTED_BY_GUI      = 22
    ERROR_NO_GUI              = 23
    others                    = 24.
*}   REPLACE
*{   REPLACE        EGSK900146                                        2
*\  CALL FUNCTION 'WS_DOWNLOAD'
*\      EXPORTING
*\*         BIN_FILESIZE            = ' '
*\*         CODEPAGE                = ' '
*\           FILENAME                = DSN1
*\           FILETYPE                = 'DAT'
*\*         MODE                    = ' '
*\*         WK1_N_FORMAT            = ' '
*\*         WK1_N_SIZE              = ' '
*\*         WK1_T_FORMAT            = ' '
*\*         WK1_T_SIZE              = ' '
*\*         COL_SELECT              = ' '
*\*         COL_SELECTMASK          = ' '
*\*         NO_AUTH_CHECK           = ' '
*\*    IMPORTING
*\*         FILELENGTH              =
*\       TABLES
*\            DATA_TAB                = IZBOM
*\*         FIELDNAMES              =
*\       EXCEPTIONS
*\            FILE_OPEN_ERROR         = 1
*\            FILE_WRITE_ERROR        = 2
*\            INVALID_FILESIZE        = 3
*\            INVALID_TABLE_WIDTH     = 4
*\            INVALID_TYPE            = 5
*\            NO_BATCH                = 6
*\            UNKNOWN_ERROR           = 7
*\            GUI_REFUSE_FILETRANSFER = 8
*\            OTHERS                  = 9.
**Added by Pengle for MCS UCCHECK at 2006/06/06 ***EGSK900146***

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -