Google Search - Blog...........

Showing posts with label fm REUSE_ALV_GRID_DISPLAY. Show all posts
Showing posts with label fm REUSE_ALV_GRID_DISPLAY. Show all posts

ABAP - Display The PO Status In ALV Report - MM.

*------------------------------------------------------*
* This program will display the data for the PO with RFQ
*-----------------------------------------------------*
REPORT zmm_po_status_report.


TYPE-POOLS: slis.

TABLES: ekko, ekpo.

TYPES: BEGIN OF ty_eban,
banfn TYPE eban-banfn,
bnfpo TYPE eban-bnfpo,
ebeln TYPE eban-ebeln,
ebelp TYPE eban-ebelp,
END OF ty_eban.

TYPES: BEGIN OF ty_ekbe,
ebeln TYPE ekbe-ebeln,
ebelp TYPE ekbe-ebelp,
bewtp TYPE ekbe-bewtp,
menge TYPE ekbe-menge,
matnr TYPE ekbe-matnr,
bldat TYPE ekbe-bldat,
END OF ty_ekbe.

TYPES : BEGIN OF ty_ekpo,
ebeln TYPE ekpo-ebeln,
ebelp TYPE ekpo-ebelp,
statu TYPE ekpo-statu,
aedat TYPE ekpo-aedat,
matnr TYPE ekpo-matnr,
bukrs TYPE ekpo-bukrs,
werks TYPE ekpo-werks,
lgort TYPE ekpo-lgort,
menge TYPE ekpo-menge,
meins TYPE ekpo-meins,
netpr TYPE ekpo-netpr,
abskz TYPE ekpo-abskz,
elikz TYPE ekpo-elikz,
erekz TYPE ekpo-erekz,
wepos TYPE ekpo-wepos,
repos TYPE ekpo-repos,
webre TYPE ekpo-webre,
lmein TYPE ekpo-lmein,
sobkz TYPE ekpo-sobkz,
END OF ty_ekpo.

TYPES: BEGIN OF ty_ekko,
ebeln TYPE ekko-ebeln,
waers TYPE ekko-waers,
END OF ty_ekko.

TYPES: BEGIN OF ty_makt,
matnr TYPE mara-matnr,
maktx TYPE makt-maktx,
END OF ty_makt.

TYPES: BEGIN OF ty_final,
banfn TYPE eban-banfn,
bnfpo TYPE eban-bnfpo,
aedat TYPE ekpo-aedat,
ebeln TYPE ekpo-ebeln,
ebelp TYPE ekpo-ebelp,
matnr TYPE ekpo-matnr,
maktx TYPE makt-maktx,
menge TYPE ekpo-menge,
menge1 TYPE ekpo-menge,
meins TYPE ekpo-meins,
netpr TYPE ekpo-netpr,
waers TYPE ekko-waers,
werks TYPE ekpo-werks,
lgort TYPE ekpo-lgort,
remark TYPE char50,
END OF ty_final.


DATA: it_eban TYPE TABLE OF ty_eban WITH HEADER LINE,
it_makt TYPE TABLE OF ty_makt WITH HEADER LINE,
it_ekko TYPE TABLE OF ty_ekko WITH HEADER LINE,
it_ekpo TYPE TABLE OF ty_ekpo WITH HEADER LINE,
it_ekbe TYPE TABLE OF ty_ekbe WITH HEADER LINE,
it_final TYPE TABLE OF ty_final WITH HEADER LINE.

DATA: it_fieldcat TYPE slis_t_fieldcat_alv,
wa_fieldcat LIKE LINE OF it_fieldcat,
it_layout TYPE slis_layout_alv,
it_events TYPE slis_t_event,
wa_events LIKE LINE OF it_events,
it_list TYPE slis_t_listheader WITH HEADER LINE.

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECT-OPTIONS: s_ebeln FOR ekko-ebeln,
s_aedat FOR ekko-aedat,
s_werks FOR ekpo-werks.
SELECTION-SCREEN END OF BLOCK b1.

START-OF-SELECTION.

PERFORM get_ekko_data.

PERFORM get_ekpo_data.

PERFORM get_eban_data.

PERFORM get_ekbe_data.

PERFORM get_makt_data.

END-OF-SELECTION.

PERFORM process_data.

PERFORM prepare_fieldcat.

PERFORM display_alv.


*&---------------------------------------------------------------------*
*& Form GET_EKKO_DATA
*----------------------------------------------------------------------*
FORM get_ekko_data .

SELECT ebeln
waers
FROM ekko
INTO TABLE it_ekko
WHERE ebeln IN s_ebeln
AND aedat IN s_aedat.

IF sy-subrc = 0.
SORT it_ekko BY ebeln.
ENDIF.

ENDFORM. " GET_EKKO_DATA
*&---------------------------------------------------------------------*
*& Form GET_EKPO_DATA
*----------------------------------------------------------------------*
FORM get_ekpo_data .

SELECT ebeln
ebelp
statu
aedat
matnr
bukrs
werks
lgort
menge
meins
netpr
abskz
elikz
erekz
wepos
repos
webre
lmein
sobkz
FROM ekpo
INTO TABLE it_ekpo
FOR ALL ENTRIES IN it_ekko
WHERE ebeln = it_ekko-ebeln
AND werks IN s_werks.

IF sy-subrc = 0.
SORT it_ekpo BY ebeln ebelp.
ENDIF.


ENDFORM. " GET_EKPO_DATA
*&---------------------------------------------------------------------*
*& Form GET_EBAN_DATA
*----------------------------------------------------------------------*
FORM get_eban_data .

SELECT banfn
bnfpo
ebeln
ebelp
FROM eban
INTO TABLE it_eban
FOR ALL ENTRIES IN it_ekpo
WHERE ebeln = it_ekpo-ebeln
AND ebelp = it_ekpo-ebelp
AND matnr = it_ekpo-matnr.

IF sy-subrc = 0.
SORT it_eban BY ebeln ebelp.
ENDIF.

ENDFORM. " GET_EBAN_DATA
*&---------------------------------------------------------------------*
*& Form GET_MAKT_DATA
*----------------------------------------------------------------------*
FORM get_makt_data .

SELECT matnr
maktx
FROM makt
INTO TABLE it_makt
FOR ALL ENTRIES IN it_ekpo
WHERE matnr = it_ekpo-matnr
AND spras = 'EN'.

IF sy-subrc = 0.
SORT it_makt BY matnr.
ENDIF.

ENDFORM. " GET_MAKT_DATA
*&---------------------------------------------------------------------*
*& Form PROCESS_DATA
*----------------------------------------------------------------------*
FORM process_data .


LOOP AT it_ekpo.

it_final-ebeln = it_ekpo-ebeln.
it_final-ebelp = it_ekpo-ebelp.
it_final-menge = it_ekpo-menge.
it_final-meins = it_ekpo-meins.
it_final-werks = it_ekpo-werks.
it_final-lgort = it_ekpo-lgort.
it_final-aedat = it_ekpo-aedat.

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
input = it_ekpo-matnr
IMPORTING
output = it_final-matnr.

READ TABLE it_eban WITH KEY ebeln = it_ekpo-ebeln
ebelp = it_ekpo-ebelp.
IF sy-subrc = 0.
it_final-banfn = it_eban-banfn.
it_final-bnfpo = it_eban-bnfpo.
ENDIF.

READ TABLE it_makt WITH KEY matnr = it_ekpo-matnr.
IF sy-subrc = 0.
it_final-maktx = it_makt-maktx.
ENDIF.

READ TABLE it_ekko WITH KEY ebeln = it_ekpo-ebeln.
IF sy-subrc = 0.
it_final-waers = it_ekko-waers.
ENDIF.

LOOP AT it_ekbe WHERE ebeln = it_eban-ebeln
AND ebelp = it_eban-ebelp.

CASE : it_ekbe-bewtp.
WHEN 'E'.
it_final-menge1 = it_final-menge1 + it_ekbe-menge.
ENDCASE.
ENDLOOP.

it_final-menge1 = it_final-menge - it_final-menge1.

CLEAR : it_final-remark.
APPEND it_final.
CLEAR it_final.

ENDLOOP.

ENDFORM. " PROCESS_DATA
*&---------------------------------------------------------------------*
*& Form PREPARE_FIELDCAT
*----------------------------------------------------------------------*
FORM prepare_fieldcat .

PERFORM build_fieldcat USING : 'BANFN' 'PR Number',
'BNFPO' 'PR Item',
'AEDAT' 'PO Date',
'EBELN' 'PO Number',
'EBELP' 'PO Item',
'MATNR' 'Material',
'MAKTX' 'Material Desc',
'MENGE' 'PO Quantity',
'MENGE1' 'PO Qty Pending',
'MEINS' 'Unit',
'NETPR' 'Net Price',
'WAERS' 'Currency',
'WERKS' 'Plant',
'LGORT' 'Stor Loc',
'REMARK' 'Remarks'.

ENDFORM. " PREPARE_FIELDCAT
*&---------------------------------------------------------------------*
*& Form BUILD_FIELDCAT
*----------------------------------------------------------------------*
FORM build_fieldcat USING value(p_0491)
value(p_0492).

wa_fieldcat-fieldname = p_0491.
wa_fieldcat-reptext_ddic = p_0492.
wa_fieldcat-tabname = 'IT_FINAL'.

IF wa_fieldcat-fieldname = 'MATNR' OR wa_fieldcat-fieldname = 'MAKTX'.
wa_fieldcat-just = 'L'.
ELSE.
wa_fieldcat-just = 'C'.
ENDIF.

APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.

ENDFORM. " BUILD_FIELDCAT
*&---------------------------------------------------------------------*
*& Form DISPLAY_ALV
*----------------------------------------------------------------------*
FORM display_alv .

it_layout-zebra = 'X'.
it_layout-colwidth_optimize = 'X'.

wa_events-form = 'TOP_OF_PAGE'.
wa_events-name = 'TOP_OF_PAGE'.
APPEND wa_events TO it_events.
CLEAR wa_events.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-repid
* I_CALLBACK_PF_STATUS_SET = ' '
* I_CALLBACK_USER_COMMAND = ' '
* I_GRID_TITLE =
is_layout = it_layout
it_fieldcat = it_fieldcat
it_events = it_events
TABLES
t_outtab = it_final
EXCEPTIONS
program_error = 1
OTHERS = 2.


ENDFORM. " DISPLAY_ALV
*&--------------------------------------------------------------------*
*& Form top_of_page
*&--------------------------------------------------------------------*
* get the top-of-page and display
*---------------------------------------------------------------------*
FORM top_of_page.
*--Display the header of the report
PERFORM header.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = it_list[]
i_logo = 'ZLOGO2'.

ENDFORM. "top_of_page
*&---------------------------------------------------------------------*
*& Form HEADER
*&---------------------------------------------------------------------*
* Get the header of the alv
*----------------------------------------------------------------------*
FORM header .

