Saturday, July 14, 2018

Dynamic ALV (Material Wise Display Dynamic Plant)


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_FCATLV_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

No comments:

Post a Comment