Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

ALV

Former Member
0 Kudos

Hi frens,

How do I create a button in alv report tool bar.

5 REPLIES 5

Former Member
0 Kudos

same question solved in this thread....

abdul_hakim
Active Contributor
0 Kudos

Hi

Please check the program <b>BCALV_GRID_05</b>

Cheers,

Abdul

Mark all useful answers

Former Member
0 Kudos

Hi Prakash,

1. Button In ALV.

2. The important things are :

a) New PF-STATUS is required , say 'ABCD'.

b) Handle user_commmand

3. First of all, from Function group SALV,

copy the STANDARD gui status to your program,

from SE80, by right clicking.

4. come to your program.

start-of-selection.

SET PF-STATUS 'ABCD'.

5. Double click ABCD and activate the gui status.

6. In gui status,

in those green buttons and yellow buton,

write BACK1 in both.

ie. buttons with fcode MYFCODE.

Save and activate.

6.

*----


  • CALL BACK FORM

*----


FORM itab_user_command USING whatcomm TYPE sy-ucomm whatrow TYPE

slis_selfield.

*----


IMPORTANT.

IF WHATCOMM = 'MYFCODE'.

ENDIF.

ENDFORM. "ITAB_user_command

This will solve your problem.

I tried at my end, it works fantastic.

regards,

amit m.

former_member188685
Active Contributor
0 Kudos

Hi,

steps..

1.

Go to SE41 give the Program name SAPLKKBL

and status as STANDARD

now click Copy status (CTRL+F6), now give your Program name , and PF-status and copy it. now save it and activate the pf-satus which you have copied.and add your own button to it. and use it in your PF-status form.

pass that status using the parameter call back status option.

2. use this..

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
* I_INTERFACE_CHECK = ' '
* I_BYPASSING_BUFFER = ' '
* I_BUFFER_ACTIVE = ' '
i_callback_program = g_repid
i_callback_pf_status_set = 'STATUS'
<b> i_callback_user_command = 'USER_COMMAND'</b>

3.

FORM STATUS USING P_EXTAB TYPE SLIS_T_EXTAB.*- Pf status  SET PF-STATUS 'STATUS' excluding p_extab. "this is i copied it from standard program
ENDFORM.                 " STATUS

4.

<b>FORM USER_COMMAND USING R_UCOMM     LIKE SY-UCOMM
                               RS_SELFIELD TYPE SLIS_SELFIELD.

  case r_ucomm.

    when 'BACK' or 'CANC' or 'EXIT'.
      leave to screen 0.
    when 'BUTTON'.
"do what ever you want here..
   endcase.
ENDFORM.                    "USER_COMMAND</b>

Regards

vijay

Former Member
0 Kudos

Hai Prakash

Check the following Code

REPORT z_alv_grid_ctrl_refresh_2.

***********************************************************************

  • ALV Grid Control *

  • This report reads and displays data from table MARA, using *

  • the Method set_table_for_first_display of CL_GUI_ALV_GRID *

  • Button 'NEXT_PAGE' : displays the next N records *

  • Button 'PREV_PAGE' : displays the previous N records *

  • Button 'FIRST_PAGE' : displays the first page *

  • Button 'LAST_PAGE' : displays the last page *

  • When the buttons Sort up, sort down, Filter, Delete Filter are *

  • pressed, N record are still displayed *

----


  • Steps : *

  • - Create the report Z_ALV_GRID_CTRL_REFRESH_2 *

  • - Create the Dynpro 0100 (size 27x120) *

  • - Add OKCODE (type OK) in the element list *

  • - Modify the flow logic of dynpro 0100 : *

  • * PROCESS BEFORE OUTPUT. *

  • MODULE pbo_0100. *

  • * PROCESS AFTER INPUT. *

  • MODULE user_command_0100. *

  • - Create a status named 'MAIN' *

  • with the buttons : REFRESH BACK EXIT *

  • and the buttons : FIRST_PAGE PREV_PAGE NEXT_PAGE LAST_PAGE *

----


***********************************************************************

CONSTANTS:

c_first_page TYPE syucomm VALUE 'FIRST_PAGE',

c_next_page TYPE syucomm VALUE 'NEXT_PAGE',

c_prev_page TYPE syucomm VALUE 'PREV_PAGE',

c_last_page TYPE syucomm VALUE 'LAST_PAGE'.

TYPES:

BEGIN OF ty_s_mara,

ernam LIKE mara-ernam,

matnr LIKE mara-matnr,

ersda LIKE mara-ersda,

brgew LIKE mara-brgew,

END OF ty_s_mara.