*----variables for output header of the alv
DATA : date_s(10), date_e(10).
DATA: company_name(50) TYPE c VALUE 'Company Header'.
DATA : head_line(60) TYPE c.
DATA : today(10) TYPE c.
DATA : curr_time(10) TYPE c.
DATA : page_no(5) TYPE c.
DATA : len TYPE i.
DATA : wa_num1 TYPE i.
DATA : wa_num2 TYPE i.
DATA : pos TYPE i.
DATA : linex TYPE i,
v_stext(40), " Initial Template Id text
v_f4flag TYPE c.

WRITE sy-datum MM/DD/YYYY TO today.
WRITE sy-uzeit TO curr_time.
WRITE sy-pagno TO page_no LEFT-JUSTIFIED.

REFRESH it_list.
CLEAR it_list.

*---- REPORT PROGRAM NAME AND CLINT
it_list-typ = 'S'.
it_list-key = space.
CONCATENATE 'Report...:' sy-repid '(' sy-sysid(3) sy-mandt ')'
INTO it_list-info SEPARATED BY space.
APPEND it_list TO it_list.

*---- USER NAME
CLEAR it_list.
it_list-typ = 'S'.
it_list-key = space.
CONCATENATE 'User.....:' sy-uname
INTO it_list-info SEPARATED BY space.
APPEND it_list TO it_list.

*------DATE / TIME STAMP
CLEAR it_list.
it_list-typ = 'S'.
it_list-key = space.
CONCATENATE 'Date/Time:' today curr_time
INTO it_list-info SEPARATED BY space.
APPEND it_list TO it_list.

*------PAGE NUMBER
CLEAR it_list.
it_list-typ = 'S'.
it_list-key = space.
CONCATENATE 'Page.....:' page_no
INTO it_list-info SEPARATED BY space.
APPEND it_list TO it_list.

CLEAR it_list.
it_list-typ = 'S'.
it_list-key = space.
CONCATENATE ' ' ' '
INTO it_list-info SEPARATED BY space.
APPEND it_list TO it_list.

*------COMPANY NAME
* determine the starting position to center the company name
len = STRLEN( company_name ).
wa_num1 = 60 - len.
pos = wa_num1 / 2.
IF pos LT 1.
pos = 1.
ENDIF.
len = 60 - pos.

CLEAR it_list.
it_list-typ = 'H'.
it_list-key = space.
it_list-info+pos(len) = company_name.
APPEND it_list TO it_list.

*-------REPORT TITLE
DATA: v_string TYPE char40.
v_string = 'Test Header'.
* determine the starting position to center the report title
len = STRLEN( v_string ).
wa_num1 = 60 - len.
pos = wa_num1 / 2.
IF pos LT 1.
pos = 1.
ENDIF.
len = 60 - pos.

CLEAR it_list.
it_list-typ = 'H'.
it_list-key = space.
it_list-info+pos(len) = v_string.
APPEND it_list TO it_list.


* determine the starting position to center the report title
len = STRLEN( sy-title ).
wa_num1 = 60 - len.
pos = wa_num1 / 2.
IF pos LT 1.
pos = 1.
ENDIF.
len = 60 - pos.

CLEAR it_list.
it_list-typ = 'H'.
it_list-key = space.
it_list-info+pos(len) = sy-title.
APPEND it_list TO it_list.

len = STRLEN( head_line ).
wa_num1 = 60 - len.
pos = wa_num1 / 2.
IF pos LT 1.
pos = 1.
ENDIF.
len = 60 - pos.

CLEAR it_list.
it_list-typ = 'H'.
it_list-info+pos(len) = head_line.
APPEND it_list.
CLEAR it_list.

ENDFORM. " HEADER
*&---------------------------------------------------------------------*
*& Form GET_EKBE_DATA
*----------------------------------------------------------------------*
FORM get_ekbe_data .

SELECT ebeln
ebelp
bewtp
menge
matnr
bldat
FROM ekbe
INTO TABLE it_ekbe
FOR ALL ENTRIES IN it_ekpo
WHERE ebeln = it_ekpo-ebeln
AND ebelp = it_ekpo-ebelp.

IF sy-subrc = 0.
SORT it_ekbe BY ebeln ebelp.
ENDIF.

ENDFORM. " GET_EKBE_DATA


ALSO READ:

- Create Unique Handle For ALV Layout (Variant).

- Customizing Toolbar In ALV Tree Using ABAP OO.

- Dropdown in ALV Grid Display.

- SALV List With Check Box.

- SALV List With Symbol.

..... Back To Index On ALV List/ Grid Display.

..... Back To MAIN INDEX.


ABAP - Get Changed Data From Tables CDHDR & CDPOS

REPORT z_alv_cdhdr_cdpos.
*---------------------------------------------------------------------
*This ALV report displays tables CDHDR and CDPOS *
*---------------------------------------------------------------------

TYPE-POOLS slis. " Global ALV types

*---------------------------------------------------------------------
* constants
*---------------------------------------------------------------------

CONSTANTS : c_x VALUE 'X',
c_eb9 TYPE syucomm VALUE '&EB9',
c_refresh TYPE syucomm VALUE '&REFRESH'.
*---------------------------------------------------------------------
* types
*---------------------------------------------------------------------

TYPES :BEGIN OF ty_s_cdhdr.
INCLUDE TYPE cdhdr.
TYPES :checkbox TYPE xfeld,
END OF ty_s_cdhdr,

BEGIN OF ty_s_cdpos.
INCLUDE TYPE cdpos.
TYPES : checkbox TYPE xfeld,
END OF ty_s_cdpos.

*---------------------------------------------------------------------
* internal tables
*---------------------------------------------------------------------
DATA : gs_cdhdr TYPE cdhdr, " Change document header

* Layout for ALV
gs_layout TYPE slis_layout_alv,

* Change document header
t_cdhdr TYPE TABLE OF ty_s_cdhdr.

*---------------------------------------------------------------------
* selection screen design
*---------------------------------------------------------------------
SELECT-OPTIONS : s_objcls FOR gs_cdhdr-objectclas OBLIGATORY,
s_objtid FOR gs_cdhdr-objectid,
s_chngnr FOR gs_cdhdr-changenr,
s_usrnam FOR gs_cdhdr-username DEFAULT sy-uname,
s_udate FOR gs_cdhdr-udate DEFAULT sy-datum,
s_time FOR gs_cdhdr-utime,
s_tcode FOR gs_cdhdr-tcode,
s_plncnr FOR gs_cdhdr-planchngnr,
s_chngno FOR gs_cdhdr-act_chngno,
s_wsplnd FOR gs_cdhdr-was_plannd,
s_chngid FOR gs_cdhdr-change_ind.

SELECTION-SCREEN SKIP.

PARAMETERS p_max TYPE numc3 OBLIGATORY DEFAULT '200'.

*---------------------------------------------------------------------
* start-of-selection .
*---------------------------------------------------------------------
START-OF-SELECTION.

PERFORM f_read_data.

*---------------------------------------------------------------------
* end-of-selection .
*---------------------------------------------------------------------

END-OF-SELECTION.

PERFORM f_display_cdhdr.

*---------------------------------------------------------------------

*Form f_read_data
*---------------------------------------------------------------------
FORM f_read_data.

*Read Change document header
SELECT * INTO TABLE t_cdhdr
UP TO p_max ROWS
FROM cdhdr
WHERE objectclas IN s_objcls
AND objectid IN s_objtid
AND changenr IN s_chngnr
AND username IN s_usrnam
AND udate IN s_udate
AND utime IN s_time
AND tcode IN s_tcode
AND planchngnr IN s_plncnr
AND act_chngno IN s_chngno
AND was_plannd IN s_wsplnd
AND change_ind IN s_chngid.

ENDFORM. " F_READ_DATA
*---------------------------------------------------------------------
*
*Form f_display_cdhdr
*---------------------------------------------------------------------
FORM f_display_cdhdr.

DATA :ls_event_exit TYPE slis_event_exit,
lt_event_exit TYPE slis_t_event_exit.

gs_layout-zebra = c_x.
gs_layout-colwidth_optimize = c_x.
gs_layout-group_change_edit = c_x.
gs_layout-allow_switch_to_list = c_x.
gs_layout-box_fieldname = 'CHECKBOX'.

*Activate 'More' button
CLEAR ls_event_exit.
ls_event_exit-after = c_x.
ls_event_exit-ucomm = c_eb9. " More
APPEND ls_event_exit TO lt_event_exit.

*Activate refresh button
CLEAR ls_event_exit.
ls_event_exit-after = c_x.
ls_event_exit-ucomm = c_refresh. " Refresh
APPEND ls_event_exit TO lt_event_exit.

*Display ALV
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-cprog
i_callback_user_command = 'USER_COMMAND'
i_callback_pf_status_set = 'PF_STATUS_SET'
i_structure_name = 'CDHDR'
is_layout = gs_layout
it_event_exit = lt_event_exit
i_save = 'A'
TABLES
t_outtab = t_cdhdr.

ENDFORM. " F_DISPLAY_CDHDR
*---------------------------------------------------------------------
*
*FORM USER_COMMAND *
*---------------------------------------------------------------------
FORM user_command USING u_ucomm TYPE syucomm
us_selfield TYPE slis_selfield. "#EC CALLED

*Macro definition
DEFINE m_sort.
add 1 to ls_sort-spos.
ls_sort-fieldname = &1.
ls_sort-up = c_x.
append ls_sort to lt_sort.
END-OF-DEFINITION.

DATA :
ls_cdhdr TYPE ty_s_cdhdr,
ls_sort TYPE slis_sortinfo_alv,
lt_sort TYPE slis_t_sortinfo_alv,

*Change document items
lt_cdpos TYPE TABLE OF ty_s_cdpos.

CASE u_ucomm.
WHEN '&IC1' OR c_eb9.
PERFORM check_marked USING us_selfield.


*Read Change document items
LOOP AT t_cdhdr INTO ls_cdhdr WHERE checkbox = c_x.
SELECT * APPENDING TABLE lt_cdpos
FROM cdpos
WHERE objectclas = ls_cdhdr-objectclas
AND objectid = ls_cdhdr-objectid
AND changenr = ls_cdhdr-changenr.
ENDLOOP.

m_sort 'CHANGENR'.

*Display ALV
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-cprog
i_structure_name = 'CDPOS'
is_layout = gs_layout
it_sort = lt_sort
i_save = 'A'
TABLES
t_outtab = lt_cdpos.

WHEN c_refresh.
PERFORM f_read_data.
us_selfield-refresh = c_x.
ENDCASE.

ENDFORM. " USER_COMMAND
*---------------------------------------------------------------------

*Form CHECK_MARKED
*---------------------------------------------------------------------
*
*What has been marked in t_cdhdr
*---------------------------------------------------------------------
FORM check_marked USING us_selfield TYPE slis_selfield.

