Vous êtes sur la page 1sur 100

ALV Reports

SAPNuts.com on google play


+-
ALV ( ABAP List Viewer ) is per-defined report format in SAP.Advantages of ALV Reports

 Better look and feel.


 ALV report consists of some per-defined options like sort, filters, sum, downloading, print, changing layout structure and many
more.

List of Function Modules used to develop ALV reports


The below are the list of Function Modules we use to display ALV reports in different formats.
REUSE_ALV_GRID_DISPLAY. "Display ALV grid format
REUSE_ALV_LIST_DISPLAY. "Display ALV List format
REUSE_ALV_COMMENTARY_WRITE. "Display Top of page, logo etc
REUSE_ALV_FIELDCATELOGUE_MERGE. "Used to generate field catelogue
REUSE_ALV_EVENTS_GET. "Use events in ALV
REUSE_ALV_HEIRARCHY_LIST_DISPLAY. "ALV Hierarchy display
REUSE_ALV_BLOCKED_LIST_DISPLAY. "Display blocked list

Was this lesson helpful to you? Yes No 33 person thin

ALV Report with Structure


SAPNuts.com on google play
+-

Requirement: Develop a ALV report to display material details with all fields from MARA table for a material range input(Select-Options
input).

In this requirement we have to display all fields from MARA (Material master table) in ALV format. We
use REUSE_ALV_GRID_DISPLAY Function module to display ALV report.

Steps to create ALV Report with Structure .


Step1: Declare Internal table for MARA table.

Step2: Print Select-Options.

Step3: Get data from database using select statements.

Step4: Call Function Module REUSE_ALV_GRID_DISPLAY and pass structure name, program name and itab name.

TABLES : MARA. "DECLARE TABLE FOR SELECT-OPTIONS


DATA : IT_MARA TYPE TABLE OF MARA. "DECLARE INTERNAL TABLE FOR MARA
DATA : WA_MARA TYPE MARA.
SELECT-OPTIONS: S_MATNR FOR MARA-MATNR. "PRINT SELECT-OPTIONS FOR MATNR
START-OF-SELECTION.
SELECT * FROM MARA INTO TABLE IT_MARA
WHERE MATNR IN S_MATNR .

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' "CALL FUNCTION MODULE TO DISPLAY ALV GRID


EXPORTING
I_CALLBACK_PROGRAM = SY-REPID "SY-REPID IS A SYSTEM VARIABLE WHICH STORES CURRENT PROGRAM NAME
I_STRUCTURE_NAME = 'MARA'
TABLES
T_OUTTAB = IT_MARA. "PASS INTERNAL TABLE TO DISPLAY ALV FORMAT

The above report after modularization


The below one is full report after using modularization techniques.

*&---------------------------------------------------------------------*
*& Report ZALV_STR
*&
*&---------------------------------------------------------------------*

REPORT ZALV_STR.
TABLES: MARA.
DATA : IT_MARA TYPE TABLE OF MARA .

SELECT-OPTIONS : S_MATNR FOR MARA-MATNR.

START-OF-SELECTION .
PERFORM GET_MARA_DATA . "Double click to create below form

END-OF-SELECTION .
PERFORM DISP_MARA_ALV . "Double click to create below form

*&---------------------------------------------------------------------*
*& Form GET_MARA_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_MARA_DATA .
SELECT * FROM MARA
INTO TABLE IT_MARA
WHERE MATNR IN S_MATNR
.
ENDFORM. " GET__MARA_DATA
*&---------------------------------------------------------------------*
*& Form DISP_MARA_ALV
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM DISP_MARA_ALV .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
I_STRUCTURE_NAME = 'MARA'
TABLES
T_OUTTAB = IT_MARA.

ENDFORM. " DISP_MARA_ALV

ALV Report with Field Catelogue


SAPNuts.com on google play

+-

Field Catalog
Field catalog is an internal table which is used to pass list of fields to display in ALV report, we can set different properties to fields which are
going to display in ALV.

Type Group
It is a data dictionary objects which contains all the reusable user-defined types.

Example for a type group is SLIS, which contains all the user-defined types for developing ALV reports.

TYPE-POOLS is a keyword which is used to assign the type-group to a ALV report .

Syntax :
TYPE-POOLS SLIS . "TO USE FIELD CATALOG WE HAVE TO INCLUDE SLIS TYPE-POOLS
DATA : <IT_FCAT> TYPE SLIS_T_FIELDCAT_ALV . "INTERNAL TABLE FOR FIELD CATALOG
DATA : <WA_FCAT> TYPE SLIS_FIELDCAT_ALV . " WORK AREA FOR FIELD CATLOG
Options/properties of field catalog.

WA_FCAT-COL_POS = '1' . "Specify position of a field


WA_FCAT-FIELDNAME = 'MATNR' . "Specify field name
WA_FCAT-TABNAME = 'IT_MARA' . "Specify internal table name
WA_FCAT-SELTEXT_M = 'MATERIALNO' . "Specify text to display column header
WA_FCAT-KEY = 'X' . "Specify if it is a key field
APPEND WA_FCAT TO IT_FCAT . "Append to field catalog internal table

Useful resourse Using append in SAP ABAP and also Using Clear in SAP ABAP

Requirement: Develop a ALV report to display Material no(MATNR), Material type(MTART), Industry Sector(MBRSH) and Basic Unit Of
measure(MEINS) for a range of material input (Select-Options).

To develop above report we have to use field catalog (because we have to display four fields only from MARA) and we have to pass foeld
catalog parameter to Function ModuleREUSE_ALV_GIRD_DISPLAY.

REPORT ZSAPN_ALV_FCAT.
TABLES : MARA.
TYPE-POOLS SLIS .

TYPES : BEGIN OF TY_MARA, "User defined internal table type


MATNR TYPE MARA-MATNR,
MTART TYPE MARA-MTART,
MBRSH TYPE MARA-MBRSH,
MEINS TYPE MARA-MEINS,
END OF TY_MARA.
DATA : IT_MARA TYPE TABLE OF TY_MARA .
DATA : WA_MARA TYPE TY_MARA .

DATA : IT_FCAT TYPE SLIS_T_FIELDCAT_ALV .


DATA : WA_FCAT LIKE LINE OF IT_FCAT .
SELECT-OPTIONS: S_MATNR FOR MARA-MATNR.

START-OF-SELECTION .
PERFORM GET_DATA .
PERFORM CREATE_FCAT.

END-OF-SELECTION .
PERFORM DISP_ALV .

*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_DATA .
SELECT MATNR MTART MBRSH MEINS FROM MARA
INTO TABLE IT_MARA
WHERE MATNR IN S_MATNR.
.
ENDFORM. " GET_DATA
*&---------------------------------------------------------------------*
*& Form DISP_ALV
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM DISP_ALV .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
IT_FIELDCAT = IT_FCAT "PASS FIELD CATALOG TO ALV
TABLES
T_OUTTAB = IT_MARA.

ENDFORM. " DISP_ALV


*&---------------------------------------------------------------------*
*& Form CREATE_FCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM CREATE_FCAT .
WA_FCAT-COL_POS = '1' .
WA_FCAT-FIELDNAME = 'MATNR' .
WA_FCAT-TABNAME = 'IT_MARA' .
WA_FCAT-SELTEXT_M = 'MATERIALNO' .
WA_FCAT-KEY = 'X' .
APPEND WA_FCAT TO IT_FCAT .
CLEAR WA_FCAT .

WA_FCAT-COL_POS = '2' .
WA_FCAT-FIELDNAME = 'MTART' .
WA_FCAT-TABNAME = 'IT_MARA' .
WA_FCAT-SELTEXT_M = 'MATERIALTYPE' .
* WA_FCAT-NO_OUT = 'X' .
WA_FCAT-HOTSPOT = 'X' .
APPEND WA_FCAT TO IT_FCAT .
CLEAR WA_FCAT .
WA_FCAT-COL_POS = '3' .
WA_FCAT-FIELDNAME = 'MBRSH' .
WA_FCAT-REF_FIELDNAME = 'MBRSH' .
WA_FCAT-REF_TABNAME = 'MARA' .
* WA_FCAT-TABNAME = 'IT_MARA' .
* WA_FCAT-SELTEXT_M = 'INDSECTOR' .
* WA_FCAT-EDIT = 'X' .
APPEND WA_FCAT TO IT_FCAT .
CLEAR WA_FCAT .

WA_FCAT-COL_POS = '4' .
WA_FCAT-FIELDNAME = 'MEINS' .
WA_FCAT-TABNAME = 'IT_MARA' .
WA_FCAT-SELTEXT_M = 'MAT.UNITS' .
WA_FCAT-EMPHASIZE = 'C610'.
APPEND WA_FCAT TO IT_FCAT .
CLEAR WA_FCAT .

ENDFORM. " CREATE_FCAT

Field Catalog Merge Not Recommanded


Field Catalog can be generated in two ways one is manual with field catalog internal table and another one
is with automatic field catalog generation...like below one but this one uses old syntax, this one is obsolete
and is not recommended.

*&---------------------------------------------------------------------*
*& Report ZALV_WITH_FCAT
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT ZALV_WITH_FCAT_MERGE.

TYPE-POOLS SLIS .

DATA : BEGIN OF I_MARA OCCURS 0,


MATNR LIKE MARA-MATNR,
MTART LIKE MARA-MTART,
MBRSH LIKE MARA-MBRSH,
MEINS LIKE MARA-MEINS,
END OF I_MARA.
DATA : I_FCAT TYPE SLIS_T_FIELDCAT_ALV .
DATA : WA_FCAT LIKE LINE OF I_FCAT .

START-OF-SELECTION .
PERFORM GET_DATA .
PERFORM CREATE_FCAT_MERGE .

END-OF-SELECTION .
PERFORM DISP_ALV .

*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_DATA .
SELECT * FROM MARA
INTO CORRESPONDING FIELDS OF TABLE I_MARA
.
ENDFORM. " GET_DATA
*&---------------------------------------------------------------------*
*& Form DISP_ALV
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM DISP_ALV .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
IT_FIELDCAT = I_FCAT
TABLES
T_OUTTAB = I_MARA.

ENDFORM. " DISP_ALV


