?? bom.txt
字號:
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. "標(biāo)號,拆分用
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. "未來有效的行項目,也需要展開導(dǎo)出
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.
"當(dāng)前有效的行項目中不包含此物料
* 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'. "未來有效的物料其下層也
"展開導(dǎo)出
* 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'. "關(guān)鍵部件標(biāo)示
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
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -