Tuesday, February 2, 2010

All ALVs LIST, GRID , HSEQ

REPORT Z_ALL_ALV MESSAGE-ID ZB3_KKMSG NO STANDARD PAGE HEADING LINE-SIZE 155 LINE-COUNT 37(3).

************************************************************************************************************
* C O N S T A N T S D E C L A R A T I O N
************************************************************************************************************
CONSTANTS: C_AUN(20) VALUE 'AUN', " Constant for storing the parameter id of vbeln
C_MAT(20) VALUE 'MAT', " Constant for storing the parameter id of matnr
C_VA03(20) VALUE 'VA03', " Constant for storing the tcode VA03
C_MM03(20) VALUE 'MM03', " Constant for storing the tcode MM03
C_TOP(45) VALUE 'SALES ORDER ITEM INFORMATION', " Constant to pass the Top Of Page
C_TITL(35) VALUE 'SALES ORDER DETAILS', " Constant to pass the window titlebar
C_URL(45) VALUE 'www.lgsglobal.com', " Constant to hold the url address
C_STIT(70) VALUE 'ITEM DETAILS', " Constant to hold the title of the secondary grid
C_BTIT(70) VALUE 'HEADER DETAILS'. " Constant to hold the title of the basic grid

************************************************************************************************************
* D A T A D E C L A R A T I O N
************************************************************************************************************

DATA: F_COLOR TYPE I, " Flag to change color
F_STOP TYPE C, " Flag to exit from program
V_VBELN TYPE VBAK-VBELN, " Variable for select options
P_LAYVAR1 TYPE DISVARIANT. " Variable for variant name

TYPE-POOLS : SLIS.

************************************************************************************************************
* T Y P E S D E C L A R A T I O N
************************************************************************************************************
TYPES: BEGIN OF TY_VBAK, " Declaration of Sales Order header type
VBELN TYPE VBAK-VBELN, " Sales document no
ERDAT TYPE VBAK-ERDAT, " Sales document created date
ERNAM TYPE VBAK-ERNAM, " Sales document created by
NETWR TYPE VBAK-NETWR, " Net value of sales document
VKORG TYPE VBAK-VKORG, " Sales organisation
END OF TY_VBAK. " End of declaration of sales order header

TYPES: BEGIN OF TY_VBAP, " Declaration of Sales Order Item type
VBELN TYPE VBAP-VBELN, " Sales Document No
POSNR TYPE VBAP-POSNR, " Sales Document Item No
MATNR TYPE VBAP-MATNR, " Material No
NETWR TYPE VBAP-NETWR, " Sales Document Item Material Price
MATKL TYPE VBAP-MATKL, " Material Group
POSAR TYPE VBAP-POSAR, " Item type
END OF TY_VBAP. " End of Declaration of Sales Order Item

TYPES: BEGIN OF TY_MAKT, " Declaration of Material master type
MATNR TYPE MARA-MATNR, " Material Number
MAKTX TYPE MAKT-MAKTX, " Material Description
END OF TY_MAKT. " End of Declaration of Material master

TYPES: BEGIN OF TY_ITEM, " Declaration of Item Output Table type
VBELN TYPE VBAK-VBELN, " Sales Document No
POSNR TYPE VBAP-POSNR, " Sales Document Item No
MATNR TYPE VBAP-MATNR, " Material No
NETWR TYPE VBAP-NETWR, " Sales Document Material Price
MAKTX TYPE MAKT-MAKTX, " Material Description
MATKL TYPE VBAP-MATKL, " Material Group
POSAR TYPE VBAP-POSAR, " Item type
END OF TY_ITEM. " End of Declaration of item table

************************************************************************************************************
* W O R K A R E A D E C L A R A T I O N
************************************************************************************************************
DATA: WA_VBAK TYPE TY_VBAK, " Work area for sales order header details
WA_VBAP TYPE TY_VBAP, " Work area for sales order item details
WA_MAKT TYPE TY_MAKT, " Work area for material description details
WA_ITEM TYPE TY_ITEM. " Work area for item details

* Work areas for ALV header
DATA: WA_FLDCAT TYPE SLIS_FIELDCAT_ALV, " Work area for fieldcatalog basic
WA_LAYOUT TYPE SLIS_LAYOUT_ALV, " Work area for layout basic
WA_EVENTS TYPE SLIS_ALV_EVENT, " Work area for events basic
WA_SORT TYPE SLIS_SORTINFO_ALV. " Workarea for ALV Sort table

* Work areas for ALV item
DATA: WA_FLDCAT1 TYPE SLIS_FIELDCAT_ALV, " Work area for fieldcatalog secondary
WA_LAYOUT1 TYPE SLIS_LAYOUT_ALV, " Work area for layout secondary
WA_EVENTS1 TYPE SLIS_ALV_EVENT, " Work area for events secondary
WA_SORT1 TYPE SLIS_SORTINFO_ALV. " Workarea for ALV Sort table