*&---------------------------------------------------------------------*
*& Form CREATE_FCAT_MERGE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM CREATE_FCAT_MERGE .
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME = SY-REPID
I_INTERNAL_TABNAME = 'I_MARA'
I_INCLNAME = SY-REPID
CHANGING
CT_FIELDCAT = I_FCAT.
ENDFORM. " CREATE_FCAT_MERGE

ALV Report with layout


SAPNuts.com on google play

+-

Layout:
Layout is a structure which is used to decorate or embellish the out put of ALV Report.

Requirement: Display list of materials for a material type, with all fields of out put are editable, no horizontal and vertical lines and hotspot
on material no.

Input Screen
Out put Screen (all rows are editable and hotspot on material no)
Please follow previous lesson steps to create a fieldcatlog in ALV, in addition to that we will be adding additional properties hotspot,
editable to out put fields using layout options.

The below is the code to add layout to ALV.

DATA : WA_LAYOUT TYPE SLIS_LAYOUT_ALV .


WA_LAYOUT-ZEBRA = 'X' .
WA_LAYOUT-COLWIDTH_OPTIMIZE = 'X' .
WA_LAYOUT-EDIT = 'X' .
WA_LAYOUT-NO_VLINE = 'X' .
WA_LAYOUT-NO_HLINE = 'X' .

We will supply remaining options through fieldcatlog also.

Full referance code for using layout in ALV


REPORT ZSAPN_ALV_LAYOUT.
TYPE-POOLS : SLIS .
*DATA DECLARAATIONS
DATA : I_MARA TYPE TABLE OF MARA .
DATA : WA_MARA TYPE MARA .
*ALV DECLARATIONS
DATA : I_FCAT TYPE SLIS_T_FIELDCAT_ALV .
DATA : WA_FCAT TYPE SLIS_FIELDCAT_ALV .
DATA : V_POS TYPE I .
DATA : WA_LAYOUT TYPE SLIS_LAYOUT_ALV .
PARAMETERS : P_MTART TYPE MARA-MTART.

START-OF-SELECTION .
PERFORM GET_DATA .
PERFORM CREATE_FCAT .
PERFORM CREATE_LAYOUT.
PERFORM DISPLAY_DATA .
END-OF-SELECTION .
FORM GET_DATA .
SELECT * FROM MARA
INTO TABLE I_MARA
UP TO 100 ROWS WHERE MTART = P_MTART .
ENDFORM. " GET_DATA
FORM DISPLAY_DATA .

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'


EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
IS_LAYOUT = WA_LAYOUT
IT_FIELDCAT = I_FCAT
TABLES
T_OUTTAB = I_MARA.
ENDFORM. " DISPLAY_DATA
FORM DISPLAY_DATA_LIST .
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
I_STRUCTURE_NAME = 'MARA'
TABLES
T_OUTTAB = I_MARA.
IF SY-SUBRC NE 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

ENDFORM. " DISPLAY_DATA_LIST


FORM CREATE_FCAT .
V_POS = 1 .
WA_FCAT-COL_POS = V_POS.
WA_FCAT-FIELDNAME = 'MATNR' .
WA_FCAT-SELTEXT_M = 'Material.NO' .
WA_FCAT-HOTSPOT = 'X' .
APPEND WA_FCAT TO I_FCAT .
CLEAR WA_FCAT .

V_POS = V_POS 1.
WA_FCAT-COL_POS = V_POS .
WA_FCAT-FIELDNAME = 'MTART' .
WA_FCAT-SELTEXT_M = 'Material.Type' .
APPEND WA_FCAT TO I_FCAT .
CLEAR WA_FCAT .

V_POS = V_POS 1.
WA_FCAT-COL_POS = V_POS .
WA_FCAT-FIELDNAME = 'MBRSH' .
WA_FCAT-SELTEXT_M = 'Ind.Sector' .
APPEND WA_FCAT TO I_FCAT .
CLEAR WA_FCAT .

V_POS = V_POS 1.
WA_FCAT-COL_POS = V_POS .
WA_FCAT-FIELDNAME = 'MATKL' .
WA_FCAT-SELTEXT_M = 'Mat.Grp' .
APPEND WA_FCAT TO I_FCAT .
CLEAR WA_FCAT .

V_POS = V_POS 1.
WA_FCAT-COL_POS = V_POS .
WA_FCAT-FIELDNAME = 'MEINS' .
WA_FCAT-SELTEXT_M = 'Units' .
APPEND WA_FCAT TO I_FCAT .
CLEAR WA_FCAT .

ENDFORM. " CREATE_FCAT


FORM CREATE_LAYOUT .
WA_LAYOUT-ZEBRA = 'X' .
WA_LAYOUT-COLWIDTH_OPTIMIZE = 'X' .
WA_LAYOUT-EDIT = 'X' .
WA_LAYOUT-NO_VLINE = 'X' .
WA_LAYOUT-NO_HLINE = 'X' .

ENDFORM. " CREATE_LAYOUT

ALV with totals and sub totals in SAP ABAP


SAPNuts.com on google play

+-

To calculate totals and sub-totals in ALV we need to sort table in ascending order and we need to set SUBTOT = 'X' of SORT in ALV.

Layout:
Layout is a structure which is used to decorate or embellish the out put of ALV Report.

Requirement: Display list of sales order for sales order range with totals and subtotals of price

Input screen
Output screen (with totals and subtotals).

Please follow previous lesson steps to create a fieldcatlog in ALV, in addition to that we will be adding additional properties hotspot,
editable to out put fields using layout options.
The below code is used to display totals and subtotals in ALV.

DATA : I_SORT TYPE SLIS_T_SORTINFO_ALV .


DATA : WA_SORT LIKE LINE OF I_SORT .
WA_SORT-FIELDNAME = 'VBELN '.
WA_SORT-UP = 'X'.
WA_SORT-SUBTOT = 'X '.

APPEND WA_SORT TO I_SORT .

Full referance code for displaying totals and subtotals in ALV


REPORT ZALV_WITH_TOTALS_SUBTOT.
TYPE-POOLS SLIS .
tables : vbap.
TYPES : BEGIN OF TY_VBAP,
VBELN TYPE VBAP-VBELN,
POSNR TYPE VBAP-POSNR,
MATNR TYPE VBAP-MATNR,
NETWR TYPE VBAP-NETWR,
END OF TY_VBAP.
DATA : I_VBAP TYPE TABLE OF TY_VBAP .
DATA : WA_VBAP TYPE TY_VBAP .

DATA : I_FCAT TYPE SLIS_T_FIELDCAT_ALV .


DATA : WA_FCAT LIKE LINE OF I_FCAT .
DATA : I_SORT TYPE SLIS_T_SORTINFO_ALV .
DATA : WA_SORT LIKE LINE OF I_SORT .
select-options : s_vbeln for vbap-vbeln.
START-OF-SELECTION .
PERFORM GET_DATA .
PERFORM CREATE_FCAT.
PERFORM CALC_SUBTOT.

END-OF-SELECTION .
PERFORM DISP_ALV .
FORM GET_DATA .
SELECT VBELN POSNR MATNR NETWR FROM VBAP
INTO TABLE I_VBAP where vbeln in s_vbeln
.
ENDFORM. " GET_DATA
FORM DISP_ALV .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
* I_INTERFACE_CHECK = ' '
* I_BYPASSING_BUFFER = ' '
* I_BUFFER_ACTIVE = ' '
I_CALLBACK_PROGRAM = SY-REPID
* 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 =
* I_GRID_SETTINGS =
* IS_LAYOUT =
IT_FIELDCAT = I_FCAT
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS =
IT_SORT = I_SORT
* IT_FILTER =
* IS_SEL_HIDE =
* I_DEFAULT = 'X'
* I_SAVE = ' '
* IS_VARIANT =
* 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 = I_VBAP
* EXCEPTIONS
* PROGRAM_ERROR = 1
* OTHERS = 2
.
IF SY-SUBRC NE 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 CREATE_FCAT .
WA_FCAT-COL_POS = '1' .
WA_FCAT-FIELDNAME = 'VBELN' .
WA_FCAT-TABNAME = 'I_VBAP' .
WA_FCAT-SELTEXT_M = 'SDNO' .
WA_FCAT-KEY = 'X' .
APPEND WA_FCAT TO I_FCAT .
CLEAR WA_FCAT .

WA_FCAT-COL_POS = '2' .
WA_FCAT-FIELDNAME = 'POSNR' .
WA_FCAT-TABNAME = 'I_VBAP' .
WA_FCAT-SELTEXT_M = 'ITEMNO' .
* WA_FCAT-NO_OUT = 'X' .
WA_FCAT-HOTSPOT = 'X' .
APPEND WA_FCAT TO I_FCAT .
CLEAR WA_FCAT .

WA_FCAT-COL_POS = '3' .
WA_FCAT-FIELDNAME = 'MATNR' .
WA_FCAT-TABNAME = 'I_VBAP' .
WA_FCAT-SELTEXT_M = 'MATERIALNO' .
* WA_FCAT-EDIT = 'X' .
APPEND WA_FCAT TO I_FCAT .
CLEAR WA_FCAT .

WA_FCAT-COL_POS = '4' .
WA_FCAT-FIELDNAME = 'NETWR' .
WA_FCAT-TABNAME = 'I_VBAP' .
WA_FCAT-SELTEXT_M = 'NETPRICE' .
WA_FCAT-EMPHASIZE = 'C610'.
WA_FCAT-DO_SUM = 'X' .
APPEND WA_FCAT TO I_FCAT .
CLEAR WA_FCAT .

ENDFORM. " CREATE_FCAT


FORM CALC_SUBTOT .
WA_SORT-FIELDNAME = 'VBELN '.
WA_SORT-UP = 'X'.
WA_SORT-SUBTOT = 'X '.
APPEND WA_SORT TO I_SORT .
ENDFORM. " CALC_SUBTOT

Events in ALV reports


SAPNuts.com on google play
+-

There are total 17 events available for ALV reporting, by using this events we can display report headers, report footers, user command, pf
status etc.

We use REUSE_ALV_EVENTS_GET function module to get events and use in our report.

Steps for implementing events.

STEP1: Call the function module ‘REUSE_ALV_EVENTS_GET’ and get all the events into a Internal Table(I_EVENTS).

STEP2: For each EVENT we need to provide a Sub-Routine name. So Read the EVENT from Internal Table into WorkArea and provide the
Sub-Routine name.

STEP3: Finally , define the Sub-Routine and write logic.

Event definition Syntax.

*Get events using function module


CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
* EXPORTING
* I_LIST_TYPE = 0
IMPORTING
ET_EVENTS = I_EVENTS .
*add perform name to a event
READ TABLE I_EVENTS INTO WA_EVENTS WITH KEY NAME = ‘<EVENT NAME>' .
WA_EVENTS-FORM = '<FORM_XXX>' .
MODIFY I_EVENTS FROM WA_EVENTS INDEX SY-TABIX .
*<EVENT NAME> = name of the event
*<FORM_XXX> is perform name to implement for particular event
Event implementation in perform

FORM <FORM_XXX>.

** Add functionality for event


ENDFORM.

Using Top of page and end of list IN ALV reports


SAPNuts.com on google play
+-

 Call the function module REUSE_ALV_EVENTS_GET.


 Provide the sub routine name for top-of-page event.
 Implement the subroutine to display top of page .
 Call the function module REUSE_ALV_COMMENTARY_WRITE to display top-of-page in ALV
 Finally export the events into internal table to the REUSE_ALV_GRID_DISPLAY.

REPORT ZALV_MATERIAL_TOP_OF_PAGE.
TYPE-POOLS : SLIS .
*DATA DECLARAATIONS
DATA : I_MARA TYPE TABLE OF MARA .
DATA : WA_MARA TYPE MARA .
*ALV DECLARATIONS
DATA : I_FCAT TYPE SLIS_T_FIELDCAT_ALV .
DATA : WA_FCAT TYPE SLIS_FIELDCAT_ALV .
DATA : V_POS TYPE I .
DATA : I_EVENTS TYPE SLIS_T_EVENT .
DATA : WA_EVENTS LIKE LINE OF I_EVENTS .
DATA : I_HEADING TYPE SLIS_T_LISTHEADER .
DATA : WA_HEADING LIKE LINE OF I_HEADING .

START-OF-SELECTION .
PERFORM GET_DATA .
PERFORM CREATE_FCAT .
PERFORM GET_EVENTS .
PERFORM DISPLAY_DATA .

END-OF-SELECTION .

FORM GET_DATA .
SELECT * FROM MARA
INTO TABLE I_MARA
UP TO 100 ROWS .
ENDFORM. " GET_DATA
FORM DISPLAY_DATA .

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'


EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
IT_FIELDCAT = I_FCAT
IT_EVENTS = I_EVENTS
TABLES
T_OUTTAB = I_MARA.
ENDFORM. " DISPLAY_DATA

FORM CREATE_FCAT .
V_POS = 1 .
WA_FCAT-COL_POS = V_POS.
WA_FCAT-FIELDNAME = 'MATNR' .
WA_FCAT-SELTEXT_M = 'Material.NO' .
WA_FCAT-HOTSPOT = 'X' .
APPEND WA_FCAT TO I_FCAT .
CLEAR WA_FCAT .

V_POS = V_POS 1.
WA_FCAT-COL_POS = V_POS .
WA_FCAT-FIELDNAME = 'MTART' .
WA_FCAT-SELTEXT_M = 'Material.Type' .
APPEND WA_FCAT TO I_FCAT .
CLEAR WA_FCAT .

V_POS = V_POS 1.
WA_FCAT-COL_POS = V_POS .
WA_FCAT-FIELDNAME = 'MBRSH' .
WA_FCAT-SELTEXT_M = 'Ind.Sector' .
APPEND WA_FCAT TO I_FCAT .
CLEAR WA_FCAT .

V_POS = V_POS 1.
WA_FCAT-COL_POS = V_POS .
WA_FCAT-FIELDNAME = 'MATKL' .
WA_FCAT-SELTEXT_M = 'Mat.Grp' .
APPEND WA_FCAT TO I_FCAT .
CLEAR WA_FCAT .

V_POS = V_POS 1.
WA_FCAT-COL_POS = V_POS .
WA_FCAT-FIELDNAME = 'MEINS' .
WA_FCAT-SELTEXT_M = 'Units' .
APPEND WA_FCAT TO I_FCAT .
CLEAR WA_FCAT .

ENDFORM. " CREATE_FCAT


FORM GET_EVENTS .
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
* EXPORTING
* I_LIST_TYPE = 0
IMPORTING
ET_EVENTS = I_EVENTS .

READ TABLE I_EVENTS INTO WA_EVENTS WITH KEY NAME = 'TOP_OF_PAGE' .


WA_EVENTS-FORM = 'FORM_TOP_OF_PAGE' .
MODIFY I_EVENTS FROM WA_EVENTS INDEX SY-TABIX .

***********END OF LIST
READ TABLE I_EVENTS INTO WA_EVENTS WITH KEY NAME = 'END_OF_LIST' .
WA_EVENTS-FORM = 'FORM_END_OF_LIST' .
MODIFY I_EVENTS FROM WA_EVENTS INDEX SY-TABIX .
ENDFORM. " GET_EVENTS

FORM FORM_TOP_OF_PAGE .
WA_HEADING-TYP = 'H' .
* WA_HEADING-KEY = 'H' .
WA_HEADING-INFO = 'MATERIAL MASTER REPORT' .
APPEND WA_HEADING TO I_HEADING .

WA_HEADING-TYP = 'S' .
WA_HEADING-KEY = 'USERNAME' .
WA_HEADING-INFO = SY-UNAME .
APPEND WA_HEADING TO I_HEADING .

WA_HEADING-TYP = 'A' .
WA_HEADING-KEY = 'DATE' .
WA_HEADING-INFO = SY-DATUM .
APPEND WA_HEADING TO I_HEADING .

CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'


EXPORTING
IT_LIST_COMMENTARY = I_HEADING
* I_LOGO =
* I_END_OF_LIST_GRID =
* I_ALV_FORM =
.

ENDFORM . "FORM_TOP_OF_PAGE

FORM FORM_END_OF_LIST .
REFRESH I_HEADING .
CLEAR WA_HEADING .
WA_HEADING-TYP = 'S' .
WA_HEADING-INFO = 'IBM INDIA PVT.LTD' .
APPEND WA_HEADING TO I_HEADING .

CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'


EXPORTING
IT_LIST_COMMENTARY = I_HEADING
I_END_OF_LIST_GRID = 'X'
.
ENDFORM . "FORM_END_OF_LIST

Dynamic ALV to display SE11 table data


SAPNuts.com on google play

+-

In the below example, we are going to display SE11 table data(ant transparent table) in the form if ALV, follow the below steps.

Step1 : Create field catalog for the table.


Step2: Create dynamic table.
Step3: Get table data.
Step4: Display ALV.
Step1: build field catalog for the input table.
PARAMETERS: P_TABLE TYPE DD02L-TABNAME. "table input

START-OF-SELECTION.
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE' "create field catalog
EXPORTING
I_STRUCTURE_NAME = P_TABLE
CHANGING
CT_FIELDCAT = IT_FCAT.

Step2: Create dynamic table.


Create dynamic table using CREATE_DYNAMIC_TABLE method of CL_ALV_TABLE_CREATE class.

DATA : FS_TAB TYPE REF TO DATA.


CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE
EXPORTING
* I_STYLE_TABLE =
IT_FIELDCATALOG = IT_FCAT
* I_LENGTH_IN_BYTE =
IMPORTING
EP_TABLE = FS_TAB.

Get data from table using select statement


Get data from entered table using select statements.

FIELD-SYMBOLS: <fs_tab> TYPE STANDARD TABLE. "declare field symbol


ASSIGN FS_TAB->* TO <fs_tab>. "assign field symbol memory
SELECT * FROM (P_TABLE) INTO CORRESPONDING FIELDS OF TABLE <fs_tab> UP TO 50 ROWS. "get data

Step4:Display ALV
Display data in ALV using field catalog and table.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'


EXPORTING
I_STRUCTURE_NAME = P_TABLE
TABLES
T_OUTTAB = <fs_tab>.

Final Code will be


REPORT ZSAN_RFCTEST.
DATA : IT_FCAT TYPE LVC_T_FCAT.
PARAMETERS: P_TABLE TYPE DD02L-TABNAME.
DATA : WA_TABLE TYPE DD02L.
AT SELECTION-SCREEN.
IF P_TABLE IS NOT INITIAL.
SELECT SINGLE * FROM DD02L INTO WA_TABLE WHERE TABNAME = P_TABLE AND TABCLASS = 'TRANSP'.
ELSE.
MESSAGE 'Please enter a table' TYPE 'E'.
STOP.
ENDIF.
IF WA_TABLE IS INITIAL.
MESSAGE 'Table Dosent exit or is not transparent table' TYPE 'E'.
STOP.
ENDIF.

START-OF-SELECTION.
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
I_STRUCTURE_NAME = P_TABLE
CHANGING
CT_FIELDCAT = IT_FCAT.

DATA : FS_TAB TYPE REF TO DATA.


CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE
EXPORTING
* I_STYLE_TABLE =
IT_FIELDCATALOG = IT_FCAT
* I_LENGTH_IN_BYTE =
IMPORTING
EP_TABLE = FS_TAB.

FIELD-SYMBOLS: <FS_TAB> TYPE STANDARD TABLE.


ASSIGN FS_TAB->* TO <FS_TAB>.
*data : it_tab type TABLE OF p_table.
SELECT * FROM (P_TABLE) INTO CORRESPONDING FIELDS OF TABLE <FS_TAB> UP TO 50 ROWS.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_STRUCTURE_NAME = P_TABLE
TABLES
T_OUTTAB = <FS_TAB>.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.

ALV Blocked List Display


SAPNuts.com on google play

+-

Requirement: Develop a blocked list ALV to display list of materials for a material type and also display material descriptions in another grid.
Analysis: For this requirement, we need to add one input parameter for material type, we need to get materials from MARA, and from
MAKT and display in two list ALV`s using ALV blocked display.

Blocked list ALV is used to display multiple ALV`s on the same screen with blocks.

List of Function Modules used for blocked list ALV

 REUSE_ALV_BLOCK_LIST_INIT
 REUSE_ALV_BLOCK_LIST_APPEND
 REUSE_ALV_BLOCK_LIST_DISPLAY

REUSE_ALV_BLOCK_LIST_INIT : is used to initialize blocked list ALV.

REUSE_ALV_BLOCK_LIST_APPEND : is used to add blocked list ALV's(we can add multiple).

REUSE_ALV_BLOCK_LIST_DISPLAY : is used to display blocked list ALV.

