activeman님께서 알려주신 테이블을 이용해 아래처럼 수정을 하니 STLAL의 값은 가져올 수 있었습니다.
그런데 STLAL = '02', '03' 일때는 'CS_BOM_EXPLOSION'을 돌아도 결과값은 나오지 않습니다.
분명히 BOM은 존재하는데... 제가 무엇을 빼먹은 부분이 있는가요?
*---------------------------------------------------------------------*
* Form BOM_EXP
*---------------------------------------------------------------------*
FORM BOM_EXP.
REFRESH : IT_01, IT_05.
CLEAR : IT_01, IT_05.
SELECT *
INTO CORRESPONDING FIELDS OF TABLE IT_05 " 추가
FROM MAST " 추가
WHERE MAST~MATNR IN S_MATNR " 추가
AND MAST~WERKS IN S_WERKS. " 추가
LOOP AT IT2_01. " 추가
LOOP AT IT_05 WHERE MATNR = IT2_01-MATNR. " 추가
IT2_01-STLAL = IT_05-STLAL. " 추가
MODIFY IT2_01. " 추가
ENDLOOP. " 추가
ENDLOOP. " 추가
LOOP AT IT2_01.
CLEAR : TEMP_STBP.
READ TABLE IT2_01 INDEX SY-TABIX.
WRITE IT2_01-WERKS TO PA_WERKS.
WRITE IT2_01-MATNR TO PA_MATNR.
WRITE IT2_01-STLAL TO PA_STLAL.
IT_01-MATNR = IT2_01-MATNR.
IT_01-MAKTX = IT2_01-MAKTX.
IT_01-MTART = IT2_01-MTART.
IT_01-WERKS = IT2_01-WERKS.
IT_01-GI_03_QTY = IT2_01-GI_03_QTY.
IT_01-MEINS = IT2_01-MEINS.
IT_01-GI_03_FACT = IT2_01-GI_03_FACT.
IT_01-WAERS = IT2_01-WAERS.
IT_01-STUFE = '0'.
IT_01-STLAL = IT2_01-STLAL.
IT_01-MATNR_C = IT2_01-MATNR.
APPEND IT_01.
PERFORM BOM_EXP1 TABLES IT_01
USING PA_MATNR PA_WERKS PA_STLAL SY-DATUM CHANGING LAST.
ENDLOOP.
ENDFORM.
*---------------------------------------------------------------------*
* Form BOM_EXP
*---------------------------------------------------------------------*
FORM BOM_EXP1 TABLES P_BOM_EXPLODED STRUCTURE IT_01
USING P_IDNRK P_WERKS P_STLAL P_DATUV CHANGING P_LAST.
CALL FUNCTION 'CS_BOM_EXPLOSION'
EXPORTING
CAPID = 'PP01'
DATUV = P_DATUV
MTNRV = P_IDNRK
WERKS = P_WERKS
STLAL = P_STLAL
MEHRS = 'X'
TABLES
STBP = IT_STBP
STBD = IT_STBD
STBE = IT_STBE
STBK = IT_STBK
STBM = IT_STBM
STBT = IT_STBT
EXCEPTIONS
ALT_NOT_FOUND = 1
CALL_INVALID = 2
MISSING_AUTHORIZATION = 4
NO_BOM_FOUND = 5
NO_PLANT_DATA = 6
NO_SUITABLE_BOM_FOUND = 7
CONVERSION_ERROR = 8
OTHERS = 9.
LOOP AT IT_STBP.
TEMP_STBP-OBJNR = IT_STBP-OBJNR.
TEMP_STBP-WERKS = P_WERKS.
TEMP_STBP-STLAL = IT_STBP-STLAL.
APPEND TEMP_STBP.
ENDLOOP.
IF SY-SUBRC <> 0.
P_LAST = 'X'.
ELSE.
LOOP AT TEMP_STBP.
IT_01-MATNR = IT2_01-MATNR.
IT_01-MAKTX = IT2_01-MAKTX.
IT_01-MTART = IT2_01-MTART.
IT_01-WERKS = IT2_01-WERKS.
IT_01-GI_03_QTY = IT2_01-GI_03_QTY.
IT_01-MEINS = IT2_01-MEINS.
IT_01-GI_03_FACT = IT2_01-GI_03_FACT.
IT_01-WAERS = IT2_01-WAERS.
IT_01-STUFE = ''.
IT_01-STLAL = TEMP_STBP-STLAL.
IT_01-MATNR_C = TEMP_STBP-OBJNR.
APPEND IT_01.
ENDLOOP.
LOOP AT TEMP_STBP. " 추가
LOOP AT IT_05 WHERE MATNR = TEMP_STBP-OBJNR. " 추가
TEMP_STBP-OBJNR = IT_05-MATNR. " 추가
TEMP_STBP-WERKS = IT_05-WERKS. " 추가
TEMP_STBP-STLAL = IT_05-STLAL. " 추가
COLLECT TEMP_STBP. " 추가
ENDLOOP. " 추가
ENDLOOP. " 추가
DELETE TEMP_STBP WHERE STLAL = '01'.
DELETE TEMP_STBP WHERE STLAL = ''.
LOOP AT TEMP_STBP.
READ TABLE TEMP_STBP INDEX SY-TABIX.
WRITE TEMP_STBP-WERKS TO PA_WERKS.
WRITE TEMP_STBP-OBJNR TO PA_MATNR.
WRITE TEMP_STBP-STLAL TO PA_STLAL.
PERFORM BOM_EXP1 TABLES P_BOM_EXPLODED
USING PA_MATNR PA_WERKS PA_STLAL P_DATUV CHANGING P_LAST.
CLEAR P_LAST.
ENDLOOP.
ENDIF.
ENDFORM.
댓글 5
-
activeman
2008.02.26 02:46
-
activeman
2008.02.27 02:22
REFRESH: IT_STBP, IT_STBD, IT_STBE, IT_STBK, IT_STBM, IT_STBT
구문이 "CALL FUNCTION 'CS_BOM_EXPLOSION" 함수 호출전에 필요할듯 합니다..
-
행복한외계인
2008.02.27 02:29
그거 호출은 다 했죠... 에러없이 잘 돌아는 가요... 문제는
DATUV = P_DATUV
MTNRV = P_IDNRK
WERKS = P_WERKS
STLAL = P_STLAL
값도 잘 들어가는데 STLSL에 '01' 이상이 들어가면 IT_STBP에 결과값이 안나와요... ;;
'01' BOM 외에는 하나도 안 읽어온다는게... 제가 멀 잘못하고 있는건지... 실행해도 에러가 안나니까 모르겠다는 ㅠㅠ
-
김현준
2008.02.27 17:49
혹시 데이터 타입을 한번 확인해보심이 어떨지요...ㅡㅡa
-
행복한외계인
2008.02.27 18:12
전부 일치 시켰죠... 혹시나 STLAL 타입이 문제되나 싶어서 전부 MAST-STLAL로 통일시켰는데도 안되요
일단 상품코드(matnr)을 이용해서 MAST를 SELECT 하여 대체BOM번호를 가져오고 그 대체BOM 번호를 가지고 BOM 전개를 하시면 되겠네요.
STLAL = '01' 이런식으로 넣으시면 되겠습니다.