FIELD-SYMBOLS :
TYPE ty_s_cdhdr.

READ TABLE t_cdhdr TRANSPORTING NO FIELDS
WITH KEY checkbox = c_x.
IF NOT sy-subrc IS INITIAL AND
NOT us_selfield-tabindex IS INITIAL.

READ TABLE t_cdhdr INDEX us_selfield-tabindex ASSIGNING .

-checkbox = c_x.
ENDIF.

ENDFORM. " CHECK_MARKED
*---------------------------------------------------------------------
*
*FORM PF_STATUS_SET *
*---------------------------------------------------------------------
FORM pf_status_set USING ut_extab TYPE slis_t_extab. "#EC CALLED


*Display 'Refresh' button and 'More' button
DELETE ut_extab WHERE fcode = c_refresh
OR fcode = c_eb9.

SET PF-STATUS 'STANDARD_FULLSCREEN' OF PROGRAM 'SAPLKKBL'
EXCLUDING ut_extab.

ENDFORM. " PF_STATUS_SET

*---------------------------------------------------------------------*
* how to use the function module
*---------------------------------------------------------------------*

*--- how to use the function module CHANGEDOCUMENT_READ_HEADERS

REPORT zchange_headers .

DATA: BEGIN OF it_cdhdr OCCURS 0.
INCLUDE STRUCTURE cdhdr.
DATA: END OF it_cdhdr.

PARAMETERS: begdate LIKE cdhdr-udate ,
enddate LIKE cdhdr-udate ,
begtime LIKE cdhdr-utime ,
endtime LIKE cdhdr-utime .


INITIALIZATION .
begdate = sy-datum .
enddate = sy-datum .
begtime = '000001' .
endtime = '235959'.


CALL FUNCTION 'CHANGEDOCUMENT_READ_HEADERS'
EXPORTING
date_of_change = begdate
objectclass = 'EINKBELEG' "Object Class T-Code: SCDO
time_of_change = begtime
username = sy-uname
date_until = enddate
time_until = endtime
TABLES
i_cdhdr = it_cdhdr
EXCEPTIONS
no_position_found = 1
wrong_access_to_archive = 2
time_zone_conversion_error = 3
OTHERS = 4.
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.


IF sy-subrc = 0.

LOOP AT it_cdhdr.
WRITE:/ it_cdhdr-objectclas,
it_cdhdr-objectid,
it_cdhdr-changenr,
it_cdhdr-username,
it_cdhdr-udate,
it_cdhdr-utime,
it_cdhdr-tcode.
ENDLOOP.

ENDIF.



ALSO READ:


- ALV Report With User Defined Buttons In It's Toolbar.

- ALV Report Program - Colors- Using REUSE_ALV_GRID_DISPLAY_LVC.

- Displaying Percentage In ALV List / Grid Display.

- Handling An ALV Grid With Check Box Using A Method.

..... Back To Index On ALV List/ Grid Display.

..... Back To MAIN INDEX.


ABAP - Capture Single & Multiple Row Selection In ALV Report Program


The follow program demonstrates how to capture which rows of the ALV grid the user has selected.

Changes required from a basic ALV grid include adding a new field to ALV grid data table(it_ekko-sel) and
adding an entry to the layout control table (gd_layout-box_fieldname = 'SEL'). Please note you need to use
the SHIFT and CONTROL keys to select multiple rows!

*&---------------------------------------------------------------------*
*& Report ZDEMO_ALVGRID_SELROW *
*& *
*&---------------------------------------------------------------------*
*& *
*& Example of a simple ALV Grid Report *
*& ................................... *
*& *
*& The basic ALV grid, Enhanced to display capture each row a user has *
*& selected *
*&---------------------------------------------------------------------*

REPORT zdemo_alvgrid_selrow .

TABLES: ekko.
type-pools: slis. "ALV Declarations

*Data Declaration
*----------------

TYPES: BEGIN OF t_ekko,
SEl, "stores which row user has selected
ebeln TYPE ekpo-ebeln,
ebelp TYPE ekpo-ebelp,
statu TYPE ekpo-statu,
aedat TYPE ekpo-aedat,
matnr TYPE ekpo-matnr,
menge TYPE ekpo-menge,
meins TYPE ekpo-meins,
netpr TYPE ekpo-netpr,
peinh TYPE ekpo-peinh,
END OF t_ekko.

DATA: it_ekko TYPE STANDARD TABLE OF t_ekko INITIAL SIZE 0,
wa_ekko TYPE t_ekko.
*ALV data declarations

data: fieldcatalog type slis_t_fieldcat_alv with header line,
gd_tab_group type slis_t_sp_group_alv,
gd_layout type slis_layout_alv,
gd_repid like sy-repid.
************************************************************************

*Start-of-selection.
START-OF-SELECTION.
perform data_retrieval.
perform build_fieldcatalog.
perform build_layout.
perform display_alv_report.

*&---------------------------------------------------------------------*
*& Form BUILD_FIELDCATALOG
*&---------------------------------------------------------------------*
* Build Fieldcatalog for ALV Report
*----------------------------------------------------------------------*
form build_fieldcatalog.
* There are a number of ways to create a fieldcat.
* For the purpose of this example i will build the fieldcatalog manualy
* by populating the internal table fields individually and then
* appending the rows. This method can be the most time consuming but can
* also allow you more control of the final product.
* Beware though, you need to ensure that all fields required are
* populated. When using some of functionality available via ALV, such as
* total. You may need to provide more information than if you were
* simply displaying the result
* I.e. Field type may be required in-order for
* the 'TOTAL' function to work.

fieldcatalog-fieldname = 'EBELN'.
fieldcatalog-seltext_m = 'Purchase Order'.
fieldcatalog-col_pos = 0.
fieldcatalog-outputlen = 10.
fieldcatalog-emphasize = 'X'.
fieldcatalog-key = 'X'.
* fieldcatalog-do_sum = 'X'.
* fieldcatalog-no_zero = 'X'.
append fieldcatalog to fieldcatalog.
clear fieldcatalog.

fieldcatalog-fieldname = 'EBELP'.
fieldcatalog-seltext_m = 'PO Item'.
fieldcatalog-col_pos = 1.
append fieldcatalog to fieldcatalog.
clear fieldcatalog.

fieldcatalog-fieldname = 'STATU'.
fieldcatalog-seltext_m = 'Status'.
fieldcatalog-col_pos = 2.
append fieldcatalog to fieldcatalog.
clear fieldcatalog.

fieldcatalog-fieldname = 'AEDAT'.
fieldcatalog-seltext_m = 'Item change date'.
fieldcatalog-col_pos = 3.
append fieldcatalog to fieldcatalog.
clear fieldcatalog.

fieldcatalog-fieldname = 'MATNR'.
fieldcatalog-seltext_m = 'Material Number'.
fieldcatalog-col_pos = 4.
append fieldcatalog to fieldcatalog.
clear fieldcatalog.

fieldcatalog-fieldname = 'MENGE'.
fieldcatalog-seltext_m = 'PO quantity'.
fieldcatalog-col_pos = 5.
append fieldcatalog to fieldcatalog.
clear fieldcatalog.

fieldcatalog-fieldname = 'MEINS'.
fieldcatalog-seltext_m = 'Order Unit'.
fieldcatalog-col_pos = 6.
append fieldcatalog to fieldcatalog.
clear fieldcatalog.

fieldcatalog-fieldname = 'NETPR'.
fieldcatalog-seltext_m = 'Net Price'.
fieldcatalog-col_pos = 7.
fieldcatalog-outputlen = 15.
fieldcatalog-do_sum = 'X'. "Display column total
fieldcatalog-datatype = 'CURR'.
append fieldcatalog to fieldcatalog.
clear fieldcatalog.

fieldcatalog-fieldname = 'PEINH'.
fieldcatalog-seltext_m = 'Price Unit'.
fieldcatalog-col_pos = 8.
append fieldcatalog to fieldcatalog.
clear fieldcatalog.

endform. " BUILD_FIELDCATALOG

*&---------------------------------------------------------------------*
*& Form BUILD_LAYOUT
*&---------------------------------------------------------------------*
* Build layout for ALV grid report
*----------------------------------------------------------------------*
form build_layout.
gd_layout-box_fieldname = 'SEL'.
"set field name to store row selection
gd_layout-edit = 'X'. "makes whole ALV table editable
gd_layout-zebra = 'X'.
endform. " BUILD_LAYOUT


*&---------------------------------------------------------------------*
*& Form DISPLAY_ALV_REPORT
*&---------------------------------------------------------------------*
* Display report using ALV grid
*----------------------------------------------------------------------*
form display_alv_report.
gd_repid = sy-repid.
call function 'REUSE_ALV_GRID_DISPLAY'
exporting
i_callback_program = gd_repid
* i_callback_top_of_page = 'TOP-OF-PAGE' "see FORM
i_callback_user_command = 'USER_COMMAND'
* i_grid_title = outtext
is_layout = gd_layout
it_fieldcat = fieldcatalog[]
* it_special_groups = gd_tabgroup
* IT_EVENTS = GT_XEVENTS
i_save = 'X'
* is_variant = z_template
tables
t_outtab = it_ekko
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. " DISPLAY_ALV_REPORT


*&---------------------------------------------------------------------*
*& Form DATA_RETRIEVAL
*&---------------------------------------------------------------------*
* Retrieve data form EKPO table and populate itab it_ekko
*----------------------------------------------------------------------*
form data_retrieval.
select ebeln ebelp statu aedat matnr menge meins netpr peinh
up to 10 rows
from ekpo
into corresponding fields of table it_ekko.
endform. " DATA_RETRIEVAL

*------------------------------------------------------------------*
* FORM USER_COMMAND *
*------------------------------------------------------------------*
* --> R_UCOMM *
* --> RS_SELFIELD *
*------------------------------------------------------------------*
FORM user_command USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.
* Check function code
CASE r_ucomm.
WHEN '&IC1'.
* Check field clicked on within ALVgrid report
IF rs_selfield-fieldname = 'EBELN'.

* Read data table, using index of row user clicked on
READ TABLE it_ekko INTO wa_ekko INDEX rs_selfield-tabindex.

* Set parameter ID for transaction screen field
SET PARAMETER ID 'BES' FIELD wa_ekko-ebeln.

* Sxecute transaction ME23N, and skip initial data entry screen
CALL TRANSACTION 'ME23N' AND SKIP FIRST SCREEN.
ENDIF.

WHEN '&DATA_SAVE'. "user presses SAVE
loop at it_ekko into wa_ekko.
if wa_ekko-sel EQ 'X'.

* Process records that have been selected
endif.
endloop.

ENDCASE.
ENDFORM.



ALSO READ:

- Coloring A Row & Column In ALV Display Using OOPS Concept.

- Create Unique Handle For ALV Layout (Variant).

- Customizing Toolbar In ALV Tree Using ABAP OO.

- Dropdown in ALV Grid Display.