* Work areas for ALV variant
DATA: WA_VARIANT TYPE DISVARIANT, " Workarea for ALV variants display
WA_VARIANT1 TYPE DISVARIANT. " Workarea for ALV variants check

DATA: WA_KEYINFO TYPE SLIS_KEYINFO_ALV. " Workarea for specifying keyinfo.

************************************************************************************************************
* I N T E R N A L T A B L E S D E C L A R A T I O N
************************************************************************************************************

DATA: IT_VBAK TYPE STANDARD TABLE OF TY_VBAK, " Internal table declaration for so header
IT_VBAP TYPE STANDARD TABLE OF TY_VBAP, " Internal table declaration for so item
IT_MAKT TYPE STANDARD TABLE OF TY_MAKT, " Internal table declaration for material desc.
IT_ITEM TYPE STANDARD TABLE OF TY_ITEM. " Internal table declaration for item details.

* internal tables for ALV header
DATA: IT_FLDCAT TYPE SLIS_T_FIELDCAT_ALV, " Internal table for basic list fieldcatalog
IT_EVENTS TYPE SLIS_T_EVENT, " Internal table for basic list events
IT_SORT TYPE SLIS_T_SORTINFO_ALV. " Internal table for ALV sort

* internal tables for ALV item.
DATA: IT_FLDCAT1 TYPE SLIS_T_FIELDCAT_ALV, " Internal table for secondary list fieldcatalog
IT_EVENTS1 TYPE SLIS_T_EVENT, " Internal table for secondary list events
IT_SORT1 TYPE SLIS_T_SORTINFO_ALV. " Internal table for ALV sort

************************************************************************************************************
* S E L E C T I O N S C R E E N
************************************************************************************************************

SELECTION-SCREEN BEGIN OF BLOCK K WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS: S_VBELN FOR V_VBELN. " Selection criteria for sales document number
*PARAMETERS: p_layvar TYPE disvariant-variant. " Parameter for specifying the layout variant
SELECTION-SCREEN END OF BLOCK K.

SELECTION-SCREEN BEGIN OF BLOCK K1 WITH FRAME TITLE TEXT-040.
PARAMETERS: R_A1 RADIOBUTTON GROUP RG1,
R_A2 RADIOBUTTON GROUP RG1,
R_A3 RADIOBUTTON GROUP RG1.
SELECTION-SCREEN END OF BLOCK K1.

************************************************************************************************************
* I N I T I A L I Z A T I O N
************************************************************************************************************
INITIALIZATION.
S_VBELN-SIGN = 'I'. " Giving initial values to select-options.
S_VBELN-OPTION = 'BT'.
S_VBELN-LOW = 5000.
S_VBELN-HIGH = 5010.
APPEND S_VBELN TO S_VBELN.

************************************************************************************************************
* A T S E L E C T I O N S C R E E N E V E N T
************************************************************************************************************
AT SELECTION-SCREEN.

SELECT VBELN
FROM VBAK
INTO V_VBELN
UP TO 1 ROWS
WHERE VBELN IN S_VBELN. " Checking if records are available in the database
ENDSELECT.

IF SY-SUBRC NE 0. " If user enters wrong selection
CLEAR S_VBELN.
MESSAGE E004 WITH 'please enter a valid input'(002).
ENDIF.

IF S_VBELN-HIGH CN '1234567890 '. " If user gives invalid characters
CLEAR S_VBELN.
MESSAGE E004 WITH 'please enter a valid input'(002) .
ENDIF.

IF S_VBELN-LOW CN '1234567890 '. " If user gives invalid characters
CLEAR S_VBELN.
MESSAGE E004 WITH 'please enter a valid input'(002) .
ENDIF.

* wa_variant1-report = sy-cprog.
* wa_variant1-variant = p_layvar.
* CALL FUNCTION 'REUSE_ALV_VARIANT_EXISTENCE'
** EXPORTING
** I_SAVE = ' '
* CHANGING
* cs_variant = wa_variant1
* EXCEPTIONS
* wrong_input = 1
* not_found = 2
* program_error = 3
* OTHERS = 4
* .
* IF sy-subrc <> 0.
* MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
* WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
* ENDIF.

************************************************************************************************************
* A T S E L E C T I O N S C R E E N F4
************************************************************************************************************

*AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_layvar .
* wa_variant-report = sy-cprog.

* CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
* EXPORTING
* is_variant = wa_variant
** I_TABNAME_HEADER =
** I_TABNAME_ITEM =
** IT_DEFAULT_FIELDCAT =
** I_SAVE = ' '
** I_DISPLAY_VIA_GRID = ' '
* IMPORTING
** E_EXIT =
* es_variant = p_layvar1
* EXCEPTIONS
* not_found = 1
* program_error = 2
* OTHERS = 3
* .
* IF sy-subrc <> 0.
* MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
* WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
* ENDIF.
* p_layvar = p_layvar1-variant.