Follow the below steps to create blocked list ALV


Create a program in SE38, add data declerations
Create a report program in SE38 and add data declerations for MARA table, MAKT table.Add a input parameter for material type input.

TYPES: BEGIN OF TY_MARA, "user defined type for mara


MATNR TYPE MARA-MATNR,
MTART TYPE MARA-MTART,
MBRSH TYPE MARA-MBRSH,
MATKL TYPE MARA-MATKL,
MEINS TYPE MARA-MEINS,
END OF TY_MARA.
DATA : IT_MARA TYPE TABLE OF TY_MARA, "mara internal table
WA_MARA TYPE TY_MARA. "mara work area
TYPES: BEGIN OF TY_MAKT, "user defined type for MAKT
MATNR TYPE MAKT-MATNR,
SPRAS TYPE MAKT-SPRAS,
MAKTX TYPE MAKT-MAKTX,
END OF TY_MAKT.
DATA : IT_MAKT TYPE TABLE OF TY_MAKT, "makt internal table
WA_MAKT TYPE TY_MAKT.
PARAMETERS : P_MTART TYPE MARA-MTART. "material type input

Build Field catalog for MARA and MAKT tables


Build field catalog for MARA and MAKT tables.

DATA : T_FCAT TYPE SLIS_T_FIELDCAT_ALV. "field catalog for MARA table


DATA : W_FCAT LIKE LINE OF T_FCAT.
DATA : T_FCAT_MAKT TYPE SLIS_T_FIELDCAT_ALV. "makt field catalog
DATA : W_FCAT_MAKT LIKE LINE OF T_FCAT_MAKT.
***build fcat for MARA
W_FCAT-COL_POS = '1'. "coloum position
W_FCAT-FIELDNAME = 'MATNR'. "column name
W_FCAT-TABNAME = 'IT_MARA'. "table
W_FCAT-REF_TABNAME = 'MARA'. "table
W_FCAT-REF_FIELDNAME = 'MATNR'. "referance field, it will show descriptions automatically
APPEND W_FCAT TO T_FCAT.
CLEAR W_FCAT.

W_FCAT-COL_POS = '2'.
W_FCAT-FIELDNAME = 'MTART'.
W_FCAT-TABNAME = 'IT_MARA'.
W_FCAT-REF_TABNAME = 'MARA'.
W_FCAT-REF_FIELDNAME = 'MTART'.
APPEND W_FCAT TO T_FCAT.
CLEAR W_FCAT.

W_FCAT-COL_POS = '3'.
W_FCAT-FIELDNAME = 'MBRSH'.
W_FCAT-TABNAME = 'IT_MARA'.
W_FCAT-REF_TABNAME = 'MARA'.
W_FCAT-REF_FIELDNAME = 'MBRSH'.
APPEND W_FCAT TO T_FCAT.
CLEAR W_FCAT.
W_FCAT-COL_POS = '4'.
W_FCAT-FIELDNAME = 'MATKL'.
W_FCAT-TABNAME = 'IT_MARA'.
W_FCAT-REF_TABNAME = 'MARA'.
W_FCAT-REF_FIELDNAME = 'MATKL'.
APPEND W_FCAT TO T_FCAT.
CLEAR W_FCAT.

W_FCAT-COL_POS = '5'.
W_FCAT-FIELDNAME = 'MEINS'.
W_FCAT-TABNAME = 'IT_MARA'.
W_FCAT-REF_TABNAME = 'MARA'.
W_FCAT-REF_FIELDNAME = 'MEINS'.
APPEND W_FCAT TO T_FCAT.
CLEAR W_FCAT.

***build fcat for MAKT


W_FCAT_MAKT-COL_POS = '1'.
W_FCAT_MAKT-FIELDNAME = 'MATNR'.
W_FCAT_MAKT-TABNAME = 'IT_MAKT'.
W_FCAT_MAKT-REF_TABNAME = 'MAKT'.
W_FCAT_MAKT-REF_FIELDNAME = 'MATNR'.
APPEND W_FCAT_MAKT TO T_FCAT_MAKT.
CLEAR W_FCAT_MAKT.
W_FCAT_MAKT-COL_POS = '2'.
W_FCAT_MAKT-FIELDNAME = 'SPRAS'.
W_FCAT_MAKT-TABNAME = 'IT_MAKT'.
W_FCAT_MAKT-REF_TABNAME = 'MAKT'.
W_FCAT_MAKT-REF_FIELDNAME = 'SPRAS'.
APPEND W_FCAT_MAKT TO T_FCAT_MAKT.
CLEAR W_FCAT_MAKT.
W_FCAT_MAKT-COL_POS = '3'.
W_FCAT_MAKT-FIELDNAME = 'MAKTX'.
W_FCAT_MAKT-TABNAME = 'IT_MAKT'.
W_FCAT_MAKT-REF_TABNAME = 'MAKT'.
W_FCAT_MAKT-REF_FIELDNAME = 'MAKTX'.
APPEND W_FCAT_MAKT TO T_FCAT_MAKT.
CLEAR W_FCAT_MAKT.

Initialize Blocked List ALV


Initialize blocked list ALV using Function Module REUSE_ALV_BLOCK_LIST_INIT.

* * init
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_INIT' "initialize Block List ALV
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID.
Add lists to blocked list ALV
Add all ALV lists with field catalogs

DATA S_EVENTS TYPE SLIS_T_EVENT.


DATA S_LAYOUT TYPE SLIS_LAYOUT_ALV.
S_LAYOUT-ZEBRA = 'X'. "display zebra colours(alternate colours on rows)
**Add MARA list
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_APPEND' "append ALV lists
EXPORTING
IS_LAYOUT = S_LAYOUT "set layout
IT_FIELDCAT = T_FCAT "set field catalog
I_TABNAME = 'IT_MARA' "table
IT_EVENTS = S_EVENTS "events
* IT_SORT =
* I_TEXT = ' '
TABLES
T_OUTTAB = IT_MARA "out put table
* EXCEPTIONS
* PROGRAM_ERROR = 1
* MAXIMUM_OF_APPENDS_REACHED = 2
* OTHERS = 3
.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
**add MAKT list
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_APPEND' "append ALV lists
EXPORTING
IS_LAYOUT = S_LAYOUT "set layout
IT_FIELDCAT = T_FCAT_MAKT "set field catalog
I_TABNAME = 'IT_MAKT' "table
IT_EVENTS = S_EVENTS "events
* IT_SORT =
* I_TEXT = ' '
TABLES
T_OUTTAB = IT_MAKT "out put table
* EXCEPTIONS
* PROGRAM_ERROR = 1
* MAXIMUM_OF_APPENDS_REACHED = 2
* OTHERS = 3
.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.

Display Blocked List


Display blocked list ALV using Function module REUSE_ALV_BLOCK_LIST_DISPLAY.
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_DISPLAY' . "display blocked list

Full and Final Code to display blocked list ALV


REPORT ZSAPN_ALV_BLOCKEDLIST.
TYPES: BEGIN OF TY_MARA, "user defined type for mara
MATNR TYPE MARA-MATNR,
MTART TYPE MARA-MTART,
MBRSH TYPE MARA-MBRSH,
MATKL TYPE MARA-MATKL,
MEINS TYPE MARA-MEINS,
END OF TY_MARA.
DATA : IT_MARA TYPE TABLE OF TY_MARA, "mara internal table
WA_MARA TYPE TY_MARA. "mara work area
DATA : T_FCAT TYPE SLIS_T_FIELDCAT_ALV. "field catalog for MARA table
DATA : W_FCAT LIKE LINE OF T_FCAT.

TYPES: BEGIN OF TY_MAKT, "user defined type for MAKT


MATNR TYPE MAKT-MATNR,
SPRAS TYPE MAKT-SPRAS,
MAKTX TYPE MAKT-MAKTX,
END OF TY_MAKT.
DATA : IT_MAKT TYPE TABLE OF TY_MAKT, "makt internal table
WA_MAKT TYPE TY_MAKT.
DATA : T_FCAT_MAKT TYPE SLIS_T_FIELDCAT_ALV. "makt field catalog
DATA : W_FCAT_MAKT LIKE LINE OF T_FCAT_MAKT.
PARAMETERS : P_MTART TYPE MARA-MTART. "material type input

START-OF-SELECTION.

SELECT MATNR
MTART
MBRSH
MATKL
MEINS FROM MARA "get MARA data
INTO TABLE IT_MARA UP TO 10 ROWS WHERE MTART = P_MTART.
IF NOT IT_MARA IS INITIAL .
SELECT MATNR
SPRAS
MAKTX FROM MAKT INTO TABLE IT_MAKT "get makt data
FOR ALL ENTRIES IN IT_MARA WHERE MATNR = IT_MARA-MATNR.
ENDIF.
***build fcat for MARA
W_FCAT-COL_POS = '1'. "coloum position
W_FCAT-FIELDNAME = 'MATNR'. "column name
W_FCAT-TABNAME = 'IT_MARA'. "table
W_FCAT-REF_TABNAME = 'MARA'. "table
W_FCAT-REF_FIELDNAME = 'MATNR'. "referance field, it will show descriptions automatically
APPEND W_FCAT TO T_FCAT.
CLEAR W_FCAT.

W_FCAT-COL_POS = '2'.
W_FCAT-FIELDNAME = 'MTART'.
W_FCAT-TABNAME = 'IT_MARA'.
W_FCAT-REF_TABNAME = 'MARA'.
W_FCAT-REF_FIELDNAME = 'MTART'.
APPEND W_FCAT TO T_FCAT.
CLEAR W_FCAT.

W_FCAT-COL_POS = '3'.
W_FCAT-FIELDNAME = 'MBRSH'.
W_FCAT-TABNAME = 'IT_MARA'.
W_FCAT-REF_TABNAME = 'MARA'.
W_FCAT-REF_FIELDNAME = 'MBRSH'.
APPEND W_FCAT TO T_FCAT.
CLEAR W_FCAT.

W_FCAT-COL_POS = '4'.
W_FCAT-FIELDNAME = 'MATKL'.
W_FCAT-TABNAME = 'IT_MARA'.
W_FCAT-REF_TABNAME = 'MARA'.
W_FCAT-REF_FIELDNAME = 'MATKL'.
APPEND W_FCAT TO T_FCAT.
CLEAR W_FCAT.

W_FCAT-COL_POS = '5'.
W_FCAT-FIELDNAME = 'MEINS'.
W_FCAT-TABNAME = 'IT_MARA'.
W_FCAT-REF_TABNAME = 'MARA'.
W_FCAT-REF_FIELDNAME = 'MEINS'.
APPEND W_FCAT TO T_FCAT.
CLEAR W_FCAT.

***build fcat for MAKT


W_FCAT_MAKT-COL_POS = '1'.
W_FCAT_MAKT-FIELDNAME = 'MATNR'.
W_FCAT_MAKT-TABNAME = 'IT_MAKT'.
W_FCAT_MAKT-REF_TABNAME = 'MAKT'.
W_FCAT_MAKT-REF_FIELDNAME = 'MATNR'.
APPEND W_FCAT_MAKT TO T_FCAT_MAKT.
CLEAR W_FCAT_MAKT.
W_FCAT_MAKT-COL_POS = '2'.
W_FCAT_MAKT-FIELDNAME = 'SPRAS'.
W_FCAT_MAKT-TABNAME = 'IT_MAKT'.
W_FCAT_MAKT-REF_TABNAME = 'MAKT'.
W_FCAT_MAKT-REF_FIELDNAME = 'SPRAS'.
APPEND W_FCAT_MAKT TO T_FCAT_MAKT.
CLEAR W_FCAT_MAKT.
W_FCAT_MAKT-COL_POS = '3'.
W_FCAT_MAKT-FIELDNAME = 'MAKTX'.
W_FCAT_MAKT-TABNAME = 'IT_MAKT'.
W_FCAT_MAKT-REF_TABNAME = 'MAKT'.
W_FCAT_MAKT-REF_FIELDNAME = 'MAKTX'.
APPEND W_FCAT_MAKT TO T_FCAT_MAKT.
CLEAR W_FCAT_MAKT.
* * init
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_INIT' "initialize Block List ALV
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID.

DATA S_EVENTS TYPE SLIS_T_EVENT.


DATA S_LAYOUT TYPE SLIS_LAYOUT_ALV.
S_LAYOUT-ZEBRA = 'X'.
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_APPEND' "append ALV lists
EXPORTING
IS_LAYOUT = S_LAYOUT "set layout
IT_FIELDCAT = T_FCAT "set field catalog
I_TABNAME = 'IT_MARA' "table
IT_EVENTS = S_EVENTS "events
* IT_SORT =
* I_TEXT = ' '
TABLES
T_OUTTAB = IT_MARA "out put table
* EXCEPTIONS
* PROGRAM_ERROR = 1
* MAXIMUM_OF_APPENDS_REACHED = 2
* OTHERS = 3
.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.

CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_APPEND' "append ALV lists


EXPORTING
IS_LAYOUT = S_LAYOUT "set layout
IT_FIELDCAT = T_FCAT_MAKT "set field catalog
I_TABNAME = 'IT_MAKT' "table
IT_EVENTS = S_EVENTS "events
* IT_SORT =
* I_TEXT = ' '
TABLES
T_OUTTAB = IT_MAKT "out put table
* EXCEPTIONS
* PROGRAM_ERROR = 1
* MAXIMUM_OF_APPENDS_REACHED = 2
* OTHERS = 3
.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_DISPLAY' . "display blocked list
Hide ALV toolbar buttons using ALV Exclude
SAPNuts.com on google play

+-
Sometimes, we may need to hide some ALV toolbar buttons in ALV grid Display using REUSE_ALV_GRID_DISPLAY.

The below are the steps we are going to do to hide ALV tool bar buttons.

1. Get Standard GUI Function Codes.


2. Exclude ALV toolbar functions using IT_EXCLUDE exporting parameter.

Get Standard GUI function codes


We can get standard GUI function codes using function module RS_CUA_GET_STATUS_FUNCTIONS by passing standard
program ‘SAPLKKBL’ and status‘STANDARD_FULLSCREEN’.

DATA : FUN TYPE TABLE OF RSEUL_FUN.


DATA : WA_FUN LIKE LINE OF FUN.
CALL FUNCTION 'RS_CUA_GET_STATUS_FUNCTIONS'
EXPORTING
LANGUAGE = 'E'
PROGRAM = 'SAPLKKBL'
STATUS = 'STANDARD_FULLSCREEN'
TABLES
FUNCTIONS = FUN.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.

Exclude functions using IT_EXCLUDE parameter of ALV grid


Loop through the standard GUI function which we got in previous step, and pass to exclude table.

DATA : IT_EXCLUDE TYPE SLIS_T_EXTAB,


WA_EXCLUDE TYPE SLIS_EXTAB.
LOOP AT FUN INTO WA_FUN. "loop through all functions
IF WA_FUN-FCODE EQ '&F03' OR WA_FUN-FCODE EQ '&F15' OR WA_FUN-FCODE EQ '&F12'. "don`t add back, exit, stop functi
ons

ELSE.
WA_EXCLUDE-FCODE = WA_FUN-FCODE. "add all remaining
APPEND WA_EXCLUDE TO IT_EXCLUDE.
CLEAR WA_EXCLUDE.
ENDIF.
ENDLOOP.

Full and Final Code


REPORT ZSAPN_ALV_FUNCTIONS.
DATA: IT_MARA TYPE TABLE OF MARA,
WA_MARA TYPE MARA.
DATA : FUN TYPE TABLE OF RSEUL_FUN.
DATA : WA_FUN LIKE LINE OF FUN.
DATA : IT_EXCLUDE TYPE SLIS_T_EXTAB,
WA_EXCLUDE TYPE SLIS_EXTAB.

START-OF-SELECTION.
SELECT * FROM MARA INTO TABLE IT_MARA UP TO 50 ROWS.
CALL FUNCTION 'RS_CUA_GET_STATUS_FUNCTIONS'
EXPORTING
LANGUAGE = 'E'
PROGRAM = 'SAPLKKBL'
STATUS = 'STANDARD_FULLSCREEN'
TABLES
FUNCTIONS = FUN.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.

*&---------------------------------------------------------------------*
* FOR EXCLUDING STANDARD BUTTONS FROM ALV TOOLBAR
*&---------------------------------------------------------------------*
LOOP AT FUN INTO WA_FUN. "loop through all functions
IF WA_FUN-FCODE EQ '&F03' OR WA_FUN-FCODE EQ '&F15' OR WA_FUN-FCODE EQ '&F12'. "don`t add back, exit, stop functi
ons

ELSE.
WA_EXCLUDE-FCODE = WA_FUN-FCODE. "add all remaining
APPEND WA_EXCLUDE TO IT_EXCLUDE.
CLEAR WA_EXCLUDE.
ENDIF.
ENDLOOP.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'


EXPORTING
* I_CALLBACK_PF_STATUS_SET = 'PF_STATUS'
I_STRUCTURE_NAME = 'MARA'
IT_EXCLUDING = IT_EXCLUDE "exclude functions
TABLES
T_OUTTAB = IT_MARA. "MARA table data
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.

Was this lesson helpful to you? Yes No 8 person think this helpful and 0 th

Interactive Report ALV


SAPNuts.com on google play

+-

Requirement: Display list of materials for a material type with below options. 1. Add a hotspot for material number. 2. Whenever user
double click on any material no, it should go to MM03 transaction to display material.

To make an interactive report we use USER COMMAND event as call back user command for ALV.
Follow below steps to develop an interactive ALV.

Step1: Data decelerations.

TYPES : BEGIN OF TY_MARA, "User defined internal table type


MATNR TYPE MARA-MATNR,
MTART TYPE MARA-MTART,
MBRSH TYPE MARA-MBRSH,
MEINS TYPE MARA-MEINS,
END OF TY_MARA.

DATA : IT_MARA TYPE TABLE OF TY_MARA ."internal table


DATA : WA_MARA TYPE TY_MARA . "work area
PARAMETERS : P_MTART TYPE MARA-MTART. "material type input

Step2: Get data from MARA

START-OF-SELECTION.
**get table data
SELECT MATNR MTART MBRSH MEINS FROM MARA "get data from MARA
INTO TABLE IT_MARA UP TO 50 ROWS
WHERE MTART = P_MTART.

Step3: Build field catalog

DATA : IT_FCAT TYPE SLIS_T_FIELDCAT_ALV . "field catalog table


DATA : WA_FCAT LIKE LINE OF IT_FCAT . "field catalog work area
*** build field catalogue
WA_FCAT-COL_POS = '1' . "column position
WA_FCAT-FIELDNAME = 'MATNR' . "column name
WA_FCAT-TABNAME = 'IT_MARA' . "table
WA_FCAT-SELTEXT_M = 'Material' . "Column lable
WA_FCAT-KEY = 'X' . "is a key field
WA_FCAT-HOTSPOT = 'X' . "Set hotspot for matnr
APPEND WA_FCAT TO IT_FCAT . "append to fcat
CLEAR WA_FCAT .
WA_FCAT-COL_POS = '2' .
WA_FCAT-FIELDNAME = 'MBRSH' .
WA_FCAT-TABNAME = 'IT_MARA' .
WA_FCAT-SELTEXT_M = 'Industry Sec' .
APPEND WA_FCAT TO IT_FCAT .
CLEAR WA_FCAT .

WA_FCAT-COL_POS = '3' .
WA_FCAT-FIELDNAME = 'MTART' .
WA_FCAT-TABNAME = 'IT_MARA' .
WA_FCAT-SELTEXT_M = 'Material Type' .
APPEND WA_FCAT TO IT_FCAT .
CLEAR WA_FCAT .

WA_FCAT-COL_POS = '4' .
WA_FCAT-FIELDNAME = 'MEINS' .
WA_FCAT-TABNAME = 'IT_MARA' .
WA_FCAT-SELTEXT_M = 'Base.Unit' .
WA_FCAT-REF_TABNAME = 'MARA' .
APPEND WA_FCAT TO IT_FCAT .
CLEAR WA_FCAT .

Step4: Display ALV

TYPE-POOLS SLIS . "SLIS type pool


**display ALV
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
I_CALLBACK_USER_COMMAND = 'USER_COMMAND' "user command form
IT_FIELDCAT = IT_FCAT "PASS FIELD CATALOG TO ALV
TABLES
T_OUTTAB = IT_MARA. "output table

Step4: Implement user command

**for to handle user command


