Material Wise Display Dynamic Plant
In My previews post this Requirement is Little different Here i want to display Dynamic Plant according to Material.
*&---------------------------------------------------------------------*
*& Report ZDYNAMIC_ALV_PLANT
*&
*&---------------------------------------------------------------------*
*& Project : Display Material wise Dynamic Plant
*& Authore : Rohit Subhash
*&---------------------------------------------------------------------*
REPORT ZDYNAMIC_ALV_PLANT.
*&---------------------------------------------------------------------*
*& Structure for Plant Data for Material Table
*&---------------------------------------------------------------------*
TYPES : BEGIN OF TY_MARC,
MATNR TYPE MATNR,
WERKS TYPE WERKS_D,
END OF TY_MARC.
*&---------------------------------------------------------------------*
*& Internal Table Declaration
*&---------------------------------------------------------------------*
DATA : GT_MARC TYPE TABLE OF TY_MARC,
LT_MARC TYPE TABLE OF TY_MARC,
GT_FCAT TYPE LVC_T_FCAT.
*&---------------------------------------------------------------------*
*& Workarea Declaration
*&---------------------------------------------------------------------*
DATA : GS_MARC TYPE TY_MARC,
GS_FCAT TYPE LVC_S_FCAT,
GS_LAY TYPE LVC_S_LAYO.
*&---------------------------------------------------------------------*
*& Constant Declaration
*&---------------------------------------------------------------------*
DATA : LV_MATNR TYPE MARC-MATNR,
LV_LONG TYPE SCRTEXT_L.
*&---------------------------------------------------------------------*
*& Field Symbols Declaration
*&---------------------------------------------------------------------*
FIELD-SYMBOLS : <FT_DYNAMIC> TYPE STANDARD TABLE,
<FS_DYN> TYPE ANY,
<FS_DATA> TYPE ANY,
<FS_MARC> TYPE TY_MARC.
*&---------------------------------------------------------------------*
*& Class Variable Declaration
*&---------------------------------------------------------------------*
DATA : LO_DOCKING TYPE REF TO CL_GUI_DOCKING_CONTAINER,
LO_ALV TYPE REF TO CL_GUI_ALV_GRID.
*&---------------------------------------------------------------------*
*& INITIALIZATION Event.
*&---------------------------------------------------------------------*
INITIALIZATION.
REFRESH : GT_MARC,
LT_MARC,
GT_FCAT.
CLEAR : GS_MARC,
GS_FCAT,
GS_LAY.
*& Selection Screen
SELECTION-SCREEN BEGIN OF BLOCK A1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS S_MATNR FOR LV_MATNR.
SELECTION-SCREEN END OF BLOCK A1.
*&---------------------------------------------------------------------*
*& START-OF-SELECTION Event
*&---------------------------------------------------------------------*
START-OF-SELECTION.
*& Getting Data from MARC Table
PERFORM GET_MARC.
*& Populate Dynamic Column.
PERFORM POP_DYN_COLUMN.
*& Populate Data into Dynamic Internal Table
PERFORM POP_DATA_DYNAMIC_TAB.
*& Call Screen.
PERFORM CALL_SCREEN.
*&---------------------------------------------------------------------*
*& Form GET_MARC
*&---------------------------------------------------------------------*
* This routine is used to get the data from Plant Data for Material Table
*----------------------------------------------------------------------*
FORM GET_MARC .
SELECT MATNR
WERKS
FROM MARC INTO TABLE GT_MARC
WHERE MATNR IN S_MATNR.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form POP_DYN_COLUMN
*&---------------------------------------------------------------------*
* Populate Dynamic Column
*----------------------------------------------------------------------*
FORM POP_DYN_COLUMN .
REFRESH GT_FCAT[].
GS_FCAT-FIELDNAME = 'MATNR'.
GS_FCAT-SCRTEXT_L = 'Material'.
GS_FCAT-OUTPUTLEN = '18'.
APPEND GS_FCAT TO GT_FCAT.
CLEAR GS_FCAT.
*& Remove Duplicate plant
LT_MARC[] = GT_MARC[].
SORT LT_MARC BY WERKS.
DELETE ADJACENT DUPLICATES FROM LT_MARC COMPARING WERKS.
LOOP AT LT_MARC INTO GS_MARC.
GS_FCAT-FIELDNAME = GS_MARC-WERKS.
CONCATENATE 'Plant' '-' GS_MARC-WERKS INTO LV_LONG.
GS_FCAT-SCRTEXT_L = LV_LONG. "GS_MARC-WERKS.
GS_FCAT-OUTPUTLEN = '04'.
APPEND GS_FCAT TO GT_FCAT.
CLEAR : GS_FCAT, LV_LONG.
ENDLOOP.
DATA : T_NEWTAB TYPE REF TO DATA,
T_NEWLIN TYPE REF TO DATA.
*& Create Dynamic ALV Internal Table
CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE
EXPORTING
* I_STYLE_TABLE =
IT_FIELDCATALOG = GT_FCAT
* I_LENGTH_IN_BYTE =
IMPORTING
EP_TABLE = T_NEWTAB
* E_STYLE_FNAME =
EXCEPTIONS
GENERATE_SUBPOOL_DIR_FULL = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
*& Assign Field Sysmbol Data to Dynamic Internal Table
ASSIGN T_NEWTAB->* TO <FT_DYNAMIC>.
*& Create Dynamic Workarea
CREATE DATA T_NEWLIN LIKE LINE OF <FT_DYNAMIC>.
ASSIGN T_NEWLIN->* TO <FS_DYN>.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form POP_DATA_DYNAMIC_TAB
*&---------------------------------------------------------------------*
* Populate Data into Dynamic Internal Table
*----------------------------------------------------------------------*
FORM POP_DATA_DYNAMIC_TAB .
SORT GT_MARC BY MATNR.
LOOP AT GT_MARC ASSIGNING <FS_MARC>.
"Populate Material Value
ASSIGN COMPONENT 'MATNR' OF STRUCTURE <FS_DYN> TO <FS_DATA>.
IF <FS_DATA> IS ASSIGNED.
<FS_DATA> = <FS_MARC>-MATNR.
ENDIF.
"Populate 'X' Acording to Plant in Material Wise
ASSIGN COMPONENT <FS_MARC>-WERKS OF STRUCTURE <FS_DYN> TO <FS_DATA>.
IF <FS_DATA> IS ASSIGNED.
<FS_DATA> = 'X'.
ENDIF.
AT END OF MATNR.
APPEND <FS_DYN> TO <FT_DYNAMIC>.
CLEAR <FS_DYN>.
ENDAT.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form CALL_SCREEN
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM CALL_SCREEN .
CALL SCREEN 9001.
ENDFORM.
*&---------------------------------------------------------------------*
*& Module STATUS_9001 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE STATUS_9001 OUTPUT.
SET PF-STATUS 'ZSTATUS'.
SET TITLEBAR 'ZTITLE'.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module DISPLAY OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE DISPLAY OUTPUT.
GS_LAY-ZEBRA = 'X'.
GS_LAY-CWIDTH_OPT = 'X'.
CHECK LO_DOCKING IS INITIAL.
*& Create Object for Docking Container
CREATE OBJECT LO_DOCKING
EXPORTING
PARENT = CL_GUI_DOCKING_CONTAINER=>DEFAULT_SCREEN
REPID = SY-REPID
DYNNR = SY-DYNNR
* SIDE = DOCK_AT_LEFT
EXTENSION = 2000
* STYLE =
* LIFETIME = lifetime_default
* CAPTION =
* METRIC = 0
* RATIO =
* NO_AUTODEF_PROGID_DYNNR =
* NAME =
EXCEPTIONS
CNTL_ERROR = 1
CNTL_SYSTEM_ERROR = 2
CREATE_ERROR = 3
LIFETIME_ERROR = 4
LIFETIME_DYNPRO_DYNPRO_LINK = 5
OTHERS = 6.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
*& Create Object for CL_GUI_ALV_GRID Class.
CREATE OBJECT LO_ALV
EXPORTING
* I_SHELLSTYLE = 0
* I_LIFETIME =
I_PARENT = LO_DOCKING
* I_APPL_EVENTS = space
* I_PARENTDBG =
* I_APPLOGPARENT =
* I_GRAPHICSPARENT =
* I_NAME =
* I_FCAT_COMPLETE = SPACE
EXCEPTIONS
ERROR_CNTL_CREATE = 1
ERROR_CNTL_INIT = 2
ERROR_CNTL_LINK = 3
ERROR_DP_CREATE = 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.
*& Display Data
CALL METHOD LO_ALV->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
* I_BUFFER_ACTIVE =
* I_BYPASSING_BUFFER =
* I_CONSISTENCY_CHECK =
* I_STRUCTURE_NAME =
* IS_VARIANT =
I_SAVE = 'X'
I_DEFAULT = 'X'
IS_LAYOUT = GS_LAY
* IS_PRINT =
* IT_SPECIAL_GROUPS =
* IT_TOOLBAR_EXCLUDING =
* IT_HYPERLINK =
* IT_ALV_GRAPHICS =
* IT_EXCEPT_QINFO =
* IR_SALV_ADAPTER =
CHANGING
IT_OUTTAB = <FT_DYNAMIC>
IT_FIELDCATALOG = GT_FCAT
* IT_SORT =
* IT_FILTER =
EXCEPTIONS
INVALID_PARAMETER_COMBINATION = 1
PROGRAM_ERROR = 2
TOO_MANY_LINES = 3
OTHERS = 4.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_9001 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_9001 INPUT.
IF SY-UCOMM EQ 'BACK' OR SY-UCOMM EQ 'EXIT' OR SY-UCOMM EQ 'CANCEL'.
LEAVE TO SCREEN 0.
ENDIF.
ENDMODULE.
Output:
Download Sour code