************************************************************************************************************
* S T A R T O F S E L E C T I O N
************************************************************************************************************

START-OF-SELECTION.

PERFORM GET_VBAK_DATA. " Getting data from vbak into it_vbak
SORT IT_VBAK BY VBELN. " sorting table for read statement using binary search

************************************************************************************************************
* E N D O F S E L E C T I O N
************************************************************************************************************

END-OF-SELECTION.

IF F_STOP = 'X'.
MESSAGE I004 WITH 'given range doesnot exist in the database'(007) .
EXIT.
ENDIF.
PERFORM FLDCAT_POPULATE . " Populating the fieldcat
PERFORM SORT_FOR_SUBTOT. " Sorting for finding subtotals
PERFORM LAYOUT_POPULATE. " Populating the layout
PERFORM EVENT_ON_ALVLIST. " Populating the events
PERFORM GIVE_KEYINFO. " Populating the keyinfo.

IF R_A1 = 'X'.
PERFORM DISP_ALV. " Displaying the basic list
ELSEIF R_A2 = 'X'.
PERFORM GET_SEC.
PERFORM BLOCK_INIT. " Initialising the block alv
PERFORM BLOCK_APP1. " Appending first list to block
PERFORM BLOCK_APP2. " Appending first list to block
PERFORM BLOCK_DISP. " Displaying the block
ELSE.
PERFORM GET_SEC.
PERFORM HIERCHSEQ. " Display heierarchial list
ENDIF.

*-----------------------------------------------------P E R F O R M S---------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form get_vbak_data
*----------------------------------------------------------------------*
* Populating the header internal table
*----------------------------------------------------------------------*

FORM GET_VBAK_DATA .

SELECT VBELN " Populating the header table with data from vbak table
ERDAT
ERNAM
NETWR
VKORG
FROM VBAK
INTO TABLE IT_VBAK
WHERE VBELN IN S_VBELN.
IF SY-SUBRC <> 0.
F_STOP = 'X'.
STOP. "#EC *
ENDIF.

ENDFORM. " get_vbak_data

*&---------------------------------------------------------------------*
*& Form get_vbap_data
*----------------------------------------------------------------------*
* Populating the item internal table
*----------------------------------------------------------------------*

FORM GET_VBAP_DATA .

SELECT VBELN " Populating the item table with data from vbap table
POSNR
MATNR
NETWR
MATKL
POSAR
FROM VBAP
INTO TABLE IT_VBAP
WHERE VBELN IN S_VBELN.
ENDFORM. " get_vbap_data

*&---------------------------------------------------------------------*
*& Form get_mara_data
*----------------------------------------------------------------------*
* Populating the material description in the internal table
*----------------------------------------------------------------------*

FORM GET_MAKT_DATA.

IF IT_VBAP[] IS NOT INITIAL.
SELECT MATNR " Getting the material descriptions
MAKTX
FROM MAKT
INTO TABLE IT_MAKT
FOR ALL ENTRIES IN IT_VBAP
WHERE MATNR = IT_VBAP-MATNR
AND SPRAS = 'EN'.
ENDIF.
IF SY-SUBRC <> 0.
EXIT.
ENDIF.
ENDFORM. " get_makt_data

*&---------------------------------------------------------------------*
*& Form populate_result_table
*----------------------------------------------------------------------*
* Populating the item internal table
*----------------------------------------------------------------------*

FORM POPULATE_ITEM_TABLE .

LOOP AT IT_VBAP INTO WA_VBAP.
WA_ITEM-VBELN = WA_VBAP-VBELN.
WA_ITEM-POSNR = WA_VBAP-POSNR.
WA_ITEM-MATNR = WA_VBAP-MATNR.
WA_ITEM-NETWR = WA_VBAP-NETWR.
WA_ITEM-MATKL = WA_VBAP-MATKL.
WA_ITEM-POSAR = WA_VBAP-POSAR.
READ TABLE IT_MAKT "Reading the material descriptions into the final table
INTO WA_MAKT
WITH KEY MATNR = WA_VBAP-MATNR
BINARY SEARCH.
IF SY-SUBRC EQ 0.
WA_ITEM-MAKTX = WA_MAKT-MAKTX.
ENDIF.
APPEND WA_ITEM TO IT_ITEM.
CLEAR WA_ITEM.
ENDLOOP.

ENDFORM. " populate_result_table


*&---------------------------------------------------------------------*
*& Form color_change
*----------------------------------------------------------------------*
* Setting flag for alternate colors
*----------------------------------------------------------------------*

FORM COLOR_CHANGE. "#EC CALLED