FORM USER_COMMAND USING R_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD.
CASE R_UCOMM.
WHEN '&IC1'. "standard Function code for double click
READ TABLE IT_MARA INTO WA_MARA INDEX RS_SELFIELD-TABINDEX.
IF SY-SUBRC = 0.
SET PARAMETER ID 'MAT' FIELD WA_MARA-MATNR. "set parameter id
CALL TRANSACTION 'MM03' AND SKIP FIRST SCREEN. "call transaction
ENDIF.
ENDCASE.
ENDFORM. "user_command

Final code will be

REPORT ZSAPN_ALV_INTERACTIVE.
TYPE-POOLS SLIS .
TYPES : BEGIN OF TY_MARA, "User defined internal table type
MATNR TYPE MARA-MATNR,
MTART TYPE MARA-MTART,
MBRSH TYPE MARA-MBRSH,
MEINS TYPE MARA-MEINS,
END OF TY_MARA.

DATA : IT_MARA TYPE TABLE OF TY_MARA ."internal table


DATA : WA_MARA TYPE TY_MARA . "work area

DATA : IT_FCAT TYPE SLIS_T_FIELDCAT_ALV . "field catalog table


DATA : WA_FCAT LIKE LINE OF IT_FCAT . "field catalog work area
PARAMETERS : P_MTART TYPE MARA-MTART. "material type input

START-OF-SELECTION.
**get table data
SELECT MATNR MTART MBRSH MEINS FROM MARA "get data from MARA
INTO TABLE IT_MARA UP TO 50 ROWS
WHERE MTART = P_MTART.
*** generate field catalogue
WA_FCAT-COL_POS = '1' . "column position
WA_FCAT-FIELDNAME = 'MATNR' . "column name
WA_FCAT-TABNAME = 'IT_MARA' . "table
WA_FCAT-SELTEXT_M = 'Material' . "Column label
WA_FCAT-KEY = 'X' . "is a key field
WA_FCAT-HOTSPOT = 'X' . "Set hotspot for matnr
APPEND WA_FCAT TO IT_FCAT . "append to fcat
CLEAR WA_FCAT .
WA_FCAT-COL_POS = '2' .
WA_FCAT-FIELDNAME = 'MBRSH' .
WA_FCAT-TABNAME = 'IT_MARA' .
WA_FCAT-SELTEXT_M = 'Industry Sec' .
APPEND WA_FCAT TO IT_FCAT .
CLEAR WA_FCAT .

WA_FCAT-COL_POS = '3' .
WA_FCAT-FIELDNAME = 'MTART' .
WA_FCAT-TABNAME = 'IT_MARA' .
WA_FCAT-SELTEXT_M = 'Material Type' .
APPEND WA_FCAT TO IT_FCAT .
CLEAR WA_FCAT .

WA_FCAT-COL_POS = '4' .
WA_FCAT-FIELDNAME = 'MEINS' .
WA_FCAT-TABNAME = 'IT_MARA' .
WA_FCAT-SELTEXT_M = 'Base.Unit' .
WA_FCAT-REF_TABNAME = 'MARA' .
APPEND WA_FCAT TO IT_FCAT .
CLEAR WA_FCAT .
**display ALV
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
I_CALLBACK_USER_COMMAND = 'USER_COMMAND' "user command form
IT_FIELDCAT = IT_FCAT "PASS FIELD CATALOG TO ALV
TABLES
T_OUTTAB = IT_MARA. "output table

**for to handle user command


FORM USER_COMMAND USING R_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD.
CASE R_UCOMM.
WHEN '&IC1'. "standard Function code for doubel click
READ TABLE IT_MARA INTO WA_MARA INDEX RS_SELFIELD-TABINDEX.
IF SY-SUBRC = 0.
SET PARAMETER ID 'MAT' FIELD WA_MARA-MATNR. "set parameter id
CALL TRANSACTION 'MM03' AND SKIP FIRST SCREEN. "call transaction
ENDIF.
ENDCASE.
ENDFORM. "user_command

Was this lesson helpful to you? Yes No 14 person think this helpful and 1 think not helpful Ask a Question ?

Download ALV table to PDF in SAP ABAP


SAPNuts.com on google play

+-

The below lesson explains how to download ALV grid data into local computer in PDF format.

Steps to be followed to convert ALV to PDF

1. Develop an ALV report.


2. Create custom GUI status.
3. Submit the ALV report in background, store output in spool and generate PDF.
Step1: Develop an ALV report.
REPORT ZSAPN_ALV2PDF_MARA.
TYPE-POOLS SLIS.
TYPES : BEGIN OF TY_MARA, "User defined internal table type
MATNR TYPE MARA-MATNR,
MTART TYPE MARA-MTART,
MBRSH TYPE MARA-MBRSH,
MEINS TYPE MARA-MEINS,
END OF TY_MARA.

DATA : IT_MARA TYPE TABLE OF TY_MARA ."Internal table


DATA : WA_MARA TYPE TY_MARA . "work area

DATA : IT_FCAT TYPE SLIS_T_FIELDCAT_ALV . "field catalog table


DATA : WA_FCAT LIKE LINE OF IT_FCAT . "field catalog work area
PARAMETERS : P_MTART TYPE MARA-MTART. "material type input

START-OF-SELECTION.
**get table data
SELECT MATNR MTART MBRSH MEINS FROM MARA
INTO TABLE IT_MARA UP TO 50 ROWS
WHERE MTART = P_MTART.
*** generate field catalogue
WA_FCAT-COL_POS = '1' . "column position
WA_FCAT-FIELDNAME = 'MATNR' . "column name
WA_FCAT-TABNAME = 'IT_MARA' . "table
WA_FCAT-SELTEXT_M = 'Material' . "Column lable
WA_FCAT-KEY = 'X' . "is a key field
APPEND WA_FCAT TO IT_FCAT . "append to fcat
CLEAR WA_FCAT .
WA_FCAT-COL_POS = '2' .
WA_FCAT-FIELDNAME = 'MBRSH' .
WA_FCAT-TABNAME = 'IT_MARA' .
WA_FCAT-SELTEXT_M = 'Industry Sec' .
APPEND WA_FCAT TO IT_FCAT .
CLEAR WA_FCAT .

WA_FCAT-COL_POS = '3' .
WA_FCAT-FIELDNAME = 'MTART' .
WA_FCAT-TABNAME = 'IT_MARA' .
WA_FCAT-SELTEXT_M = 'Material Type' .
APPEND WA_FCAT TO IT_FCAT .
CLEAR WA_FCAT .

WA_FCAT-COL_POS = '4' .
WA_FCAT-FIELDNAME = 'MEINS' .
WA_FCAT-TABNAME = 'IT_MARA' .
WA_FCAT-SELTEXT_M = 'Base.Unit' .
WA_FCAT-REF_TABNAME = 'MARA' .
APPEND WA_FCAT TO IT_FCAT .
CLEAR WA_FCAT .
**display ALV
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
I_CALLBACK_PF_STATUS_SET = 'FORM_MENU' "GU status form
IT_FIELDCAT = IT_FCAT "PASS FIELD CATALOG TO ALV
TABLES
T_OUTTAB = IT_MARA.

FORM FORM_MENU USING RT_EXTAB TYPE SLIS_T_EXTAB.


*SET PF STATUS to ALV
SET PF-STATUS 'MENU'. "GUI status...double click to create
ENDFORM. " SET_PF_STATUS

Step2: Create custom GUI status


You can create GUI status in two ways.

1. Double click on 'MENU' in from FORM_MENU


2. Go to SE41 and create

In our program we will create using first one. Double click on MENU and click on YES.

Provide short text and enter.


Expand application toolbar, provide name as EPDF, enter a popup will open just press enter.
Provide function text, icon, info text and enter.
Select a function key and enter.
Expand function keys and add standard toolbar buttons like below.
Save, activate and go back (F3) to program.

Execute the program, you will find toolbar as below.

Step3: Submit the program, store output in spool and generate PDF.
Implement the logic to submit the program and download data into PDF. The below code has lot of steps, please try to understand based
on comments provided.

**for to handle user command


FORM USER_COMMAND USING R_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD.
CASE R_UCOMM.
WHEN 'EPDF'. "Function code for export which we created in MENU
**submit the same program in background and store
TYPES: BEGIN OF TY_TSP01,
RQIDENT TYPE TSP01-RQIDENT, " spool number
RQ2NAME TYPE TSP01-RQ2NAME, " Spool request: Suffix 2
RQCRETIME TYPE TSP01-RQCRETIME, " User name
END OF TY_TSP01.
DATA: LV_JOBCNT TYPE TBTCJOB-JOBCOUNT, " job number
LV_JOBNAME TYPE TBTCJOB-JOBNAME. " job name
DATA: LV_LEN TYPE I,
LS_PARAM TYPE RSPARAMS, " selection work area
LS_TSP01 TYPE TY_TSP01, " Spool Requests work area
LT_TSP01 TYPE STANDARD TABLE OF TY_TSP01, " Spool Requests internal table
LT_PARAM TYPE RSPARAMS_TT. " Selection table
* ********* Derive job counter
LV_JOBNAME = 'ZALV2PDF'. "Background job name
CALL FUNCTION 'JOB_OPEN' "open a job
EXPORTING
JOBNAME = LV_JOBNAME
IMPORTING
JOBCOUNT = LV_JOBCNT
EXCEPTIONS
CANT_CREATE_JOB = 1
INVALID_JOB_DATA = 2
JOBNAME_MISSING = 3
OTHERS = 4.
IF SY-SUBRC EQ 0.
DATA : LV_RQDEST TYPE TSP01-RQDEST VALUE 'LP01',
LV_LINSZ TYPE SYLINSZ VALUE '9999999'.

SUBMIT (SY-REPID) "submit the same program


WITH P_MTART = P_MTART
TO SAP-SPOOL DESTINATION LV_RQDEST
LINE-SIZE LV_LINSZ
IMMEDIATELY 'X'
KEEP IN SPOOL 'X'
USER SY-UNAME VIA JOB LV_JOBNAME NUMBER LV_JOBCNT
WITHOUT SPOOL DYNPRO
WITH SELECTION-TABLE LT_PARAM
AND RETURN.

CALL FUNCTION 'JOB_CLOSE' "job close


