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

📄 bom.txt

📁 sap abap 编写的 BOM拆分程序
💻 TXT
📖 第 1 页 / 共 2 页
字号:

PS_FILE = DSN1.

CALL METHOD CL_GUI_FRONTEND_SERVICES=>GUI_DOWNLOAD
  EXPORTING
    FILENAME                  = PS_FILE
    FILETYPE                  = 'DAT'
    CODEPAGE                  =  CODEPAGE
  CHANGING
    DATA_TAB                  = IZBOM[]
  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
ENDFORM.

FORM EXPORT_DATA_BG.
*{   REPLACE        EGSK900146                                        2
*\DATA: TRAN_STRING(50000), TAB_KEY TYPE X VALUE '09'.
DATA: TRAN_STRING(50000), TAB_KEY TYPE C value cl_abap_char_utilities=>horizontal_tab.
*}   REPLACE
*{   REPLACE        EGSK900146                                        1
*\  OPEN DATASET DSNA FOR OUTPUT IN TEXT MODE.
***Add by Michael Zhang for MCS OPEN DATASET at 2006/06/20***EGSK900567***

  DATA  NAME(200).

  SELECT SINGLE P~PATHEXTERN INTO NAME
    FROM PATH AS P JOIN OPSYSTEM AS O
            ON P~FILESYS EQ O~FILESYS
        WHERE
         P~PATHINTERN EQ DSNA
           AND
         O~OPSYS EQ SY-OPSYS.

  IF SY-SUBRC EQ 0.
    REPLACE  '<FILENAME>' IN NAME WITH 'ts_scm_bom_2run.txt'.
  ELSE.
    MESSAGE I208(00) WITH 'Logic path is invalid!'.
    STOP.
  ENDIF.

  OPEN DATASET NAME FOR INPUT IN TEXT MODE ENCODING NON-UNICODE.
***Add by Michael Zhang for MCS OPEN DATASET at 2006/06/20***EGSK900567***
*}   REPLACE
  LOOP AT IBOMH.
    CONCATENATE
         IBOMH-NAME
         IBOMH-WERKS
         IBOMH-STUFE
         IBOMH-FATHER
         IBOMH-IDNRK
         IBOMH-DUMPS
         IBOMH-MENGE
         IBOMH-DATUV
         IBOMH-DATUB
         IBOMH-ALPGR
         IBOMH-ALPRF
         IBOMH-EWAHR
         IBOMH-KEY
         IBOMH-DATUV1
         IBOMH-DATUB1
         IBOMH-EWAHR1
         IBOMH-INDEX
                       INTO TRAN_STRING SEPARATED BY TAB_KEY.
     TRANSFER TRAN_STRING TO NAME.
  ENDLOOP.
  CLOSE DATASET NAME.
  TRAN_STRING = ''.
*{   REPLACE        EGSK900146                                        3
*\  OPEN DATASET DSNA1 FOR OUTPUT IN TEXT MODE.
***Add by Michael Zhang for MCS OPEN DATASET at 2006/06/20***EGSK900567***

  CLEAR NAME.

  SELECT SINGLE P~PATHEXTERN INTO NAME
    FROM PATH AS P JOIN OPSYSTEM AS O
            ON P~FILESYS EQ O~FILESYS
        WHERE
         P~PATHINTERN EQ DSNA
           AND
         O~OPSYS EQ SY-OPSYS.

  IF SY-SUBRC EQ 0.
    REPLACE  '<FILENAME>' IN NAME WITH 'bomconstraint_2run.txt'.
  ELSE.
    MESSAGE I208(00) WITH 'Logic path is invalid!'.
    STOP.
  ENDIF.

  OPEN DATASET NAME FOR INPUT IN TEXT MODE ENCODING NON-UNICODE.
***Add by Michael Zhang for MCS OPEN DATASET at 2006/06/20***EGSK900567***
*}   REPLACE
  LOOP AT IZBOM.
    CONCATENATE
            IZBOM-MATNR
            IZBOM-WERKS
            IZBOM-IDNRK1
            IZBOM-IDNRK2
            IZBOM-RELATION
            IZBOM-FLAG
                      INTO TRAN_STRING SEPARATED BY TAB_KEY.
    TRANSFER TRAN_STRING TO NAME.
  ENDLOOP.
  CLOSE DATASET NAME.
ENDFORM.                               " EXPORT_DATA_BG
*&---------------------------------------------------------------------*
*&      Form  BOMEXP
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_MATNR  text                                                *
*      -->P_WERKS  text                                                *
*      -->P_IBOM  text                                                 *
*      -->P_IBOM1 text                                                *
*----------------------------------------------------------------------*
FORM BOMEXP TABLES   P_IBOM STRUCTURE IBOM
*                     P_IBOM1 STRUCTURE IBOM
            USING    P_MATNR          "物料
                     P_WERKS          "工厂
                     P_DATUV          "有效期
                     P_STLAN          "BOM用途
                     P_INDEX.         "标号,拆分用