F_COLOR = SY-TABIX MOD 2. " Changing colors for alternate rows
IF F_COLOR = 0.
FORMAT COLOR 1 .
ELSE.
FORMAT COLOR 2 .
ENDIF.

ENDFORM. " color_change

*&---------------------------------------------------------------------*
*& Form fldcat_populate
*&---------------------------------------------------------------------*
* populating the fieldcatalog of basic list manually
*----------------------------------------------------------------------*
FORM FLDCAT_POPULATE .
DEFINE FLDCATB. " Macro to populate fieldcat of basic list.
WA_FLDCAT-FIELDNAME = &1.
WA_FLDCAT-ROW_POS = 1.
WA_FLDCAT-COL_POS = &2.
WA_FLDCAT-SELTEXT_L = &3.
WA_FLDCAT-SELTEXT_M = &4.
WA_FLDCAT-SELTEXT_S = &5.
WA_FLDCAT-HOTSPOT = &6.
WA_FLDCAT-KEY = &7.
WA_FLDCAT-DO_SUM = &8.
WA_FLDCAT-TABNAME = &9.

APPEND WA_FLDCAT TO IT_FLDCAT.

END-OF-DEFINITION.

FLDCATB 'VBELN' '1' 'SORDER NUM' 'SO NUM' 'SNUM' 'X' 'X' ' ' 'IT_VBAK'. "calling the macro

FLDCATB 'ERDAT' '2' 'SORDER DATE' 'SO DATE' 'SDAT' ' ' ' ' ' ' 'IT_VBAK'.

FLDCATB 'ERNAM' '3' 'SORDER NAME' 'SO NAME' 'SNAM' ' ' ' ' ' ' 'IT_VBAK'.

FLDCATB 'NETWR' '4' 'NET PRICE' 'NET PRICE' 'NET PRICE' ' ' ' ' 'X' 'IT_VBAK'.

FLDCATB 'VKORG' '5' 'SALES ORG' 'S ORG' 'SORG' ' ' ' ' ' ' 'IT_VBAK'.

ENDFORM. " fldcat_populate

*&---------------------------------------------------------------------*
*& Form event_on_alvlist
*&---------------------------------------------------------------------*
* Populating the events on basic list
*----------------------------------------------------------------------*
FORM EVENT_ON_ALVLIST . " Populating the events table for basic list

WA_EVENTS-NAME = 'TOP_OF_PAGE'.
WA_EVENTS-FORM = 'SUB_TOP'.
APPEND WA_EVENTS TO IT_EVENTS.

WA_EVENTS-NAME = 'USER_COMMAND'.
WA_EVENTS-FORM = 'SUB_USERCOMAND'.
APPEND WA_EVENTS TO IT_EVENTS.

ENDFORM. " event_on_alvlist

*&---------------------------------------------------------------------*
*& Form disp_alv
*&---------------------------------------------------------------------*
* Displaying the basic alv list
*----------------------------------------------------------------------*
FORM DISP_ALV .

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' " Displaying the basic list
EXPORTING
* I_INTERFACE_CHECK = ' '
* I_BYPASSING_BUFFER = ' '
* I_BUFFER_ACTIVE = ' '
I_CALLBACK_PROGRAM = SY-CPROG
* I_CALLBACK_PF_STATUS_SET = ' '
* I_CALLBACK_USER_COMMAND = ' '
* I_CALLBACK_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_END_OF_LIST = ' '
* I_STRUCTURE_NAME =
* I_BACKGROUND_ID = ' '
I_GRID_TITLE = C_BTIT
* I_GRID_SETTINGS =
IS_LAYOUT = WA_LAYOUT
IT_FIELDCAT = IT_FLDCAT
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS =
IT_SORT = IT_SORT
* IT_FILTER =
* IS_SEL_HIDE =
* I_DEFAULT = 'X'
I_SAVE = 'A'
IS_VARIANT = P_LAYVAR1
IT_EVENTS = IT_EVENTS
* IT_EVENT_EXIT =
* IS_PRINT =
* IS_REPREP_ID =
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
* I_HTML_HEIGHT_TOP = 0
* I_HTML_HEIGHT_END = 0
* IT_ALV_GRAPHICS =
* IT_HYPERLINK =
* IT_ADD_FIELDCAT =
* IT_EXCEPT_QINFO =
* IR_SALV_FULLSCREEN_ADAPTER =
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
TABLES
T_OUTTAB = IT_VBAK
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

ENDFORM. " disp_alv

*&---------------------------------------------------------------------*
*& Form SUB_TOP
*&---------------------------------------------------------------------*
* Dynamic perform for basic list Top Of Page
*----------------------------------------------------------------------*

FORM SUB_TOP. "#EC CALLED

DATA: LT_COMM TYPE SLIS_T_LISTHEADER, " Top of page for basic list
LX_COMM TYPE SLIS_LISTHEADER.
LX_COMM-TYP = 'H'. " Heading type
LX_COMM-INFO = 'SALES ORDER HEADER INFORMATION'.
APPEND LX_COMM TO LT_COMM.

CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
IT_LIST_COMMENTARY = LT_COMM
I_LOGO = 'SAS_LOGO'.
ENDFORM. "SUB_TOP

*&---------------------------------------------------------------------*
*& Form SUB_USERCOMAND
*&---------------------------------------------------------------------*
* Dynamic perform for USER COMMAND of basic list
*----------------------------------------------------------------------*

FORM SUB_USERCOMAND USING RUCOMM TYPE SY-UCOMM
LX_SEL TYPE SLIS_SELFIELD. "#EC CALLED
CASE RUCOMM.
WHEN '&IC1' . " Checking for user action
IF LX_SEL-VALUE IS INITIAL.
MESSAGE I004 WITH 'click on the field values only'(003).
ELSE.

READ TABLE IT_VBAK INTO WA_VBAK INDEX LX_SEL-TABINDEX . " Getting teh fieldname and values on the clicked line.
IF SY-SUBRC <> 0.
MESSAGE I004 WITH 'click on the field values only'(003).
ENDIF.
CASE LX_SEL-FIELDNAME.
WHEN 'VBELN'.
PERFORM GET_VBAP_DATA. " Getting data from vbap into it_vbap
WHEN OTHERS.
MESSAGE I004 WITH 'click only on so number'(004).
EXIT.
ENDCASE.

SORT IT_VBAP BY VBELN POSNR. " Sorting table for read statement usingbinary search
PERFORM GET_MAKT_DATA. " Getting data from mara into it_mara
PERFORM POPULATE_ITEM_TABLE. " Populating the out put table
SORT IT_ITEM BY VBELN POSNR.

REFRESH: IT_FLDCAT1, " Clearing itab for every new secondary list.
IT_EVENTS1.
PERFORM FLDCAT_POPULATE1. " Populating the fieldcat itab for secondary list
PERFORM SORT_FOR_SUBTOT_SEC. " Sorting for finding subtotals
PERFORM LAYOUT_SEC_POPULATE. " Populating the layout for secondary list
PERFORM EVENT_ON_ALVLIST_SEC. " Populating the events itab for secondary list
PERFORM DISP_ALV_SEC. " Displaying the secondary list
ENDIF.
ENDCASE.

ENDFORM. "SUB_USERCOMAND

*&---------------------------------------------------------------------*
*& Form fldcat_populate1
*&---------------------------------------------------------------------*
* Populating the fieldcatalog for secondary list
*----------------------------------------------------------------------*
FORM FLDCAT_POPULATE1 .

DEFINE FLDCATB1. " Macro to populate fieldcat list.
WA_FLDCAT1-FIELDNAME = &1.
WA_FLDCAT1-COL_POS = &2.
WA_FLDCAT1-SELTEXT_L = &3.
WA_FLDCAT1-SELTEXT_M = &4.
WA_FLDCAT1-SELTEXT_S = &5.
WA_FLDCAT1-NO_OUT = &6.
WA_FLDCAT1-DO_SUM = &7.

APPEND WA_FLDCAT1 TO IT_FLDCAT1.

END-OF-DEFINITION.

FLDCATB1 'VBELN' '1' 'SORDER NUM' 'SO NUM' 'SNUM' ' ' ' '.
FLDCATB1 'POSNR' '2' 'SORDER ITEM' 'SO ITEM' 'SITM' ' ' ' '.
FLDCATB1 'MATNR' '3' 'MATERIAL NO' 'MAT NO' 'MTNO' ' ' ' '.
FLDCATB1 'NETWR' '4' 'NET PRICE' 'NET PRICE' 'NET PRICE' ' ' 'X'.
FLDCATB1 'MAKTX' '5' 'MATERIAL DESCRIPTION' 'MAT DESC' 'M DESC' ' ' ' '.
FLDCATB1 'MATKL' '6' 'MATERIAL GROUP' 'MAT GROUP' 'M GRP' ' ' ' '.
FLDCATB1 'POSAR' '7' 'ITEM TYPE' 'ITEM TYP' 'I TYP' ' ' ' '.

ENDFORM. "fldcat_populate1

*&---------------------------------------------------------------------*
*& Form event_on_alvlist_sec
*&---------------------------------------------------------------------*
* Populating the events for secondary alv list
*----------------------------------------------------------------------*
FORM EVENT_ON_ALVLIST_SEC .

WA_EVENTS1-NAME = 'TOP_OF_PAGE'. " Populating the list of events for secondary list
WA_EVENTS1-FORM = 'SUB_TOP_SECONDARY'.
APPEND WA_EVENTS1 TO IT_EVENTS1.

WA_EVENTS1-NAME = 'USER_COMMAND'.
WA_EVENTS1-FORM = 'SUB_USRCMD_SEC'.
APPEND WA_EVENTS1 TO IT_EVENTS1.