EXPORTING
JOBCOUNT = LV_JOBCNT
JOBNAME = LV_JOBNAME
STRTIMMED = 'X'
EXCEPTIONS
CANT_START_IMMEDIATE = 1
INVALID_STARTDATE = 2
JOBNAME_MISSING = 3
JOB_CLOSE_FAILED = 4
JOB_NOSTEPS = 5
JOB_NOTEX = 6
LOCK_FAILED = 7
INVALID_TARGET = 8
OTHERS = 9.
IF SY-SUBRC <> 0.
RAISE JOB_CANNOT_BE_CLOSED. " Raise exception
ENDIF.
ELSE.
RAISE JOB_CANNOT_BE_SUBMITTED.
ENDIF.
*********** confirm job status if finished
DATA: LV_JOB TYPE TBTCV-FIN. " Job status
DO 120 TIMES.
CALL FUNCTION 'BDL_READ_JOB_STATUS' "get job status
EXPORTING
JOBNAME = LV_JOBNAME
JOBNUMBER = LV_JOBCNT
IMPORTING
JOBSTATUS = LV_JOB
EXCEPTIONS
JOB_NOT_FOUND = 1
OTHERS = 2.
IF LV_JOB NE 'F'. "job finished
WAIT UP TO 1 SECONDS.
CONTINUE.
ELSE.
EXIT.
ENDIF.
ENDDO.
**calculate report name in Spool table
DATA: LV_RQ2NAME TYPE TSP01-RQ2NAME. " Spool request
DATA: LV_TMP(14) TYPE C, " temp
LV_STRING TYPE STRING, " store program name
LV_TEMP TYPE TSP01-RQ2NAME, " Spool request
LV_SPOOL TYPE TSP01-RQIDENT. " spool number
IF LV_JOB EQ 'F'. "job finished
LV_LEN = STRLEN( SY-REPID ) .
IF LV_LEN >= 9 .
CONCATENATE SY-REPID+0(9)
SY-UNAME+0(3) INTO LV_RQ2NAME .
ELSE.
LV_LEN = 9 - LV_LEN.
DO LV_LEN TIMES .
CONCATENATE LV_TEMP '_' INTO LV_TEMP .
ENDDO.
CONCATENATE SY-REPID LV_TEMP
SY-UNAME INTO LV_RQ2NAME .
ENDIF.

*Get spool request from SPOOL table TSP01


SELECT RQIDENT RQ2NAME RQCRETIME FROM TSP01 INTO TABLE LT_TSP01
WHERE RQ2NAME = LV_RQ2NAME AND RQOWNER = SY-UNAME .
*sort table to find latest spool no
SORT LT_TSP01 BY RQCRETIME DESCENDING .
*read table to find latest spool no
READ TABLE LT_TSP01 INTO LS_TSP01 INDEX 1.
*get user desktop
CALL METHOD CL_GUI_FRONTEND_SERVICES=>GET_DESKTOP_DIRECTORY
CHANGING
DESKTOP_DIRECTORY = LV_STRING
EXCEPTIONS
CNTL_ERROR = 1
ERROR_NO_GUI = 2
NOT_SUPPORTED_BY_GUI = 3
OTHERS = 4.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
CALL METHOD CL_GUI_CFW=>UPDATE_VIEW.
CONCATENATE LV_STRING TEXT-001 INTO LV_STRING.

*Prepare selection table for PDF download


LS_PARAM-SELNAME = 'SPOOLNO'.
LS_PARAM-SIGN = 'I'.
LS_PARAM-OPTION = 'EQ'.
LS_PARAM-LOW = LS_TSP01-RQIDENT.
LS_PARAM-HIGH = ''.
APPEND LS_PARAM TO LT_PARAM.

LS_PARAM-SELNAME = 'P_FILE'.
LS_PARAM-SIGN = 'I'.
LS_PARAM-OPTION = 'EQ'.
LS_PARAM-LOW = LV_STRING.
LS_PARAM-HIGH = ''.
APPEND LS_PARAM TO LT_PARAM.

* Submit to PDF converted and download


SUBMIT RSTXPDFT4 WITH SELECTION-TABLE LT_PARAM
AND RETURN.
IF SY-SUBRC <> 0.

MESSAGE 'PDF convert not possible' TYPE 'I'.


ENDIF.
ELSE.
MESSAGE 'PDF Can not be downloaded, you have selected huge data. Reduce data and try again' TYPE 'I'.
ENDIF.
ENDCASE.
ENDFORM. "user command

Full and Final code will be


REPORT ZSAPN_ALV2PDF_MARA.
TYPE-POOLS SLIS .
TYPES : BEGIN OF TY_MARA, "User defined internal table type
MATNR TYPE MARA-MATNR,
MTART TYPE MARA-MTART,
MBRSH TYPE MARA-MBRSH,
MEINS TYPE MARA-MEINS,
END OF TY_MARA.

DATA : IT_MARA TYPE TABLE OF TY_MARA ."internal table


DATA : WA_MARA TYPE TY_MARA . "work area

DATA : IT_FCAT TYPE SLIS_T_FIELDCAT_ALV . "field catalog table


DATA : WA_FCAT LIKE LINE OF IT_FCAT . "field catalog work area
TYPES: BEGIN OF TY_TSP01,
RQIDENT TYPE TSP01-RQIDENT, " spool number
RQ2NAME TYPE TSP01-RQ2NAME, " Spool request: Suffix 2
RQCRETIME TYPE TSP01-RQCRETIME, " User name
END OF TY_TSP01.
DATA: LV_JOBCNT TYPE TBTCJOB-JOBCOUNT, " job number
LV_JOBNAME TYPE TBTCJOB-JOBNAME. " job name
DATA: LV_LEN TYPE I,
LS_PARAM TYPE RSPARAMS, " selection work area
LS_TSP01 TYPE TY_TSP01, " Spool Requests work area
LT_TSP01 TYPE STANDARD TABLE OF TY_TSP01, " Spool Requests internal table
LT_PARAM TYPE RSPARAMS_TT. " Selection table
DATA: LV_RQ2NAME TYPE TSP01-RQ2NAME. " Spool request
DATA: LV_TMP(14) TYPE C, " temp
LV_STRING TYPE STRING, " store program name
LV_TEMP TYPE TSP01-RQ2NAME, " Spool request
LV_SPOOL TYPE TSP01-RQIDENT. " spool number
DATA: LV_JOB TYPE TBTCV-FIN. " Job status
DATA : LV_RQDEST TYPE TSP01-RQDEST VALUE 'LP01',
LV_LINSZ TYPE SYLINSZ VALUE '9999999'.
*selection Screen
PARAMETERS : P_MTART TYPE MARA-MTART. "material type input

START-OF-SELECTION.
**get table data
SELECT MATNR MTART MBRSH MEINS FROM MARA
INTO TABLE IT_MARA UP TO 50 ROWS
WHERE MTART = P_MTART.
*** generate field catalogue
WA_FCAT-COL_POS = '1' . "column position
WA_FCAT-FIELDNAME = 'MATNR' . "column name
WA_FCAT-TABNAME = 'IT_MARA' . "table
WA_FCAT-SELTEXT_M = 'Material' . "Column lable
WA_FCAT-KEY = 'X' . "is a key field
APPEND WA_FCAT TO IT_FCAT . "append to fcat
CLEAR WA_FCAT .
WA_FCAT-COL_POS = '2' .
WA_FCAT-FIELDNAME = 'MBRSH' .
WA_FCAT-TABNAME = 'IT_MARA' .
WA_FCAT-SELTEXT_M = 'Industry Sec' .
APPEND WA_FCAT TO IT_FCAT .
CLEAR WA_FCAT .

WA_FCAT-COL_POS = '3' .
WA_FCAT-FIELDNAME = 'MTART' .
WA_FCAT-TABNAME = 'IT_MARA' .
WA_FCAT-SELTEXT_M = 'Material Type' .
APPEND WA_FCAT TO IT_FCAT .
CLEAR WA_FCAT .
WA_FCAT-COL_POS = '4' .
WA_FCAT-FIELDNAME = 'MEINS' .
WA_FCAT-TABNAME = 'IT_MARA' .
WA_FCAT-SELTEXT_M = 'Base.Unit' .
WA_FCAT-REF_TABNAME = 'MARA' .
APPEND WA_FCAT TO IT_FCAT .
CLEAR WA_FCAT .
**display ALV
DATA: ALV_PRINT TYPE SLIS_PRINT_ALV.
ALV_PRINT-NO_PRINT_LISTINFOS = 'X'. "avoid process list on SPOOL
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
I_CALLBACK_PF_STATUS_SET = 'FORM_MENU' "GU status form
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
IT_FIELDCAT = IT_FCAT "PASS FIELD CATALOG TO ALV
IS_PRINT = ALV_PRINT "to set spool options
TABLES
T_OUTTAB = IT_MARA.

FORM FORM_MENU USING RT_EXTAB TYPE SLIS_T_EXTAB.


*SET PF STATUS to ALV
SET PF-STATUS 'MENU'. "GUI status...double click to create
ENDFORM. " SET_PF_STATUS
**for to handle user command
FORM USER_COMMAND USING R_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD.
CASE R_UCOMM.
WHEN 'EPDF'. "Function code for export which we created in MENU
**submit the same program in background and store

* ********* Derive job counter


LV_JOBNAME = 'ZALV2PDF'. "Background job name
CALL FUNCTION 'JOB_OPEN' "open a job
EXPORTING
JOBNAME = LV_JOBNAME
IMPORTING
JOBCOUNT = LV_JOBCNT
EXCEPTIONS
CANT_CREATE_JOB = 1
INVALID_JOB_DATA = 2
JOBNAME_MISSING = 3
OTHERS = 4.
IF SY-SUBRC EQ 0.
SUBMIT (SY-REPID) "submit the same program
WITH P_MTART = P_MTART
TO SAP-SPOOL DESTINATION LV_RQDEST
LINE-SIZE LV_LINSZ
IMMEDIATELY 'X'
KEEP IN SPOOL 'X'
USER SY-UNAME VIA JOB LV_JOBNAME NUMBER LV_JOBCNT
WITHOUT SPOOL DYNPRO
WITH SELECTION-TABLE LT_PARAM
AND RETURN.

CALL FUNCTION 'JOB_CLOSE' "job close