..... Back To Index On ALV List/ Grid Display.

..... Back To MAIN INDEX.


ABAP - Calling One ALV From Other ALV Report Program.


REPORT ZSAMALVCALLBACK.
type-pools:slis.

data:inttab type standard table of zemptab1 with header line ,
int_tab type STANDARD TABLE OF zemptabtwo with header line,
in_tab type standard table of zemptabtwo with header line.

data:fieldcat type slis_t_fieldcat_alv with header line,
fieldcat1 type slis_t_fieldcat_alv with header line.

select * from zemptab1 into corresponding fields of table inttab.

select * from zemptabtwo into corresponding fields of table int_tab.

perform buildfieldcat.

perform displayfieldcat.

FORM buildfieldcat.

fieldcat-fieldname = 'ID'.
fieldcat-seltext_m = 'EMPID'.
append fieldcat to fieldcat.

fieldcat-fieldname = 'NAME'.
fieldcat-seltext_m = 'EMPNAME'.
append fieldcat to fieldcat.

fieldcat-fieldname = 'QUALIFICATION'.
fieldcat-seltext_m = 'QUAL'.
append fieldcat to fieldcat.

fieldcat-fieldname = 'CITY'.
fieldcat-seltext_m = 'CITY'.
APPEND fieldcat to fieldcat.

fieldcat-fieldname = 'AGE'.
fieldcat-seltext_m = 'AGE'.
APPEND fieldcat to fieldcat.

ENDFORM. "buildfileldcat

FORM displayfieldcat .

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = sy-repid
I_CALLBACK_USER_COMMAND = 'USECOMMAND'
IT_FIELDCAT = FIELDCAT[]
TABLES
t_outtab = int_tab.
IF sy-subrc <> 0.
ENDIF.
ENDFORM. "displayfieldcat

FORM USECOMMAND USING r_ucomm LIKE sy-ucomm rs_selfield TYPE slis_selfield .

case r_ucomm.
WHEN '&IC1'.
READ TABLE int_tab INDEX
rs_selfield-tabindex.

IF sy-subrc EQ 0.
"loop at int_tab where id eq rs_selfield.
in_tab-id = int_tab-id.
in_tab-dcode = int_tab-dcode.
in_tab-desig = int_tab-desig.
in_tab-exp = int_tab-exp.
append in_tab.
endif.
endcase.
" endloop.

clear fieldcat.
refresh fieldcat.

perform build_fieldcat.

perform display_fieldcat.

ENDFORM. "USECOMMAND

FORM build_fieldcat.

fieldcat-fieldname = 'DCODE'.
fieldcat-seltext_m = 'Desigcode'.
append fieldcat.

fieldcat-fieldname = 'ID'.
fieldcat-seltext_m = 'EMPID'.
APPEND fieldcat to fieldcat.

fieldcat-fieldname = 'DESIG'.
fieldcat-seltext_m = 'Designation'.
append fieldcat to fieldcat.

fieldcat-fieldname = 'EXP'.
fieldcat-seltext_m = 'EXPERIENCE'.
append fieldcat to fieldcat.

ENDFORM. "build_fieldcat

FORM display_fieldcat.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = sy-repid
IT_FIELDCAT = fieldcat[]
TABLES
t_outtab = in_tab
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
ENDFORM. "display_fieldcat


ALSO READ:

- Capture Single & Multiple Row Selction In ALV Report Program.

- Coloring A Row & Column In ALV Display Using OOPS Concept.

- Create Unique Handle For ALV Layout (Variant).

- Customizing Toolbar In ALV Tree Using ABAP OO.

..... Back To Index On ALV List/ Grid Display.

..... Back To MAIN INDEX.


ABAP - Footer Functionality In ALV Reports.



In order to add a footer which is always displayed on screen to an ALV grid report you need to perform
the steps below.

Please note this will not be displayed in the printed output

Step 1. Update 'REUSE_ALV_GRID_DISPLAY' FM call to include parameter

'i_callback_html_end_of_list'
call function 'REUSE_ALV_GRID_DISPLAY'
exporting
i_callback_program = gd_repid
i_callback_top_of_page = 'TOP-OF-PAGE'
i_callback_html_end_of_list = 'END_OF_LIST_HTML'
is_layout = gd_layout
it_fieldcat = fieldcatalog[]
i_save = 'X'
tables
t_outtab = it_ekko
exceptions
program_error = 1
others = 2.


Step 2. Create new FORM 'END_OF_LIST_HTML' for building footer
*&------------------------------------------------------------------*
*& Form end_of_list_html
*&------------------------------------------------------------------*
* output at the end of the list - not in printed output *
*&------------------------------------------------------------------*
FORM end_of_list_html USING end TYPE REF TO cl_dd_document.
DATA: ls_text TYPE sdydo_text_element,
l_grid TYPE REF TO cl_gui_alv_grid,
f(14) TYPE c VALUE 'SET_ROW_HEIGHT'.
ls_text = 'Footer title'.
* adds and icon (red triangle)

CALL METHOD end->add_icon
EXPORTING
sap_icon = 'ICON_MESSAGE_ERROR_SMALL'.
* adds test (via variable)

CALL METHOD end->add_text
EXPORTING
text = ls_text
sap_emphasis = 'strong'.
* adds new line (start new line)

CALL METHOD end->new_line.
* display text(bold)

CALL METHOD end->add_text
EXPORTING
text = 'Bold text'
sap_emphasis = 'strong'.
* adds new line (start new line)

CALL METHOD end->new_line.
* display text(normal)

CALL METHOD end->add_text
EXPORTING
text = 'Normal text'.
* adds new line (start new line)

CALL METHOD end->new_line.
* display text(bold)

CALL METHOD end->add_text
EXPORTING
text = 'Yellow triangle'
sap_emphasis = 'strong'.
* adds and icon (yellow triangle)

CALL METHOD end->add_icon
EXPORTING
sap_icon = 'ICON_LED_YELLOW'.
* display text(normal)

CALL METHOD end->add_text
EXPORTING
text = 'More text'.
*set height of this section

CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = l_grid.

CALL METHOD l_grid->parent->parent->(f)
EXPORTING
id = 3
height = 14.
ENDFORM. "end_of_list_html.



ALSO READ:

- Calling One ALV From Other ALV Report Program.

- Capture Single & Multiple Row Selction In ALV Report Program.

- Coloring A Row & Column In ALV Display Using OOPS Concept.

- Create Unique Handle For ALV Layout (Variant).

..... Back To Index On ALV List/ Grid Display.

..... Back To MAIN INDEX.


ABAP - Top Of Page Center Using OOPS In ALV Report.

REPORT zalvtest.



*------------------------------------------------------------------------------

* tables

*------------------------------------------------------------------------------

TABLES vbak.



*------------------------------------------------------------------------------

* type pools

*------------------------------------------------------------------------------



TYPE-POOLS slis.



*------------------------------------------------------------------------------

* types and internal tables

*------------------------------------------------------------------------------



*Data Declaration

TYPES: BEGIN OF t_vbak,

vbeln TYPE vbak-vbeln,

erdat TYPE vbak-erdat,

ernam TYPE vbak-ernam,

audat TYPE vbak-audat,

vbtyp TYPE vbak-vbtyp,

netwr TYPE vbak-netwr,

vkorg TYPE vbak-vkorg,

vkgrp TYPE vbak-vkgrp,

END OF t_vbak.



DATA it_vbak TYPE STANDARD TABLE OF t_vbak INITIAL SIZE 0.



*ALV Data Declaration

DATA: fldcat TYPE slis_t_fieldcat_alv,



w_fldcat TYPE slis_fieldcat_alv,



gd_layout TYPE slis_layout_alv,



gd_repid TYPE sy-repid.



DATA: date1(10).



*------------------------------------------------------------------------------

* selection screen design

*------------------------------------------------------------------------------



SELECT-OPTIONS: vbeln FOR vbak-vbeln.



*------------------------------------------------------------------------------

* start of selection

*------------------------------------------------------------------------------



START-OF-SELECTION.



PERFORM data_retrieval.



PERFORM bld_fldcat.



PERFORM bld_layout.



PERFORM display_alv_report.



*------------------------------------------------------------------------------

* build catalog

*------------------------------------------------------------------------------

*Build Field Catalog for ALV Report

FORM bld_fldcat.



w_fldcat-fieldname = 'VBELN'.

w_fldcat-seltext_m = 'Sales_Document'.

w_fldcat-col_pos = 0.

w_fldcat-outputlen = 15.

w_fldcat-key = 'X'.

w_fldcat-icon = 'X'.

APPEND w_fldcat TO fldcat.

CLEAR w_fldcat.



w_fldcat-fieldname = 'ERDAT'.

w_fldcat-seltext_l = 'Record_Date_created'.

w_fldcat-col_pos = 1.

w_fldcat-key = 'X'.

APPEND w_fldcat TO fldcat.

CLEAR w_fldcat.



w_fldcat-fieldname = 'ERNAM'.

w_fldcat-seltext_l = 'Cteated_Person_Name'.

w_fldcat-col_pos = 2.

w_fldcat-emphasize = 'C011'.

APPEND w_fldcat TO fldcat.

CLEAR w_fldcat.



w_fldcat-fieldname = 'AUDAT'.

w_fldcat-seltext_m = 'Document_Date'.

w_fldcat-col_pos = 3.

w_fldcat-emphasize = 'C110'.

APPEND w_fldcat TO fldcat.

CLEAR w_fldcat.



w_fldcat-fieldname = 'VBTYP'.

w_fldcat-seltext_l = 'SDDocument_category'.

w_fldcat-col_pos = 4.

APPEND w_fldcat TO fldcat.

CLEAR w_fldcat.



w_fldcat-fieldname = 'NETWR'.

w_fldcat-seltext_l = 'Net_Value'.

w_fldcat-col_pos = 5.

w_fldcat-outputlen = 10.

w_fldcat-do_sum = 'X'.

w_fldcat-datatype = 'CURR'.

APPEND w_fldcat TO fldcat.

CLEAR w_fldcat.



w_fldcat-fieldname = 'VKORG'.

w_fldcat-seltext_l = 'Sales_Organization'.

w_fldcat-col_pos = 6.

APPEND w_fldcat TO fldcat.

CLEAR w_fldcat.



w_fldcat-fieldname = 'VKGRP'.

w_fldcat-seltext_m = 'Sales_Group'.

w_fldcat-col_pos = 7.

w_fldcat-emphasize = 'C801'.

APPEND w_fldcat TO fldcat.

CLEAR w_fldcat.



ENDFORM. "BLD_FLDCAT

*------------------------------------------------------------------------------

* display fatalog

*------------------------------------------------------------------------------

*Build Layout for ALV Grid Report



FORM bld_layout.

gd_layout-no_input = 'X'.

gd_layout-box_fieldname = 'VBELN'.

ENDFORM. "BLD_LAYOUT





*Display report using ALV grid



FORM display_alv_report.

