📄 bom.txt
字号:
*&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 + -