EXPORTING
JOBCOUNT = LV_JOBCNT
JOBNAME = LV_JOBNAME
STRTIMMED = 'X'
EXCEPTIONS
CANT_START_IMMEDIATE = 1
INVALID_STARTDATE = 2
JOBNAME_MISSING = 3
JOB_CLOSE_FAILED = 4
JOB_NOSTEPS = 5
JOB_NOTEX = 6
LOCK_FAILED = 7
INVALID_TARGET = 8
OTHERS = 9.
IF SY-SUBRC <> 0.
RAISE JOB_CANNOT_BE_CLOSED. " Raise exception
ENDIF.
ELSE.
RAISE JOB_CANNOT_BE_SUBMITTED.
ENDIF.
*********** confirm job status if finished

DO 120 TIMES.
CALL FUNCTION 'BDL_READ_JOB_STATUS' "get job status
EXPORTING
JOBNAME = LV_JOBNAME
JOBNUMBER = LV_JOBCNT
IMPORTING
JOBSTATUS = LV_JOB
EXCEPTIONS
JOB_NOT_FOUND = 1
OTHERS = 2.
IF LV_JOB NE 'F'. "job finished
WAIT UP TO 1 SECONDS.
CONTINUE.
ELSE.
EXIT.
ENDIF.
ENDDO.
**calculate report name in Spool table
IF LV_JOB EQ 'F'. "job finished
LV_LEN = STRLEN( SY-REPID ) .
IF LV_LEN >= 9 .
CONCATENATE SY-REPID+0(9)
SY-UNAME+0(3) INTO LV_RQ2NAME .
ELSE.
LV_LEN = 9 - LV_LEN.
DO LV_LEN TIMES .
CONCATENATE LV_TEMP '_' INTO LV_TEMP .
ENDDO.
CONCATENATE SY-REPID LV_TEMP
SY-UNAME INTO LV_RQ2NAME .
ENDIF.

*Get spool request from SPOOL table TSP01


REFRESH LT_TSP01.
SELECT RQIDENT RQ2NAME RQCRETIME FROM TSP01 INTO TABLE LT_TSP01
WHERE RQ2NAME = LV_RQ2NAME AND RQOWNER = SY-UNAME .
*sort table to find latest spool no
SORT LT_TSP01 BY RQCRETIME DESCENDING .
*read table to find latest spool no
CLEAR LS_TSP01.
READ TABLE LT_TSP01 INTO LS_TSP01 INDEX 1.
*get user desktop
CALL METHOD CL_GUI_FRONTEND_SERVICES=>GET_DESKTOP_DIRECTORY
CHANGING
DESKTOP_DIRECTORY = LV_STRING
EXCEPTIONS
CNTL_ERROR = 1
ERROR_NO_GUI = 2
NOT_SUPPORTED_BY_GUI = 3
OTHERS = 4.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
CALL METHOD CL_GUI_CFW=>UPDATE_VIEW.
CONCATENATE LV_STRING SY-UZEIT INTO LV_STRING.
REFRESH LT_PARAM.
*Prepare selection table for PDF download
LS_PARAM-SELNAME = 'SPOOLNO'.
LS_PARAM-SIGN = 'I'.
LS_PARAM-OPTION = 'EQ'.
LS_PARAM-LOW = LS_TSP01-RQIDENT.
LS_PARAM-HIGH = ''.
APPEND LS_PARAM TO LT_PARAM.

LS_PARAM-SELNAME = 'P_FILE'.
LS_PARAM-SIGN = 'I'.
LS_PARAM-OPTION = 'EQ'.
LS_PARAM-LOW = LV_STRING.
LS_PARAM-HIGH = ''.
APPEND LS_PARAM TO LT_PARAM.
* Submit to PDF converted and download
SUBMIT RSTXPDFT4 WITH SELECTION-TABLE LT_PARAM
AND RETURN.
IF SY-SUBRC <> 0.

MESSAGE 'PDF convert not possible' TYPE 'I'.


ENDIF.
ELSE.
MESSAGE 'PDF Can not be downloaded, you have selected huge data. Reduce data and try again' TYPE 'I'.
ENDIF.
ENDCASE.
ENDFORM. "user command
A PDF will be downloaded in the below format.
Was this lesson helpful to you? Yes No 30 person think this helpful and 1 think not helpful Ask a Question ?

ALV Popup with checkbox for input help


SAPNuts.com on google play
+-

In the SAP ABAP real-time business applications, we may need to provide ALV report as popup for input helps, below lesson explains you
how to use ALV report as popup for help request(F4 help) for select-options.

Please refer tutorial ALV popup display and select to know how to use ALV as popup.

Requirement: Develop an ABAP report to display list of materials for a material type (input) with ALV report(with check-box) as input help
for material type.

Requirement analysis: To provide ALV as input help, we need to use function module REUSE_ALV_POPUP_TO_SELECT under event AT
SELECTION-SCREEN ON VALUE-REQUEST , for this requirement we need to provide check box in popup ALV, we need to create field catalog .

Step1: Call ALV popup function module under value request event
Call REUSE_ALV_POPUP_TO_SELECT function module under event SELECTION-SCREEN ON VALUE-REQUEST .

TYPE-POOLS: SLIS.
TABLES: T134.
TYPES: BEGIN OF TY_T134,
CHECK TYPE CHAR1,
MTART TYPE T134-MTART,
END OF TY_T134.
DATA : IT_T134 TYPE TABLE OF TY_T134,
WA_T134 TYPE TY_T134.
DATA: IT_FCAT TYPE SLIS_T_FIELDCAT_ALV,
WA_FCAT LIKE LINE OF IT_FCAT.

SELECT-OPTIONS: S_MTART FOR T134-MTART NO INTERVALS.


AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_MTART-LOW.
WA_FCAT-COL_POS = 1.
WA_FCAT-FIELDNAME = 'CHECK'.
WA_FCAT-SELTEXT_M = 'Select'.
WA_FCAT-TABNAME = 'IT_T134'.
APPEND WA_FCAT TO IT_FCAT.
CLEAR WA_FCAT.
WA_FCAT-COL_POS = 2.
WA_FCAT-FIELDNAME = 'MTART'.
WA_FCAT-SELTEXT_M = 'Material Type'.
WA_FCAT-TABNAME = 'IT_T134'.
APPEND WA_FCAT TO IT_FCAT.
CLEAR WA_FCAT.
SELECT MTART FROM T134 INTO CORRESPONDING FIELDS OF TABLE IT_T134.
CALL FUNCTION 'REUSE_ALV_POPUP_TO_SELECT'
EXPORTING
I_TITLE = 'Select Material Type'
I_CHECKBOX_FIELDNAME = 'CHECK'
I_TABNAME = 'IT_T134'
IT_FIELDCAT = IT_FCAT
I_CALLBACK_PROGRAM = SY-REPID
TABLES
T_OUTTAB = IT_T134
* EXCEPTIONS
* PROGRAM_ERROR = 1
* OTHERS = 2
.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
LOOP AT IT_T134 INTO WA_T134 WHERE CHECK = 'X'.
S_MTART-LOW = WA_T134-MTART.
S_MTART-OPTION = 'EQ'.
S_MTART-SIGN = 'I'.
APPEND S_MTART.
ENDLOOP.

Step2: Display ALV


Display ALV report based on selection inputs.

DATA: IT_MARA TYPE TABLE OF MARA,


WA_MARA TYPE MARA.
START-OF-SELECTION.
SELECT * FROM MARA INTO TABLE IT_MARA UP TO 50 ROWS
WHERE MTART IN S_MTART .

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'


EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
I_STRUCTURE_NAME = 'MARA'
TABLES
T_OUTTAB = IT_MARA
* EXCEPTIONS
* PROGRAM_ERROR = 1
* OTHERS = 2
.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.

Full and final code to display ALV with check-box as popup for input help
REPORT ZSAPN_ALV_POPUP_HELP.
TYPE-POOLS: SLIS.
TABLES: T134.
TYPES: BEGIN OF TY_T134,
CHECK TYPE CHAR1,
MTART TYPE T134-MTART,
END OF TY_T134.
DATA : IT_T134 TYPE TABLE OF TY_T134,
WA_T134 TYPE TY_T134.
DATA: IT_FCAT TYPE SLIS_T_FIELDCAT_ALV,
WA_FCAT LIKE LINE OF IT_FCAT.

DATA: IT_MARA TYPE TABLE OF MARA,


WA_MARA TYPE MARA.

SELECT-OPTIONS: S_MTART FOR T134-MTART NO INTERVALS.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_MTART-LOW.


WA_FCAT-COL_POS = 1.
WA_FCAT-FIELDNAME = 'CHECK'.
WA_FCAT-SELTEXT_M = 'Select'.
WA_FCAT-TABNAME = 'IT_T134'.
APPEND WA_FCAT TO IT_FCAT.
CLEAR WA_FCAT.
WA_FCAT-COL_POS = 2.
WA_FCAT-FIELDNAME = 'MTART'.
WA_FCAT-SELTEXT_M = 'Material Type'.
WA_FCAT-TABNAME = 'IT_T134'.
APPEND WA_FCAT TO IT_FCAT.
CLEAR WA_FCAT.
SELECT MTART FROM T134 INTO CORRESPONDING FIELDS OF TABLE IT_T134.
CALL FUNCTION 'REUSE_ALV_POPUP_TO_SELECT'
EXPORTING
I_TITLE = 'Select Material Type'
I_CHECKBOX_FIELDNAME = 'CHECK'
I_TABNAME = 'IT_T134'
IT_FIELDCAT = IT_FCAT
I_CALLBACK_PROGRAM = SY-REPID
TABLES
T_OUTTAB = IT_T134
* EXCEPTIONS
* PROGRAM_ERROR = 1
* OTHERS = 2
.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
LOOP AT IT_T134 INTO WA_T134 WHERE CHECK = 'X'.
S_MTART-LOW = WA_T134-MTART.
S_MTART-OPTION = 'EQ'.
S_MTART-SIGN = 'I'.
APPEND S_MTART.
ENDLOOP.

START-OF-SELECTION.
SELECT * FROM MARA INTO TABLE IT_MARA UP TO 50 ROWS
WHERE MTART IN S_MTART .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
I_STRUCTURE_NAME = 'MARA'
TABLES
T_OUTTAB = IT_MARA
* EXCEPTIONS
* PROGRAM_ERROR = 1
* OTHERS = 2
.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
Was this lesson helpful to you? Yes No 4 person think this helpful and 0 think not helpful Ask a Question ?

Vous aimerez peut-être aussi