ENDFORM. " event_on_alvlist_sec

*&---------------------------------------------------------------------*
*& Form SUB_TOP_SECONDARY
*&---------------------------------------------------------------------*
* Dynamic perform for secondary list Top Of Page
*----------------------------------------------------------------------*
FORM SUB_TOP_SECONDARY. "#EC CALLED

DATA: LT_COMM TYPE SLIS_T_LISTHEADER, " Top of page for secondary list
LX_COMM TYPE SLIS_LISTHEADER.
LX_COMM-TYP = 'H'.
LX_COMM-INFO = C_TOP.
APPEND LX_COMM TO LT_COMM.

CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
IT_LIST_COMMENTARY = LT_COMM
I_LOGO = 'SAS_LOGO'
* I_END_OF_LIST_GRID =
* I_ALV_FORM =
.
ENDFORM. "SUB_TOP_SECONDARY

*&---------------------------------------------------------------------*
*& Form disp_alv_sec
*&---------------------------------------------------------------------*
* displaying secondary alv list
*----------------------------------------------------------------------*
FORM DISP_ALV_SEC .

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' " Displaying the secondary list
EXPORTING
* I_INTERFACE_CHECK = ' '
* I_BYPASSING_BUFFER = ' '
* I_BUFFER_ACTIVE = ' '
I_CALLBACK_PROGRAM = SY-CPROG
* I_CALLBACK_PF_STATUS_SET = ' '
* I_CALLBACK_USER_COMMAND = ' '
* I_CALLBACK_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_END_OF_LIST = ' '
* I_STRUCTURE_NAME =
* I_BACKGROUND_ID = ' '
I_GRID_TITLE = C_STIT
* I_GRID_SETTINGS =
IS_LAYOUT = WA_LAYOUT1
IT_FIELDCAT = IT_FLDCAT1
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS =
IT_SORT = IT_SORT1
* IT_FILTER =
* IS_SEL_HIDE =
* I_DEFAULT = 'X'
* I_SAVE = ' '
* IS_VARIANT =
IT_EVENTS = IT_EVENTS1
* IT_EVENT_EXIT =
* IS_PRINT =
* IS_REPREP_ID =
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
* I_HTML_HEIGHT_TOP = 0
* I_HTML_HEIGHT_END = 0
* IT_ALV_GRAPHICS =
* IT_HYPERLINK =
* IT_ADD_FIELDCAT =
* IT_EXCEPT_QINFO =
* IR_SALV_FULLSCREEN_ADAPTER =
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
TABLES
T_OUTTAB = IT_ITEM
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

ENDFORM. " disp_alv_sec

*&---------------------------------------------------------------------*
*& Form SUB_USERCOMAND
*&---------------------------------------------------------------------*
* Dynamic perform for user command of secondary list
*----------------------------------------------------------------------*
FORM SUB_USRCMD_SEC USING RUCOMM TYPE SY-UCOMM
LX_SEL TYPE SLIS_SELFIELD. "#EC CALLED
CASE RUCOMM.
WHEN '&IC1'.
IF LX_SEL-VALUE IS INITIAL.
MESSAGE I004 WITH 'click on the field values only'(003).
ELSE.
READ TABLE IT_ITEM INTO WA_ITEM INDEX LX_SEL-TABINDEX.

CASE LX_SEL-FIELDNAME.
WHEN 'VBELN'.
SET PARAMETER ID C_AUN FIELD LX_SEL-VALUE.
CALL TRANSACTION C_VA03 AND SKIP FIRST SCREEN. " Call the VA03 transaction
CLEAR LX_SEL-VALUE. " Clear Hide Work Area

WHEN 'MATNR'.
SET PARAMETER ID C_MAT FIELD LX_SEL-VALUE.
CALL TRANSACTION C_MM03 AND SKIP FIRST SCREEN. " Call the MM03 transaction
CLEAR LX_SEL-VALUE. " Clear Hide Work Area

WHEN 'MAKTX'.
CALL FUNCTION 'CALL_BROWSER' " Calling the browser
EXPORTING
URL = C_URL
EXCEPTIONS
FRONTEND_NOT_SUPPORTED = 1
FRONTEND_ERROR = 2
PROG_NOT_FOUND = 3
NO_BATCH = 4
UNSPECIFIED_ERROR = 5
OTHERS = 6.
IF SY-SUBRC <> 0.
MESSAGE I004 WITH 'browser cannot be called'(006).
ENDIF.
WHEN OTHERS.
MESSAGE I004 WITH 'choose correct field'(005).
EXIT.
ENDCASE.
ENDIF.
ENDCASE.
ENDFORM. "SUB_USRCMD_SEC


*&---------------------------------------------------------------------*
*& Form layout_populate
*&---------------------------------------------------------------------*
* populating the layout for basic alv list
*----------------------------------------------------------------------*
FORM LAYOUT_POPULATE .