DATA: ZSTLNR LIKE STPO-STLNR.
DATA: BEGIN OF STB OCCURS 0.
        INCLUDE STRUCTURE STPOX.
DATA: END OF STB.
DATA: BEGIN OF STB2 OCCURS 20,
        POSNR LIKE STPOX-POSNR,
      END OF STB2.
DATA: BEGIN OF STB1.
        INCLUDE STRUCTURE STPOX.
DATA: END OF STB1.
DATA: BEGIN OF MATCAT OCCURS 50.
        INCLUDE STRUCTURE CSCMAT.
DATA: END OF MATCAT.
DATA: BEGIN OF ZSTPO OCCURS 0,
       STLTY LIKE STPO-STLTY,
       STLNR LIKE STPO-STLNR,
       STLKN LIKE STPO-STLKN,
       POSNR LIKE STPO-POSNR,
       IDNRK LIKE STPO-IDNRK,
       MENGE LIKE STPO-MENGE,
       DATUV LIKE STPO-DATUV,
       ALPGR LIKE STPO-ALPGR,
       ALPRF LIKE STPO-ALPRF,
       EWAHR LIKE STPO-EWAHR,
      END OF ZSTPO.
DATA:ZSTLKN LIKE STAS-STLKN,           "BOM##########
     ZDATUV LIKE STAS-DATUV,           "######
     ZSTUFE LIKE STPOX-STUFE,
     ZVWEGX LIKE STPOX-VWEGX,
     LIN TYPE I,
     TMP LIKE STPOX-INDEX VALUE 0,
     TMP1(10).
DATA: BEGIN OF ITMP1 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), "like stpox-index,
         SANFE LIKE STPOX-SANFE,
      END OF ITMP1.
    CALL FUNCTION 'CS_BOM_EXPL_MAT_V2'  "BOM多层展开用
         EXPORTING
              CAPID                 = PM_CAPID
              DATUV                 = P_DATUV
              EMENG                 = PM_EMENG
              EHNDL                 = PM_EHNDL
              MTNRV                 = P_MATNR
              MEHRS                 = 'X'
              STLAN                 = P_STLAN
              WERKS                 = P_WERKS
         TABLES
              STB                   = STB
              MATCAT                = MATCAT
         EXCEPTIONS
              MATERIAL_NOT_FOUND    = 4
              NO_PLANT_DATA         = 8
              NO_BOM_FOUND          = 12
              NO_SUITABLE_BOM_FOUND = 16
              ALT_NOT_FOUND         = 24
              MISSING_AUTHORIZATION = 28                   "note 126227
              CONVERSION_ERROR      = 36.                  "note 126227
    IF SY-SUBRC EQ 0.
     SORT STB BY STUFE WEGXX.
     ZSTLNR = ''.
     LOOP AT STB INTO STB1.
        IF ZSTLNR <> STB1-STLNR.   "未来有效的行项目,也需要展开导出
           CLEAR P_IBOM.
           ZSTUFE = STB1-STUFE - 1.
           SELECT STLTY STLNR STLKN POSNR IDNRK MENGE
                                   DATUV ALPGR ALPRF EWAHR
                           FROM STPO INTO TABLE ZSTPO
                           WHERE STLTY = STB1-STLTY
                             AND STLNR = STB1-STLNR
                             AND DATUV > P_DATUV
                             AND LKENZ = ''.   "未来有效的行项目
           LOOP AT ZSTPO.
            "当前有效的行项目中不包含此物料
