REPORT ZPPBMR001 LINE-SIZE 180
LINE-COUNT 65
NO STANDARD PAGE HEADING
MESSAGE-ID MG.
*----------------------------------------------------------------------*
* Program : ZPPBMR001 *
* Author : Patrick,Song *
* Date : Aug 20, 2008 *
* Code type : conversion *
* Version : new creation *
* (interface/conversion/on-line transaction/report) *
* *
*----------------------------------------------------------------------*
* Error handling : *
*----------------------------------------------------------------------*
* 1. *
* *
*----------------------------------------------------------------------*
* Change log : *
*----------------------------------------------------------------------*
* CR# : *
* Corr. no. : *
* Date : *
* Author : *
* Change : *
* *
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
* Table declaration
*&---------------------------------------------------------------------*
TABLES: AUSP, " Characteristic Values
ADRC, " Addresses (Business Address Services)
CABN, " Characteristic
CSCMAT, " BOM Explosion: Materials
EINA, " Purchasing Info Record: General Data
EINE, " Purchasing Info Rec:Purchasing Org.Data
EORD, " Purchasing Source List
KNA1, " Customer Master
KNMT, " Customer Material Table
MAKT, " Material Description
MARA, " General Material Data
MARC, " Plant Data for Material
MARM, " Units of Measure for Material
MAST, " Material to BOM Link
QINF, " QM-info record for material and vendor
STKO, " BOM Header
STPO, " BOM item
STXH, " STXD SAPscript text file header
STZU, " Permanent BOM data
T134, " Material Types
T001W. " Plants/Branches
*&---------------------------------------------------------------------*
* Subrouting declaration
*&---------------------------------------------------------------------*
INCLUDE : <ICON>.
TYPE-POOLS: SLIS.
INCLUDE : ABAPRETN.
INCLUDE : ZBCDWI000.
*&---------------------------------------------------------------------*
* Declaration Constant Data
*&---------------------------------------------------------------------*
CONSTANTS : ST_FORMNAME_TOP_OF_PAGE TYPE SLIS_FORMNAME
VALUE 'TOP_OF_PAGE-ALV'.
*&---------------------------------------------------------------------*
* selection screen define
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK A1 WITH FRAME TITLE TEXT-SC1 .
PARAMETERS: P_MATNR LIKE MAST-MATNR MEMORY ID MAT OBLIGATORY.
PARAMETERS: P_WERKS LIKE T001W-WERKS DEFAULT '2001' OBLIGATORY .
PARAMETERS: P_STLAN LIKE MAST-STLAN DEFAULT '1' OBLIGATORY .
PARAMETERS: P_CAPID LIKE RC29L-CAPID DEFAULT 'PP01' OBLIGATORY .
PARAMETERS: P_STLAL LIKE RC29L-STLAL DEFAULT '1' OBLIGATORY .
PARAMETERS: P_EMENG LIKE RC29N-EMENG DEFAULT '10000' OBLIGATORY .
PARAMETERS: P_DATUM LIKE RC29N-DATUV DEFAULT SY-DATUM .
SELECTION-SCREEN SKIP .
PARAMETERS: P_INFO AS CHECKBOX DEFAULT SPACE .
PARAMETERS: P_OUTST AS CHECKBOX DEFAULT SPACE.
SELECTION-SCREEN END OF BLOCK A1 .
PARAMETERS: P_FILE LIKE RLGRAP-FILENAME DEFAULT 'd:\bom_dl\'.
PARAMETERS: P_SINGLE AS CHECKBOX DEFAULT SPACE.
*&---------------------------------------------------------------------*
* globe parameters declaration
*&---------------------------------------------------------------------*
* define interal table to store BOM details
DATA: BEGIN OF ITAB OCCURS 0 .
DATA: POSNR LIKE STPO-POSNR . "Item No
DATA: IDNRK LIKE STPOX-IDNRK. "Component No
DATA: STUFE(002) . "Level
DATA: MTART LIKE MARA-MTART .
DATA: MAKTX TYPE STRING . "Component Description
DATA: MEINS LIKE STPOX-MEINS. "BUnit
DATA: MENGE(010) . "Component Quantity
DATA: MNGLG(010).
DATA: FMENG LIKE STPO-FMENG. "Fixed Quantity
DATA: AUSCH(005). "Scrap Rate
DATA: ALPGR LIKE STPOX-ALPGR. "Alternative item: group
DATA: ALPRF LIKE STPOX-ALPRF. "Alternative item: ranking order
DATA: POTXT(080). "Item Text
DATA: POTX1(100). "Item Text (Line 1)
DATA: POTX2(100). "Item Text (Line 2)
DATA: GREENPRD(003). "Green Material Indicator
DATA: SECURITY(003). "Security Material Indicator
DATA: LIFNR LIKE LFA1-LIFNR .
DATA: STLNR(008) . "BOM Number
DATA: SELK(001).
DATA: LGORT LIKE STPOX-LGORT.
DATA: INFOCHK(003). "Pur.Info Record Check
DATA: INFNR LIKE EINE-INFNR .
DATA: EKORG LIKE EINE-EKORG .
DATA: WERKS LIKE EINE-WERKS .
DATA: LIFNR1 LIKE LFA1-LIFNR .
DATA: STR_CHAR TYPE STRING .
DATA: CHECK(003).
DATA: END OF ITAB .
*>define internal table to store these download data
DATA: BEGIN OF DL_TAB OCCURS 0 .
DATA: MATNR(018)." LIKE MARA-MATNR .
DATA: XTEXT(040)." LIKE MAKT-MAKTX .
DATA: EMENG(018)." LIKE RC29N-EMENG .
DATA: WERKS(004)." LIKE MARC-WERKS .
DATA: STLAN(001)." LIKE MAST-STLAN .
DATA: HTEXT(255).
DATA: IDNRK(018)." LIKE STPOX-IDNRK. "Component No
DATA: MAKTX(040)." TYPE STRING . "Component Description
DATA: MENGE(013)." Component Quantity
DATA: AUSCH(005)." Scrap Rate
DATA: LGORT(004)." LIKE STPOX-LGORT.
DATA: ALPGR(002)." LIKE STPOX-ALPGR. "Alternative item: group
DATA: ALPRF(002)." LIKE STPOX-ALPRF. "Alternative item: ranking order
DATA: POTX1(040)." LIKE STPOX-POTX1 . "Item Text (Line 1)
DATA: POTX2(040)." LIKE STPOX-POTX1 . "Item Text (Line 2)
DATA: FMENG(005)." LIKE STPO-FMENG. "Fixed Quantity
DATA: MEINS(005)." LIKE STPOX-MEINS . "BUnit
DATA: STKTX(040)." LIKE BICSP-STKTX. "29# Alternative BOM text
DATA: GEWEI(003)." Weight Unit
DATA: NTGEW(017)." New Weight
DATA: BRGEW(017)." Gross Weight
DATA: BOX01(006)." Quantity per Carton
DATA: BOX02(006)." Quantity per PAL
DATA: POTXT(080)." Item Text
DATA: END OF DL_TAB .
*>define internal table to store these HALB Materials
DATA: BEGIN OF I_HALB OCCURS 0 .
DATA: IDNRK LIKE STPOX-IDNRK .
DATA: WERKS LIKE STPOX-WERKS .
DATA: STLAN LIKE STPOX-STLAN .
DATA: MAKTX LIKE MAKT-MAKTX .
DATA: END OF I_HALB .
*> BOM Header Data
DATA: BMHDS LIKE ZPP_BMHD OCCURS 0 WITH HEADER LINE.
DATA: BMITS LIKE ZPP_BMIT OCCURS 0 WITH HEADER LINE .
*> bom explosion data store
DATA: I_BOM LIKE STPOX OCCURS 0 WITH HEADER LINE.
DATA: I_MATCAT LIKE CSCMAT OCCURS 0 WITH HEADER LINE.
DATA: L_ADRNR LIKE KNA1-ADRNR .
* define data for text reading
DATA: STR_TDNAME LIKE STXH-TDNAME .
DATA: STR_TDID LIKE STXH-TDID .
DATA: STR_OBJECT LIKE THEAD-TDOBJECT .
DATA: STR_LINES LIKE TLINE OCCURS 0 WITH HEADER LINE .
DATA: S_REPID LIKE SY-REPID,
ST_LIST_TOP_OF_PAGE TYPE SLIS_T_LISTHEADER."page header
DATA: ST_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV, "table col name
ST_LAYOUT TYPE SLIS_LAYOUT_ALV, "layoutsetting
ST_SP_GROUP TYPE SLIS_T_SP_GROUP_ALV,
ST_EVENTS TYPE SLIS_T_EVENT, "event header
* s_default(001) type c,
* s_exit(001) type c,
* st_variant like disvariant,
CODE LIKE DISVARIANT-HANDLE,
S_VARIANT LIKE DISVARIANT,
S_STATUS TYPE SLIS_FORMNAME VALUE 'STANDARD_ST01',
S_USER_COMMAND TYPE SLIS_FORMNAME VALUE 'USER_COMMAND-ALV'.
DATA: BEGIN OF EXTAB OCCURS 0,
FCODE LIKE RSMPE-FUNC.
DATA: END OF EXTAB.
DATA: TAB TYPE SLIS_T_EXTAB.
DATA: L_ATINN LIKE CABN-ATINN .
*>User For Smartforms
DATA: FM_NAME TYPE RS38L_FNAM,
WA_SSFCOMPOP TYPE SSFCOMPOP,
WA_SSFCTRLOP TYPE SSFCTRLOP.
DATA: C_STLAL LIKE MAST-STLAL.
DATA: GET_BAPI1003 LIKE BAPI1003_ALLOC_VALUES_NUM OCCURS 0 WITH HEADER LINE,
GET_VALUES_CHAR LIKE BAPI1003_ALLOC_VALUES_CHAR OCCURS 0 WITH HEADER LINE,
GET_VALUES_CURR LIKE BAPI1003_ALLOC_VALUES_CURR OCCURS 0 WITH HEADER LINE,
GET_VALUES_LIST LIKE BAPI1003_ALLOC_LIST OCCURS 0 WITH HEADER LINE,
GET_BAPIRET2 LIKE BAPIRET2 OCCURS 0 WITH HEADER LINE,
LS_BAPIRET2 TYPE BAPIRET2.
DATA: BEGIN OF GET_VALUES OCCURS 0.
INCLUDE STRUCTURE GET_VALUES_CHAR.
DATA: INT TYPE I.
DATA: END OF GET_VALUES .
DATA: STR_A001 TYPE STRING.
DATA: STR_A002 TYPE STRING.
DATA: L_OBJECT(050) .
*----------------------------------------------------------------------*
* Global program variables *
*----------------------------------------------------------------------*
*** for user downloading operation
DATA: L_FILE LIKE RLGRAP-FILENAME. " filename for data downloading
DATA: BEGIN OF FIELDNAMES OCCURS 0,
NAME(030),
END OF FIELDNAMES.
*&---------------------------------------------------------------------*
* initialization.
*&---------------------------------------------------------------------*
INITIALIZATION.
REFRESH: ITAB, I_BOM, I_MATCAT .
CLEAR : ITAB, I_BOM, I_MATCAT .
S_REPID = SY-REPID.
* assign the subroutine to the ALV tool
PERFORM EVENTTAB_BUILD USING ST_EVENTS[].
PERFORM VARIANT_INIT.
*&---------------------------------------------------------------------*
* at selection-screen
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN .
IF NOT P_OUTST IS INITIAL .
P_INFO = 'X' .
ENDIF.
PERFORM MATERIAL_CHECK USING P_MATNR P_WERKS P_STLAN.
*&---------------------------------------------------------------------*
* start-of-selection.
*&---------------------------------------------------------------------*
START-OF-SELECTION.
CLEAR: C_STLAL.
C_STLAL = P_STLAL.
PERFORM FORMAT_ALPHA_OUTPUT CHANGING C_STLAL.
PERFORM GET_HEADER_DATA .
CLEAR: L_ATINN .
SELECT SINGLE ATINN INTO L_ATINN FROM CABN CLIENT SPECIFIED
WHERE MANDT EQ SY-MANDT
AND ATNAM EQ 'A002' .
* perform get_start_time .
PERFORM BOM_EXPLOSION USING P_MATNR P_WERKS P_STLAN P_CAPID P_EMENG .
PERFORM COMMENT_BUILD. "page header
PERFORM FIELDCAT_INIT. "table col name
PERFORM ALV_LAYOUT_BUILD. "layout setting
PERFORM REUSE_ALV_LIST_DISPLAY. "display
*&---------------------------------------------------------------------*
* end-of-selection.
*&---------------------------------------------------------------------*
END-OF-SELECTION.
*&---------------------------------------------------------------------*
* at user-command .
*&---------------------------------------------------------------------*
AT USER-COMMAND .
*&---------------------------------------------------------------------*
*& Form MATERIAL_CHECK
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_P_MATNR text
*----------------------------------------------------------------------*
FORM MATERIAL_CHECK USING MATNR WERKS STLAN.
DATA: STR_ERROR TYPE STRING .
* material check
CLEAR: MARA, MAST .
CLEAR: STR_ERROR .
SELECT SINGLE * FROM MARA CLIENT SPECIFIED WHERE MANDT = SY-MANDT
AND MATNR = MATNR .
IF SY-SUBRC <> 0 .
CONCATENATE TEXT-E01 MATNR TEXT-E02 INTO STR_ERROR SEPARATED BY SPACE .
ENDIF .
IF NOT STR_ERROR IS INITIAL .
MESSAGE STR_ERROR TYPE 'E' .
ENDIF .
* plant code check
CLEAR: STR_ERROR .
SELECT SINGLE * FROM T001W CLIENT SPECIFIED WHERE MANDT = SY-MANDT
AND WERKS = WERKS .
IF SY-SUBRC <> 0 .
CONCATENATE TEXT-E03 WERKS TEXT-E02 INTO STR_ERROR SEPARATED BY SPACE .
ENDIF .
IF NOT STR_ERROR IS INITIAL .
MESSAGE STR_ERROR TYPE 'E' .
ENDIF .
* plant data check
CLEAR: STR_ERROR .
SELECT SINGLE * FROM MARC CLIENT SPECIFIED WHERE MANDT = SY-MANDT
AND MATNR = MATNR
AND WERKS = WERKS .
IF SY-SUBRC <> 0 .
CONCATENATE TEXT-E04 MATNR WERKS TEXT-E02 INTO STR_ERROR SEPARATED BY SPACE .
ENDIF .
IF NOT STR_ERROR IS INITIAL .
MESSAGE STR_ERROR TYPE 'E' .
ENDIF .
* Material BOM check
CLEAR: STR_ERROR .
SELECT SINGLE * FROM MAST CLIENT SPECIFIED WHERE MANDT = SY-MANDT
AND MATNR = MATNR
AND WERKS = WERKS
AND STLAN = STLAN.
IF SY-SUBRC <> 0 .
CONCATENATE TEXT-M14 MATNR WERKS STLAN TEXT-E02
INTO STR_ERROR SEPARATED BY SPACE .
ENDIF .
IF NOT STR_ERROR IS INITIAL .
MESSAGE STR_ERROR TYPE 'E' .
ENDIF .
ENDFORM. " MATERIAL_CHECK
*&---------------------------------------------------------------------*
*& Form BOM_EXPLOSION
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM BOM_EXPLOSION USING MATNR WERKS STLAN CAPID EMENG .
DATA : L_INFO(001) TYPE C .
DATA : L_CNT TYPE I.
REFRESH: ITAB, I_BOM, I_MATCAT .
CLEAR : ITAB, I_BOM, I_MATCAT .
CALL FUNCTION 'CS_BOM_EXPL_MAT_V2'
EXPORTING
CAPID = CAPID
DATUV = P_DATUM "SY-DATUM
EHNDL = '1'
EMENG = EMENG " Base Qty
MEHRS = 'X'
MMORY = '1'
MTNRV = MATNR " Parent Material
WERKS = WERKS " Plant
* stpst = 1 " Level = 1
STLAN = STLAN
STLAL = C_STLAL
TABLES
STB = I_BOM
MATCAT = I_MATCAT
EXCEPTIONS
ALT_NOT_FOUND = 1
CALL_INVALID = 2
MATERIAL_NOT_FOUND = 3
MISSING_AUTHORIZATION = 4
NO_BOM_FOUND = 5
NO_PLANT_DATA = 6
NO_SUITABLE_BOM_FOUND = 7
CONVERSION_ERROR = 8
OTHERS = 9.
IF P_SINGLE IS INITIAL.
LOOP AT I_BOM .
MOVE-CORRESPONDING I_BOM TO ITAB .
CLEAR: ITAB-POTX1.
CONCATENATE I_BOM-POTX1 I_BOM-POTX2 INTO ITAB-POTX1 SEPARATED BY SPACE.
SELECT SINGLE MAKTX INTO ITAB-MAKTX FROM MAKT CLIENT SPECIFIED
* where mandt = sy-mandt and matnr = itab-idnrk and spras = 'E' .
WHERE MANDT = SY-MANDT AND MATNR = ITAB-IDNRK .
CLEAR: EORD.
IF ITAB-MTART NE 'HALB'.
CLEAR: ITAB-SECURITY .
CLEAR: EORD .
SELECT SINGLE * FROM EORD CLIENT SPECIFIED
WHERE MANDT = SY-MANDT
AND MATNR = ITAB-IDNRK
AND WERKS = P_WERKS.
IF SY-SUBRC = 0 .
MOVE 'YES' TO ITAB-SECURITY .
ELSE.
MOVE 'NO' TO ITAB-SECURITY .
ENDIF .
CLEAR: ITAB-GREENPRD .
CLEAR: QINF .
SELECT SINGLE * FROM QINF CLIENT SPECIFIED
WHERE MANDT EQ SY-MANDT
AND MATNR EQ ITAB-IDNRK
AND WERK EQ P_WERKS
AND FREI_DAT GE SY-DATUM .
IF SY-SUBRC = 0 .
MOVE 'YES' TO ITAB-GREENPRD .
MOVE QINF-LIEFERANT TO ITAB-LIFNR .
ELSE.
MOVE 'NO' TO ITAB-GREENPRD .
ENDIF.
ELSE .
CLEAR: ITAB-SECURITY .
CLEAR: MARA .
SELECT SINGLE * FROM MARA CLIENT SPECIFIED WHERE MANDT EQ SY-MANDT
AND MATNR EQ ITAB-IDNRK
AND MSTAE EQ SPACE .
IF SY-SUBRC = 0 .
MOVE 'YES' TO ITAB-SECURITY .
ELSE.
MOVE 'NO' TO ITAB-SECURITY .
ENDIF .
ENDIF .
IF P_INFO EQ 'X' .
CLEAR: EINA .
CLEAR: L_INFO, ITAB-INFOCHK.
IF ITAB-MTART NE 'HALB'.
SELECT * FROM EINA CLIENT SPECIFIED WHERE MANDT EQ SY-MANDT
AND MATNR EQ ITAB-IDNRK
AND LOEKZ EQ SPACE .
CHECK L_INFO IS INITIAL .
SELECT SINGLE * FROM EINE CLIENT SPECIFIED
WHERE MANDT EQ SY-MANDT
AND INFNR EQ EINA-INFNR
AND NETPR GT 0
AND PRDAT GE SY-DATUM .
IF SY-SUBRC = 0 .
L_INFO = 'Y'.
ITAB-INFOCHK = 'YES'.
ITAB-INFNR = EINE-INFNR .
ITAB-WERKS = EINE-WERKS .
ITAB-EKORG = EINE-EKORG .
ITAB-LIFNR1 = EINA-LIFNR .
ENDIF .
ENDSELECT .
IF L_INFO IS INITIAL .
MOVE 'NO' TO ITAB-INFOCHK .
ENDIF .
ENDIF .
ENDIF .
REFRESH: GET_BAPI1003, GET_VALUES_CHAR, GET_VALUES_CURR, GET_BAPIRET2.
CLEAR : GET_BAPI1003, GET_VALUES_CHAR, GET_VALUES_CURR, GET_BAPIRET2.
CLEAR : L_OBJECT .
L_OBJECT = ITAB-IDNRK .
CALL FUNCTION 'BAPI_OBJCL_GETCLASSES'
EXPORTING
OBJECTKEY_IMP = L_OBJECT
OBJECTTABLE_IMP = 'MARA'
CLASSTYPE_IMP = '001'
READ_VALUATIONS = 'X'
TABLES
ALLOCLIST = GET_VALUES_LIST
ALLOCVALUESCHAR = GET_VALUES_CHAR
ALLOCVALUESCURR = GET_VALUES_CURR
ALLOCVALUESNUM = GET_BAPI1003
RETURN = GET_BAPIRET2.
REFRESH: GET_VALUES. CLEAR: GET_VALUES .
LOOP AT GET_VALUES_CHAR .
MOVE-CORRESPONDING GET_VALUES_CHAR TO GET_VALUES.
GET_VALUES-INT = STRLEN( GET_VALUES-VALUE_CHAR ) .
APPEND GET_VALUES.
CLEAR GET_VALUES.
ENDLOOP .
SORT GET_VALUES BY CHARACT ASCENDING INT DESCENDING .
CLEAR: ITAB-MAKTX .
CLEAR: STR_A001,STR_A002.
LOOP AT GET_VALUES WHERE CHARACT = 'A001'.
CONCATENATE STR_A001 GET_VALUES-VALUE_CHAR INTO STR_A001.
ENDLOOP .
LOOP AT GET_VALUES WHERE CHARACT = 'A002'.
CONCATENATE STR_A002 GET_VALUES-VALUE_CHAR INTO STR_A002.
ENDLOOP .
CONCATENATE STR_A001 STR_A002 INTO ITAB-MAKTX SEPARATED BY SPACE .
CONCATENATE ITAB-POTX1 ITAB-POTX2 INTO ITAB-POTXT.
IF NOT P_OUTST IS INITIAL .
IF ITAB-INFOCHK = 'NO' OR ITAB-GREENPRD = 'NO' OR ITAB-SECURITY = 'NO'.
APPEND ITAB .
CLEAR ITAB .
ENDIF .
ELSE .
APPEND ITAB .
CLEAR ITAB .
ENDIF .
BMHDS-DATUB = I_BOM-DATUB .
BMHDS-DATUV = I_BOM-DATUV .
ENDLOOP .
ELSE.
LOOP AT I_BOM WHERE STUFE = '1'.
MOVE-CORRESPONDING I_BOM TO ITAB .
CONCATENATE I_BOM-POTX1 I_BOM-POTX2 INTO ITAB-POTX1 SEPARATED BY SPACE.
SELECT SINGLE MAKTX INTO ITAB-MAKTX FROM MAKT CLIENT SPECIFIED
WHERE MANDT = SY-MANDT AND MATNR = ITAB-IDNRK .
CLEAR: EORD.
IF ITAB-MTART NE 'HALB'.
CLEAR: ITAB-SECURITY .
CLEAR: EORD .
SELECT SINGLE * FROM EORD CLIENT SPECIFIED
WHERE MANDT = SY-MANDT
AND MATNR = ITAB-IDNRK
AND WERKS = P_WERKS.
IF SY-SUBRC = 0 .
MOVE 'YES' TO ITAB-SECURITY .
ELSE.
MOVE 'NO' TO ITAB-SECURITY .
ENDIF .
CLEAR: QINF, ITAB-GREENPRD.
SELECT SINGLE * FROM QINF CLIENT SPECIFIED
WHERE MANDT EQ SY-MANDT
AND MATNR EQ ITAB-IDNRK
AND WERK EQ P_WERKS
AND FREI_DAT GE SY-DATUM .
IF SY-SUBRC = 0 .
MOVE 'YES' TO ITAB-GREENPRD .
MOVE QINF-LIEFERANT TO ITAB-LIFNR .
ELSE.
MOVE 'NO' TO ITAB-GREENPRD .
ENDIF .
ELSE.
CLEAR: ITAB-SECURITY .
CLEAR: MARA .
SELECT SINGLE * FROM MARA CLIENT SPECIFIED WHERE MANDT EQ SY-MANDT
AND MATNR EQ ITAB-IDNRK
AND MSTAE EQ SPACE .
IF SY-SUBRC = 0 .
MOVE 'YES' TO ITAB-SECURITY .
ELSE.
MOVE 'NO' TO ITAB-SECURITY .
ENDIF .
ENDIF .
IF P_INFO EQ 'X' .
CLEAR: EINA .
CLEAR: L_INFO, ITAB-INFOCHK.
IF ITAB-MTART NE 'HALB'.
SELECT * FROM EINA CLIENT SPECIFIED WHERE MANDT EQ SY-MANDT
AND MATNR EQ ITAB-IDNRK
AND LOEKZ EQ SPACE .
CHECK L_INFO IS INITIAL .
SELECT SINGLE * FROM EINE CLIENT SPECIFIED
WHERE MANDT EQ SY-MANDT
AND INFNR EQ EINA-INFNR
AND NETPR GT 0
AND PRDAT GE SY-DATUM .
IF SY-SUBRC = 0 .
L_INFO = 'Y'.
ITAB-INFOCHK = 'YES'.
ITAB-INFNR = EINE-INFNR .
ITAB-WERKS = EINE-WERKS .
ITAB-EKORG = EINE-EKORG .
ITAB-LIFNR1 = EINA-LIFNR .
ENDIF .
ENDSELECT .
IF L_INFO IS INITIAL .
MOVE 'NO' TO ITAB-INFOCHK .
ENDIF .
ENDIF .
ENDIF .
REFRESH: GET_BAPI1003, GET_VALUES_CHAR, GET_VALUES_CURR, GET_BAPIRET2.
CLEAR : GET_BAPI1003, GET_VALUES_CHAR, GET_VALUES_CURR, GET_BAPIRET2.
CLEAR : L_OBJECT .
L_OBJECT = ITAB-IDNRK .
CALL FUNCTION 'BAPI_OBJCL_GETCLASSES'
EXPORTING
OBJECTKEY_IMP = L_OBJECT
OBJECTTABLE_IMP = 'MARA'
CLASSTYPE_IMP = '001'
READ_VALUATIONS = 'X'
TABLES
ALLOCLIST = GET_VALUES_LIST
ALLOCVALUESCHAR = GET_VALUES_CHAR
ALLOCVALUESCURR = GET_VALUES_CURR
ALLOCVALUESNUM = GET_BAPI1003
RETURN = GET_BAPIRET2.
REFRESH: GET_VALUES. CLEAR: GET_VALUES .
LOOP AT GET_VALUES_CHAR .
MOVE-CORRESPONDING GET_VALUES_CHAR TO GET_VALUES.
GET_VALUES-INT = STRLEN( GET_VALUES-VALUE_CHAR ) .
APPEND GET_VALUES.
CLEAR GET_VALUES.
ENDLOOP .
SORT GET_VALUES BY CHARACT ASCENDING INT DESCENDING .
CLEAR: ITAB-MAKTX .
* LOOP AT GET_VALUES WHERE CHARACT = 'A001'.
* CONCATENATE ITAB-MAKTX GET_VALUES-VALUE_CHAR INTO ITAB-MAKTX.
* ENDLOOP .
* LOOP AT GET_VALUES WHERE CHARACT = 'A002'.
* CONCATENATE ITAB-MAKTX GET_VALUES-VALUE_CHAR INTO ITAB-MAKTX.
* ENDLOOP .
CLEAR: STR_A001,STR_A002.
LOOP AT GET_VALUES WHERE CHARACT = 'A001'.
CONCATENATE STR_A001 GET_VALUES-VALUE_CHAR INTO STR_A001.
ENDLOOP .
LOOP AT GET_VALUES WHERE CHARACT = 'A002'.
CONCATENATE STR_A002 GET_VALUES-VALUE_CHAR INTO STR_A002.
ENDLOOP .
CONCATENATE STR_A001 STR_A002 INTO ITAB-MAKTX SEPARATED BY SPACE .
CONCATENATE ITAB-POTX1 ITAB-POTX2 INTO ITAB-POTXT.
IF NOT P_OUTST IS INITIAL .
IF ITAB-INFOCHK = 'NO' OR ITAB-GREENPRD = 'NO' OR ITAB-SECURITY = 'NO'.
APPEND ITAB .
CLEAR ITAB .
ENDIF .
ELSE .
APPEND ITAB .
CLEAR ITAB .
ENDIF .
BMHDS-DATUB = I_BOM-DATUB .
BMHDS-DATUV = I_BOM-DATUV .
ENDLOOP .
ENDIF.
ENDFORM. " BOM_EXPLOSION
*&---------------------------------------------------------------------*
*& Form GET_HEADER_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_HEADER_DATA .
DATA: L_INDEX TYPE I .
DATA: L_SIZE(009) .
DATA: L_NTGEW(010).
DATA: L_BRGEW(010).
BMHDS-STLAN = P_STLAN .
BMHDS-MATNR = P_MATNR .
BMHDS-EMENG = P_EMENG .
BMHDS-WERKS = P_WERKS .
BMHDS-STLAL = P_STLAL .
BMHDS-T0001 = TEXT-T01 .
BMHDS-T0002 = TEXT-T02 .
BMHDS-T0003 = TEXT-T03 .
BMHDS-T0004 = TEXT-T04 .
BMHDS-T0005 = TEXT-T05 .
BMHDS-T0006 = TEXT-T06 .
BMHDS-T0007 = TEXT-T07 .
BMHDS-T0008 = TEXT-T08 .
BMHDS-T0009 = TEXT-T09 .
BMHDS-T0010 = TEXT-T10 .
BMHDS-T0011 = TEXT-T11 .
BMHDS-T0012 = TEXT-T12 .
BMHDS-T0013 = TEXT-T13 .
BMHDS-T0014 = TEXT-T14 .
BMHDS-T0015 = TEXT-T15 .
BMHDS-T0016 = TEXT-T16 .
BMHDS-T0017 = TEXT-T17 .
BMHDS-T0018 = TEXT-T18 .
BMHDS-T0019 = TEXT-T19 .
BMHDS-T0020 = TEXT-T20 .
BMHDS-T0021 = TEXT-T21 .
BMHDS-T0022 = TEXT-T22 .
BMHDS-T0023 = TEXT-T23 .
BMHDS-T0024 = TEXT-T24 .
BMHDS-T0025 = TEXT-T25 .
BMHDS-T0026 = TEXT-T26 .
BMHDS-T0027 = TEXT-T27 .
BMHDS-T0028 = TEXT-T28 .
BMHDS-T0029 = TEXT-T29 .
BMHDS-T0030 = TEXT-T30 .
BMHDS-T0031 = TEXT-T31 .
BMHDS-T0032 = TEXT-T32 .
BMHDS-T0033 = TEXT-T33 .
BMHDS-T0034 = TEXT-T34 .
BMHDS-T0035 = TEXT-T35 .
BMHDS-T0036 = TEXT-T36 .
BMHDS-T0037 = TEXT-T37 .
BMHDS-T0038 = TEXT-T38 .
BMHDS-T0039 = TEXT-T39 .
BMHDS-T0040 = TEXT-T40 .
BMHDS-T0042 = TEXT-T42 .
BMHDS-IOHDR = TEXT-T43 .
BMHDS-TXTEXP = TEXT-T44.
BMHDS-T0045 = TEXT-T45.
BMHDS-T0046 = TEXT-T46.
CLEAR: MARA, L_NTGEW, L_BRGEW .
SELECT SINGLE * FROM MARA CLIENT SPECIFIED WHERE MANDT = SY-MANDT
AND MATNR = P_MATNR .
IF SY-SUBRC = 0 .
L_NTGEW = MARA-NTGEW .
L_BRGEW = MARA-BRGEW .
SHIFT L_NTGEW LEFT DELETING LEADING SPACE.
SHIFT L_BRGEW LEFT DELETING LEADING SPACE.
BMHDS-MEINS = MARA-MEINS .
BMHDS-NTGEW = MARA-NTGEW .
CONCATENATE L_NTGEW MARA-GEWEI SPACE '/' SPACE L_BRGEW MARA-GEWEI
INTO BMHDS-T0047 .
BMHDS-MATKL = MARA-MATKL .
ENDIF .
CLEAR: MARM, L_SIZE .
SELECT SINGLE * FROM MARM CLIENT SPECIFIED WHERE MANDT EQ SY-MANDT AND MATNR EQ P_MATNR AND MEINH = 'KAR' .
IF SY-SUBRC EQ 0.
L_SIZE = MARM-UMREZ.
SHIFT L_SIZE LEFT DELETING LEADING SPACE.
CONCATENATE TEXT-T00 L_SIZE BMHDS-MEINS INTO BMHDS-TXTPG SEPARATED BY SPACE.
ENDIF .
CLEAR: MARM, L_SIZE .
SELECT SINGLE * FROM MARM CLIENT SPECIFIED WHERE MANDT EQ SY-MANDT AND MATNR EQ P_MATNR AND MEINH = 'PAL' .
IF SY-SUBRC EQ 0.
L_SIZE = MARM-UMREZ.
SHIFT L_SIZE LEFT DELETING LEADING SPACE.
IF BMHDS-TXTPG IS INITIAL .
CONCATENATE TEXT-A04 SPACE L_SIZE SPACE BMHDS-MEINS INTO BMHDS-TXTPG.
ELSE.
CONCATENATE BMHDS-TXTPG ' / ' TEXT-A04 SPACE L_SIZE SPACE BMHDS-MEINS INTO BMHDS-TXTPG.
ENDIF .
ENDIF .
* CLEAR: MAKT .
* SELECT SINGLE MAKTX INTO BMHDS-MAKTX FROM MAKT CLIENT SPECIFIED
* WHERE MANDT = SY-MANDT
* AND MATNR = P_MATNR .
CLEAR: KNMT .
SELECT SINGLE KUNNR KDMAT INTO (BMHDS-KUNNR, BMHDS-KDMAT ) FROM KNMT
WHERE MATNR EQ P_MATNR .
* AND KDMAT NE SPACE .
IF NOT BMHDS-KUNNR IS INITIAL .
CLEAR: KNA1 .
SELECT SINGLE * FROM KNA1 WHERE KUNNR = BMHDS-KUNNR .
IF SY-SUBRC = 0.
CLEAR: ADRC.
SELECT SINGLE * FROM ADRC CLIENT SPECIFIED WHERE CLIENT EQ SY-MANDT AND ADDRNUMBER EQ KNA1-ADRNR.
CLEAR: BMHDS-T0041 .
CONCATENATE KNA1-NAME1 '[' ADRC-SORT1 ADRC-SORT2 ']' INTO BMHDS-T0041 SEPARATED BY SPACE .
ENDIF .
ENDIF .
CLEAR: BMHDS-SERIE, BMHDS-PDUCT.
REFRESH: GET_BAPI1003, GET_VALUES_CHAR, GET_VALUES_CURR, GET_BAPIRET2.
CLEAR : GET_BAPI1003, GET_VALUES_CHAR, GET_VALUES_CURR, GET_BAPIRET2.
CLEAR : L_OBJECT .
L_OBJECT = P_MATNR .
CALL FUNCTION 'BAPI_OBJCL_GETCLASSES'
EXPORTING
OBJECTKEY_IMP = L_OBJECT
OBJECTTABLE_IMP = 'MARA'
CLASSTYPE_IMP = '001'
READ_VALUATIONS = 'X'
TABLES
ALLOCLIST = GET_VALUES_LIST
ALLOCVALUESCHAR = GET_VALUES_CHAR
ALLOCVALUESCURR = GET_VALUES_CURR
ALLOCVALUESNUM = GET_BAPI1003
RETURN = GET_BAPIRET2.
REFRESH: GET_VALUES. CLEAR: GET_VALUES .
LOOP AT GET_VALUES_CHAR .
MOVE-CORRESPONDING GET_VALUES_CHAR TO GET_VALUES.
GET_VALUES-INT = STRLEN( GET_VALUES-VALUE_CHAR ) .
APPEND GET_VALUES.
CLEAR GET_VALUES.
ENDLOOP .
SORT GET_VALUES BY CHARACT ASCENDING INT DESCENDING .
CLEAR: BMHDS-PDUCT .
LOOP AT GET_VALUES WHERE CHARACT = 'A004'.
CONCATENATE BMHDS-PDUCT GET_VALUES-VALUE_CHAR INTO BMHDS-PDUCT .
ENDLOOP .
CLEAR: BMHDS-MAKTX .
* LOOP AT GET_VALUES WHERE CHARACT = 'A001'.
* CONCATENATE BMHDS-MAKTX GET_VALUES-VALUE_CHAR INTO BMHDS-MAKTX.
* ENDLOOP .
* LOOP AT GET_VALUES WHERE CHARACT = 'A002'.
* CONCATENATE BMHDS-MAKTX GET_VALUES-VALUE_CHAR INTO BMHDS-MAKTX.
* ENDLOOP .
CLEAR: STR_A001,STR_A002.
LOOP AT GET_VALUES WHERE CHARACT = 'A001'.
CONCATENATE STR_A001 GET_VALUES-VALUE_CHAR INTO STR_A001.
ENDLOOP .
LOOP AT GET_VALUES WHERE CHARACT = 'A002'.
CONCATENATE STR_A002 GET_VALUES-VALUE_CHAR INTO STR_A002.
ENDLOOP .
CONCATENATE STR_A001 STR_A002 INTO BMHDS-MAKTX SEPARATED BY SPACE .
CLEAR: BMHDS-SERIE.
LOOP AT GET_VALUES WHERE CHARACT = 'A005'.
CONCATENATE BMHDS-SERIE GET_VALUES-VALUE_CHAR INTO BMHDS-SERIE .
ENDLOOP .
CLEAR: MAST .
SELECT SINGLE * FROM MAST CLIENT SPECIFIED WHERE MANDT = SY-MANDT
AND MATNR = P_MATNR
AND WERKS = P_WERKS
AND STLAN = P_STLAN
AND STLAL = C_STLAL.
IF SY-SUBRC = 0 .
REFRESH: STR_LINES .
CLEAR : STR_LINES, STR_TDID, STR_TDNAME, STR_OBJECT, BMHDS-IOTXT .
CONCATENATE SY-MANDT 'M' MAST-STLNR INTO STR_TDNAME .
SELECT SINGLE * FROM STXH WHERE TDNAME = STR_TDNAME.
IF SY-SUBRC = 0 .
STR_TDNAME = STXH-TDNAME .
STR_TDID = STXH-TDID .
CALL FUNCTION 'READ_TEXT'
EXPORTING
ID = STR_TDID
LANGUAGE = SY-LANGU
NAME = STR_TDNAME
OBJECT = 'BOM'
TABLES
LINES = STR_LINES.
IF SY-SUBRC <> 0.
* message id sy-msgid type sy-msgty number sy-msgno
* with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF .
IF NOT STR_LINES[] IS INITIAL .
CLEAR: BMHDS-TEXT0 .
LOOP AT STR_LINES .
CONCATENATE BMHDS-TEXT0 STR_LINES-TDLINE
INTO BMHDS-TEXT0 .
ENDLOOP .
ENDIF .
ELSE.
CLEAR: BMHDS-TEXT0 .
CLEAR: STZU .
SELECT SINGLE ZTEXT INTO BMHDS-TEXT0 FROM STZU CLIENT SPECIFIED
WHERE MANDT EQ SY-MANDT
AND STLTY EQ 'M'
AND STLNR EQ MAST-STLNR.
ENDIF .
ENDIF .
CLEAR: STKO .
SELECT SINGLE STKTX INTO BMHDS-IOTXT FROM STKO CLIENT SPECIFIED
WHERE MANDT EQ SY-MANDT
AND STLNR EQ MAST-STLNR
AND STLAL EQ C_STLAL.
BMHDS-EXPDAT = P_DATUM .
SHIFT BMHDS-STLAL LEFT DELETING LEADING '0'.
CONCATENATE BMHDS-STLAN BMHDS-STLAL INTO BMHDS-TXTUSG SEPARATED BY '/'.
* CLEAR: STR_TDNAME .
* MOVE P_MATNR TO STR_TDNAME .
* SELECT SINGLE * FROM STXH WHERE TDNAME = STR_TDNAME.
* IF SY-SUBRC = 0 .
* REFRESH: STR_LINES .
* CALL FUNCTION 'READ_TEXT'
* EXPORTING
* ID = 'GRUN'
* LANGUAGE = '1'
* NAME = STR_TDNAME
* OBJECT = 'MATERIAL'
* TABLES
* LINES = STR_LINES.
* IF NOT STR_LINES[] IS INITIAL .
* LOOP AT STR_LINES .
* CONCATENATE BMHDS-IOTXT STR_LINES-TDLINE
* INTO BMHDS-IOTXT .
* ENDLOOP .
* ENDIF .
* ENDIF .
ENDFORM. " GET_HEADER_DATA
*&---------------------------------------------------------------------*
*& Form DOWNLOAD_RESULT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM DOWNLOAD_RESULT .
LOOP AT DL_TAB.
CLEAR: DL_TAB-MAKTX .
REFRESH: GET_BAPI1003, GET_VALUES_CHAR, GET_VALUES_CURR, GET_BAPIRET2.
CLEAR : GET_BAPI1003, GET_VALUES_CHAR, GET_VALUES_CURR, GET_BAPIRET2.
CLEAR : L_OBJECT .
L_OBJECT = DL_TAB-IDNRK .
CALL FUNCTION 'BAPI_OBJCL_GETCLASSES'
EXPORTING
OBJECTKEY_IMP = L_OBJECT
OBJECTTABLE_IMP = 'MARA'
CLASSTYPE_IMP = '001'
READ_VALUATIONS = 'X'
TABLES
ALLOCLIST = GET_VALUES_LIST
ALLOCVALUESCHAR = GET_VALUES_CHAR
ALLOCVALUESCURR = GET_VALUES_CURR
ALLOCVALUESNUM = GET_BAPI1003
RETURN = GET_BAPIRET2.
REFRESH: GET_VALUES. CLEAR: GET_VALUES .
LOOP AT GET_VALUES_CHAR .
MOVE-CORRESPONDING GET_VALUES_CHAR TO GET_VALUES.
GET_VALUES-INT = STRLEN( GET_VALUES-VALUE_CHAR ) .
APPEND GET_VALUES.
CLEAR GET_VALUES.
ENDLOOP .
SORT GET_VALUES BY CHARACT ASCENDING INT DESCENDING .
CLEAR: DL_TAB-MAKTX .
* LOOP AT GET_VALUES WHERE CHARACT = 'A001'.
* CONCATENATE DL_TAB-MAKTX GET_VALUES-VALUE_CHAR INTO DL_TAB-MAKTX.
* ENDLOOP .
* LOOP AT GET_VALUES WHERE CHARACT = 'A002'.
* CONCATENATE DL_TAB-MAKTX GET_VALUES-VALUE_CHAR INTO DL_TAB-MAKTX.
* ENDLOOP .
CLEAR: STR_A001,STR_A002.
LOOP AT GET_VALUES WHERE CHARACT = 'A001'.
CONCATENATE STR_A001 GET_VALUES-VALUE_CHAR INTO STR_A001.
ENDLOOP .
LOOP AT GET_VALUES WHERE CHARACT = 'A002'.
CONCATENATE STR_A002 GET_VALUES-VALUE_CHAR INTO STR_A002.
ENDLOOP .
CONCATENATE STR_A001 STR_A002 INTO DL_TAB-MAKTX SEPARATED BY SPACE .
MODIFY DL_TAB .
ENDLOOP .
DATA: STR_STRING TYPE STRING .
DATA: C_FILENAME(255) .
CLEAR: L_FILE.
CONCATENATE P_FILE 'BOM_' P_MATNR '_' SY-DATUM SY-UZEIT
INTO L_FILE.
CONCATENATE L_FILE '.TXT' INTO L_FILE.
CALL FUNCTION 'WS_DOWNLOAD'
EXPORTING
FILENAME = L_FILE
FILETYPE = 'DAT'
* CODEPAGE = '8450'
* IMPORTING
* FILELENGTH = P_ITAB_DOCIDTAB
TABLES
DATA_TAB = DL_TAB
FIELDNAMES = FIELDNAMES
EXCEPTIONS
OTHERS = 1.
IF SY-SUBRC = 0.
MESSAGE ID 'MG' TYPE 'S' NUMBER '899'
WITH 'Data file exported to file' STR_STRING
'successfully'.
ELSE.
MESSAGE ID 'MG' TYPE 'I' NUMBER '899'
WITH 'Fail to open file' STR_STRING .
ENDIF.
ENDFORM. " DOWNLOAD_RESULT
*&---------------------------------------------------------------------*
*& Form GET_FIELDNAMES
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_FIELDNAMES .
CLEAR: FIELDNAMES .
FIELDNAMES-NAME = TEXT-X01.
APPEND FIELDNAMES.
CLEAR: FIELDNAMES .
FIELDNAMES-NAME = TEXT-X08.
APPEND FIELDNAMES.
CLEAR: FIELDNAMES .
FIELDNAMES-NAME = TEXT-X05.
APPEND FIELDNAMES.
CLEAR: FIELDNAMES .
FIELDNAMES-NAME = TEXT-X02.
APPEND FIELDNAMES.
CLEAR: FIELDNAMES .
FIELDNAMES-NAME = TEXT-X03.
APPEND FIELDNAMES.
CLEAR: FIELDNAMES .
FIELDNAMES-NAME = TEXT-X11.
APPEND FIELDNAMES.
* CLEAR: FIELDNAMES .
* FIELDNAMES-NAME = TEXT-X04.
* APPEND FIELDNAMES.
* CLEAR: FIELDNAMES .
* FIELDNAMES-NAME = TEXT-X06.
* APPEND FIELDNAMES.
CLEAR: FIELDNAMES .
FIELDNAMES-NAME = TEXT-P01.
APPEND FIELDNAMES.
* CLEAR: FIELDNAMES .
* FIELDNAMES-NAME = TEXT-X07.
* APPEND FIELDNAMES.
CLEAR: FIELDNAMES .
FIELDNAMES-NAME = TEXT-P03.
APPEND FIELDNAMES.
CLEAR: FIELDNAMES .
FIELDNAMES-NAME = TEXT-P05.
APPEND FIELDNAMES.
CLEAR: FIELDNAMES .
FIELDNAMES-NAME = TEXT-X09.
APPEND FIELDNAMES.
CLEAR: FIELDNAMES .
FIELDNAMES-NAME = TEXT-X10.
APPEND FIELDNAMES.
CLEAR: FIELDNAMES .
FIELDNAMES-NAME = TEXT-P07.
APPEND FIELDNAMES.
CLEAR: FIELDNAMES .
FIELDNAMES-NAME = TEXT-P08.
APPEND FIELDNAMES.
CLEAR: FIELDNAMES .
FIELDNAMES-NAME = TEXT-P06.
APPEND FIELDNAMES.
CLEAR: FIELDNAMES .
FIELDNAMES-NAME = TEXT-P06.
APPEND FIELDNAMES.
CLEAR: FIELDNAMES .
FIELDNAMES-NAME = TEXT-P11.
APPEND FIELDNAMES.
CLEAR: FIELDNAMES .
FIELDNAMES-NAME = TEXT-P04.
APPEND FIELDNAMES.
CLEAR: FIELDNAMES .
FIELDNAMES-NAME = TEXT-T43.
APPEND FIELDNAMES.
CLEAR: FIELDNAMES .
FIELDNAMES-NAME = TEXT-T04.
APPEND FIELDNAMES.
CLEAR: FIELDNAMES .
FIELDNAMES-NAME = TEXT-T03.
APPEND FIELDNAMES.
CLEAR: FIELDNAMES .
FIELDNAMES-NAME = TEXT-T48.
APPEND FIELDNAMES.
CLEAR: FIELDNAMES .
FIELDNAMES-NAME = TEXT-T49.
APPEND FIELDNAMES.
CLEAR: FIELDNAMES .
FIELDNAMES-NAME = TEXT-T50.
APPEND FIELDNAMES.
ENDFORM. " GET_FIELDNAMES
*&---------------------------------------------------------------------*
*& Form eventtab_build
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_ST_EVENTS text
*----------------------------------------------------------------------*
FORM EVENTTAB_BUILD USING P_ST_EVENTS TYPE SLIS_T_EVENT.
DATA: LS_EVENT TYPE SLIS_ALV_EVENT.
* read event control table
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
I_LIST_TYPE = 0
IMPORTING
ET_EVENTS = P_ST_EVENTS.
* assign the control form to 'top of page' from slis
READ TABLE P_ST_EVENTS WITH KEY
NAME = SLIS_EV_TOP_OF_PAGE INTO LS_EVENT.
IF SY-SUBRC = 0.
MOVE ST_FORMNAME_TOP_OF_PAGE TO LS_EVENT-FORM.
APPEND LS_EVENT TO P_ST_EVENTS.
ENDIF.
* assign the control form to 'user command' from slis
READ TABLE P_ST_EVENTS WITH
KEY NAME = SLIS_EV_USER_COMMAND INTO LS_EVENT.
IF SY-SUBRC = 0.
MOVE S_USER_COMMAND TO LS_EVENT-FORM.
APPEND LS_EVENT TO P_ST_EVENTS.
ENDIF.
* assign the control form to 'PF_STATUS_SET' from slis
READ TABLE P_ST_EVENTS WITH
KEY NAME = SLIS_EV_PF_STATUS_SET INTO LS_EVENT.
IF SY-SUBRC = 0.
MOVE S_STATUS TO LS_EVENT-FORM.
APPEND LS_EVENT TO P_ST_EVENTS.
ENDIF.
ENDFORM. " eventtab_build
*&---------------------------------------------------------------------*
*& Form PRINT_BOM_DETAILS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM PRINT_BOM_DETAILS .
REFRESH: BMITS .
CLEAR : BMITS , FM_NAME .
LOOP AT ITAB .
MOVE-CORRESPONDING ITAB TO BMITS .
APPEND BMITS.
CLEAR BMITS.
ENDLOOP .
IF NOT BMITS[] IS INITIAL .
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
FORMNAME = 'ZPPBMR001F'
* FORMNAME = 'ZPPBMF001A'
DIRECT_CALL = 'X'
IMPORTING
FM_NAME = FM_NAME
EXCEPTIONS
NO_FORM = 1
NO_FUNCTION_MODULE = 2
OTHERS = 3.
* WA_SSFCOMPOP-NO_DIALOG = 'X'.
WA_SSFCTRLOP-PREVIEW = 'X'.
* WA_SSFCTRLOP-DEVICE = 'PRINTER'.
* WA_SSFCOMPOP-TDPRINTER = ''.
* WA_SSFCOMPOP-TDPAGESLCT = ''.
CALL FUNCTION FM_NAME
EXPORTING
CONTROL_PARAMETERS = WA_SSFCTRLOP
OUTPUT_OPTIONS = WA_SSFCOMPOP
TABLES
BMHDS = BMHDS
BMITS = BMITS
EXCEPTIONS
FORMATTING_ERROR = 1
INTERNAL_ERROR = 2
SEND_ERROR = 3
USER_CANCELED = 4
OTHERS = 5.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDIF .
ENDFORM. " PRINT_BOM_DETAILS
*&------------------------------------------------------------------
*& Form VARIANT_INIT
*&------------------------------------------------------------------
FORM VARIANT_INIT.
* code = '0001'.
* clear s_variant.
* s_variant-report = s_repid.
* s_variant-handle = code.
ENDFORM. " VARIANT_INIT
*&---------------------------------------------------------------------*
*& Form comment_build
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM COMMENT_BUILD.
DATA: STR_LINE01 TYPE STRING .
DATA: STR_LINE02 TYPE STRING .
DATA: STR_LINE03 TYPE STRING .
DATA: L_BASEQTY(009) .
CLEAR: MAKT .
SELECT SINGLE * FROM MAKT CLIENT SPECIFIED WHERE MANDT = SY-MANDT
AND MATNR EQ P_MATNR
AND SPRAS EQ '1'.
CONCATENATE BMHDS-MATNR MAKT-MAKTX INTO STR_LINE01 SEPARATED BY SPACE .
IF BMHDS-STLAN = '1'.
CONCATENATE BMHDS-STLAN TEXT-H01 INTO STR_LINE02 SEPARATED BY SPACE .
ENDIF .
IF BMHDS-STLAN = '2'.
CONCATENATE BMHDS-STLAN TEXT-H02 INTO STR_LINE02 SEPARATED BY SPACE .
ENDIF .
L_BASEQTY = BMHDS-EMENG .
CONCATENATE L_BASEQTY BMHDS-MEINS INTO STR_LINE03 SEPARATED BY SPACE .
* type: H header size, S normal and highlight size, A small size
* type, key, info.
PERFORM ALV_ASSIGN_PAGE_HEADER USING 'S' 'Material' STR_LINE01.
PERFORM ALV_ASSIGN_PAGE_HEADER USING 'S' 'Plant' BMHDS-WERKS.
PERFORM ALV_ASSIGN_PAGE_HEADER USING 'S' 'Usage' STR_LINE02.
PERFORM ALV_ASSIGN_PAGE_HEADER USING 'S' 'Alternative' P_STLAL.
PERFORM ALV_ASSIGN_PAGE_HEADER USING 'S' 'Application' P_CAPID.
PERFORM ALV_ASSIGN_PAGE_HEADER USING 'S' 'Base Quantity' STR_LINE03.
ENDFORM. " COMMENT_BUILD
*&---------------------------------------------------------------------*
*& Form layout_build
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM ALV_LAYOUT_BUILD.
* layout pre-define
ST_LAYOUT-COLWIDTH_OPTIMIZE = 'X'. "TEXT FIT IN TABLE PERFECTLY
ST_LAYOUT-BOX_FIELDNAME = 'SELK'. "checkbox NAME Itab-SELK
ST_LAYOUT-GET_SELINFOS = 'X'. "read selection screen
* st_layout-confirmation_prompt = 'X'. "confirm. prompt whenleaving
ST_LAYOUT-DETAIL_INITIAL_LINES = 'X'. "allow don't displayinitial
ST_LAYOUT-INFO_FIELDNAME = 'COL'. " field for color of row
ST_LAYOUT-ZEBRA = 'X'. "stripped pattern
ENDFORM. " LAYOUT_BUILD
*&---------------------------------------------------------------------*
*& Form alv_assign_page_header
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_TYPE text
* -->P_KEY text
* -->P_INFO text
*----------------------------------------------------------------------*
FORM ALV_ASSIGN_PAGE_HEADER USING P_TYPE P_KEY P_INFO.
DATA: LS_LINE TYPE SLIS_LISTHEADER.
CLEAR LS_LINE.
LS_LINE-TYP = P_TYPE.
LS_LINE-KEY = P_KEY.
LS_LINE-INFO = P_INFO.
APPEND LS_LINE TO ST_LIST_TOP_OF_PAGE.
ENDFORM. " alv_assign_page_header
*&------------------------------------------------------------------
*& Form FIELDCAT_INIT
*&------------------------------------------------------------------
FORM FIELDCAT_INIT.
DATA: LS_FIELDCAT TYPE SLIS_FIELDCAT_ALV.
* table col name
* display description from itab
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'POSNR'. " internal table fieldname
LS_FIELDCAT-REF_TABNAME = 'STPOX'.
LS_FIELDCAT-REF_FIELDNAME = 'POSNR'.
LS_FIELDCAT-DDICTXT = 'S'. "dictionary (S,M,L) fieldsize
LS_FIELDCAT-FIX_COLUMN = 'X'.
APPEND LS_FIELDCAT TO ST_FIELDCAT.
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'IDNRK'. " internal table fieldname
LS_FIELDCAT-REF_TABNAME = 'STPOX'.
LS_FIELDCAT-REF_FIELDNAME = 'IDNRK'.
LS_FIELDCAT-DDICTXT = 'S'. "dictionary (S,M,L) fieldsize
LS_FIELDCAT-FIX_COLUMN = 'X'.
APPEND LS_FIELDCAT TO ST_FIELDCAT.
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'STUFE'. " internal table fieldname
LS_FIELDCAT-REF_TABNAME = 'STPOX'.
LS_FIELDCAT-REF_FIELDNAME = 'POSNR'.
LS_FIELDCAT-DDICTXT = 'S'. "dictionary (S,M,L) fieldsize
LS_FIELDCAT-FIX_COLUMN = 'X'.
APPEND LS_FIELDCAT TO ST_FIELDCAT.
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'MTART'. " internal table fieldname
LS_FIELDCAT-REF_TABNAME = 'MARA'.
LS_FIELDCAT-REF_FIELDNAME = 'MTART'.
LS_FIELDCAT-DDICTXT = 'S'. "dictionary (S,M,L) fieldsize
LS_FIELDCAT-FIX_COLUMN = 'X'.
APPEND LS_FIELDCAT TO ST_FIELDCAT.
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'CHECK'.
LS_FIELDCAT-DATATYPE = 'CHAR'.
LS_FIELDCAT-REPTEXT_DDIC = TEXT-L04.
LS_FIELDCAT-DDICTXT = 'S'.
LS_FIELDCAT-DO_SUM = 'X'. " DISPLAY TOTAL
APPEND LS_FIELDCAT TO ST_FIELDCAT.
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'MAKTX'. " internal table fieldname
LS_FIELDCAT-REF_TABNAME = 'MAKT'.
LS_FIELDCAT-REF_FIELDNAME = 'MAKTX'.
LS_FIELDCAT-DDICTXT = 'S'. "dictionary (S,M,L) fieldsize
LS_FIELDCAT-FIX_COLUMN = 'X'.
APPEND LS_FIELDCAT TO ST_FIELDCAT.
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'MEINS'. " internal table fieldname
LS_FIELDCAT-REF_TABNAME = 'STPOX'.
LS_FIELDCAT-REF_FIELDNAME = 'MEINS'.
LS_FIELDCAT-DDICTXT = 'S'. "dictionary (S,M,L) fieldsize
LS_FIELDCAT-FIX_COLUMN = 'X'.
APPEND LS_FIELDCAT TO ST_FIELDCAT.
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'MNGLG'. " internal table fieldname
LS_FIELDCAT-REF_TABNAME = 'STPOX'.
LS_FIELDCAT-REF_FIELDNAME = 'MNGLG'.
LS_FIELDCAT-DDICTXT = 'S'. "dictionary (S,M,L) fieldsize
LS_FIELDCAT-FIX_COLUMN = 'X'.
APPEND LS_FIELDCAT TO ST_FIELDCAT.
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'FMENG'. " internal table fieldname
LS_FIELDCAT-REF_TABNAME = 'STPOX'.
LS_FIELDCAT-REF_FIELDNAME = 'FMENG'.
LS_FIELDCAT-DDICTXT = 'S'. "dictionary (S,M,L) fieldsize
LS_FIELDCAT-FIX_COLUMN = 'X'.
APPEND LS_FIELDCAT TO ST_FIELDCAT.
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'AUSCH'. " internal table fieldname
LS_FIELDCAT-DATATYPE = 'CHAR'.
LS_FIELDCAT-REPTEXT_DDIC = TEXT-L00.
LS_FIELDCAT-DDICTXT = 'S'.
LS_FIELDCAT-DO_SUM = 'X'. " DISPLAY TOTAL
APPEND LS_FIELDCAT TO ST_FIELDCAT.
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'ALPGR'. " internal table fieldname
LS_FIELDCAT-REF_TABNAME = 'STPOX'.
LS_FIELDCAT-REF_FIELDNAME = 'ALPGR'.
LS_FIELDCAT-DDICTXT = 'S'. "dictionary (S,M,L) fieldsize
LS_FIELDCAT-FIX_COLUMN = 'X'.
APPEND LS_FIELDCAT TO ST_FIELDCAT.
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'ALPRF'. " internal table fieldname
LS_FIELDCAT-REF_TABNAME = 'STPOX'.
LS_FIELDCAT-REF_FIELDNAME = 'ALPRF'.
LS_FIELDCAT-DDICTXT = 'S'. "dictionary (S,M,L) fieldsize
LS_FIELDCAT-FIX_COLUMN = 'X'.
APPEND LS_FIELDCAT TO ST_FIELDCAT.
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'SECURITY'.
LS_FIELDCAT-DATATYPE = 'CHAR'.
LS_FIELDCAT-REPTEXT_DDIC = TEXT-L01.
LS_FIELDCAT-DDICTXT = 'S'.
LS_FIELDCAT-DO_SUM = 'X'. " DISPLAY TOTAL
APPEND LS_FIELDCAT TO ST_FIELDCAT.
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'GREENPRD'.
LS_FIELDCAT-DATATYPE = 'CHAR'.
LS_FIELDCAT-REPTEXT_DDIC = TEXT-L02.
LS_FIELDCAT-DDICTXT = 'S'.
LS_FIELDCAT-DO_SUM = 'X'. " DISPLAY TOTAL
APPEND LS_FIELDCAT TO ST_FIELDCAT.
IF NOT P_INFO IS INITIAL .
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'INFOCHK'.
LS_FIELDCAT-DATATYPE = 'CHAR'.
LS_FIELDCAT-REPTEXT_DDIC = TEXT-L03.
LS_FIELDCAT-DDICTXT = 'S'.
LS_FIELDCAT-DO_SUM = 'X'. " DISPLAY TOTAL
APPEND LS_FIELDCAT TO ST_FIELDCAT.
ENDIF .
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'POTX1'. " internal table fieldname
LS_FIELDCAT-REF_TABNAME = 'STPOX'.
LS_FIELDCAT-REF_FIELDNAME = 'POTX1'.
LS_FIELDCAT-DDICTXT = 'S'. "dictionary (S,M,L) fieldsize
LS_FIELDCAT-FIX_COLUMN = 'X'.
APPEND LS_FIELDCAT TO ST_FIELDCAT.
* CLEAR LS_FIELDCAT.
* LS_FIELDCAT-FIELDNAME = 'STLNR'. " internal table fieldname
* LS_FIELDCAT-REF_TABNAME = 'STPOX'.
* LS_FIELDCAT-REF_FIELDNAME = 'STLNR'.
* LS_FIELDCAT-DDICTXT = 'S'. "dictionary (S,M,L) fieldsize
* LS_FIELDCAT-FIX_COLUMN = 'X'.
* APPEND LS_FIELDCAT TO ST_FIELDCAT.
ENDFORM. " FIELDCAT_INIT
*&---------------------------------------------------------------------*
*& Form reuse_alv_list_display
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM REUSE_ALV_LIST_DISPLAY.
LOOP AT ITAB WHERE MTART EQ 'HALB'.
CLEAR: MAST.
CLEAR: ITAB-CHECK.
SELECT SINGLE * FROM MAST CLIENT SPECIFIED WHERE MANDT EQ SY-MANDT
AND MATNR EQ ITAB-IDNRK
AND WERKS EQ P_WERKS
AND STLAN EQ '1'.
IF SY-SUBRC EQ 0.
MOVE 'YES' TO ITAB-CHECK.
ELSE.
SELECT SINGLE * FROM MAST CLIENT SPECIFIED WHERE MANDT EQ SY-MANDT
AND MATNR EQ ITAB-IDNRK
AND WERKS EQ P_WERKS
AND STLAN EQ '2'.
IF SY-SUBRC EQ 0.
MOVE 'YES' TO ITAB-CHECK.
ELSE.
MOVE 'NO' TO ITAB-CHECK.
ENDIF.
ENDIF.
MODIFY ITAB.
ENDLOOP .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_BACKGROUND_ID = 'ALV_BACKGROUND' "wall paper
I_CALLBACK_PROGRAM = S_REPID "must not use sy-repid
I_CALLBACK_PF_STATUS_SET = S_STATUS "self-define userstatus
I_CALLBACK_USER_COMMAND = S_USER_COMMAND "user command sub
IS_LAYOUT = ST_LAYOUT "layout setting
IT_FIELDCAT = ST_FIELDCAT "field setting
IT_EXCLUDING = TAB "not work
I_DEFAULT = 'X'
I_SAVE = 'A' " allow to save
IS_VARIANT = S_VARIANT
IT_EVENTS = ST_EVENTS
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
TABLES
T_OUTTAB = ITAB[].
ENDFORM. " REUSE_ALV_LIST_DISPLAY
*-------------------------------------------------------------------
* FORM PF_STATUS_SET
*-------------------------------------------------------------------
FORM STANDARD_ST01 USING EXTAB TYPE SLIS_T_EXTAB.
************ contain all fcode from ALV ******************
DELETE EXTAB WHERE FCODE = '&RNT_PREV'.
DELETE EXTAB WHERE FCODE = '&LFO'.
DELETE EXTAB WHERE FCODE = '&NFO'.
DELETE EXTAB WHERE FCODE = '&RNT'.
SET PF-STATUS 'ST01'.
* set titlebar 'ALVST'.
ENDFORM. "standard_st01
*-------------------------------------------------------------------
* FORM TOP_OF_PAGE-ALV.
*-------------------------------------------------------------------
FORM TOP_OF_PAGE-ALV.
*
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
IT_LIST_COMMENTARY = ST_LIST_TOP_OF_PAGE
I_LOGO = 'TPLOGO'.
* I_END_OF_LIST_GRID =
ENDFORM. "top_of_page-alv
*-------------------------------------------------------------------
* FORM USER_COMMAND-ALV
*-------------------------------------------------------------------
FORM USER_COMMAND-ALV USING R_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD.
DATA: FELD(10) TYPE C.
* table rs_selfield store the information of cursor and table index.
RS_SELFIELD-REFRESH = 'X'.
CASE R_UCOMM.
WHEN '&IC1'.
READ TABLE ITAB INDEX RS_SELFIELD-TABINDEX.
IF SY-SUBRC = 0.
CASE RS_SELFIELD-FIELDNAME.
WHEN 'IDNRK' OR 'ALPRF' OR 'FMENG' OR 'AUSCH'
OR 'ALPGR' OR 'STUFE'.
IF ITAB-IDNRK IS INITIAL.
CLEAR R_UCOMM.
EXIT.
ENDIF.
SELECT SINGLE * FROM MAST WHERE MATNR = ITAB-IDNRK
AND WERKS = P_WERKS
AND STLAN = P_STLAN.
IF SY-SUBRC = 0 .
SET PARAMETER ID 'MAT' FIELD ITAB-IDNRK.
SET PARAMETER ID 'WRK' FIELD P_WERKS.
SET PARAMETER ID 'CSV' FIELD P_STLAN.
CALL TRANSACTION 'CS03' AND SKIP FIRST SCREEN.
ELSE.
MESSAGE TEXT-S01 TYPE 'S'.
ENDIF .
WHEN 'SECURITY'.
SET PARAMETER ID 'MAT' FIELD ITAB-IDNRK.
SET PARAMETER ID 'WRK' FIELD P_WERKS.
CALL TRANSACTION 'ME03' AND SKIP FIRST SCREEN.
WHEN 'GREENPRD'.
SET PARAMETER ID 'MAT' FIELD ITAB-IDNRK.
SET PARAMETER ID 'WRK' FIELD P_WERKS.
SET PARAMETER ID 'LIF' FIELD ITAB-LIFNR.
CALL TRANSACTION 'QI03' AND SKIP FIRST SCREEN.
WHEN 'INFOCHK'.
IF ITAB-MTART NE 'HALB'.
SET PARAMETER ID 'MAT' FIELD ITAB-IDNRK.
SET PARAMETER ID 'LIF' FIELD ITAB-LIFNR1.
SET PARAMETER ID 'EKO' FIELD ITAB-EKORG.
SET PARAMETER ID 'WRK' FIELD ITAB-WERKS.
SET PARAMETER ID 'INF' FIELD ITAB-INFNR.
CALL TRANSACTION 'ME13' AND SKIP FIRST SCREEN.
ENDIF .
ENDCASE .
ENDIF .
WHEN 'BOMPRT'.
PERFORM PRINT_BOM_DETAILS.
WHEN 'BMDL'.
PERFORM GET_FIELDNAMES .
PERFORM SINGLE_LEVEL_BOM .
PERFORM DOWNLOAD_RESULT .
WHEN 'BMPRT1'.
PERFORM MFG_PRINT_BOM.
ENDCASE .
CLEAR R_UCOMM.
ENDFORM. "user_command-alv
*&---------------------------------------------------------------------*
*& Form SINGLE_LEVEL_BOM
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM SINGLE_LEVEL_BOM .
DATA: L_MATNR_NEW LIKE MARA-MATNR.
DATA: L_MATNR_OLD LIKE MARA-MATNR.
DATA: L_NTGEW LIKE MARA-NTGEW.
DATA: L_BRGEW LIKE MARA-NTGEW.
DATA: L_GEWEI LIKE MARA-GEWEI.
DATA: L_UMREZ_CAR LIKE MARM-UMREN.
DATA: L_UMREZ_PAL LIKE MARM-UMREN.
DATA: L_STKTX LIKE STKO-STKTX.
REFRESH: DL_TAB. CLEAR: DL_TAB .
LOOP AT ITAB .
IF P_SINGLE IS INITIAL .
IF NOT ITAB-MTART = 'HALB'.
ELSE.
MOVE ITAB-IDNRK TO I_HALB-IDNRK .
MOVE P_WERKS TO I_HALB-WERKS .
MOVE P_STLAN TO I_HALB-STLAN .
COLLECT I_HALB .
CLEAR I_HALB .
ENDIF .
ENDIF .
IF ITAB-STUFE = 1 .
CLEAR: DL_TAB .
MOVE ITAB-AUSCH TO DL_TAB-AUSCH.
MOVE P_WERKS TO DL_TAB-WERKS .
MOVE ITAB-FMENG TO DL_TAB-FMENG .
MOVE ITAB-ALPGR TO DL_TAB-ALPGR .
MOVE ITAB-ALPRF TO DL_TAB-ALPRF .
MOVE ITAB-POTXT TO DL_TAB-POTXT .
MOVE ITAB-POTX1 TO DL_TAB-POTX1 .
MOVE ITAB-POTX2 TO DL_TAB-POTX2 .
MOVE ITAB-MENGE TO DL_TAB-MENGE .
MOVE ITAB-IDNRK TO DL_TAB-IDNRK .
MOVE ITAB-LGORT TO DL_TAB-LGORT .
MOVE ITAB-MEINS TO DL_TAB-MEINS .
MOVE BMHDS-TEXT0 TO DL_TAB-HTEXT .
MOVE P_EMENG TO DL_TAB-EMENG .
MOVE P_MATNR TO DL_TAB-MATNR .
MOVE P_WERKS TO DL_TAB-WERKS .
MOVE P_STLAN TO DL_TAB-STLAN .
APPEND DL_TAB .
CLEAR DL_TAB .
ENDIF .
ENDLOOP .
IF P_SINGLE IS INITIAL .
LOOP AT I_HALB .
PERFORM EXPLOSION_HALB USING I_HALB-IDNRK I_HALB-WERKS
I_HALB-STLAN I_HALB-MAKTX.
ENDLOOP .
ENDIF .
SORT DL_TAB BY MATNR WERKS .
CLEAR: L_MATNR_NEW, L_MATNR_OLD .
LOOP AT DL_TAB .
MOVE DL_TAB-MATNR TO L_MATNR_NEW .
IF L_MATNR_NEW NE L_MATNR_OLD.
CLEAR: MARA, MARM, L_UMREZ_CAR, L_UMREZ_PAL, L_GEWEI, L_NTGEW, L_BRGEW, L_STKTX .
SELECT SINGLE * FROM MARA CLIENT SPECIFIED WHERE MANDT EQ SY-MANDT
AND MATNR EQ DL_TAB-MATNR.
MOVE MARA-NTGEW TO L_NTGEW.
MOVE MARA-BRGEW TO L_BRGEW.
MOVE MARA-GEWEI TO L_GEWEI.
CLEAR: MARM.
SELECT SINGLE UMREZ INTO L_UMREZ_CAR FROM MARM CLIENT SPECIFIED
WHERE MANDT EQ SY-MANDT
AND MATNR EQ L_MATNR_NEW
AND MEINH EQ 'KAR'.
CLEAR: MARM.
SELECT SINGLE UMREZ INTO L_UMREZ_PAL FROM MARM CLIENT SPECIFIED
WHERE MANDT EQ SY-MANDT
AND MATNR EQ L_MATNR_NEW
AND MEINH EQ 'PAL'.
CLEAR: MAST .
SELECT SINGLE * FROM MAST CLIENT SPECIFIED WHERE MANDT = SY-MANDT
AND MATNR = L_MATNR_NEW
AND WERKS = P_WERKS
AND STLAN = P_STLAN
AND STLAL = C_STLAL.
CLEAR: STKO .
SELECT SINGLE STKTX INTO L_STKTX FROM STKO CLIENT SPECIFIED
WHERE MANDT EQ SY-MANDT
AND STLNR EQ MAST-STLNR
AND STLAL EQ C_STLAL.
DL_TAB-GEWEI = L_GEWEI .
DL_TAB-NTGEW = L_NTGEW .
DL_TAB-BRGEW = L_BRGEW .
DL_TAB-BOX01 = L_UMREZ_CAR .
DL_TAB-BOX02 = L_UMREZ_PAL .
DL_TAB-STKTX = L_STKTX .
L_MATNR_OLD = L_MATNR_NEW .
ELSE.
DL_TAB-GEWEI = L_GEWEI .
DL_TAB-NTGEW = L_NTGEW .
DL_TAB-BRGEW = L_BRGEW .
DL_TAB-BOX01 = L_UMREZ_CAR .
DL_TAB-BOX02 = L_UMREZ_PAL .
DL_TAB-STKTX = L_STKTX .
ENDIF .
MODIFY DL_TAB .
ENDLOOP .
ENDFORM. " SINGLE_LEVEL_BOM
*&---------------------------------------------------------------------*
*& Form EXPLOSION_HALB
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_I_HALB_MATNR text
* -->P_I_HALB_WERKS text
* -->P_I_HALB_STLAN text
*----------------------------------------------------------------------*
FORM EXPLOSION_HALB USING MATNR WERKS STLAN MAKTX.
DATA: L_INDEX TYPE P .
REFRESH: I_BOM, I_MATCAT .
CLEAR : I_BOM, I_MATCAT .
CALL FUNCTION 'CS_BOM_EXPL_MAT_V2'
EXPORTING
CAPID = 'PP01'
DATUV = P_DATUM " SY-DATUM
EHNDL = '1'
EMENG = P_EMENG " Base Qty
MEHRS = 'X'
MMORY = '1'
MTNRV = MATNR " Parent Material
WERKS = WERKS " Plant
* stpst = 1 " Level = 1
STLAN = STLAN
TABLES
STB = I_BOM
MATCAT = I_MATCAT
EXCEPTIONS
ALT_NOT_FOUND = 1
CALL_INVALID = 2
MATERIAL_NOT_FOUND = 3
MISSING_AUTHORIZATION = 4
NO_BOM_FOUND = 5
NO_PLANT_DATA = 6
NO_SUITABLE_BOM_FOUND = 7
CONVERSION_ERROR = 8
OTHERS = 9.
LOOP AT I_BOM WHERE STUFE = 1.
MOVE I_BOM-AUSCH TO DL_TAB-AUSCH.
MOVE I_BOM-WERKS TO DL_TAB-WERKS .
MOVE I_BOM-FMENG TO DL_TAB-FMENG .
MOVE I_BOM-ALPGR TO DL_TAB-ALPGR .
MOVE I_BOM-ALPRF TO DL_TAB-ALPRF .
CONCATENATE I_BOM-POTX1 I_BOM-POTX2 INTO DL_TAB-POTXT.
MOVE I_BOM-POTX1 TO DL_TAB-POTX1 .
MOVE I_BOM-POTX2 TO DL_TAB-POTX2 .
MOVE I_BOM-MENGE TO DL_TAB-MENGE .
MOVE I_BOM-IDNRK TO DL_TAB-IDNRK .
MOVE I_BOM-LGORT TO DL_TAB-LGORT .
* MOVE I_BOM-POSNR TO DL_TAB-POSNR .
MOVE I_BOM-MEINS TO DL_TAB-MEINS .
CLEAR: MAST .
SELECT SINGLE * FROM MAST CLIENT SPECIFIED WHERE MANDT = SY-MANDT
AND MATNR = MATNR
AND WERKS = WERKS
AND STLAN = STLAN.
IF SY-SUBRC = 0 .
REFRESH: STR_LINES .
CLEAR : STR_LINES, STR_TDID, STR_TDNAME, STR_OBJECT .
CONCATENATE SY-MANDT 'M' MAST-STLNR INTO STR_TDNAME .
SELECT SINGLE * FROM STXH WHERE TDNAME = STR_TDNAME.
IF SY-SUBRC = 0 .
STR_TDNAME = STXH-TDNAME .
STR_TDID = STXH-TDID .
CALL FUNCTION 'READ_TEXT'
EXPORTING
ID = STR_TDID
LANGUAGE = SY-LANGU
NAME = STR_TDNAME
OBJECT = 'BOM'
TABLES
LINES = STR_LINES.
IF SY-SUBRC <> 0.
* message id sy-msgid type sy-msgty number sy-msgno
* with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF .
ENDIF .
ENDIF .
CLEAR: DL_TAB-HTEXT .
IF NOT STR_LINES[] IS INITIAL .
CLEAR: L_INDEX, BMHDS-TEXT1, BMHDS-TEXT2, BMHDS-TEXT3,
BMHDS-TEXT4 ,BMHDS-TEXT5, BMHDS-TEXT6 .
LOOP AT STR_LINES .
L_INDEX = L_INDEX + 1 .
IF L_INDEX = 1 .
BMHDS-TEXT1 = STR_LINES-TDLINE.
ENDIF .
IF L_INDEX = 2 .
BMHDS-TEXT2 = STR_LINES-TDLINE.
ENDIF .
IF L_INDEX = 3 .
BMHDS-TEXT3 = STR_LINES-TDLINE.
ENDIF .
IF L_INDEX = 4 .
BMHDS-TEXT4 = STR_LINES-TDLINE.
ENDIF .
IF L_INDEX = 5 .
BMHDS-TEXT5 = STR_LINES-TDLINE.
ENDIF .
IF L_INDEX = 6 .
BMHDS-TEXT6 = STR_LINES-TDLINE.
EXIT.
ENDIF .
ENDLOOP .
CLEAR: DL_TAB-HTEXT .
CONCATENATE BMHDS-TEXT1 BMHDS-TEXT2 BMHDS-TEXT3
BMHDS-TEXT4 BMHDS-TEXT5 BMHDS-TEXT6
INTO DL_TAB-HTEXT .
ENDIF .
MOVE MATNR TO DL_TAB-MATNR .
MOVE WERKS TO DL_TAB-WERKS .
MOVE STLAN TO DL_TAB-STLAN .
MOVE P_EMENG TO DL_TAB-EMENG .
APPEND DL_TAB .
CLEAR DL_TAB .
ENDLOOP .
ENDFORM. " EXPLOSION_HALB
*&---------------------------------------------------------------------*
*& Form MFG_PRINT_BOM
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM MFG_PRINT_BOM .
REFRESH: BMITS .
CLEAR : BMITS , FM_NAME .
LOOP AT ITAB .
MOVE-CORRESPONDING ITAB TO BMITS .
APPEND BMITS.
CLEAR BMITS.
ENDLOOP .
IF NOT BMITS[] IS INITIAL .
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
FORMNAME = 'ZPPBMR001FA'
DIRECT_CALL = 'X'
IMPORTING
FM_NAME = FM_NAME
EXCEPTIONS
NO_FORM = 1
NO_FUNCTION_MODULE = 2
OTHERS = 3.
* WA_SSFCOMPOP-NO_DIALOG = 'X'.
WA_SSFCTRLOP-PREVIEW = 'X'.
* WA_SSFCTRLOP-DEVICE = 'PRINTER'.
* WA_SSFCOMPOP-TDPRINTER = ''.
* WA_SSFCOMPOP-TDPAGESLCT = ''.
CALL FUNCTION FM_NAME
EXPORTING
CONTROL_PARAMETERS = WA_SSFCTRLOP
OUTPUT_OPTIONS = WA_SSFCOMPOP
TABLES
BMHDS = BMHDS
BMITS = BMITS
EXCEPTIONS
FORMATTING_ERROR = 1
INTERNAL_ERROR = 2
SEND_ERROR = 3
USER_CANCELED = 4
OTHERS = 5.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDIF .
ENDFORM. " MFG_PRINT_BOM
LINE-COUNT 65
NO STANDARD PAGE HEADING
MESSAGE-ID MG.
*----------------------------------------------------------------------*
* Program : ZPPBMR001 *
* Author : Patrick,Song *
* Date : Aug 20, 2008 *
* Code type : conversion *
* Version : new creation *
* (interface/conversion/on-line transaction/report) *
* *
*----------------------------------------------------------------------*
* Error handling : *
*----------------------------------------------------------------------*
* 1. *
* *
*----------------------------------------------------------------------*
* Change log : *
*----------------------------------------------------------------------*
* CR# : *
* Corr. no. : *
* Date : *
* Author : *
* Change : *
* *
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
* Table declaration
*&---------------------------------------------------------------------*
TABLES: AUSP, " Characteristic Values
ADRC, " Addresses (Business Address Services)
CABN, " Characteristic
CSCMAT, " BOM Explosion: Materials
EINA, " Purchasing Info Record: General Data
EINE, " Purchasing Info Rec:Purchasing Org.Data
EORD, " Purchasing Source List
KNA1, " Customer Master
KNMT, " Customer Material Table
MAKT, " Material Description
MARA, " General Material Data
MARC, " Plant Data for Material
MARM, " Units of Measure for Material
MAST, " Material to BOM Link
QINF, " QM-info record for material and vendor
STKO, " BOM Header
STPO, " BOM item
STXH, " STXD SAPscript text file header
STZU, " Permanent BOM data
T134, " Material Types
T001W. " Plants/Branches
*&---------------------------------------------------------------------*
* Subrouting declaration
*&---------------------------------------------------------------------*
INCLUDE : <ICON>.
TYPE-POOLS: SLIS.
INCLUDE : ABAPRETN.
INCLUDE : ZBCDWI000.
*&---------------------------------------------------------------------*
* Declaration Constant Data
*&---------------------------------------------------------------------*
CONSTANTS : ST_FORMNAME_TOP_OF_PAGE TYPE SLIS_FORMNAME
VALUE 'TOP_OF_PAGE-ALV'.
*&---------------------------------------------------------------------*
* selection screen define
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK A1 WITH FRAME TITLE TEXT-SC1 .
PARAMETERS: P_MATNR LIKE MAST-MATNR MEMORY ID MAT OBLIGATORY.
PARAMETERS: P_WERKS LIKE T001W-WERKS DEFAULT '2001' OBLIGATORY .
PARAMETERS: P_STLAN LIKE MAST-STLAN DEFAULT '1' OBLIGATORY .
PARAMETERS: P_CAPID LIKE RC29L-CAPID DEFAULT 'PP01' OBLIGATORY .
PARAMETERS: P_STLAL LIKE RC29L-STLAL DEFAULT '1' OBLIGATORY .
PARAMETERS: P_EMENG LIKE RC29N-EMENG DEFAULT '10000' OBLIGATORY .
PARAMETERS: P_DATUM LIKE RC29N-DATUV DEFAULT SY-DATUM .
SELECTION-SCREEN SKIP .
PARAMETERS: P_INFO AS CHECKBOX DEFAULT SPACE .
PARAMETERS: P_OUTST AS CHECKBOX DEFAULT SPACE.
SELECTION-SCREEN END OF BLOCK A1 .
PARAMETERS: P_FILE LIKE RLGRAP-FILENAME DEFAULT 'd:\bom_dl\'.
PARAMETERS: P_SINGLE AS CHECKBOX DEFAULT SPACE.
*&---------------------------------------------------------------------*
* globe parameters declaration
*&---------------------------------------------------------------------*
* define interal table to store BOM details
DATA: BEGIN OF ITAB OCCURS 0 .
DATA: POSNR LIKE STPO-POSNR . "Item No
DATA: IDNRK LIKE STPOX-IDNRK. "Component No
DATA: STUFE(002) . "Level
DATA: MTART LIKE MARA-MTART .
DATA: MAKTX TYPE STRING . "Component Description
DATA: MEINS LIKE STPOX-MEINS. "BUnit
DATA: MENGE(010) . "Component Quantity
DATA: MNGLG(010).
DATA: FMENG LIKE STPO-FMENG. "Fixed Quantity
DATA: AUSCH(005). "Scrap Rate
DATA: ALPGR LIKE STPOX-ALPGR. "Alternative item: group
DATA: ALPRF LIKE STPOX-ALPRF. "Alternative item: ranking order
DATA: POTXT(080). "Item Text
DATA: POTX1(100). "Item Text (Line 1)
DATA: POTX2(100). "Item Text (Line 2)
DATA: GREENPRD(003). "Green Material Indicator
DATA: SECURITY(003). "Security Material Indicator
DATA: LIFNR LIKE LFA1-LIFNR .
DATA: STLNR(008) . "BOM Number
DATA: SELK(001).
DATA: LGORT LIKE STPOX-LGORT.
DATA: INFOCHK(003). "Pur.Info Record Check
DATA: INFNR LIKE EINE-INFNR .
DATA: EKORG LIKE EINE-EKORG .
DATA: WERKS LIKE EINE-WERKS .
DATA: LIFNR1 LIKE LFA1-LIFNR .
DATA: STR_CHAR TYPE STRING .
DATA: CHECK(003).
DATA: END OF ITAB .
*>define internal table to store these download data
DATA: BEGIN OF DL_TAB OCCURS 0 .
DATA: MATNR(018)." LIKE MARA-MATNR .
DATA: XTEXT(040)." LIKE MAKT-MAKTX .
DATA: EMENG(018)." LIKE RC29N-EMENG .
DATA: WERKS(004)." LIKE MARC-WERKS .
DATA: STLAN(001)." LIKE MAST-STLAN .
DATA: HTEXT(255).
DATA: IDNRK(018)." LIKE STPOX-IDNRK. "Component No
DATA: MAKTX(040)." TYPE STRING . "Component Description
DATA: MENGE(013)." Component Quantity
DATA: AUSCH(005)." Scrap Rate
DATA: LGORT(004)." LIKE STPOX-LGORT.
DATA: ALPGR(002)." LIKE STPOX-ALPGR. "Alternative item: group
DATA: ALPRF(002)." LIKE STPOX-ALPRF. "Alternative item: ranking order
DATA: POTX1(040)." LIKE STPOX-POTX1 . "Item Text (Line 1)
DATA: POTX2(040)." LIKE STPOX-POTX1 . "Item Text (Line 2)
DATA: FMENG(005)." LIKE STPO-FMENG. "Fixed Quantity
DATA: MEINS(005)." LIKE STPOX-MEINS . "BUnit
DATA: STKTX(040)." LIKE BICSP-STKTX. "29# Alternative BOM text
DATA: GEWEI(003)." Weight Unit
DATA: NTGEW(017)." New Weight
DATA: BRGEW(017)." Gross Weight
DATA: BOX01(006)." Quantity per Carton
DATA: BOX02(006)." Quantity per PAL
DATA: POTXT(080)." Item Text
DATA: END OF DL_TAB .
*>define internal table to store these HALB Materials
DATA: BEGIN OF I_HALB OCCURS 0 .
DATA: IDNRK LIKE STPOX-IDNRK .
DATA: WERKS LIKE STPOX-WERKS .
DATA: STLAN LIKE STPOX-STLAN .
DATA: MAKTX LIKE MAKT-MAKTX .
DATA: END OF I_HALB .
*> BOM Header Data
DATA: BMHDS LIKE ZPP_BMHD OCCURS 0 WITH HEADER LINE.
DATA: BMITS LIKE ZPP_BMIT OCCURS 0 WITH HEADER LINE .
*> bom explosion data store
DATA: I_BOM LIKE STPOX OCCURS 0 WITH HEADER LINE.
DATA: I_MATCAT LIKE CSCMAT OCCURS 0 WITH HEADER LINE.
DATA: L_ADRNR LIKE KNA1-ADRNR .
* define data for text reading
DATA: STR_TDNAME LIKE STXH-TDNAME .
DATA: STR_TDID LIKE STXH-TDID .
DATA: STR_OBJECT LIKE THEAD-TDOBJECT .
DATA: STR_LINES LIKE TLINE OCCURS 0 WITH HEADER LINE .
DATA: S_REPID LIKE SY-REPID,
ST_LIST_TOP_OF_PAGE TYPE SLIS_T_LISTHEADER."page header
DATA: ST_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV, "table col name
ST_LAYOUT TYPE SLIS_LAYOUT_ALV, "layoutsetting
ST_SP_GROUP TYPE SLIS_T_SP_GROUP_ALV,
ST_EVENTS TYPE SLIS_T_EVENT, "event header
* s_default(001) type c,
* s_exit(001) type c,
* st_variant like disvariant,
CODE LIKE DISVARIANT-HANDLE,
S_VARIANT LIKE DISVARIANT,
S_STATUS TYPE SLIS_FORMNAME VALUE 'STANDARD_ST01',
S_USER_COMMAND TYPE SLIS_FORMNAME VALUE 'USER_COMMAND-ALV'.
DATA: BEGIN OF EXTAB OCCURS 0,
FCODE LIKE RSMPE-FUNC.
DATA: END OF EXTAB.
DATA: TAB TYPE SLIS_T_EXTAB.
DATA: L_ATINN LIKE CABN-ATINN .
*>User For Smartforms
DATA: FM_NAME TYPE RS38L_FNAM,
WA_SSFCOMPOP TYPE SSFCOMPOP,
WA_SSFCTRLOP TYPE SSFCTRLOP.
DATA: C_STLAL LIKE MAST-STLAL.
DATA: GET_BAPI1003 LIKE BAPI1003_ALLOC_VALUES_NUM OCCURS 0 WITH HEADER LINE,
GET_VALUES_CHAR LIKE BAPI1003_ALLOC_VALUES_CHAR OCCURS 0 WITH HEADER LINE,
GET_VALUES_CURR LIKE BAPI1003_ALLOC_VALUES_CURR OCCURS 0 WITH HEADER LINE,
GET_VALUES_LIST LIKE BAPI1003_ALLOC_LIST OCCURS 0 WITH HEADER LINE,
GET_BAPIRET2 LIKE BAPIRET2 OCCURS 0 WITH HEADER LINE,
LS_BAPIRET2 TYPE BAPIRET2.
DATA: BEGIN OF GET_VALUES OCCURS 0.
INCLUDE STRUCTURE GET_VALUES_CHAR.
DATA: INT TYPE I.
DATA: END OF GET_VALUES .
DATA: STR_A001 TYPE STRING.
DATA: STR_A002 TYPE STRING.
DATA: L_OBJECT(050) .
*----------------------------------------------------------------------*
* Global program variables *
*----------------------------------------------------------------------*
*** for user downloading operation
DATA: L_FILE LIKE RLGRAP-FILENAME. " filename for data downloading
DATA: BEGIN OF FIELDNAMES OCCURS 0,
NAME(030),
END OF FIELDNAMES.
*&---------------------------------------------------------------------*
* initialization.
*&---------------------------------------------------------------------*
INITIALIZATION.
REFRESH: ITAB, I_BOM, I_MATCAT .
CLEAR : ITAB, I_BOM, I_MATCAT .
S_REPID = SY-REPID.
* assign the subroutine to the ALV tool
PERFORM EVENTTAB_BUILD USING ST_EVENTS[].
PERFORM VARIANT_INIT.
*&---------------------------------------------------------------------*
* at selection-screen
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN .
IF NOT P_OUTST IS INITIAL .
P_INFO = 'X' .
ENDIF.
PERFORM MATERIAL_CHECK USING P_MATNR P_WERKS P_STLAN.
*&---------------------------------------------------------------------*
* start-of-selection.
*&---------------------------------------------------------------------*
START-OF-SELECTION.
CLEAR: C_STLAL.
C_STLAL = P_STLAL.
PERFORM FORMAT_ALPHA_OUTPUT CHANGING C_STLAL.
PERFORM GET_HEADER_DATA .
CLEAR: L_ATINN .
SELECT SINGLE ATINN INTO L_ATINN FROM CABN CLIENT SPECIFIED
WHERE MANDT EQ SY-MANDT
AND ATNAM EQ 'A002' .
* perform get_start_time .
PERFORM BOM_EXPLOSION USING P_MATNR P_WERKS P_STLAN P_CAPID P_EMENG .
PERFORM COMMENT_BUILD. "page header
PERFORM FIELDCAT_INIT. "table col name
PERFORM ALV_LAYOUT_BUILD. "layout setting
PERFORM REUSE_ALV_LIST_DISPLAY. "display
*&---------------------------------------------------------------------*
* end-of-selection.
*&---------------------------------------------------------------------*
END-OF-SELECTION.
*&---------------------------------------------------------------------*
* at user-command .
*&---------------------------------------------------------------------*
AT USER-COMMAND .
*&---------------------------------------------------------------------*
*& Form MATERIAL_CHECK
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_P_MATNR text
*----------------------------------------------------------------------*
FORM MATERIAL_CHECK USING MATNR WERKS STLAN.
DATA: STR_ERROR TYPE STRING .
* material check
CLEAR: MARA, MAST .
CLEAR: STR_ERROR .
SELECT SINGLE * FROM MARA CLIENT SPECIFIED WHERE MANDT = SY-MANDT
AND MATNR = MATNR .
IF SY-SUBRC <> 0 .
CONCATENATE TEXT-E01 MATNR TEXT-E02 INTO STR_ERROR SEPARATED BY SPACE .
ENDIF .
IF NOT STR_ERROR IS INITIAL .
MESSAGE STR_ERROR TYPE 'E' .
ENDIF .
* plant code check
CLEAR: STR_ERROR .
SELECT SINGLE * FROM T001W CLIENT SPECIFIED WHERE MANDT = SY-MANDT
AND WERKS = WERKS .
IF SY-SUBRC <> 0 .
CONCATENATE TEXT-E03 WERKS TEXT-E02 INTO STR_ERROR SEPARATED BY SPACE .
ENDIF .
IF NOT STR_ERROR IS INITIAL .
MESSAGE STR_ERROR TYPE 'E' .
ENDIF .
* plant data check
CLEAR: STR_ERROR .
SELECT SINGLE * FROM MARC CLIENT SPECIFIED WHERE MANDT = SY-MANDT
AND MATNR = MATNR
AND WERKS = WERKS .
IF SY-SUBRC <> 0 .
CONCATENATE TEXT-E04 MATNR WERKS TEXT-E02 INTO STR_ERROR SEPARATED BY SPACE .
ENDIF .
IF NOT STR_ERROR IS INITIAL .
MESSAGE STR_ERROR TYPE 'E' .
ENDIF .
* Material BOM check
CLEAR: STR_ERROR .
SELECT SINGLE * FROM MAST CLIENT SPECIFIED WHERE MANDT = SY-MANDT
AND MATNR = MATNR
AND WERKS = WERKS
AND STLAN = STLAN.
IF SY-SUBRC <> 0 .
CONCATENATE TEXT-M14 MATNR WERKS STLAN TEXT-E02
INTO STR_ERROR SEPARATED BY SPACE .
ENDIF .
IF NOT STR_ERROR IS INITIAL .
MESSAGE STR_ERROR TYPE 'E' .
ENDIF .
ENDFORM. " MATERIAL_CHECK
*&---------------------------------------------------------------------*
*& Form BOM_EXPLOSION
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM BOM_EXPLOSION USING MATNR WERKS STLAN CAPID EMENG .
DATA : L_INFO(001) TYPE C .
DATA : L_CNT TYPE I.
REFRESH: ITAB, I_BOM, I_MATCAT .
CLEAR : ITAB, I_BOM, I_MATCAT .
CALL FUNCTION 'CS_BOM_EXPL_MAT_V2'
EXPORTING
CAPID = CAPID
DATUV = P_DATUM "SY-DATUM
EHNDL = '1'
EMENG = EMENG " Base Qty
MEHRS = 'X'
MMORY = '1'
MTNRV = MATNR " Parent Material
WERKS = WERKS " Plant
* stpst = 1 " Level = 1
STLAN = STLAN
STLAL = C_STLAL
TABLES
STB = I_BOM
MATCAT = I_MATCAT
EXCEPTIONS
ALT_NOT_FOUND = 1
CALL_INVALID = 2
MATERIAL_NOT_FOUND = 3
MISSING_AUTHORIZATION = 4
NO_BOM_FOUND = 5
NO_PLANT_DATA = 6
NO_SUITABLE_BOM_FOUND = 7
CONVERSION_ERROR = 8
OTHERS = 9.
IF P_SINGLE IS INITIAL.
LOOP AT I_BOM .
MOVE-CORRESPONDING I_BOM TO ITAB .
CLEAR: ITAB-POTX1.
CONCATENATE I_BOM-POTX1 I_BOM-POTX2 INTO ITAB-POTX1 SEPARATED BY SPACE.
SELECT SINGLE MAKTX INTO ITAB-MAKTX FROM MAKT CLIENT SPECIFIED
* where mandt = sy-mandt and matnr = itab-idnrk and spras = 'E' .
WHERE MANDT = SY-MANDT AND MATNR = ITAB-IDNRK .
CLEAR: EORD.
IF ITAB-MTART NE 'HALB'.
CLEAR: ITAB-SECURITY .
CLEAR: EORD .
SELECT SINGLE * FROM EORD CLIENT SPECIFIED
WHERE MANDT = SY-MANDT
AND MATNR = ITAB-IDNRK
AND WERKS = P_WERKS.
IF SY-SUBRC = 0 .
MOVE 'YES' TO ITAB-SECURITY .
ELSE.
MOVE 'NO' TO ITAB-SECURITY .
ENDIF .
CLEAR: ITAB-GREENPRD .
CLEAR: QINF .
SELECT SINGLE * FROM QINF CLIENT SPECIFIED
WHERE MANDT EQ SY-MANDT
AND MATNR EQ ITAB-IDNRK
AND WERK EQ P_WERKS
AND FREI_DAT GE SY-DATUM .
IF SY-SUBRC = 0 .
MOVE 'YES' TO ITAB-GREENPRD .
MOVE QINF-LIEFERANT TO ITAB-LIFNR .
ELSE.
MOVE 'NO' TO ITAB-GREENPRD .
ENDIF.
ELSE .
CLEAR: ITAB-SECURITY .
CLEAR: MARA .
SELECT SINGLE * FROM MARA CLIENT SPECIFIED WHERE MANDT EQ SY-MANDT
AND MATNR EQ ITAB-IDNRK
AND MSTAE EQ SPACE .
IF SY-SUBRC = 0 .
MOVE 'YES' TO ITAB-SECURITY .
ELSE.
MOVE 'NO' TO ITAB-SECURITY .
ENDIF .
ENDIF .
IF P_INFO EQ 'X' .
CLEAR: EINA .
CLEAR: L_INFO, ITAB-INFOCHK.
IF ITAB-MTART NE 'HALB'.
SELECT * FROM EINA CLIENT SPECIFIED WHERE MANDT EQ SY-MANDT
AND MATNR EQ ITAB-IDNRK
AND LOEKZ EQ SPACE .
CHECK L_INFO IS INITIAL .
SELECT SINGLE * FROM EINE CLIENT SPECIFIED
WHERE MANDT EQ SY-MANDT
AND INFNR EQ EINA-INFNR
AND NETPR GT 0
AND PRDAT GE SY-DATUM .
IF SY-SUBRC = 0 .
L_INFO = 'Y'.
ITAB-INFOCHK = 'YES'.
ITAB-INFNR = EINE-INFNR .
ITAB-WERKS = EINE-WERKS .
ITAB-EKORG = EINE-EKORG .
ITAB-LIFNR1 = EINA-LIFNR .
ENDIF .
ENDSELECT .
IF L_INFO IS INITIAL .
MOVE 'NO' TO ITAB-INFOCHK .
ENDIF .
ENDIF .
ENDIF .
REFRESH: GET_BAPI1003, GET_VALUES_CHAR, GET_VALUES_CURR, GET_BAPIRET2.
CLEAR : GET_BAPI1003, GET_VALUES_CHAR, GET_VALUES_CURR, GET_BAPIRET2.
CLEAR : L_OBJECT .
L_OBJECT = ITAB-IDNRK .
CALL FUNCTION 'BAPI_OBJCL_GETCLASSES'
EXPORTING
OBJECTKEY_IMP = L_OBJECT
OBJECTTABLE_IMP = 'MARA'
CLASSTYPE_IMP = '001'
READ_VALUATIONS = 'X'
TABLES
ALLOCLIST = GET_VALUES_LIST
ALLOCVALUESCHAR = GET_VALUES_CHAR
ALLOCVALUESCURR = GET_VALUES_CURR
ALLOCVALUESNUM = GET_BAPI1003
RETURN = GET_BAPIRET2.
REFRESH: GET_VALUES. CLEAR: GET_VALUES .
LOOP AT GET_VALUES_CHAR .
MOVE-CORRESPONDING GET_VALUES_CHAR TO GET_VALUES.
GET_VALUES-INT = STRLEN( GET_VALUES-VALUE_CHAR ) .
APPEND GET_VALUES.
CLEAR GET_VALUES.
ENDLOOP .
SORT GET_VALUES BY CHARACT ASCENDING INT DESCENDING .
CLEAR: ITAB-MAKTX .
CLEAR: STR_A001,STR_A002.
LOOP AT GET_VALUES WHERE CHARACT = 'A001'.
CONCATENATE STR_A001 GET_VALUES-VALUE_CHAR INTO STR_A001.
ENDLOOP .
LOOP AT GET_VALUES WHERE CHARACT = 'A002'.
CONCATENATE STR_A002 GET_VALUES-VALUE_CHAR INTO STR_A002.
ENDLOOP .
CONCATENATE STR_A001 STR_A002 INTO ITAB-MAKTX SEPARATED BY SPACE .
CONCATENATE ITAB-POTX1 ITAB-POTX2 INTO ITAB-POTXT.
IF NOT P_OUTST IS INITIAL .
IF ITAB-INFOCHK = 'NO' OR ITAB-GREENPRD = 'NO' OR ITAB-SECURITY = 'NO'.
APPEND ITAB .
CLEAR ITAB .
ENDIF .
ELSE .
APPEND ITAB .
CLEAR ITAB .
ENDIF .
BMHDS-DATUB = I_BOM-DATUB .
BMHDS-DATUV = I_BOM-DATUV .
ENDLOOP .
ELSE.
LOOP AT I_BOM WHERE STUFE = '1'.
MOVE-CORRESPONDING I_BOM TO ITAB .
CONCATENATE I_BOM-POTX1 I_BOM-POTX2 INTO ITAB-POTX1 SEPARATED BY SPACE.
SELECT SINGLE MAKTX INTO ITAB-MAKTX FROM MAKT CLIENT SPECIFIED
WHERE MANDT = SY-MANDT AND MATNR = ITAB-IDNRK .
CLEAR: EORD.
IF ITAB-MTART NE 'HALB'.
CLEAR: ITAB-SECURITY .
CLEAR: EORD .
SELECT SINGLE * FROM EORD CLIENT SPECIFIED
WHERE MANDT = SY-MANDT
AND MATNR = ITAB-IDNRK
AND WERKS = P_WERKS.
IF SY-SUBRC = 0 .
MOVE 'YES' TO ITAB-SECURITY .
ELSE.
MOVE 'NO' TO ITAB-SECURITY .
ENDIF .
CLEAR: QINF, ITAB-GREENPRD.
SELECT SINGLE * FROM QINF CLIENT SPECIFIED
WHERE MANDT EQ SY-MANDT
AND MATNR EQ ITAB-IDNRK
AND WERK EQ P_WERKS
AND FREI_DAT GE SY-DATUM .
IF SY-SUBRC = 0 .
MOVE 'YES' TO ITAB-GREENPRD .
MOVE QINF-LIEFERANT TO ITAB-LIFNR .
ELSE.
MOVE 'NO' TO ITAB-GREENPRD .
ENDIF .
ELSE.
CLEAR: ITAB-SECURITY .
CLEAR: MARA .
SELECT SINGLE * FROM MARA CLIENT SPECIFIED WHERE MANDT EQ SY-MANDT
AND MATNR EQ ITAB-IDNRK
AND MSTAE EQ SPACE .
IF SY-SUBRC = 0 .
MOVE 'YES' TO ITAB-SECURITY .
ELSE.
MOVE 'NO' TO ITAB-SECURITY .
ENDIF .
ENDIF .
IF P_INFO EQ 'X' .
CLEAR: EINA .
CLEAR: L_INFO, ITAB-INFOCHK.
IF ITAB-MTART NE 'HALB'.
SELECT * FROM EINA CLIENT SPECIFIED WHERE MANDT EQ SY-MANDT
AND MATNR EQ ITAB-IDNRK
AND LOEKZ EQ SPACE .
CHECK L_INFO IS INITIAL .
SELECT SINGLE * FROM EINE CLIENT SPECIFIED
WHERE MANDT EQ SY-MANDT
AND INFNR EQ EINA-INFNR
AND NETPR GT 0
AND PRDAT GE SY-DATUM .
IF SY-SUBRC = 0 .
L_INFO = 'Y'.
ITAB-INFOCHK = 'YES'.
ITAB-INFNR = EINE-INFNR .
ITAB-WERKS = EINE-WERKS .
ITAB-EKORG = EINE-EKORG .
ITAB-LIFNR1 = EINA-LIFNR .
ENDIF .
ENDSELECT .
IF L_INFO IS INITIAL .
MOVE 'NO' TO ITAB-INFOCHK .
ENDIF .
ENDIF .
ENDIF .
REFRESH: GET_BAPI1003, GET_VALUES_CHAR, GET_VALUES_CURR, GET_BAPIRET2.
CLEAR : GET_BAPI1003, GET_VALUES_CHAR, GET_VALUES_CURR, GET_BAPIRET2.
CLEAR : L_OBJECT .
L_OBJECT = ITAB-IDNRK .
CALL FUNCTION 'BAPI_OBJCL_GETCLASSES'
EXPORTING
OBJECTKEY_IMP = L_OBJECT
OBJECTTABLE_IMP = 'MARA'
CLASSTYPE_IMP = '001'
READ_VALUATIONS = 'X'
TABLES
ALLOCLIST = GET_VALUES_LIST
ALLOCVALUESCHAR = GET_VALUES_CHAR
ALLOCVALUESCURR = GET_VALUES_CURR
ALLOCVALUESNUM = GET_BAPI1003
RETURN = GET_BAPIRET2.
REFRESH: GET_VALUES. CLEAR: GET_VALUES .
LOOP AT GET_VALUES_CHAR .
MOVE-CORRESPONDING GET_VALUES_CHAR TO GET_VALUES.
GET_VALUES-INT = STRLEN( GET_VALUES-VALUE_CHAR ) .
APPEND GET_VALUES.
CLEAR GET_VALUES.
ENDLOOP .
SORT GET_VALUES BY CHARACT ASCENDING INT DESCENDING .
CLEAR: ITAB-MAKTX .
* LOOP AT GET_VALUES WHERE CHARACT = 'A001'.
* CONCATENATE ITAB-MAKTX GET_VALUES-VALUE_CHAR INTO ITAB-MAKTX.
* ENDLOOP .
* LOOP AT GET_VALUES WHERE CHARACT = 'A002'.
* CONCATENATE ITAB-MAKTX GET_VALUES-VALUE_CHAR INTO ITAB-MAKTX.
* ENDLOOP .
CLEAR: STR_A001,STR_A002.
LOOP AT GET_VALUES WHERE CHARACT = 'A001'.
CONCATENATE STR_A001 GET_VALUES-VALUE_CHAR INTO STR_A001.
ENDLOOP .
LOOP AT GET_VALUES WHERE CHARACT = 'A002'.
CONCATENATE STR_A002 GET_VALUES-VALUE_CHAR INTO STR_A002.
ENDLOOP .
CONCATENATE STR_A001 STR_A002 INTO ITAB-MAKTX SEPARATED BY SPACE .
CONCATENATE ITAB-POTX1 ITAB-POTX2 INTO ITAB-POTXT.
IF NOT P_OUTST IS INITIAL .
IF ITAB-INFOCHK = 'NO' OR ITAB-GREENPRD = 'NO' OR ITAB-SECURITY = 'NO'.
APPEND ITAB .
CLEAR ITAB .
ENDIF .
ELSE .
APPEND ITAB .
CLEAR ITAB .
ENDIF .
BMHDS-DATUB = I_BOM-DATUB .
BMHDS-DATUV = I_BOM-DATUV .
ENDLOOP .
ENDIF.
ENDFORM. " BOM_EXPLOSION
*&---------------------------------------------------------------------*
*& Form GET_HEADER_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_HEADER_DATA .
DATA: L_INDEX TYPE I .
DATA: L_SIZE(009) .
DATA: L_NTGEW(010).
DATA: L_BRGEW(010).
BMHDS-STLAN = P_STLAN .
BMHDS-MATNR = P_MATNR .
BMHDS-EMENG = P_EMENG .
BMHDS-WERKS = P_WERKS .
BMHDS-STLAL = P_STLAL .
BMHDS-T0001 = TEXT-T01 .
BMHDS-T0002 = TEXT-T02 .
BMHDS-T0003 = TEXT-T03 .
BMHDS-T0004 = TEXT-T04 .
BMHDS-T0005 = TEXT-T05 .
BMHDS-T0006 = TEXT-T06 .
BMHDS-T0007 = TEXT-T07 .
BMHDS-T0008 = TEXT-T08 .
BMHDS-T0009 = TEXT-T09 .
BMHDS-T0010 = TEXT-T10 .
BMHDS-T0011 = TEXT-T11 .
BMHDS-T0012 = TEXT-T12 .
BMHDS-T0013 = TEXT-T13 .
BMHDS-T0014 = TEXT-T14 .
BMHDS-T0015 = TEXT-T15 .
BMHDS-T0016 = TEXT-T16 .
BMHDS-T0017 = TEXT-T17 .
BMHDS-T0018 = TEXT-T18 .
BMHDS-T0019 = TEXT-T19 .
BMHDS-T0020 = TEXT-T20 .
BMHDS-T0021 = TEXT-T21 .
BMHDS-T0022 = TEXT-T22 .
BMHDS-T0023 = TEXT-T23 .
BMHDS-T0024 = TEXT-T24 .
BMHDS-T0025 = TEXT-T25 .
BMHDS-T0026 = TEXT-T26 .
BMHDS-T0027 = TEXT-T27 .
BMHDS-T0028 = TEXT-T28 .
BMHDS-T0029 = TEXT-T29 .
BMHDS-T0030 = TEXT-T30 .
BMHDS-T0031 = TEXT-T31 .
BMHDS-T0032 = TEXT-T32 .
BMHDS-T0033 = TEXT-T33 .
BMHDS-T0034 = TEXT-T34 .
BMHDS-T0035 = TEXT-T35 .
BMHDS-T0036 = TEXT-T36 .
BMHDS-T0037 = TEXT-T37 .
BMHDS-T0038 = TEXT-T38 .
BMHDS-T0039 = TEXT-T39 .
BMHDS-T0040 = TEXT-T40 .
BMHDS-T0042 = TEXT-T42 .
BMHDS-IOHDR = TEXT-T43 .
BMHDS-TXTEXP = TEXT-T44.
BMHDS-T0045 = TEXT-T45.
BMHDS-T0046 = TEXT-T46.
CLEAR: MARA, L_NTGEW, L_BRGEW .
SELECT SINGLE * FROM MARA CLIENT SPECIFIED WHERE MANDT = SY-MANDT
AND MATNR = P_MATNR .
IF SY-SUBRC = 0 .
L_NTGEW = MARA-NTGEW .
L_BRGEW = MARA-BRGEW .
SHIFT L_NTGEW LEFT DELETING LEADING SPACE.
SHIFT L_BRGEW LEFT DELETING LEADING SPACE.
BMHDS-MEINS = MARA-MEINS .
BMHDS-NTGEW = MARA-NTGEW .
CONCATENATE L_NTGEW MARA-GEWEI SPACE '/' SPACE L_BRGEW MARA-GEWEI
INTO BMHDS-T0047 .
BMHDS-MATKL = MARA-MATKL .
ENDIF .
CLEAR: MARM, L_SIZE .
SELECT SINGLE * FROM MARM CLIENT SPECIFIED WHERE MANDT EQ SY-MANDT AND MATNR EQ P_MATNR AND MEINH = 'KAR' .
IF SY-SUBRC EQ 0.
L_SIZE = MARM-UMREZ.
SHIFT L_SIZE LEFT DELETING LEADING SPACE.
CONCATENATE TEXT-T00 L_SIZE BMHDS-MEINS INTO BMHDS-TXTPG SEPARATED BY SPACE.
ENDIF .
CLEAR: MARM, L_SIZE .
SELECT SINGLE * FROM MARM CLIENT SPECIFIED WHERE MANDT EQ SY-MANDT AND MATNR EQ P_MATNR AND MEINH = 'PAL' .
IF SY-SUBRC EQ 0.
L_SIZE = MARM-UMREZ.
SHIFT L_SIZE LEFT DELETING LEADING SPACE.
IF BMHDS-TXTPG IS INITIAL .
CONCATENATE TEXT-A04 SPACE L_SIZE SPACE BMHDS-MEINS INTO BMHDS-TXTPG.
ELSE.
CONCATENATE BMHDS-TXTPG ' / ' TEXT-A04 SPACE L_SIZE SPACE BMHDS-MEINS INTO BMHDS-TXTPG.
ENDIF .
ENDIF .
* CLEAR: MAKT .
* SELECT SINGLE MAKTX INTO BMHDS-MAKTX FROM MAKT CLIENT SPECIFIED
* WHERE MANDT = SY-MANDT
* AND MATNR = P_MATNR .
CLEAR: KNMT .
SELECT SINGLE KUNNR KDMAT INTO (BMHDS-KUNNR, BMHDS-KDMAT ) FROM KNMT
WHERE MATNR EQ P_MATNR .
* AND KDMAT NE SPACE .
IF NOT BMHDS-KUNNR IS INITIAL .
CLEAR: KNA1 .
SELECT SINGLE * FROM KNA1 WHERE KUNNR = BMHDS-KUNNR .
IF SY-SUBRC = 0.
CLEAR: ADRC.
SELECT SINGLE * FROM ADRC CLIENT SPECIFIED WHERE CLIENT EQ SY-MANDT AND ADDRNUMBER EQ KNA1-ADRNR.
CLEAR: BMHDS-T0041 .
CONCATENATE KNA1-NAME1 '[' ADRC-SORT1 ADRC-SORT2 ']' INTO BMHDS-T0041 SEPARATED BY SPACE .
ENDIF .
ENDIF .
CLEAR: BMHDS-SERIE, BMHDS-PDUCT.
REFRESH: GET_BAPI1003, GET_VALUES_CHAR, GET_VALUES_CURR, GET_BAPIRET2.
CLEAR : GET_BAPI1003, GET_VALUES_CHAR, GET_VALUES_CURR, GET_BAPIRET2.
CLEAR : L_OBJECT .
L_OBJECT = P_MATNR .
CALL FUNCTION 'BAPI_OBJCL_GETCLASSES'
EXPORTING
OBJECTKEY_IMP = L_OBJECT
OBJECTTABLE_IMP = 'MARA'
CLASSTYPE_IMP = '001'
READ_VALUATIONS = 'X'
TABLES
ALLOCLIST = GET_VALUES_LIST
ALLOCVALUESCHAR = GET_VALUES_CHAR
ALLOCVALUESCURR = GET_VALUES_CURR
ALLOCVALUESNUM = GET_BAPI1003
RETURN = GET_BAPIRET2.
REFRESH: GET_VALUES. CLEAR: GET_VALUES .
LOOP AT GET_VALUES_CHAR .
MOVE-CORRESPONDING GET_VALUES_CHAR TO GET_VALUES.
GET_VALUES-INT = STRLEN( GET_VALUES-VALUE_CHAR ) .
APPEND GET_VALUES.
CLEAR GET_VALUES.
ENDLOOP .
SORT GET_VALUES BY CHARACT ASCENDING INT DESCENDING .
CLEAR: BMHDS-PDUCT .
LOOP AT GET_VALUES WHERE CHARACT = 'A004'.
CONCATENATE BMHDS-PDUCT GET_VALUES-VALUE_CHAR INTO BMHDS-PDUCT .
ENDLOOP .
CLEAR: BMHDS-MAKTX .
* LOOP AT GET_VALUES WHERE CHARACT = 'A001'.
* CONCATENATE BMHDS-MAKTX GET_VALUES-VALUE_CHAR INTO BMHDS-MAKTX.
* ENDLOOP .
* LOOP AT GET_VALUES WHERE CHARACT = 'A002'.
* CONCATENATE BMHDS-MAKTX GET_VALUES-VALUE_CHAR INTO BMHDS-MAKTX.
* ENDLOOP .
CLEAR: STR_A001,STR_A002.
LOOP AT GET_VALUES WHERE CHARACT = 'A001'.
CONCATENATE STR_A001 GET_VALUES-VALUE_CHAR INTO STR_A001.
ENDLOOP .
LOOP AT GET_VALUES WHERE CHARACT = 'A002'.
CONCATENATE STR_A002 GET_VALUES-VALUE_CHAR INTO STR_A002.
ENDLOOP .
CONCATENATE STR_A001 STR_A002 INTO BMHDS-MAKTX SEPARATED BY SPACE .
CLEAR: BMHDS-SERIE.
LOOP AT GET_VALUES WHERE CHARACT = 'A005'.
CONCATENATE BMHDS-SERIE GET_VALUES-VALUE_CHAR INTO BMHDS-SERIE .
ENDLOOP .
CLEAR: MAST .
SELECT SINGLE * FROM MAST CLIENT SPECIFIED WHERE MANDT = SY-MANDT
AND MATNR = P_MATNR
AND WERKS = P_WERKS
AND STLAN = P_STLAN
AND STLAL = C_STLAL.
IF SY-SUBRC = 0 .
REFRESH: STR_LINES .
CLEAR : STR_LINES, STR_TDID, STR_TDNAME, STR_OBJECT, BMHDS-IOTXT .
CONCATENATE SY-MANDT 'M' MAST-STLNR INTO STR_TDNAME .
SELECT SINGLE * FROM STXH WHERE TDNAME = STR_TDNAME.
IF SY-SUBRC = 0 .
STR_TDNAME = STXH-TDNAME .
STR_TDID = STXH-TDID .
CALL FUNCTION 'READ_TEXT'
EXPORTING
ID = STR_TDID
LANGUAGE = SY-LANGU
NAME = STR_TDNAME
OBJECT = 'BOM'
TABLES
LINES = STR_LINES.
IF SY-SUBRC <> 0.
* message id sy-msgid type sy-msgty number sy-msgno
* with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF .
IF NOT STR_LINES[] IS INITIAL .
CLEAR: BMHDS-TEXT0 .
LOOP AT STR_LINES .
CONCATENATE BMHDS-TEXT0 STR_LINES-TDLINE
INTO BMHDS-TEXT0 .
ENDLOOP .
ENDIF .
ELSE.
CLEAR: BMHDS-TEXT0 .
CLEAR: STZU .
SELECT SINGLE ZTEXT INTO BMHDS-TEXT0 FROM STZU CLIENT SPECIFIED
WHERE MANDT EQ SY-MANDT
AND STLTY EQ 'M'
AND STLNR EQ MAST-STLNR.
ENDIF .
ENDIF .
CLEAR: STKO .
SELECT SINGLE STKTX INTO BMHDS-IOTXT FROM STKO CLIENT SPECIFIED
WHERE MANDT EQ SY-MANDT
AND STLNR EQ MAST-STLNR
AND STLAL EQ C_STLAL.
BMHDS-EXPDAT = P_DATUM .
SHIFT BMHDS-STLAL LEFT DELETING LEADING '0'.
CONCATENATE BMHDS-STLAN BMHDS-STLAL INTO BMHDS-TXTUSG SEPARATED BY '/'.
* CLEAR: STR_TDNAME .
* MOVE P_MATNR TO STR_TDNAME .
* SELECT SINGLE * FROM STXH WHERE TDNAME = STR_TDNAME.
* IF SY-SUBRC = 0 .
* REFRESH: STR_LINES .
* CALL FUNCTION 'READ_TEXT'
* EXPORTING
* ID = 'GRUN'
* LANGUAGE = '1'
* NAME = STR_TDNAME
* OBJECT = 'MATERIAL'
* TABLES
* LINES = STR_LINES.
* IF NOT STR_LINES[] IS INITIAL .
* LOOP AT STR_LINES .
* CONCATENATE BMHDS-IOTXT STR_LINES-TDLINE
* INTO BMHDS-IOTXT .
* ENDLOOP .
* ENDIF .
* ENDIF .
ENDFORM. " GET_HEADER_DATA
*&---------------------------------------------------------------------*
*& Form DOWNLOAD_RESULT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM DOWNLOAD_RESULT .
LOOP AT DL_TAB.
CLEAR: DL_TAB-MAKTX .
REFRESH: GET_BAPI1003, GET_VALUES_CHAR, GET_VALUES_CURR, GET_BAPIRET2.
CLEAR : GET_BAPI1003, GET_VALUES_CHAR, GET_VALUES_CURR, GET_BAPIRET2.
CLEAR : L_OBJECT .
L_OBJECT = DL_TAB-IDNRK .
CALL FUNCTION 'BAPI_OBJCL_GETCLASSES'
EXPORTING
OBJECTKEY_IMP = L_OBJECT
OBJECTTABLE_IMP = 'MARA'
CLASSTYPE_IMP = '001'
READ_VALUATIONS = 'X'
TABLES
ALLOCLIST = GET_VALUES_LIST
ALLOCVALUESCHAR = GET_VALUES_CHAR
ALLOCVALUESCURR = GET_VALUES_CURR
ALLOCVALUESNUM = GET_BAPI1003
RETURN = GET_BAPIRET2.
REFRESH: GET_VALUES. CLEAR: GET_VALUES .
LOOP AT GET_VALUES_CHAR .
MOVE-CORRESPONDING GET_VALUES_CHAR TO GET_VALUES.
GET_VALUES-INT = STRLEN( GET_VALUES-VALUE_CHAR ) .
APPEND GET_VALUES.
CLEAR GET_VALUES.
ENDLOOP .
SORT GET_VALUES BY CHARACT ASCENDING INT DESCENDING .
CLEAR: DL_TAB-MAKTX .
* LOOP AT GET_VALUES WHERE CHARACT = 'A001'.
* CONCATENATE DL_TAB-MAKTX GET_VALUES-VALUE_CHAR INTO DL_TAB-MAKTX.
* ENDLOOP .
* LOOP AT GET_VALUES WHERE CHARACT = 'A002'.
* CONCATENATE DL_TAB-MAKTX GET_VALUES-VALUE_CHAR INTO DL_TAB-MAKTX.
* ENDLOOP .
CLEAR: STR_A001,STR_A002.
LOOP AT GET_VALUES WHERE CHARACT = 'A001'.
CONCATENATE STR_A001 GET_VALUES-VALUE_CHAR INTO STR_A001.
ENDLOOP .
LOOP AT GET_VALUES WHERE CHARACT = 'A002'.
CONCATENATE STR_A002 GET_VALUES-VALUE_CHAR INTO STR_A002.
ENDLOOP .
CONCATENATE STR_A001 STR_A002 INTO DL_TAB-MAKTX SEPARATED BY SPACE .
MODIFY DL_TAB .
ENDLOOP .
DATA: STR_STRING TYPE STRING .
DATA: C_FILENAME(255) .
CLEAR: L_FILE.
CONCATENATE P_FILE 'BOM_' P_MATNR '_' SY-DATUM SY-UZEIT
INTO L_FILE.
CONCATENATE L_FILE '.TXT' INTO L_FILE.
CALL FUNCTION 'WS_DOWNLOAD'
EXPORTING
FILENAME = L_FILE
FILETYPE = 'DAT'
* CODEPAGE = '8450'
* IMPORTING
* FILELENGTH = P_ITAB_DOCIDTAB
TABLES
DATA_TAB = DL_TAB
FIELDNAMES = FIELDNAMES
EXCEPTIONS
OTHERS = 1.
IF SY-SUBRC = 0.
MESSAGE ID 'MG' TYPE 'S' NUMBER '899'
WITH 'Data file exported to file' STR_STRING
'successfully'.
ELSE.
MESSAGE ID 'MG' TYPE 'I' NUMBER '899'
WITH 'Fail to open file' STR_STRING .
ENDIF.
ENDFORM. " DOWNLOAD_RESULT
*&---------------------------------------------------------------------*
*& Form GET_FIELDNAMES
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_FIELDNAMES .
CLEAR: FIELDNAMES .
FIELDNAMES-NAME = TEXT-X01.
APPEND FIELDNAMES.
CLEAR: FIELDNAMES .
FIELDNAMES-NAME = TEXT-X08.
APPEND FIELDNAMES.
CLEAR: FIELDNAMES .
FIELDNAMES-NAME = TEXT-X05.
APPEND FIELDNAMES.
CLEAR: FIELDNAMES .
FIELDNAMES-NAME = TEXT-X02.
APPEND FIELDNAMES.
CLEAR: FIELDNAMES .
FIELDNAMES-NAME = TEXT-X03.
APPEND FIELDNAMES.
CLEAR: FIELDNAMES .
FIELDNAMES-NAME = TEXT-X11.
APPEND FIELDNAMES.
* CLEAR: FIELDNAMES .
* FIELDNAMES-NAME = TEXT-X04.
* APPEND FIELDNAMES.
* CLEAR: FIELDNAMES .
* FIELDNAMES-NAME = TEXT-X06.
* APPEND FIELDNAMES.
CLEAR: FIELDNAMES .
FIELDNAMES-NAME = TEXT-P01.
APPEND FIELDNAMES.
* CLEAR: FIELDNAMES .
* FIELDNAMES-NAME = TEXT-X07.
* APPEND FIELDNAMES.
CLEAR: FIELDNAMES .
FIELDNAMES-NAME = TEXT-P03.
APPEND FIELDNAMES.
CLEAR: FIELDNAMES .
FIELDNAMES-NAME = TEXT-P05.
APPEND FIELDNAMES.
CLEAR: FIELDNAMES .
FIELDNAMES-NAME = TEXT-X09.
APPEND FIELDNAMES.
CLEAR: FIELDNAMES .
FIELDNAMES-NAME = TEXT-X10.
APPEND FIELDNAMES.
CLEAR: FIELDNAMES .
FIELDNAMES-NAME = TEXT-P07.
APPEND FIELDNAMES.
CLEAR: FIELDNAMES .
FIELDNAMES-NAME = TEXT-P08.
APPEND FIELDNAMES.
CLEAR: FIELDNAMES .
FIELDNAMES-NAME = TEXT-P06.
APPEND FIELDNAMES.
CLEAR: FIELDNAMES .
FIELDNAMES-NAME = TEXT-P06.
APPEND FIELDNAMES.
CLEAR: FIELDNAMES .
FIELDNAMES-NAME = TEXT-P11.
APPEND FIELDNAMES.
CLEAR: FIELDNAMES .
FIELDNAMES-NAME = TEXT-P04.
APPEND FIELDNAMES.
CLEAR: FIELDNAMES .
FIELDNAMES-NAME = TEXT-T43.
APPEND FIELDNAMES.
CLEAR: FIELDNAMES .
FIELDNAMES-NAME = TEXT-T04.
APPEND FIELDNAMES.
CLEAR: FIELDNAMES .
FIELDNAMES-NAME = TEXT-T03.
APPEND FIELDNAMES.
CLEAR: FIELDNAMES .
FIELDNAMES-NAME = TEXT-T48.
APPEND FIELDNAMES.
CLEAR: FIELDNAMES .
FIELDNAMES-NAME = TEXT-T49.
APPEND FIELDNAMES.
CLEAR: FIELDNAMES .
FIELDNAMES-NAME = TEXT-T50.
APPEND FIELDNAMES.
ENDFORM. " GET_FIELDNAMES
*&---------------------------------------------------------------------*
*& Form eventtab_build
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_ST_EVENTS text
*----------------------------------------------------------------------*
FORM EVENTTAB_BUILD USING P_ST_EVENTS TYPE SLIS_T_EVENT.
DATA: LS_EVENT TYPE SLIS_ALV_EVENT.
* read event control table
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
I_LIST_TYPE = 0
IMPORTING
ET_EVENTS = P_ST_EVENTS.
* assign the control form to 'top of page' from slis
READ TABLE P_ST_EVENTS WITH KEY
NAME = SLIS_EV_TOP_OF_PAGE INTO LS_EVENT.
IF SY-SUBRC = 0.
MOVE ST_FORMNAME_TOP_OF_PAGE TO LS_EVENT-FORM.
APPEND LS_EVENT TO P_ST_EVENTS.
ENDIF.
* assign the control form to 'user command' from slis
READ TABLE P_ST_EVENTS WITH
KEY NAME = SLIS_EV_USER_COMMAND INTO LS_EVENT.
IF SY-SUBRC = 0.
MOVE S_USER_COMMAND TO LS_EVENT-FORM.
APPEND LS_EVENT TO P_ST_EVENTS.
ENDIF.
* assign the control form to 'PF_STATUS_SET' from slis
READ TABLE P_ST_EVENTS WITH
KEY NAME = SLIS_EV_PF_STATUS_SET INTO LS_EVENT.
IF SY-SUBRC = 0.
MOVE S_STATUS TO LS_EVENT-FORM.
APPEND LS_EVENT TO P_ST_EVENTS.
ENDIF.
ENDFORM. " eventtab_build
*&---------------------------------------------------------------------*
*& Form PRINT_BOM_DETAILS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM PRINT_BOM_DETAILS .
REFRESH: BMITS .
CLEAR : BMITS , FM_NAME .
LOOP AT ITAB .
MOVE-CORRESPONDING ITAB TO BMITS .
APPEND BMITS.
CLEAR BMITS.
ENDLOOP .
IF NOT BMITS[] IS INITIAL .
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
FORMNAME = 'ZPPBMR001F'
* FORMNAME = 'ZPPBMF001A'
DIRECT_CALL = 'X'
IMPORTING
FM_NAME = FM_NAME
EXCEPTIONS
NO_FORM = 1
NO_FUNCTION_MODULE = 2
OTHERS = 3.
* WA_SSFCOMPOP-NO_DIALOG = 'X'.
WA_SSFCTRLOP-PREVIEW = 'X'.
* WA_SSFCTRLOP-DEVICE = 'PRINTER'.
* WA_SSFCOMPOP-TDPRINTER = ''.
* WA_SSFCOMPOP-TDPAGESLCT = ''.
CALL FUNCTION FM_NAME
EXPORTING
CONTROL_PARAMETERS = WA_SSFCTRLOP
OUTPUT_OPTIONS = WA_SSFCOMPOP
TABLES
BMHDS = BMHDS
BMITS = BMITS
EXCEPTIONS
FORMATTING_ERROR = 1
INTERNAL_ERROR = 2
SEND_ERROR = 3
USER_CANCELED = 4
OTHERS = 5.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDIF .
ENDFORM. " PRINT_BOM_DETAILS
*&------------------------------------------------------------------
*& Form VARIANT_INIT
*&------------------------------------------------------------------
FORM VARIANT_INIT.
* code = '0001'.
* clear s_variant.
* s_variant-report = s_repid.
* s_variant-handle = code.
ENDFORM. " VARIANT_INIT
*&---------------------------------------------------------------------*
*& Form comment_build
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM COMMENT_BUILD.
DATA: STR_LINE01 TYPE STRING .
DATA: STR_LINE02 TYPE STRING .
DATA: STR_LINE03 TYPE STRING .
DATA: L_BASEQTY(009) .
CLEAR: MAKT .
SELECT SINGLE * FROM MAKT CLIENT SPECIFIED WHERE MANDT = SY-MANDT
AND MATNR EQ P_MATNR
AND SPRAS EQ '1'.
CONCATENATE BMHDS-MATNR MAKT-MAKTX INTO STR_LINE01 SEPARATED BY SPACE .
IF BMHDS-STLAN = '1'.
CONCATENATE BMHDS-STLAN TEXT-H01 INTO STR_LINE02 SEPARATED BY SPACE .
ENDIF .
IF BMHDS-STLAN = '2'.
CONCATENATE BMHDS-STLAN TEXT-H02 INTO STR_LINE02 SEPARATED BY SPACE .
ENDIF .
L_BASEQTY = BMHDS-EMENG .
CONCATENATE L_BASEQTY BMHDS-MEINS INTO STR_LINE03 SEPARATED BY SPACE .
* type: H header size, S normal and highlight size, A small size
* type, key, info.
PERFORM ALV_ASSIGN_PAGE_HEADER USING 'S' 'Material' STR_LINE01.
PERFORM ALV_ASSIGN_PAGE_HEADER USING 'S' 'Plant' BMHDS-WERKS.
PERFORM ALV_ASSIGN_PAGE_HEADER USING 'S' 'Usage' STR_LINE02.
PERFORM ALV_ASSIGN_PAGE_HEADER USING 'S' 'Alternative' P_STLAL.
PERFORM ALV_ASSIGN_PAGE_HEADER USING 'S' 'Application' P_CAPID.
PERFORM ALV_ASSIGN_PAGE_HEADER USING 'S' 'Base Quantity' STR_LINE03.
ENDFORM. " COMMENT_BUILD
*&---------------------------------------------------------------------*
*& Form layout_build
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM ALV_LAYOUT_BUILD.
* layout pre-define
ST_LAYOUT-COLWIDTH_OPTIMIZE = 'X'. "TEXT FIT IN TABLE PERFECTLY
ST_LAYOUT-BOX_FIELDNAME = 'SELK'. "checkbox NAME Itab-SELK
ST_LAYOUT-GET_SELINFOS = 'X'. "read selection screen
* st_layout-confirmation_prompt = 'X'. "confirm. prompt whenleaving
ST_LAYOUT-DETAIL_INITIAL_LINES = 'X'. "allow don't displayinitial
ST_LAYOUT-INFO_FIELDNAME = 'COL'. " field for color of row
ST_LAYOUT-ZEBRA = 'X'. "stripped pattern
ENDFORM. " LAYOUT_BUILD
*&---------------------------------------------------------------------*
*& Form alv_assign_page_header
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_TYPE text
* -->P_KEY text
* -->P_INFO text
*----------------------------------------------------------------------*
FORM ALV_ASSIGN_PAGE_HEADER USING P_TYPE P_KEY P_INFO.
DATA: LS_LINE TYPE SLIS_LISTHEADER.
CLEAR LS_LINE.
LS_LINE-TYP = P_TYPE.
LS_LINE-KEY = P_KEY.
LS_LINE-INFO = P_INFO.
APPEND LS_LINE TO ST_LIST_TOP_OF_PAGE.
ENDFORM. " alv_assign_page_header
*&------------------------------------------------------------------
*& Form FIELDCAT_INIT
*&------------------------------------------------------------------
FORM FIELDCAT_INIT.
DATA: LS_FIELDCAT TYPE SLIS_FIELDCAT_ALV.
* table col name
* display description from itab
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'POSNR'. " internal table fieldname
LS_FIELDCAT-REF_TABNAME = 'STPOX'.
LS_FIELDCAT-REF_FIELDNAME = 'POSNR'.
LS_FIELDCAT-DDICTXT = 'S'. "dictionary (S,M,L) fieldsize
LS_FIELDCAT-FIX_COLUMN = 'X'.
APPEND LS_FIELDCAT TO ST_FIELDCAT.
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'IDNRK'. " internal table fieldname
LS_FIELDCAT-REF_TABNAME = 'STPOX'.
LS_FIELDCAT-REF_FIELDNAME = 'IDNRK'.
LS_FIELDCAT-DDICTXT = 'S'. "dictionary (S,M,L) fieldsize
LS_FIELDCAT-FIX_COLUMN = 'X'.
APPEND LS_FIELDCAT TO ST_FIELDCAT.
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'STUFE'. " internal table fieldname
LS_FIELDCAT-REF_TABNAME = 'STPOX'.
LS_FIELDCAT-REF_FIELDNAME = 'POSNR'.
LS_FIELDCAT-DDICTXT = 'S'. "dictionary (S,M,L) fieldsize
LS_FIELDCAT-FIX_COLUMN = 'X'.
APPEND LS_FIELDCAT TO ST_FIELDCAT.
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'MTART'. " internal table fieldname
LS_FIELDCAT-REF_TABNAME = 'MARA'.
LS_FIELDCAT-REF_FIELDNAME = 'MTART'.
LS_FIELDCAT-DDICTXT = 'S'. "dictionary (S,M,L) fieldsize
LS_FIELDCAT-FIX_COLUMN = 'X'.
APPEND LS_FIELDCAT TO ST_FIELDCAT.
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'CHECK'.
LS_FIELDCAT-DATATYPE = 'CHAR'.
LS_FIELDCAT-REPTEXT_DDIC = TEXT-L04.
LS_FIELDCAT-DDICTXT = 'S'.
LS_FIELDCAT-DO_SUM = 'X'. " DISPLAY TOTAL
APPEND LS_FIELDCAT TO ST_FIELDCAT.
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'MAKTX'. " internal table fieldname
LS_FIELDCAT-REF_TABNAME = 'MAKT'.
LS_FIELDCAT-REF_FIELDNAME = 'MAKTX'.
LS_FIELDCAT-DDICTXT = 'S'. "dictionary (S,M,L) fieldsize
LS_FIELDCAT-FIX_COLUMN = 'X'.
APPEND LS_FIELDCAT TO ST_FIELDCAT.
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'MEINS'. " internal table fieldname
LS_FIELDCAT-REF_TABNAME = 'STPOX'.
LS_FIELDCAT-REF_FIELDNAME = 'MEINS'.
LS_FIELDCAT-DDICTXT = 'S'. "dictionary (S,M,L) fieldsize
LS_FIELDCAT-FIX_COLUMN = 'X'.
APPEND LS_FIELDCAT TO ST_FIELDCAT.
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'MNGLG'. " internal table fieldname
LS_FIELDCAT-REF_TABNAME = 'STPOX'.
LS_FIELDCAT-REF_FIELDNAME = 'MNGLG'.
LS_FIELDCAT-DDICTXT = 'S'. "dictionary (S,M,L) fieldsize
LS_FIELDCAT-FIX_COLUMN = 'X'.
APPEND LS_FIELDCAT TO ST_FIELDCAT.
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'FMENG'. " internal table fieldname
LS_FIELDCAT-REF_TABNAME = 'STPOX'.
LS_FIELDCAT-REF_FIELDNAME = 'FMENG'.
LS_FIELDCAT-DDICTXT = 'S'. "dictionary (S,M,L) fieldsize
LS_FIELDCAT-FIX_COLUMN = 'X'.
APPEND LS_FIELDCAT TO ST_FIELDCAT.
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'AUSCH'. " internal table fieldname
LS_FIELDCAT-DATATYPE = 'CHAR'.
LS_FIELDCAT-REPTEXT_DDIC = TEXT-L00.
LS_FIELDCAT-DDICTXT = 'S'.
LS_FIELDCAT-DO_SUM = 'X'. " DISPLAY TOTAL
APPEND LS_FIELDCAT TO ST_FIELDCAT.
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'ALPGR'. " internal table fieldname
LS_FIELDCAT-REF_TABNAME = 'STPOX'.
LS_FIELDCAT-REF_FIELDNAME = 'ALPGR'.
LS_FIELDCAT-DDICTXT = 'S'. "dictionary (S,M,L) fieldsize
LS_FIELDCAT-FIX_COLUMN = 'X'.
APPEND LS_FIELDCAT TO ST_FIELDCAT.
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'ALPRF'. " internal table fieldname
LS_FIELDCAT-REF_TABNAME = 'STPOX'.
LS_FIELDCAT-REF_FIELDNAME = 'ALPRF'.
LS_FIELDCAT-DDICTXT = 'S'. "dictionary (S,M,L) fieldsize
LS_FIELDCAT-FIX_COLUMN = 'X'.
APPEND LS_FIELDCAT TO ST_FIELDCAT.
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'SECURITY'.
LS_FIELDCAT-DATATYPE = 'CHAR'.
LS_FIELDCAT-REPTEXT_DDIC = TEXT-L01.
LS_FIELDCAT-DDICTXT = 'S'.
LS_FIELDCAT-DO_SUM = 'X'. " DISPLAY TOTAL
APPEND LS_FIELDCAT TO ST_FIELDCAT.
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'GREENPRD'.
LS_FIELDCAT-DATATYPE = 'CHAR'.
LS_FIELDCAT-REPTEXT_DDIC = TEXT-L02.
LS_FIELDCAT-DDICTXT = 'S'.
LS_FIELDCAT-DO_SUM = 'X'. " DISPLAY TOTAL
APPEND LS_FIELDCAT TO ST_FIELDCAT.
IF NOT P_INFO IS INITIAL .
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'INFOCHK'.
LS_FIELDCAT-DATATYPE = 'CHAR'.
LS_FIELDCAT-REPTEXT_DDIC = TEXT-L03.
LS_FIELDCAT-DDICTXT = 'S'.
LS_FIELDCAT-DO_SUM = 'X'. " DISPLAY TOTAL
APPEND LS_FIELDCAT TO ST_FIELDCAT.
ENDIF .
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'POTX1'. " internal table fieldname
LS_FIELDCAT-REF_TABNAME = 'STPOX'.
LS_FIELDCAT-REF_FIELDNAME = 'POTX1'.
LS_FIELDCAT-DDICTXT = 'S'. "dictionary (S,M,L) fieldsize
LS_FIELDCAT-FIX_COLUMN = 'X'.
APPEND LS_FIELDCAT TO ST_FIELDCAT.
* CLEAR LS_FIELDCAT.
* LS_FIELDCAT-FIELDNAME = 'STLNR'. " internal table fieldname
* LS_FIELDCAT-REF_TABNAME = 'STPOX'.
* LS_FIELDCAT-REF_FIELDNAME = 'STLNR'.
* LS_FIELDCAT-DDICTXT = 'S'. "dictionary (S,M,L) fieldsize
* LS_FIELDCAT-FIX_COLUMN = 'X'.
* APPEND LS_FIELDCAT TO ST_FIELDCAT.
ENDFORM. " FIELDCAT_INIT
*&---------------------------------------------------------------------*
*& Form reuse_alv_list_display
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM REUSE_ALV_LIST_DISPLAY.
LOOP AT ITAB WHERE MTART EQ 'HALB'.
CLEAR: MAST.
CLEAR: ITAB-CHECK.
SELECT SINGLE * FROM MAST CLIENT SPECIFIED WHERE MANDT EQ SY-MANDT
AND MATNR EQ ITAB-IDNRK
AND WERKS EQ P_WERKS
AND STLAN EQ '1'.
IF SY-SUBRC EQ 0.
MOVE 'YES' TO ITAB-CHECK.
ELSE.
SELECT SINGLE * FROM MAST CLIENT SPECIFIED WHERE MANDT EQ SY-MANDT
AND MATNR EQ ITAB-IDNRK
AND WERKS EQ P_WERKS
AND STLAN EQ '2'.
IF SY-SUBRC EQ 0.
MOVE 'YES' TO ITAB-CHECK.
ELSE.
MOVE 'NO' TO ITAB-CHECK.
ENDIF.
ENDIF.
MODIFY ITAB.
ENDLOOP .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_BACKGROUND_ID = 'ALV_BACKGROUND' "wall paper
I_CALLBACK_PROGRAM = S_REPID "must not use sy-repid
I_CALLBACK_PF_STATUS_SET = S_STATUS "self-define userstatus
I_CALLBACK_USER_COMMAND = S_USER_COMMAND "user command sub
IS_LAYOUT = ST_LAYOUT "layout setting
IT_FIELDCAT = ST_FIELDCAT "field setting
IT_EXCLUDING = TAB "not work
I_DEFAULT = 'X'
I_SAVE = 'A' " allow to save
IS_VARIANT = S_VARIANT
IT_EVENTS = ST_EVENTS
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
TABLES
T_OUTTAB = ITAB[].
ENDFORM. " REUSE_ALV_LIST_DISPLAY
*-------------------------------------------------------------------
* FORM PF_STATUS_SET
*-------------------------------------------------------------------
FORM STANDARD_ST01 USING EXTAB TYPE SLIS_T_EXTAB.
************ contain all fcode from ALV ******************
DELETE EXTAB WHERE FCODE = '&RNT_PREV'.
DELETE EXTAB WHERE FCODE = '&LFO'.
DELETE EXTAB WHERE FCODE = '&NFO'.
DELETE EXTAB WHERE FCODE = '&RNT'.
SET PF-STATUS 'ST01'.
* set titlebar 'ALVST'.
ENDFORM. "standard_st01
*-------------------------------------------------------------------
* FORM TOP_OF_PAGE-ALV.
*-------------------------------------------------------------------
FORM TOP_OF_PAGE-ALV.
*
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
IT_LIST_COMMENTARY = ST_LIST_TOP_OF_PAGE
I_LOGO = 'TPLOGO'.
* I_END_OF_LIST_GRID =
ENDFORM. "top_of_page-alv
*-------------------------------------------------------------------
* FORM USER_COMMAND-ALV
*-------------------------------------------------------------------
FORM USER_COMMAND-ALV USING R_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD.
DATA: FELD(10) TYPE C.
* table rs_selfield store the information of cursor and table index.
RS_SELFIELD-REFRESH = 'X'.
CASE R_UCOMM.
WHEN '&IC1'.
READ TABLE ITAB INDEX RS_SELFIELD-TABINDEX.
IF SY-SUBRC = 0.
CASE RS_SELFIELD-FIELDNAME.
WHEN 'IDNRK' OR 'ALPRF' OR 'FMENG' OR 'AUSCH'
OR 'ALPGR' OR 'STUFE'.
IF ITAB-IDNRK IS INITIAL.
CLEAR R_UCOMM.
EXIT.
ENDIF.
SELECT SINGLE * FROM MAST WHERE MATNR = ITAB-IDNRK
AND WERKS = P_WERKS
AND STLAN = P_STLAN.
IF SY-SUBRC = 0 .
SET PARAMETER ID 'MAT' FIELD ITAB-IDNRK.
SET PARAMETER ID 'WRK' FIELD P_WERKS.
SET PARAMETER ID 'CSV' FIELD P_STLAN.
CALL TRANSACTION 'CS03' AND SKIP FIRST SCREEN.
ELSE.
MESSAGE TEXT-S01 TYPE 'S'.
ENDIF .
WHEN 'SECURITY'.
SET PARAMETER ID 'MAT' FIELD ITAB-IDNRK.
SET PARAMETER ID 'WRK' FIELD P_WERKS.
CALL TRANSACTION 'ME03' AND SKIP FIRST SCREEN.
WHEN 'GREENPRD'.
SET PARAMETER ID 'MAT' FIELD ITAB-IDNRK.
SET PARAMETER ID 'WRK' FIELD P_WERKS.
SET PARAMETER ID 'LIF' FIELD ITAB-LIFNR.
CALL TRANSACTION 'QI03' AND SKIP FIRST SCREEN.
WHEN 'INFOCHK'.
IF ITAB-MTART NE 'HALB'.
SET PARAMETER ID 'MAT' FIELD ITAB-IDNRK.
SET PARAMETER ID 'LIF' FIELD ITAB-LIFNR1.
SET PARAMETER ID 'EKO' FIELD ITAB-EKORG.
SET PARAMETER ID 'WRK' FIELD ITAB-WERKS.
SET PARAMETER ID 'INF' FIELD ITAB-INFNR.
CALL TRANSACTION 'ME13' AND SKIP FIRST SCREEN.
ENDIF .
ENDCASE .
ENDIF .
WHEN 'BOMPRT'.
PERFORM PRINT_BOM_DETAILS.
WHEN 'BMDL'.
PERFORM GET_FIELDNAMES .
PERFORM SINGLE_LEVEL_BOM .
PERFORM DOWNLOAD_RESULT .
WHEN 'BMPRT1'.
PERFORM MFG_PRINT_BOM.
ENDCASE .
CLEAR R_UCOMM.
ENDFORM. "user_command-alv
*&---------------------------------------------------------------------*
*& Form SINGLE_LEVEL_BOM
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM SINGLE_LEVEL_BOM .
DATA: L_MATNR_NEW LIKE MARA-MATNR.
DATA: L_MATNR_OLD LIKE MARA-MATNR.
DATA: L_NTGEW LIKE MARA-NTGEW.
DATA: L_BRGEW LIKE MARA-NTGEW.
DATA: L_GEWEI LIKE MARA-GEWEI.
DATA: L_UMREZ_CAR LIKE MARM-UMREN.
DATA: L_UMREZ_PAL LIKE MARM-UMREN.
DATA: L_STKTX LIKE STKO-STKTX.
REFRESH: DL_TAB. CLEAR: DL_TAB .
LOOP AT ITAB .
IF P_SINGLE IS INITIAL .
IF NOT ITAB-MTART = 'HALB'.
ELSE.
MOVE ITAB-IDNRK TO I_HALB-IDNRK .
MOVE P_WERKS TO I_HALB-WERKS .
MOVE P_STLAN TO I_HALB-STLAN .
COLLECT I_HALB .
CLEAR I_HALB .
ENDIF .
ENDIF .
IF ITAB-STUFE = 1 .
CLEAR: DL_TAB .
MOVE ITAB-AUSCH TO DL_TAB-AUSCH.
MOVE P_WERKS TO DL_TAB-WERKS .
MOVE ITAB-FMENG TO DL_TAB-FMENG .
MOVE ITAB-ALPGR TO DL_TAB-ALPGR .
MOVE ITAB-ALPRF TO DL_TAB-ALPRF .
MOVE ITAB-POTXT TO DL_TAB-POTXT .
MOVE ITAB-POTX1 TO DL_TAB-POTX1 .
MOVE ITAB-POTX2 TO DL_TAB-POTX2 .
MOVE ITAB-MENGE TO DL_TAB-MENGE .
MOVE ITAB-IDNRK TO DL_TAB-IDNRK .
MOVE ITAB-LGORT TO DL_TAB-LGORT .
MOVE ITAB-MEINS TO DL_TAB-MEINS .
MOVE BMHDS-TEXT0 TO DL_TAB-HTEXT .
MOVE P_EMENG TO DL_TAB-EMENG .
MOVE P_MATNR TO DL_TAB-MATNR .
MOVE P_WERKS TO DL_TAB-WERKS .
MOVE P_STLAN TO DL_TAB-STLAN .
APPEND DL_TAB .
CLEAR DL_TAB .
ENDIF .
ENDLOOP .
IF P_SINGLE IS INITIAL .
LOOP AT I_HALB .
PERFORM EXPLOSION_HALB USING I_HALB-IDNRK I_HALB-WERKS
I_HALB-STLAN I_HALB-MAKTX.
ENDLOOP .
ENDIF .
SORT DL_TAB BY MATNR WERKS .
CLEAR: L_MATNR_NEW, L_MATNR_OLD .
LOOP AT DL_TAB .
MOVE DL_TAB-MATNR TO L_MATNR_NEW .
IF L_MATNR_NEW NE L_MATNR_OLD.
CLEAR: MARA, MARM, L_UMREZ_CAR, L_UMREZ_PAL, L_GEWEI, L_NTGEW, L_BRGEW, L_STKTX .
SELECT SINGLE * FROM MARA CLIENT SPECIFIED WHERE MANDT EQ SY-MANDT
AND MATNR EQ DL_TAB-MATNR.
MOVE MARA-NTGEW TO L_NTGEW.
MOVE MARA-BRGEW TO L_BRGEW.
MOVE MARA-GEWEI TO L_GEWEI.
CLEAR: MARM.
SELECT SINGLE UMREZ INTO L_UMREZ_CAR FROM MARM CLIENT SPECIFIED
WHERE MANDT EQ SY-MANDT
AND MATNR EQ L_MATNR_NEW
AND MEINH EQ 'KAR'.
CLEAR: MARM.
SELECT SINGLE UMREZ INTO L_UMREZ_PAL FROM MARM CLIENT SPECIFIED
WHERE MANDT EQ SY-MANDT
AND MATNR EQ L_MATNR_NEW
AND MEINH EQ 'PAL'.
CLEAR: MAST .
SELECT SINGLE * FROM MAST CLIENT SPECIFIED WHERE MANDT = SY-MANDT
AND MATNR = L_MATNR_NEW
AND WERKS = P_WERKS
AND STLAN = P_STLAN
AND STLAL = C_STLAL.
CLEAR: STKO .
SELECT SINGLE STKTX INTO L_STKTX FROM STKO CLIENT SPECIFIED
WHERE MANDT EQ SY-MANDT
AND STLNR EQ MAST-STLNR
AND STLAL EQ C_STLAL.
DL_TAB-GEWEI = L_GEWEI .
DL_TAB-NTGEW = L_NTGEW .
DL_TAB-BRGEW = L_BRGEW .
DL_TAB-BOX01 = L_UMREZ_CAR .
DL_TAB-BOX02 = L_UMREZ_PAL .
DL_TAB-STKTX = L_STKTX .
L_MATNR_OLD = L_MATNR_NEW .
ELSE.
DL_TAB-GEWEI = L_GEWEI .
DL_TAB-NTGEW = L_NTGEW .
DL_TAB-BRGEW = L_BRGEW .
DL_TAB-BOX01 = L_UMREZ_CAR .
DL_TAB-BOX02 = L_UMREZ_PAL .
DL_TAB-STKTX = L_STKTX .
ENDIF .
MODIFY DL_TAB .
ENDLOOP .
ENDFORM. " SINGLE_LEVEL_BOM
*&---------------------------------------------------------------------*
*& Form EXPLOSION_HALB
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_I_HALB_MATNR text
* -->P_I_HALB_WERKS text
* -->P_I_HALB_STLAN text
*----------------------------------------------------------------------*
FORM EXPLOSION_HALB USING MATNR WERKS STLAN MAKTX.
DATA: L_INDEX TYPE P .
REFRESH: I_BOM, I_MATCAT .
CLEAR : I_BOM, I_MATCAT .
CALL FUNCTION 'CS_BOM_EXPL_MAT_V2'
EXPORTING
CAPID = 'PP01'
DATUV = P_DATUM " SY-DATUM
EHNDL = '1'
EMENG = P_EMENG " Base Qty
MEHRS = 'X'
MMORY = '1'
MTNRV = MATNR " Parent Material
WERKS = WERKS " Plant
* stpst = 1 " Level = 1
STLAN = STLAN
TABLES
STB = I_BOM
MATCAT = I_MATCAT
EXCEPTIONS
ALT_NOT_FOUND = 1
CALL_INVALID = 2
MATERIAL_NOT_FOUND = 3
MISSING_AUTHORIZATION = 4
NO_BOM_FOUND = 5
NO_PLANT_DATA = 6
NO_SUITABLE_BOM_FOUND = 7
CONVERSION_ERROR = 8
OTHERS = 9.
LOOP AT I_BOM WHERE STUFE = 1.
MOVE I_BOM-AUSCH TO DL_TAB-AUSCH.
MOVE I_BOM-WERKS TO DL_TAB-WERKS .
MOVE I_BOM-FMENG TO DL_TAB-FMENG .
MOVE I_BOM-ALPGR TO DL_TAB-ALPGR .
MOVE I_BOM-ALPRF TO DL_TAB-ALPRF .
CONCATENATE I_BOM-POTX1 I_BOM-POTX2 INTO DL_TAB-POTXT.
MOVE I_BOM-POTX1 TO DL_TAB-POTX1 .
MOVE I_BOM-POTX2 TO DL_TAB-POTX2 .
MOVE I_BOM-MENGE TO DL_TAB-MENGE .
MOVE I_BOM-IDNRK TO DL_TAB-IDNRK .
MOVE I_BOM-LGORT TO DL_TAB-LGORT .
* MOVE I_BOM-POSNR TO DL_TAB-POSNR .
MOVE I_BOM-MEINS TO DL_TAB-MEINS .
CLEAR: MAST .
SELECT SINGLE * FROM MAST CLIENT SPECIFIED WHERE MANDT = SY-MANDT
AND MATNR = MATNR
AND WERKS = WERKS
AND STLAN = STLAN.
IF SY-SUBRC = 0 .
REFRESH: STR_LINES .
CLEAR : STR_LINES, STR_TDID, STR_TDNAME, STR_OBJECT .
CONCATENATE SY-MANDT 'M' MAST-STLNR INTO STR_TDNAME .
SELECT SINGLE * FROM STXH WHERE TDNAME = STR_TDNAME.
IF SY-SUBRC = 0 .
STR_TDNAME = STXH-TDNAME .
STR_TDID = STXH-TDID .
CALL FUNCTION 'READ_TEXT'
EXPORTING
ID = STR_TDID
LANGUAGE = SY-LANGU
NAME = STR_TDNAME
OBJECT = 'BOM'
TABLES
LINES = STR_LINES.
IF SY-SUBRC <> 0.
* message id sy-msgid type sy-msgty number sy-msgno
* with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF .
ENDIF .
ENDIF .
CLEAR: DL_TAB-HTEXT .
IF NOT STR_LINES[] IS INITIAL .
CLEAR: L_INDEX, BMHDS-TEXT1, BMHDS-TEXT2, BMHDS-TEXT3,
BMHDS-TEXT4 ,BMHDS-TEXT5, BMHDS-TEXT6 .
LOOP AT STR_LINES .
L_INDEX = L_INDEX + 1 .
IF L_INDEX = 1 .
BMHDS-TEXT1 = STR_LINES-TDLINE.
ENDIF .
IF L_INDEX = 2 .
BMHDS-TEXT2 = STR_LINES-TDLINE.
ENDIF .
IF L_INDEX = 3 .
BMHDS-TEXT3 = STR_LINES-TDLINE.
ENDIF .
IF L_INDEX = 4 .
BMHDS-TEXT4 = STR_LINES-TDLINE.
ENDIF .
IF L_INDEX = 5 .
BMHDS-TEXT5 = STR_LINES-TDLINE.
ENDIF .
IF L_INDEX = 6 .
BMHDS-TEXT6 = STR_LINES-TDLINE.
EXIT.
ENDIF .
ENDLOOP .
CLEAR: DL_TAB-HTEXT .
CONCATENATE BMHDS-TEXT1 BMHDS-TEXT2 BMHDS-TEXT3
BMHDS-TEXT4 BMHDS-TEXT5 BMHDS-TEXT6
INTO DL_TAB-HTEXT .
ENDIF .
MOVE MATNR TO DL_TAB-MATNR .
MOVE WERKS TO DL_TAB-WERKS .
MOVE STLAN TO DL_TAB-STLAN .
MOVE P_EMENG TO DL_TAB-EMENG .
APPEND DL_TAB .
CLEAR DL_TAB .
ENDLOOP .
ENDFORM. " EXPLOSION_HALB
*&---------------------------------------------------------------------*
*& Form MFG_PRINT_BOM
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM MFG_PRINT_BOM .
REFRESH: BMITS .
CLEAR : BMITS , FM_NAME .
LOOP AT ITAB .
MOVE-CORRESPONDING ITAB TO BMITS .
APPEND BMITS.
CLEAR BMITS.
ENDLOOP .
IF NOT BMITS[] IS INITIAL .
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
FORMNAME = 'ZPPBMR001FA'
DIRECT_CALL = 'X'
IMPORTING
FM_NAME = FM_NAME
EXCEPTIONS
NO_FORM = 1
NO_FUNCTION_MODULE = 2
OTHERS = 3.
* WA_SSFCOMPOP-NO_DIALOG = 'X'.
WA_SSFCTRLOP-PREVIEW = 'X'.
* WA_SSFCTRLOP-DEVICE = 'PRINTER'.
* WA_SSFCOMPOP-TDPRINTER = ''.
* WA_SSFCOMPOP-TDPAGESLCT = ''.
CALL FUNCTION FM_NAME
EXPORTING
CONTROL_PARAMETERS = WA_SSFCTRLOP
OUTPUT_OPTIONS = WA_SSFCOMPOP
TABLES
BMHDS = BMHDS
BMITS = BMITS
EXCEPTIONS
FORMATTING_ERROR = 1
INTERNAL_ERROR = 2
SEND_ERROR = 3
USER_CANCELED = 4
OTHERS = 5.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDIF .
ENDFORM. " MFG_PRINT_BOM