gd_repid = sy-repid.



CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

EXPORTING

i_callback_program = gd_repid

is_layout = gd_layout

i_callback_html_top_of_page = 'TOP_OF_PAGE_SPLIT'

it_fieldcat = fldcat[]

TABLES

t_outtab = it_vbak.



ENDFORM. "DISPLAY_ALV_REPORT

*------------------------------------------------------------------------------

* get data

*------------------------------------------------------------------------------

*Retrieve data from VBAK table and populate itab IT_VBAK

FORM data_retrieval.



SELECT vbeln

erdat

ernam

audat

vbtyp

netwr

vkorg

FROM vbak

INTO TABLE it_vbak

WHERE vbeln IN vbeln.

ENDFORM. "DATA_RETRIEVAL

*------------------------------------------------------------------------------

* build header for alv

*------------------------------------------------------------------------------



FORM top_of_page_split USING r_top TYPE REF TO cl_dd_document.



DATA: s_tab TYPE sdydo_text_table,



c_area TYPE REF TO cl_dd_area,



text TYPE sdydo_text_element.



TYPES: BEGIN OF tab_text,

text TYPE sdydo_text_element,

END OF tab_text.



DATA: i_text TYPE TABLE OF tab_text.

DATA: w_text TYPE tab_text.



CALL METHOD r_top->initialize_document.



CALL METHOD r_top->vertical_split

EXPORTING

split_area = r_top

split_width = '70%'

IMPORTING

right_area = c_area.



CONCATENATE sy-datum+4(2)

' / '

sy-datum+6(2)

' / '

sy-datum(4)

INTO date1.



CONCATENATE 'DATE'

date1

INTO w_text-text

SEPARATED BY ':'.

APPEND w_text TO i_text.



CONCATENATE 'time:' sy-uzeit INTO w_text .

APPEND w_text TO i_text.



CONCATENATE 'uesr:' sy-uname INTO w_text .

APPEND w_text TO i_text.



CONCATENATE 'local date:' sy-datlo INTO w_text .

APPEND w_text TO i_text.



CONCATENATE 'time zone:' sy-zonlo INTO w_text .

APPEND w_text TO i_text.





s_tab[] = i_text[].



CALL METHOD c_area->add_text

EXPORTING

text_table = s_tab

fix_lines = 'X'

sap_fontsize = cl_dd_document=>medium

sap_emphasis = cl_dd_document=>strong.



CALL METHOD r_top->add_gap

EXPORTING

width = 60.



text = 'THIS IS REPORT HEADING'.

CALL METHOD r_top->add_text

EXPORTING

text = text

sap_emphasis = 'STRONG'.



CALL METHOD r_top->new_line.



CALL METHOD r_top->add_gap

EXPORTING

width = 70.



text = 'THIS IS REPORT HEADING1'.

CALL METHOD r_top->add_text

EXPORTING

text = text

sap_emphasis = 'STRONG'.



CALL METHOD r_top->new_line.



CALL METHOD r_top->add_gap

EXPORTING

width = 80.



text = 'THIS IS REPORT HEADING2'.

CALL METHOD r_top->add_text

EXPORTING

text = text

sap_emphasis = 'STRONG'.





CALL METHOD r_top->new_line.



text = 'Report Subheading1'.

CALL METHOD r_top->add_text

EXPORTING

text = text

sap_emphasis = 'NORMAL'.



CALL METHOD r_top->new_line.



text = 'Report Subheading2'.

CALL METHOD r_top->add_text

EXPORTING

text = text

sap_emphasis = 'NORMAL'.



CALL METHOD r_top->new_line.



text = 'Report Subheading3'.

CALL METHOD r_top->add_text
EXPORTING
text = text
sap_emphasis = 'NORMAL'.
CALL METHOD r_top->new_line.
ENDFORM. "TOP_OF_PAGE_SPLIT




ABAP - ALV Header With Logo.

report ztests .
type-pools slis.

data: begin of i_alv occurs 0,
matnr type mara-matnr,
end of i_alv.

* Miscellanous Data Declarations
data: fieldcat type slis_t_fieldcat_alv,
events type slis_t_event,
list_top_of_page type slis_t_listheader,
top_of_page type slis_formname value 'TOP_OF_PAGE'.


start-of-selection.

perform initialization.
perform get_data.
perform call_alv.

end-of-selection.

***************************************************
* Form Initialization
***************************************************
form initialization.

clear i_alv.
refresh i_alv.

perform eventtab_build using events[].

endform.

**************************************************
* Form Get_Data
**************************************************
form get_data.

select matnr
into table i_alv
from mara up to 100 rows.

endform.

**************************************************
* CALL_ALV
*************************************************
form call_alv.

data: variant type disvariant.
data: repid type sy-repid.

repid = sy-repid.
variant-report = sy-repid.
variant-username = sy-uname.

perform build_field_catalog.

perform comment_build using list_top_of_page[].

* Call ABAP List Viewer (ALV)
call function 'REUSE_ALV_GRID_DISPLAY'
exporting
it_fieldcat = fieldcat
i_callback_program = repid
is_variant = variant
it_events = events[]
i_save = 'U'
tables
t_outtab = i_alv.

endform.

**************************************************
* EVENTTAB_BUILD
**************************************************
form eventtab_build using events type slis_t_event.

* Registration of events to happen during list display
data: tmp_event type slis_alv_event.

call function 'REUSE_ALV_EVENTS_GET'
exporting
i_list_type = 0
importing
et_events = events.
read table events with key name = slis_ev_top_of_page
into tmp_event.
if sy-subrc = 0.
move top_of_page to tmp_event-form.
append tmp_event to events.
endif.

endform.

*************************************************
* BUILD_FIELD_CATALOG
*************************************************
form build_field_catalog.

clear: fieldcat. refresh: fieldcat.

data: tmp_fc type slis_fieldcat_alv.

tmp_fc-reptext_ddic = 'Material'.
tmp_fc-fieldname = 'MATNR'.
tmp_fc-tabname = 'I_ALV'.
tmp_fc-outputlen = 18.
append tmp_fc to fieldcat.

endform.

***************************************************
* COMMENT_BUILD
***************************************************
form comment_build using list_top_of_page type
slis_t_listheader.
data: tmp_line type slis_listheader.

clear tmp_line.
tmp_line-typ = 'H'.
tmp_line-info = 'Here is a line of text'.
append tmp_line to list_top_of_page.

clear tmp_line.
tmp_line-typ = 'S'.
tmp_line-key = 'Key1'.
tmp_line-info = 'Here is a value'.
append tmp_line to list_top_of_page.

clear tmp_line.
tmp_line-typ = 'A'.
tmp_line-key = 'Key2'.
tmp_line-info = 'Here is another value'.
append tmp_line to list_top_of_page.
endform.


****************************************************
* TOP_OF_PAGE
***************************************************
form top_of_page.

call function 'REUSE_ALV_COMMENTARY_WRITE'
exporting
i_logo = 'ENJOYSAP_LOGO'
it_list_commentary = list_top_of_page.

endform.


ALSO READ:

- Including Line After Subtotal In ALV Display.

- ALV Subtotals In Different Blocks.

- ALV With Page Numbers & Subtotals.

- Footer Functionality In ALV Reports.

..... Back To Index On ALV List/ Grid Display.

..... Back To MAIN INDEX.


ABAP - Saving PO Through ALV Report Program.

REPORT ztest_alv_check MESSAGE-ID zz .

TYPE-POOLS: slis.
DATA: x_fieldcat TYPE slis_fieldcat_alv,
it_fieldcat TYPE slis_t_fieldcat_alv,
l_layout TYPE slis_layout_alv,
x_events TYPE slis_alv_event,
it_events TYPE slis_t_event.

DATA: BEGIN OF itab OCCURS 0,
ebeln LIKE ekko-ebeln,
ebelp LIKE ekpo-ebelp,
chk(1),
color(4),
END OF itab.

x_fieldcat-fieldname = 'CHK'.
x_fieldcat-tabname = 'ITAB'.
x_fieldcat-col_pos = 1.
x_fieldcat-input = 'X'.
x_fieldcat-edit = 'X'.
x_fieldcat-checkbox = 'X'.
APPEND x_fieldcat TO it_fieldcat.
CLEAR x_fieldcat.

x_fieldcat-fieldname = 'EBELN'.
x_fieldcat-seltext_l = 'EBELN'.
x_fieldcat-hotspot = 'X'.
x_fieldcat-tabname = 'ITAB'.
x_fieldcat-col_pos = 2.
APPEND x_fieldcat TO it_fieldcat.
CLEAR x_fieldcat.

x_fieldcat-fieldname = 'EBELP'.
x_fieldcat-seltext_l = 'EBELP'.
x_fieldcat-tabname = 'ITAB'.
x_fieldcat-col_pos = 3.
APPEND x_fieldcat TO it_fieldcat.
CLEAR x_fieldcat.


perform get_data_anddisp.
*-Have a subroutine to get the data and display the daya
form get_data_anddisp.

SELECT ebeln
ebelp
FROM vbap
UP TO 20 ROWS
INTO TABLE itab.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-repid
is_layout = l_layout
i_callback_user_command = 'USER_COMMAND'
it_fieldcat = it_fieldcat
TABLES
t_outtab = itab
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.
*&---------------------------------------------------------------------*
*& Form USER_COMMAND
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->R_UCOMM text
* -->RS_SELFIELD text
*----------------------------------------------------------------------*
FORM user_command USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.

CASE ucomm.

WHEN '&IC1'.
if rs_selfield -fieldname = 'EBELN'.
"change the intenal table decalrations
SET PARAMETER ID 'BES' FIELD rs_selfield-value.
CALL TRANSACTION 'ME22N' AND SKIP FIRST SCREEN.
ENDCASE.
" these are important.
rs_selfield-refresh = 'X'.
rs_selfield-exit = 'X'.
*-now recall the data getting and Redisplaying
perform get_data_anddisp.
endif.


ENDFORM. "USER_COMMAND



ABAP - ALV In HTML Format.

REPORT ztest_page.


DATA : it_flight TYPE TABLE OF sflight WITH HEADER LINE.
data: t type x.

START-OF-SELECTION.


SELECT * FROM sflight INTO TABLE it_flight.

END-OF-SELECTION.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-repid
i_callback_html_top_of_page = 'HTML_TOP_OF_PAGE'
i_callback_top_of_page = 'TOP_OF_PAGE'
i_structure_name = 'SFLIGHT'
TABLES
t_outtab = it_flight
EXCEPTIONS
program_error = 1
OTHERS = 2.

*&---------------------------------------------------------------------*
*& Form TOP_OF_PAGE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM top_of_page.

WRITE 'This is the Top of page which triggers in print'.

ENDFORM. "TOP_OF_PAGE
*&---------------------------------------------------------------------*
*& Form html_top_of_page
*&---------------------------------------------------------------------*