WA_LAYOUT-COLWIDTH_OPTIMIZE = 'X'. " Getting the optimum length
WA_LAYOUT-WINDOW_TITLEBAR = C_TITL.
WA_LAYOUT-ZEBRA = 'X'. " Getting alternate colors.

ENDFORM. " layout_populate


*&---------------------------------------------------------------------*
*& Form layout_sec_populate
*&---------------------------------------------------------------------*
* populating the layout for secondary alv list
*----------------------------------------------------------------------*
FORM LAYOUT_SEC_POPULATE .

WA_LAYOUT1-COLWIDTH_OPTIMIZE = 'X'. "getting the optimum length
WA_LAYOUT1-ZEBRA = 'X'. "getting alternate colors.

ENDFORM. " layout_sec_populate

*&---------------------------------------------------------------------*
*& Form sort_for_subtot
*&---------------------------------------------------------------------*
* defining the sort criterion for basic list
*----------------------------------------------------------------------*

FORM SORT_FOR_SUBTOT .

WA_SORT-FIELDNAME = 'VBELN'.
WA_SORT-SPOS = 1.
WA_SORT-UP = 'X'.
WA_SORT-SUBTOT = 'X'.
APPEND WA_SORT TO IT_SORT.

ENDFORM. " sort_for_subtot

*&---------------------------------------------------------------------*
*& Form sort_for_subtot_sec
*&---------------------------------------------------------------------*
* defining the sort criterion for secondary list
*----------------------------------------------------------------------*
FORM SORT_FOR_SUBTOT_SEC .

WA_SORT1-FIELDNAME = 'POSNR'.
WA_SORT1-SPOS = 2.
WA_SORT1-UP = 'X'.
WA_SORT1-SUBTOT = 'X'.
APPEND WA_SORT1 TO IT_SORT1.

ENDFORM. " sort_for_subtot_sec

*&---------------------------------------------------------------------*
*& Form block_init
*&---------------------------------------------------------------------*
* Initializing the block
*----------------------------------------------------------------------*
FORM BLOCK_INIT .
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_INIT'
EXPORTING
I_CALLBACK_PROGRAM = SY-CPROG
* I_CALLBACK_PF_STATUS_SET = ' '
* I_CALLBACK_USER_COMMAND = ' '
* IT_EXCLUDING =
.
ENDFORM. " block_init

*&---------------------------------------------------------------------*
*& Form block_app1
*&---------------------------------------------------------------------*
* Adding the first list to block
*----------------------------------------------------------------------*
FORM BLOCK_APP1 .
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_APPEND'
EXPORTING
IS_LAYOUT = WA_LAYOUT
IT_FIELDCAT = IT_FLDCAT
I_TABNAME = 'IT_VBAK'
IT_EVENTS = IT_EVENTS
IT_SORT = IT_SORT
* I_TEXT = ' '
TABLES
T_OUTTAB = IT_VBAK[]
EXCEPTIONS
PROGRAM_ERROR = 1
MAXIMUM_OF_APPENDS_REACHED = 2
OTHERS = 3
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

ENDFORM. " block_app1

*&---------------------------------------------------------------------*
*& Form block_disp
*&---------------------------------------------------------------------*
* displaying the block
*----------------------------------------------------------------------*
FORM BLOCK_DISP .

CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_DISPLAY'
* EXPORTING
* I_INTERFACE_CHECK = ' '
* IS_PRINT =
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

ENDFORM. " block_disp

*&---------------------------------------------------------------------*
*& Form block_app2
*&---------------------------------------------------------------------*
* appending the second list
*----------------------------------------------------------------------*
FORM BLOCK_APP2 .

CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_APPEND'
EXPORTING
IS_LAYOUT = WA_LAYOUT1
IT_FIELDCAT = IT_FLDCAT1
I_TABNAME = 'IT_ITEM'
IT_EVENTS = IT_EVENTS1
IT_SORT = IT_SORT1
* I_TEXT = ' '
TABLES
T_OUTTAB = IT_ITEM[]
EXCEPTIONS
PROGRAM_ERROR = 1
MAXIMUM_OF_APPENDS_REACHED = 2
OTHERS = 3
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

ENDFORM. " block_app2