CLASS lcl_event_alv DEFINITION DEFERRED.

DATA:

gt_mara TYPE STANDARD TABLE OF ty_s_mara,

go_container TYPE REF TO cl_gui_docking_container,

go_alv_grid TYPE REF TO cl_gui_alv_grid,

go_events TYPE REF TO lcl_event_alv,

gt_mara_ftr TYPE STANDARD TABLE OF ty_s_mara, " Data filtered

gt_mara_all TYPE STANDARD TABLE OF ty_s_mara, " Data readfrom DB

okcode TYPE syucomm,

gv_okcode TYPE syucomm.

----


  • CLASS lcl_event_alv DEFINITION

----


CLASS lcl_event_alv DEFINITION.

PUBLIC SECTION.

METHODS:

h_user_command FOR EVENT after_user_command OF cl_gui_alv_grid

IMPORTING e_ucomm

sender.

ENDCLASS. " LCL_EVENT_ALV DEFINITION

----


  • Class (Implementation) lcl_event_alv

----


CLASS lcl_event_alv IMPLEMENTATION.

METHOD h_user_command.

CASE e_ucomm.

WHEN '&SORT_ASC' OR '&SORT_DSC'. " Sort

PERFORM f_sort_big_table.

PERFORM f_read_data USING c_first_page.

PERFORM f_refresh_table.

WHEN '&FILTER'. " Filter

PERFORM f_filter_data.

PERFORM f_read_data USING c_first_page.

PERFORM f_refresh_table.

WHEN '&DELETE_FILTER'. " Delete filter

gt_mara_ftr[] = gt_mara_all[].

PERFORM f_read_data USING c_first_page.

PERFORM f_refresh_table.

ENDCASE.

ENDMETHOD. " user_command

ENDCLASS. " LCL_EVENT_ALV

----


SELECTION-SCREEN :

BEGIN OF LINE,COMMENT 10(20) v_1 FOR FIELD p_max. "#EC NEEDED

PARAMETERS p_max(2) TYPE n DEFAULT '30' OBLIGATORY.

SELECTION-SCREEN END OF LINE.

----


INITIALIZATION.

v_1 = 'Lines per page'.

----


START-OF-SELECTION.

SELECT matnr ernam ersda brgew

INTO TABLE gt_mara_all

FROM mara.

gt_mara_ftr[] = gt_mara_all[].

PERFORM f_read_data USING c_first_page.

CALL SCREEN 100.

----


  • Module pbo_0100 OUTPUT

----


MODULE pbo_0100 OUTPUT.

SET PF-STATUS 'MAIN'.

PERFORM create_and_init_alv.

ENDMODULE. " PBO_0100 OUTPUT

----


  • Module user_command_0100 INPUT

----


MODULE user_command_0100 INPUT.

gv_okcode = okcode.

CLEAR okcode.

CASE gv_okcode.

WHEN 'BACK'.

SET SCREEN 0.

WHEN 'EXIT'.

LEAVE PROGRAM.

WHEN c_first_page OR c_next_page OR c_last_page OR c_prev_page.

PERFORM f_read_data USING gv_okcode. " Update gt_mara

PERFORM f_refresh_table.

ENDCASE.

ENDMODULE. " USER_COMMAND_0100 INPUT

----


  • Form f_read_data

----


FORM f_read_data USING u_ucomm TYPE syucomm.

STATICS :

l_1 TYPE sytabix,

l_2 TYPE sytabix.

DATA l_max TYPE sytabix. " Internal table size

DESCRIBE TABLE gt_mara_ftr LINES l_max.

CASE u_ucomm.

WHEN c_first_page. " 1st page

l_1 = 1.

WHEN c_prev_page. " Previous page

SUBTRACT p_max FROM l_1.

IF l_1 < 1.

l_1 = 1.

ENDIF.

WHEN c_next_page. " Next page

IF l_1 IS INITIAL.

l_1 = 1.

ELSE.

ADD p_max TO l_1.

ENDIF.

IF l_1 > l_max.

l_1 = l_max.

ENDIF.

WHEN c_last_page. " Last page

l_1 = l_max - p_max + 1.

IF l_1 < 1.

l_1 = 1.

ENDIF.

ENDCASE.

l_2 = l_1 + p_max - 1.

IF l_2 > l_max.

l_2 = l_max.

ENDIF.

REFRESH gt_mara.

IF l_max > 0.

APPEND LINES OF gt_mara_ftr FROM l_1

TO l_2

TO gt_mara.

ENDIF.

ENDFORM. " F_READ_DATA

----


  • Form create_and_init_alv

----