*            READ TABLE STB WITH KEY IDNRK = ZSTPO-IDNRK
*                                      POSNR = ZSTPO-POSNR.
*            IF SY-SUBRC NE 0.
              P_IBOM-NAME = P_MATNR+8(10).
              P_IBOM-WERKS = P_WERKS.
              P_IBOM-SANFE = STB-SANFE.
              P_IBOM-STUFE = STB1-STUFE.
              IF STB1-VWEGX = 0.
                  P_IBOM-FATHER = P_INDEX.
              ELSE.
                  READ TABLE STB WITH KEY STUFE = ZSTUFE
                                          WEGXX = STB1-VWEGX
                                          BINARY SEARCH.
                  P_IBOM-FATHER = STB-INDEX.
                  CONDENSE P_IBOM-FATHER.
              ENDIF.
              P_IBOM-IDNRK = ZSTPO-IDNRK+8(10).
              IF ZSTPO-IDNRK+10(2) EQ '69'.

                 P_IBOM-DUMPS = 'x'.
              ELSE.
                 P_IBOM-DUMPS = ''.
              ENDIF.
              P_IBOM-MENGE = ZSTPO-MENGE.
              P_IBOM-DATUV = ZSTPO-DATUV.
              SELECT SINGLE DATUV FROM STAS INTO STAS-DATUV
                                  WHERE STLTY = ZSTPO-STLTY
                                    AND STLNR = ZSTPO-STLNR
                                    AND STLKN = ZSTPO-STLKN
                                    AND LKENZ = 'X'.
              IF SY-SUBRC NE 0.
                P_IBOM-DATUB = '99991231'.
              ELSE.
                P_IBOM-DATUB = STAS-DATUV.
              ENDIF.
              P_IBOM-ALPGR = ZSTPO-ALPGR.
              P_IBOM-ALPRF = ZSTPO-ALPRF.
              P_IBOM-EWAHR = ZSTPO-EWAHR.
              SELECT SINGLE MAABC FROM MARC INTO MARC-MAABC
                                        WHERE MATNR = ZSTPO-IDNRK
                                          AND WERKS = P_WERKS.
              IF MARC-MAABC = 'A'.
                P_IBOM-KEY = 'x'.
              ENDIF.
              TMP = TMP + 1.
              TMP1 = TMP.
              CONDENSE TMP1.
              CONCATENATE P_INDEX '_' TMP1 INTO P_IBOM-INDEX.
              CONDENSE P_IBOM-INDEX.
              APPEND P_IBOM.
              IF ZSTPO-IDNRK+10(2) EQ '69'.     "未来有效的物料其下层也
                                                "展开导出
*                 SELECT SINGLE STLAN FROM MAST INTO MAST-STLAN
*                               WHERE MATNR = ZSTPO-IDNRK
*                                 AND WERKS = P_WERKS.
                 REFRESH ITMP1.
                 PERFORM BOMEXP TABLES ITMP1
                     USING ZSTPO-IDNRK
                           P_WERKS
                           ZSTPO-DATUV
                           P_STLAN
                           P_IBOM-INDEX.
                 LOOP AT ITMP1.
                  MOVE-CORRESPONDING ITMP1 TO P_IBOM.
                  P_IBOM-NAME = P_MATNR+8(10).
                  P_IBOM-WERKS = P_WERKS.
                  P_IBOM-STUFE = ITMP1-STUFE + STB1-STUFE.
                  APPEND P_IBOM.
                 ENDLOOP.
              ENDIF.
*            ENDIF.
           ENDLOOP.
        ENDIF.
        ZSTLNR = STB1-STLNR.
        CLEAR P_IBOM.
        MOVE-CORRESPONDING STB1 TO P_IBOM.
        P_IBOM-NAME = P_MATNR+8(10).
        P_IBOM-IDNRK = STB1-IDNRK+8(10).
        P_IBOM-WERKS = P_WERKS.            "计算没个物料在BOM中的序号
        P_IBOM-INDEX = STB1-INDEX.
        CONDENSE P_IBOM-INDEX.
        IF STB1-VWEGX = 0.                "给出父物料的序号
            P_IBOM-FATHER = P_INDEX.
        ELSE.
            READ TABLE STB WITH KEY STUFE = ZSTUFE
                                  WEGXX = STB1-VWEGX
                                  BINARY SEARCH.
            P_IBOM-FATHER = STB-INDEX.
            CONDENSE P_IBOM-FATHER.
        ENDIF.
        SELECT SINGLE MAABC FROM MARC INTO MARC-MAABC
                                    WHERE MATNR = STB1-IDNRK
                                      AND WERKS = P_WERKS.
        IF MARC-MAABC = 'A'.      "关键部件标示
            P_IBOM-KEY = 'x'.
        ENDIF.
*        IF P_IBOM-ALPGR <> ''.
*           SELECT SINGLE DATUV EWAHR FROM STPO
*                           INTO (STPO-DATUV,STPO-EWAHR)
*                           WHERE STLTY = STB1-STLTY
*                             AND STLNR = STB1-STLNR
*                             AND DATUV > SY-DATUM
*                             AND LKENZ = ''
*                             AND POSNR = STB1-POSNR.
*           IF SY-SUBRC EQ 0.
              P_IBOM-DATUV1 = STPO-DATUV.
              P_IBOM-DATUB1 = '99991231'.
              P_IBOM-EWAHR1 = ''.
*           ENDIF.
*        ENDIF.
        APPEND P_IBOM.
     ENDLOOP.
    ENDIF.

ENDFORM.                    " BOMEXP

⌨️ 快捷键说明

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