FORM html_top_of_page USING document TYPE REF TO cl_dd_document.
DATA : dl_text(255) TYPE c. "Text
* Add new-line
CALL METHOD document->new_line.

CALL METHOD document->new_line.

CLEAR : dl_text.
* program ID
dl_text = 'Program Name :'.
CALL METHOD document->add_gap.
CALL METHOD document->add_text
EXPORTING
text = dl_text
sap_emphasis = cl_dd_area=>heading
sap_color = cl_dd_area=>list_heading_int.

CLEAR dl_text.
dl_text = sy-repid.
CALL METHOD document->add_text
EXPORTING
text = dl_text
sap_emphasis = cl_dd_area=>heading
sap_color = cl_dd_area=>list_negative_inv.

* Add new-line
CALL METHOD document->new_line.
CLEAR : dl_text.

dl_text = sy-uname.
CALL METHOD document->add_gap
EXPORTING
width = 34.
CALL METHOD document->add_text
EXPORTING
text = dl_text
sap_emphasis = cl_dd_area=>heading
sap_color = cl_dd_area=>list_negative_inv.

* Add new-line
CALL METHOD document->new_line.
CLEAR : dl_text.

CALL METHOD document->add_gap
EXPORTING
width = 34.
* Move date
WRITE sy-datum TO dl_text.

CALL METHOD document->add_text
EXPORTING
text = dl_text
sap_emphasis = cl_dd_area=>heading
sap_color = cl_dd_area=>list_negative_inv.

* Add new-line
CALL METHOD document->new_line.
CLEAR : dl_text.
* Move time
WRITE sy-uzeit TO dl_text.
CALL METHOD document->add_gap
EXPORTING
width = 34.
CALL METHOD document->add_text
EXPORTING
text = dl_text
sap_emphasis = cl_dd_area=>heading
sap_color = cl_dd_area=>list_negative_inv.

* Add new-line
CALL METHOD document->new_line.

ENDFORM. "HTML_TOP_OF_PAGE



ABAP - Sample Program On Adding Colors In ALV Report Program.

REPORT zdemo_alvgrid .

TABLES: ekko.

type-pools: slis. "ALV Declarations

*Data Declaration
TYPES: BEGIN OF t_ekko,
ebeln TYPE ekpo-ebeln,
ebelp TYPE ekpo-ebelp,
statu TYPE ekpo-statu,
aedat TYPE ekpo-aedat,
matnr TYPE ekpo-matnr,
menge TYPE ekpo-menge,
meins TYPE ekpo-meins,
netpr TYPE ekpo-netpr,
peinh TYPE ekpo-peinh,
line_color(4) type c, "Used to store row color attributes
END OF t_ekko.

DATA: it_ekko TYPE STANDARD TABLE OF t_ekko INITIAL SIZE 0,
wa_ekko TYPE t_ekko.

*ALV data declarations
data: fieldcatalog type slis_t_fieldcat_alv with header line,
gd_tab_group type slis_t_sp_group_alv,
gd_layout type slis_layout_alv,
gd_repid like sy-repid.

*Start-of-selection.
START-OF-SELECTION.

perform data_retrieval.
perform build_fieldcatalog.
perform build_layout.
perform display_alv_report.

*&---------------------------------------------------------------------*
*& Form BUILD_FIELDCATALOG
*&---------------------------------------------------------------------*
* Build Fieldcatalog for ALV Report
*----------------------------------------------------------------------*
form build_fieldcatalog.

fieldcatalog-fieldname = 'EBELN'.
fieldcatalog-seltext_m = 'Purchase Order'.
fieldcatalog-col_pos = 0.
fieldcatalog-outputlen = 10.
fieldcatalog-emphasize = 'X'.
fieldcatalog-key = 'X'.
append fieldcatalog to fieldcatalog.
clear fieldcatalog.

fieldcatalog-fieldname = 'EBELP'.
fieldcatalog-seltext_m = 'PO Item'.
fieldcatalog-col_pos = 1.
append fieldcatalog to fieldcatalog.
clear fieldcatalog.

fieldcatalog-fieldname = 'STATU'.
fieldcatalog-seltext_m = 'Status'.
fieldcatalog-col_pos = 2.
append fieldcatalog to fieldcatalog.
clear fieldcatalog.

fieldcatalog-fieldname = 'AEDAT'.
fieldcatalog-seltext_m = 'Item change date'.
fieldcatalog-col_pos = 3.
append fieldcatalog to fieldcatalog.
clear fieldcatalog.

fieldcatalog-fieldname = 'MATNR'.
fieldcatalog-seltext_m = 'Material Number'.
fieldcatalog-col_pos = 4.
append fieldcatalog to fieldcatalog.
clear fieldcatalog.

fieldcatalog-fieldname = 'MENGE'.
fieldcatalog-seltext_m = 'PO quantity'.
fieldcatalog-col_pos = 5.
append fieldcatalog to fieldcatalog.
clear fieldcatalog.

fieldcatalog-fieldname = 'MEINS'.
fieldcatalog-seltext_m = 'Order Unit'.
fieldcatalog-col_pos = 6.
append fieldcatalog to fieldcatalog.
clear fieldcatalog.

fieldcatalog-fieldname = 'NETPR'.
fieldcatalog-seltext_m = 'Net Price'.
fieldcatalog-col_pos = 7.
fieldcatalog-outputlen = 15.
fieldcatalog-datatype = 'CURR'.
append fieldcatalog to fieldcatalog.
clear fieldcatalog.

fieldcatalog-fieldname = 'PEINH'.
fieldcatalog-seltext_m = 'Price Unit'.
fieldcatalog-col_pos = 8.
append fieldcatalog to fieldcatalog.
clear fieldcatalog.
endform. " BUILD_FIELDCATALOG


*&---------------------------------------------------------------------*
*& Form BUILD_LAYOUT
*&---------------------------------------------------------------------*
* Build layout for ALV grid report
*----------------------------------------------------------------------*
form build_layout.
gd_layout-no_input = 'X'.
gd_layout-colwidth_optimize = 'X'.
gd_layout-totals_text = 'Totals'(201).
gd_layout-info_fieldname = 'LINE_COLOR'.
endform. " BUILD_LAYOUT

*&---------------------------------------------------------------------*
*& Form DISPLAY_ALV_REPORT
*&---------------------------------------------------------------------*
* Display report using ALV grid
*----------------------------------------------------------------------*
form display_alv_report.
gd_repid = sy-repid.
call function 'REUSE_ALV_GRID_DISPLAY'
exporting
i_callback_program = gd_repid
is_layout = gd_layout
it_fieldcat = fieldcatalog[]
i_save = 'X'
tables
t_outtab = it_ekko .

endform. " DISPLAY_ALV_REPORT


*&---------------------------------------------------------------------*
*& Form DATA_RETRIEVAL
*&---------------------------------------------------------------------*
* Retrieve data form EKPO table and populate itab it_ekko
*----------------------------------------------------------------------*
form data_retrieval.
data: ld_color(1) type c.

select ebeln ebelp statu aedat matnr menge meins netpr peinh
up to 10 rows
from ekpo
into table it_ekko.

*Populate field with color attributes
loop at it_ekko into wa_ekko.
ld_color = ld_color + 1.
* Only 7 colours so need to reset color value
if ld_color = 8.
ld_color = 1.
endif.
concatenate 'C' ld_color '10' into wa_ekko-line_color.
modify it_ekko from wa_ekko.
endloop.
endform. " DATA_RETRIEVAL


ALSO READ:

- Simple ALV Grid/List With Save Layout.

- Checkbox In ALV Program.

- ALV Header With Logo.

- Including Line After Subtotal In ALV Display.

..... Back To Index On ALV List/ Grid Display.

..... Back To MAIN INDEX.


ABAP - Simple ALV Grid/List With Save Layout.

REPORT ZTEST.

TYPE-POOLS: slis.

DATA: report_id LIKE sy-repid.

DATA: i_qmel LIKE qmel OCCURS 0.

DATA: i_layout TYPE slis_layout_alv.

SELECT * FROM qmel INTO TABLE i_qmel.

report_id = sy-repid.

PERFORM f1000_layout_init CHANGING i_layout.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = report_id
i_structure_name = 'QMEL'
is_layout = i_layout
i_save = 'A'
TABLES
t_outtab = i_qmel .

FORM f1000_layout_init USING
i_layout TYPE slis_layout_alv.
CLEAR i_layout.

i_layout-colwidth_optimize = 'X'.

ENDFORM.




ABAP - ALV Interactive Report With Variant Option.

REPORT ztest NO STANDARD PAGE HEADING LINE-SIZE 650
MESSAGE-ID ZZ_9838 .

TYPE-POOLS: SLIS.
*type declaration for values from ekko
TYPES: BEGIN OF I_EKKO,
EBELN LIKE EKKO-EBELN,
AEDAT LIKE EKKO-AEDAT,
BUKRS LIKE EKKO-BUKRS,
BSART LIKE EKKO-BSART,
LIFNR LIKE EKKO-LIFNR,
END OF I_EKKO.

DATA: IT_EKKO TYPE STANDARD TABLE OF I_EKKO INITIAL SIZE 0,
WA_EKKO TYPE I_EKKO.

*type declaration for values from ekpo
TYPES: BEGIN OF I_EKPO,
EBELN LIKE EKPO-EBELN,
EBELP LIKE EKPO-EBELP,
MATNR LIKE EKPO-MATNR,
MENGE LIKE EKPO-MENGE,
MEINS LIKE EKPO-MEINS,
NETPR LIKE EKPO-NETPR,
END OF I_EKPO.

DATA: IT_EKPO TYPE STANDARD TABLE OF I_EKPO INITIAL SIZE 0,
WA_EKPO TYPE I_EKPO .

*variable for Report ID
DATA: V_REPID LIKE SY-REPID .

*declaration for fieldcatalog
DATA: I_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
WA_FIELDCAT TYPE SLIS_FIELDCAT_ALV.


DATA: IT_LISTHEADER TYPE SLIS_T_LISTHEADER.

* declaration for events table where user comand or set PF status will
* be defined
DATA: V_EVENTS TYPE SLIS_T_EVENT,
WA_EVENT TYPE SLIS_ALV_EVENT.

* declartion for layout
DATA: ALV_LAYOUT TYPE SLIS_LAYOUT_ALV.

* declaration for variant(type of display we want)
DATA: I_VARIANT TYPE DISVARIANT,
I_VARIANT1 TYPE DISVARIANT,
I_SAVE(1) TYPE C.

*PARAMETERS : p_var TYPE disvariant-variant.

*Title displayed when the alv list is displayed
DATA: I_TITLE_EKKO TYPE LVC_TITLE VALUE 'FIRST LIST DISPLAYED'.
DATA: I_TITLE_EKPO TYPE LVC_TITLE VALUE 'SECONDRY LIST DISPLAYED'.