*&---------------------------------------------------------------------*
*& Form get_sec
*&---------------------------------------------------------------------*
* Getting values for secondary list.
*----------------------------------------------------------------------*
FORM GET_SEC .
PERFORM GET_VBAP_DATA. " Getting data from vbap into it_vbap
SORT IT_VBAP BY VBELN POSNR. " Sorting table for read statement usingbinary search
PERFORM GET_MAKT_DATA. " Getting data from mara into it_mara
PERFORM POPULATE_ITEM_TABLE. " Populating the out put table
SORT IT_ITEM BY VBELN POSNR.
REFRESH: IT_FLDCAT1, " Clearing itab for every new secondary list.
IT_EVENTS1.
PERFORM FLDCAT_POPULATE1. " Populating the fieldcat itab for secondary list
IF R_A3 = 'X'.
PERFORM FLDCAT_HIER. " Populating the fieldcat for hierarchial list.
ENDIF.
PERFORM SORT_FOR_SUBTOT_SEC. " Sorting for finding subtotals
PERFORM LAYOUT_SEC_POPULATE. " Populating the layout for secondary list
PERFORM EVENT_ON_ALVLIST_SEC. " Populating the events itab for secondary list
ENDFORM. " get_sec

*&---------------------------------------------------------------------*
*& Form hierch
*&---------------------------------------------------------------------*
* hierarchial alv list display
*----------------------------------------------------------------------*
FORM HIERCHSEQ .
CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
EXPORTING
* I_INTERFACE_CHECK = ' '
I_CALLBACK_PROGRAM = SY-CPROG
* I_CALLBACK_PF_STATUS_SET = ' '
* I_CALLBACK_USER_COMMAND = ' '
IS_LAYOUT = WA_LAYOUT
IT_FIELDCAT = IT_FLDCAT
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS =
* IT_SORT =
* IT_FILTER =
* IS_SEL_HIDE =
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
* I_DEFAULT = 'X'
* I_SAVE = ' '
* IS_VARIANT =
* IT_EVENTS =
* IT_EVENT_EXIT =
I_TABNAME_HEADER = 'IT_VBAK'
I_TABNAME_ITEM = 'IT_ITEM'
* I_STRUCTURE_NAME_HEADER =
* I_STRUCTURE_NAME_ITEM =
IS_KEYINFO = WA_KEYINFO
* IS_PRINT =
* IS_REPREP_ID =
* I_BYPASSING_BUFFER =
* I_BUFFER_ACTIVE =
* IR_SALV_HIERSEQ_ADAPTER =
* IT_EXCEPT_QINFO =
* I_SUPPRESS_EMPTY_DATA = ABAP_FALSE
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
TABLES
T_OUTTAB_HEADER = IT_VBAK[]
T_OUTTAB_ITEM = IT_ITEM[]
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

ENDFORM. " hierch

*&---------------------------------------------------------------------*
*& Form give_keyinfo
*&---------------------------------------------------------------------*
* give the key info values
*----------------------------------------------------------------------*
FORM GIVE_KEYINFO .
WA_KEYINFO-HEADER01 = 'VBELN'.
WA_KEYINFO-ITEM01 = 'VBELN'.
ENDFORM. " give_keyinfo

*&---------------------------------------------------------------------*
*& Form fldcat_hier
*&---------------------------------------------------------------------*
* populating fieldcat for hierarchial list.
*----------------------------------------------------------------------*
FORM FLDCAT_HIER.
CLEAR WA_FLDCAT.
DEFINE FLDCATB1. " Macro to populate fieldcat list.
WA_FLDCAT-FIELDNAME = &1.
WA_FLDCAT-COL_POS = &2.
WA_FLDCAT-SELTEXT_L = &3.
WA_FLDCAT-SELTEXT_M = &4.
WA_FLDCAT-SELTEXT_S = &5.
WA_FLDCAT-NO_OUT = &6.
WA_FLDCAT-DO_SUM = &7.
WA_FLDCAT-ROW_POS = &8.
WA_FLDCAT-TABNAME = &9.


APPEND WA_FLDCAT TO IT_FLDCAT.

END-OF-DEFINITION.

FLDCATB1 'VBELN' '1' 'SORDER NUM' 'SO NUM' 'SNUM' ' ' ' ' '1' 'IT_ITEM'.
FLDCATB1 'POSNR' '2' 'SORDER ITEM' 'SO ITEM' 'SITM' ' ' ' ' '1' 'IT_ITEM'.
FLDCATB1 'MATNR' '3' 'MATERIAL NO' 'MAT NO' 'MTNO' ' ' ' ' '1' 'IT_ITEM'.
FLDCATB1 'NETWR' '4' 'NET PRICE' 'NET PRICE' 'NET PRICE' ' ' 'X' '1' 'IT_ITEM'.
FLDCATB1 'MAKTX' '5' 'MATERIAL DESCRIPTION' 'MAT DESC' 'M DESC' ' ' ' ' '1' 'IT_ITEM'.
FLDCATB1 'MATKL' '6' 'MATERIAL GROUP' 'MAT GROUP' 'M GRP' 'X' ' ' '1' 'IT_ITEM'.
FLDCATB1 'POSAR' '7' 'ITEM TYPE' 'ITEM TYP' 'I TYP' 'X' ' ' '1' 'IT_ITEM'.

ENDFORM. " fldcat_hier

No comments:

Post a Comment