FORM create_and_init_alv.

  • Macro definition

DEFINE m_fieldcat.

add 1 to ls_alv_cat-col_pos.

ls_alv_cat-fieldname = &1.

ls_alv_cat-ref_table = 'MARA'.

append ls_alv_cat to lt_alv_cat.

END-OF-DEFINITION.

DATA:

ls_variant TYPE disvariant,

lt_alv_cat TYPE lvc_t_fcat,

ls_alv_cat TYPE lvc_s_fcat,

ls_alv_lay TYPE lvc_s_layo,

l_offline TYPE char1.

CHECK go_container IS INITIAL.

CALL METHOD cl_gui_alv_grid=>offline

RECEIVING e_offline = l_offline.

IF l_offline EQ 0.

CREATE OBJECT go_container

EXPORTING

extension = 2000

EXCEPTIONS

cntl_error = 1

cntl_system_error = 2

create_error = 3

lifetime_error = 4

lifetime_dynpro_dynpro_link = 5

others = 6.

IF sy-subrc NE 0.

MESSAGE e208(00) WITH 'The control could not be created'.

ENDIF.

ENDIF.

  • Create an instance of alv control

CREATE OBJECT go_alv_grid

EXPORTING i_parent = go_container.

CREATE OBJECT go_events.

SET HANDLER go_events->h_user_command FOR go_alv_grid.

  • Build field catalog

m_fieldcat 'ERNAM'.

m_fieldcat 'MATNR'.

m_fieldcat 'ERSDA'.

m_fieldcat 'BRGEW'.

  • Layout

CLEAR ls_alv_lay.

ls_alv_lay-zebra = 'X'.

ls_alv_lay-cwidth_opt = 'X'.

ls_variant-report = sy-cprog.

  • Display

CALL METHOD go_alv_grid->set_table_for_first_display

EXPORTING

is_variant = ls_variant

is_layout = ls_alv_lay

i_save = 'A'

CHANGING

it_outtab = gt_mara

it_fieldcatalog = lt_alv_cat.

ENDFORM. " CREATE_AND_INIT_ALV

----


  • Form F_REFRESH_TABLE

----


FORM f_refresh_table.

DATA: ls_layout TYPE lvc_s_layo.

CALL METHOD go_alv_grid->get_frontend_layout

IMPORTING es_layout = ls_layout.

ls_layout-cwidth_opt = 'X'.

CALL METHOD go_alv_grid->set_frontend_layout

EXPORTING is_layout = ls_layout.

CALL METHOD go_alv_grid->refresh_table_display.

ENDFORM. " F_REFRESH_TABLE

----


  • Form F_SORT_BIG_TABLE

----


FORM f_sort_big_table.

DATA:

lt_sort_kkblo TYPE kkblo_t_sortinfo,

lt_sort TYPE lvc_t_sort.

CALL METHOD go_alv_grid->get_sort_criteria

IMPORTING et_sort = lt_sort.

CHECK NOT lt_sort[] IS INITIAL.

  • Format LVC --> KKBLO

CALL FUNCTION 'LVC_TRANSFER_TO_KKBLO'

EXPORTING

it_sort_lvc = lt_sort

IMPORTING

et_sort_kkblo = lt_sort_kkblo.

  • The big tables must be sorted like the small one

PERFORM fb_outtab_sort(saplkkbl) TABLES gt_mara_ftr

lt_sort_kkblo

USING 'X'

'X'.

PERFORM fb_outtab_sort(saplkkbl) TABLES gt_mara_all

lt_sort_kkblo

USING 'X'

'X'.

ENDFORM. " F_SORT_BIG_TABLE

----


  • Form f_filter_data

----


FORM f_filter_data.

DATA:

lt_filter_lvc TYPE lvc_t_filt,

lt_filter_index TYPE lvc_t_fidx WITH HEADER LINE.

CALL METHOD go_alv_grid->get_filter_criteria

IMPORTING et_filter = lt_filter_lvc.

  • Find data to filter

CALL FUNCTION 'LVC_FILTER_APPLY'

EXPORTING

it_filter = lt_filter_lvc

IMPORTING

et_filter_index = lt_filter_index[]

TABLES

it_data = gt_mara_all.

gt_mara_ftr[] = gt_mara_all[].

SORT lt_filter_index DESCENDING.

LOOP AT lt_filter_index.

DELETE gt_mara_ftr INDEX lt_filter_index.

ENDLOOP.

ENDFORM. " F_FILTER_DATA

                  • END OF PROGRAM Z_ALV_GRID_CTRL_REFRESH_2 ********************

Thanks & regards

Sreenivasulu P