INITIALIZATION.
V_REPID = SY-REPID.
PERFORM BUILD_FIELDCATLOG.
PERFORM EVENT_CALL.
PERFORM POPULATE_EVENT.

START-OF-SELECTION.
PERFORM DATA_RETRIEVAL.
PERFORM BUILD_LISTHEADER USING IT_LISTHEADER.
PERFORM DISPLAY_ALV_REPORT.

*&--------------------------------------------------------------------*
*& Form BUILD_FIELDCATLOG
*&--------------------------------------------------------------------*
* Fieldcatalog has all the field details from ekko
*---------------------------------------------------------------------*
FORM BUILD_FIELDCATLOG.
WA_FIELDCAT-TABNAME = 'IT_EKKO'.
WA_FIELDCAT-FIELDNAME = 'EBELN'.
WA_FIELDCAT-SELTEXT_M = 'PO NO.'.
APPEND WA_FIELDCAT TO I_FIELDCAT.
CLEAR WA_FIELDCAT.

WA_FIELDCAT-TABNAME = 'IT_EKKO'.
WA_FIELDCAT-FIELDNAME = 'AEDAT'.
WA_FIELDCAT-SELTEXT_M = 'DATE.'.
APPEND WA_FIELDCAT TO I_FIELDCAT.
CLEAR WA_FIELDCAT.

WA_FIELDCAT-TABNAME = 'IT_EKKO'.
WA_FIELDCAT-FIELDNAME = 'BUKRS'.
WA_FIELDCAT-SELTEXT_M = 'COMPANY CODE'.
APPEND WA_FIELDCAT TO I_FIELDCAT.
CLEAR WA_FIELDCAT.

WA_FIELDCAT-TABNAME = 'IT_EKKO'.
WA_FIELDCAT-FIELDNAME = 'BUKRS'.
WA_FIELDCAT-SELTEXT_M = 'DOCMENT TYPE'.
APPEND WA_FIELDCAT TO I_FIELDCAT.
CLEAR WA_FIELDCAT.

WA_FIELDCAT-TABNAME = 'IT_EKKO'.
WA_FIELDCAT-FIELDNAME = 'LIFNR'.
WA_FIELDCAT-NO_OUT = 'X'.
WA_FIELDCAT-SELTEXT_M = 'VENDOR CODE'.
APPEND WA_FIELDCAT TO I_FIELDCAT.
CLEAR WA_FIELDCAT.


ENDFORM. "BUILD_FIELDCATLOG

*&--------------------------------------------------------------------*
*& Form EVENT_CALL
*&--------------------------------------------------------------------*
* we get all events - TOP OF PAGE or USER COMMAND in table v_events
*---------------------------------------------------------------------*
FORM EVENT_CALL.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
I_LIST_TYPE = 0
IMPORTING
ET_EVENTS = V_EVENTS .

ENDFORM. "EVENT_CALL

*&--------------------------------------------------------------------*
*& Form POPULATE_EVENT
*&--------------------------------------------------------------------*
* Events populated for TOP OF PAGE & USER COMAND
*---------------------------------------------------------------------*
FORM POPULATE_EVENT.
READ TABLE V_EVENTS INTO WA_EVENT WITH KEY NAME = 'TOP_OF_PAGE'.
IF SY-SUBRC EQ 0.
WA_EVENT-FORM = 'TOP_OF_PAGE'.
MODIFY V_EVENTS FROM WA_EVENT TRANSPORTING FORM WHERE NAME =
WA_EVENT-FORM.
ENDIF.

READ TABLE V_EVENTS INTO WA_EVENT WITH KEY NAME = 'USER_COMMAND'.
IF SY-SUBRC EQ 0.
WA_EVENT-FORM = 'USER_COMMAND'.
MODIFY V_EVENTS FROM WA_EVENT TRANSPORTING FORM WHERE NAME =
WA_EVENT-NAME.
ENDIF.
ENDFORM. "POPULATE_EVENT


*&--------------------------------------------------------------------*
*& Form data_retrieval
*&--------------------------------------------------------------------*
* retreiving values from the database table ekko
*---------------------------------------------------------------------*
FORM DATA_RETRIEVAL.
SELECT EBELN AEDAT BUKRS BSART LIFNR FROM EKKO INTO TABLE IT_EKKO.

ENDFORM. "data_retrieval
*&--------------------------------------------------------------------*
*& Form bUild_listheader
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
* -->I_LISTHEADEtext
*---------------------------------------------------------------------*
FORM BUILD_LISTHEADER USING I_LISTHEADER TYPE SLIS_T_LISTHEADER.
DATA HLINE TYPE SLIS_LISTHEADER.
HLINE-INFO = 'this is my first alv pgm'.
HLINE-TYP = 'H'.
ENDFORM. "build_listheader

*&--------------------------------------------------------------------*
*& Form display_alv_report
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM DISPLAY_ALV_REPORT.
V_REPID = SY-REPID.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = V_REPID
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
I_CALLBACK_TOP_OF_PAGE = 'TOP_OF_PAGE'
I_GRID_TITLE = I_TITLE_EKKO
IT_FIELDCAT = I_FIELDCAT[]
I_SAVE = 'A'
IT_EVENTS = V_EVENTS
TABLES
T_OUTTAB = IT_EKKO .

ENDFORM. "display_alv_report




*&--------------------------------------------------------------------*
*& Form TOP_OF_PAGE
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM TOP_OF_PAGE.

CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
IT_LIST_COMMENTARY = IT_LISTHEADER .

ENDFORM. "TOP_OF_PAGE

*&--------------------------------------------------------------------*
*& Form USER_COMMAND
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
* -->R_UCOMM text
* -->, text
* -->RS_SLEFIELDtext
*---------------------------------------------------------------------*
FORM USER_COMMAND USING R_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD.
CASE R_UCOMM.
WHEN '&IC1'.
READ TABLE IT_EKKO INTO WA_EKKO INDEX RS_SELFIELD-TABINDEX.
PERFORM BUILD_FIELDCATLOG_EKPO.
PERFORM EVENT_CALL_EKPO.
PERFORM POPULATE_EVENT_EKPO.
PERFORM DATA_RETRIEVAL_EKPO.
PERFORM BUILD_LISTHEADER_EKPO USING IT_LISTHEADER.
PERFORM DISPLAY_ALV_EKPO.
ENDCASE.
ENDFORM. "user_command
*&--------------------------------------------------------------------*
*& Form BUILD_FIELDCATLOG_EKPO
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM BUILD_FIELDCATLOG_EKPO.

WA_FIELDCAT-TABNAME = 'IT_EKPO'.
WA_FIELDCAT-FIELDNAME = 'EBELN'.
WA_FIELDCAT-SELTEXT_M = 'PO NO.'.
APPEND WA_FIELDCAT TO I_FIELDCAT.
CLEAR WA_FIELDCAT.

WA_FIELDCAT-TABNAME = 'IT_EKPO'.
WA_FIELDCAT-FIELDNAME = 'EBELP'.
WA_FIELDCAT-SELTEXT_M = 'LINE NO'.
APPEND WA_FIELDCAT TO I_FIELDCAT.
CLEAR WA_FIELDCAT.

WA_FIELDCAT-TABNAME = 'I_EKPO'.
WA_FIELDCAT-FIELDNAME = 'MATNR'.
WA_FIELDCAT-SELTEXT_M = 'MATERIAL NO.'.
APPEND WA_FIELDCAT TO I_FIELDCAT.
CLEAR WA_FIELDCAT.

WA_FIELDCAT-TABNAME = 'I_EKPO'.
WA_FIELDCAT-FIELDNAME = 'MENGE'.
WA_FIELDCAT-SELTEXT_M = 'QUANTITY'.
APPEND WA_FIELDCAT TO I_FIELDCAT.
CLEAR WA_FIELDCAT.

WA_FIELDCAT-TABNAME = 'I_EKPO'.
WA_FIELDCAT-FIELDNAME = 'MEINS'.
WA_FIELDCAT-SELTEXT_M = 'UOM'.
APPEND WA_FIELDCAT TO I_FIELDCAT.
CLEAR WA_FIELDCAT.

WA_FIELDCAT-TABNAME = 'I_EKPO'.
WA_FIELDCAT-FIELDNAME = 'NETPR'.
WA_FIELDCAT-SELTEXT_M = 'PRICE'.
APPEND WA_FIELDCAT TO I_FIELDCAT.
CLEAR WA_FIELDCAT.


ENDFORM. "BUILD_FIELDCATLOG_EKPO

*&--------------------------------------------------------------------*
*& Form event_call_ekpo
*&--------------------------------------------------------------------*
* we get all events - TOP OF PAGE or USER COMMAND in table v_events
*---------------------------------------------------------------------*
FORM EVENT_CALL_EKPO.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
I_LIST_TYPE = 0
IMPORTING
ET_EVENTS = V_EVENTS .

ENDFORM. "event_call_ekpo


*&--------------------------------------------------------------------*
*& Form POPULATE_EVENT
*&--------------------------------------------------------------------*
* Events populated for TOP OF PAGE & USER COMAND
*---------------------------------------------------------------------*
FORM POPULATE_EVENT_EKPO.
READ TABLE V_EVENTS INTO WA_EVENT WITH KEY NAME = 'TOP_OF_PAGE'.
IF SY-SUBRC EQ 0.
WA_EVENT-FORM = 'TOP_OF_PAGE'.
MODIFY V_EVENTS FROM WA_EVENT TRANSPORTING FORM WHERE NAME =
WA_EVENT-FORM.
ENDIF.

ENDFORM. "POPULATE_EVENT

*&--------------------------------------------------------------------*
*& Form TOP_OF_PAGE
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM F_TOP_OF_PAGE.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
IT_LIST_COMMENTARY = IT_LISTHEADER .

ENDFORM. "TOP_OF_PAGE

*&--------------------------------------------------------------------*
*& Form USER_COMMAND
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
* -->R_UCOMM text
* -->, text
* -->RS_SLEFIELDtext
*---------------------------------------------------------------------*

*retreiving values from the database table ekko
FORM DATA_RETRIEVAL_EKPO.
SELECT EBELN EBELP MATNR MENGE MEINS NETPR FROM EKPO INTO TABLE IT_EKPO.
ENDFORM.

FORM BUILD_LISTHEADER_EKPO USING I_LISTHEADER TYPE SLIS_T_LISTHEADER.
DATA: HLINE1 TYPE SLIS_LISTHEADER.
HLINE1-TYP = 'H'.
HLINE1-INFO = 'CHECKING PGM'.
ENDFORM.


FORM DISPLAY_ALV_EKPO.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = V_REPID
I_CALLBACK_TOP_OF_PAGE = 'TOP_OF_PAGE'
I_GRID_TITLE = I_TITLE_EKPO
IT_FIELDCAT = I_FIELDCAT[]
I_SAVE = 'A'
IT_EVENTS = V_EVENTS
TABLES
T_OUTTAB = IT_EKPO .
ENDFORM.


ALSO READ:

- Simple ALV Grid/List With Save Layout.

- Checkbox In ALV Program.

- ALV Header With Logo.

- Including Line After Subtotal In ALV Display.

..... Back To Index On ALV List/ Grid Display.

..... Back To MAIN INDEX.


ABAP - Sample ALV Grid Display Report Program.

REPORT ZTUFI091 .

*& Report ZDEMO_ALVGRID
*& Example of a simple ALV Grid Report
*& The basic requirement for this demo is to display a number of fields from the EKKO table.


REPORT zdemo_alvgrid .

TABLES: ekko.

type-pools: slis. "ALV Declarations

* Data Declaration
*----------------
TYPES: BEGIN OF t_ekko,
ebeln TYPE ekpo-ebeln,
ebelp TYPE ekpo-ebelp,
statu TYPE ekpo-statu,
aedat TYPE ekpo-aedat,
matnr TYPE ekpo-matnr,
menge TYPE ekpo-menge,
meins TYPE ekpo-meins,
netpr TYPE ekpo-netpr,
peinh TYPE ekpo-peinh,
END OF t_ekko.

DATA: it_ekko TYPE STANDARD TABLE OF t_ekko INITIAL SIZE 0,
wa_ekko TYPE t_ekko.

*ALV data declarations

data: fieldcatalog type slis_t_fieldcat_alv with header line,
gd_tab_group type slis_t_sp_group_alv,
gd_layout type slis_layout_alv,
gd_repid like sy-repid,
gt_events type slis_t_event,
gd_prntparams type slis_print_alv.


************************************************************************
*Start-of-selection.
START-OF-SELECTION.

perform data_retrieval.
perform build_fieldcatalog.
perform build_layout.
perform build_events.
perform build_print_params.
perform display_alv_report.


*&---------------------------------------------------------------------*
*& Form BUILD_FIELDCATALOG
*&---------------------------------------------------------------------*
* Build Fieldcatalog for ALV Report
*----------------------------------------------------------------------*
form build_fieldcatalog.

* There are a number of ways to create a fieldcat.
* For the purpose of this example i will build the fieldcatalog manualy
* by populating the internal table fields individually and then
* appending the rows. This method can be the most time consuming but can
* also allow you more control of the final product.

* Beware though, you need to ensure that all fields required are
* populated. When using some of functionality available via ALV, such as
* total. You may need to provide more information than if you were
* simply displaying the result
* I.e. Field type may be required in-order for
* the 'TOTAL' function to work.

fieldcatalog-fieldname = 'EBELN'.
fieldcatalog-seltext_m = 'Purchase Order'.
fieldcatalog-col_pos = 0.
fieldcatalog-outputlen = 10.
fieldcatalog-emphasize = 'X'.
fieldcatalog-key = 'X'.
* fieldcatalog-do_sum = 'X'.
* fieldcatalog-no_zero = 'X'.
append fieldcatalog to fieldcatalog.
clear fieldcatalog.

fieldcatalog-fieldname = 'EBELP'.
fieldcatalog-seltext_m = 'PO Item'.
fieldcatalog-col_pos = 1.
append fieldcatalog to fieldcatalog.
clear fieldcatalog.

fieldcatalog-fieldname = 'STATU'.
fieldcatalog-seltext_m = 'Status'.
fieldcatalog-col_pos = 2.
append fieldcatalog to fieldcatalog.
clear fieldcatalog.

fieldcatalog-fieldname = 'AEDAT'.
fieldcatalog-seltext_m = 'Item change date'.
fieldcatalog-col_pos = 3.
append fieldcatalog to fieldcatalog.
clear fieldcatalog.

fieldcatalog-fieldname = 'MATNR'.
fieldcatalog-seltext_m = 'Material Number'.
fieldcatalog-col_pos = 4.
append fieldcatalog to fieldcatalog.
clear fieldcatalog.

fieldcatalog-fieldname = 'MENGE'.
fieldcatalog-seltext_m = 'PO quantity'.
fieldcatalog-col_pos = 5.
append fieldcatalog to fieldcatalog.
clear fieldcatalog.

fieldcatalog-fieldname = 'MEINS'.
fieldcatalog-seltext_m = 'Order Unit'.
fieldcatalog-col_pos = 6.
append fieldcatalog to fieldcatalog.
clear fieldcatalog.

fieldcatalog-fieldname = 'NETPR'.
fieldcatalog-seltext_m = 'Net Price'.
fieldcatalog-col_pos = 7.
fieldcatalog-outputlen = 15.
fieldcatalog-datatype = 'CURR'.
append fieldcatalog to fieldcatalog.
clear fieldcatalog.

fieldcatalog-fieldname = 'PEINH'.
fieldcatalog-seltext_m = 'Price Unit'.
fieldcatalog-col_pos = 8.
append fieldcatalog to fieldcatalog.
clear fieldcatalog.
endform. " BUILD_FIELDCATALOG


*&---------------------------------------------------------------------*
*& Form BUILD_LAYOUT
*&---------------------------------------------------------------------*
* Build layout for ALV grid report
*----------------------------------------------------------------------*
form build_layout.
gd_layout-no_input = 'X'.
gd_layout-colwidth_optimize = 'X'.
gd_layout-totals_text = 'Totals'(201).
* gd_layout-totals_only = 'X'.
* gd_layout-f2code = 'DISP'. "Sets fcode for when double
* "click(press f2)
* gd_layout-zebra = 'X'.
* gd_layout-group_change_edit = 'X'.
* gd_layout-header_text = 'helllllo'.
endform. " BUILD_LAYOUT


*&---------------------------------------------------------------------*
*& Form DISPLAY_ALV_REPORT
*&---------------------------------------------------------------------*
* Display report using ALV grid
*----------------------------------------------------------------------*
form display_alv_report.
gd_repid = sy-repid.
call function 'REUSE_ALV_GRID_DISPLAY'
exporting
i_callback_program = gd_repid
i_callback_top_of_page = 'TOP-OF-PAGE' "see FORM
i_callback_user_command = 'USER_COMMAND'
* i_grid_title = outtext
is_layout = gd_layout
it_fieldcat = fieldcatalog[]
* it_special_groups = gd_tabgroup
it_events = gt_events
is_print = gd_prntparams
i_save = 'X'
* is_variant = z_template
tables
t_outtab = it_ekko
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. " DISPLAY_ALV_REPORT


*&---------------------------------------------------------------------*
*& Form DATA_RETRIEVAL
*&---------------------------------------------------------------------*
* Retrieve data form EKPO table and populate itab it_ekko
*----------------------------------------------------------------------*
form data_retrieval.

select ebeln ebelp statu aedat matnr menge meins netpr peinh
up to 10 rows
from ekpo
into table it_ekko.
endform. " DATA_RETRIEVAL


*-------------------------------------------------------------------*
* Form TOP-OF-PAGE *
*-------------------------------------------------------------------*
* ALV Report Header *
*-------------------------------------------------------------------*
Form top-of-page.
*ALV Header declarations
data: t_header type slis_t_listheader,
wa_header type slis_listheader,
t_line like wa_header-info,
ld_lines type i,
ld_linesc(10) type c.

* Title
wa_header-typ = 'H'.
wa_header-info = 'EKKO Table Report'.
append wa_header to t_header.
clear wa_header.

* Date
wa_header-typ = 'S'.
wa_header-key = 'Date: '.
CONCATENATE sy-datum+6(2) '.'
sy-datum+4(2) '.'
sy-datum(4) INTO wa_header-info. "todays date
append wa_header to t_header.
clear: wa_header.

* Total No. of Records Selected
describe table it_ekko lines ld_lines.
ld_linesc = ld_lines.
concatenate 'Total No. of Records Selected: ' ld_linesc
into t_line separated by space.
wa_header-typ = 'A'.
wa_header-info = t_line.
append wa_header to t_header.
clear: wa_header, t_line.

call function 'REUSE_ALV_COMMENTARY_WRITE'
exporting
it_list_commentary = t_header.
* i_logo = 'Z_LOGO'.
endform.


*------------------------------------------------------------------*
* FORM USER_COMMAND *
*------------------------------------------------------------------*
* --> R_UCOMM *
* --> RS_SELFIELD *
*------------------------------------------------------------------*
FORM user_command USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.

* Check function code
CASE r_ucomm.
WHEN '&IC1'.
* Check field clicked on within ALVgrid report
IF rs_selfield-fieldname = 'EBELN'.
* Read data table, using index of row user clicked on
READ TABLE it_ekko INTO wa_ekko INDEX rs_selfield-tabindex.
* Set parameter ID for transaction screen field
SET PARAMETER ID 'BES' FIELD wa_ekko-ebeln.
* Sxecute transaction ME23N, and skip initial data entry screen
CALL TRANSACTION 'ME23N' AND SKIP FIRST SCREEN.
ENDIF.
ENDCASE.
ENDFORM.


*&---------------------------------------------------------------------*
*& Form BUILD_EVENTS
*&---------------------------------------------------------------------*
* Build events table
*----------------------------------------------------------------------*
form build_events.
data: ls_event type slis_alv_event.

call function 'REUSE_ALV_EVENTS_GET'
exporting
i_list_type = 0
importing
et_events = gt_events[].
read table gt_events with key name = slis_ev_end_of_page
into ls_event.
if sy-subrc = 0.
move 'END_OF_PAGE' to ls_event-form.
append ls_event to gt_events.
endif.

read table gt_events with key name = slis_ev_end_of_list
into ls_event.
if sy-subrc = 0.
move 'END_OF_LIST' to ls_event-form.
append ls_event to gt_events.
endif.
endform. " BUILD_EVENTS


*&---------------------------------------------------------------------*
*& Form BUILD_PRINT_PARAMS
*&---------------------------------------------------------------------*
* Setup print parameters
*----------------------------------------------------------------------*
form build_print_params.
gd_prntparams-reserve_lines = '3'. "Lines reserved for footer
gd_prntparams-no_coverpage = 'X'.
endform. " BUILD_PRINT_PARAMS


*&---------------------------------------------------------------------*
*& Form END_OF_PAGE
*&---------------------------------------------------------------------*
form END_OF_PAGE.
data: listwidth type i,
ld_pagepos(10) type c,
ld_page(10) type c.

write: sy-uline(50).
skip.
write:/40 'Page:', sy-pagno .
endform.


*&---------------------------------------------------------------------*
*& Form END_OF_LIST
*&---------------------------------------------------------------------*
form END_OF_LIST.
data: listwidth type i,
ld_pagepos(10) type c,
ld_page(10) type c.

skip.
write:/40 'Page:', sy-pagno .
endform.


ALSO READ:

- Simple ALV Grid/List With Save Layout.

- Checkbox In ALV Program.

- ALV Header With Logo.

- Including Line After Subtotal In ALV Display.

..... Back To Index On ALV List/ Grid Display.

..... Back To MAIN INDEX.