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: 

Issue Regarding ALV List Report

Former Member
0 Kudos

Hi,

I have prepared a ALV List report.

I have made use of <b>REUSE_ALV_LIST_DISPLAY</b>.

I have put a <b>check box</b> in the output at the begining of every Record.

Now what i want is to put a <b>SELECT ALL</b> & <b>DESELECT ALL Buttons</b> on Application Tool Bar & If i hit on them i should be able to <b>SELECT & DE-SELECT</b> all the <b>Records/Check Boxes</b> in the output.

Can anybody tell me the logic for both <b><b>SELECT & DE-SELECT</b></b> functionalities.

Thanks in advance.

Thanks & Regards,

Prasad.

<b></b>

1 ACCEPTED SOLUTION

former_member188685
Active Contributor
0 Kudos

Hi prasad,

<b>RS_SELFIELD-refresh = 'X'.</b>

place this in the last of user_command form.

Regards

vijay

8 REPLIES 8

former_member188685
Active Contributor
0 Kudos

Hi,

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,
      vbeln like vbak-vbeln,
      posnr like vbap-posnr,
      chk(1),
     end of itab.

select vbeln
       posnr
       from vbap
       up to 20 rows
       into table 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 = 'VBELN'.
x_fieldcat-seltext_l = 'VBELN'.
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 = 'POSNR'.
x_fieldcat-seltext_l = 'POSNR'.
x_fieldcat-tabname = 'ITAB'.
x_fieldcat-col_pos = 3.
append x_fieldcat to it_fieldcat.
clear x_fieldcat.


call function 'REUSE_ALV_LIST_DISPLAY'
  exporting
    i_callback_program       = sy-repid
    is_layout                = l_layout
<b>    i_callback_pf_status_set = 'STATUS'
    i_callback_user_command  = 'USER_COMMAND'</b>
    it_fieldcat              = it_fieldcat
  tables
    t_outtab                 = itab
  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.


form status using p_extab type slis_t_extab.
*- Pf status
<b>  set pf-status 'STATUS'.</b>
endform.                 " STATUS

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.
<b>    when 'SALL'.
    loop at itab.
     itab-check = 'X'.
     modify itab index sy-tabix.
    endloop.
    when 'DALL'.
    loop at itab.
     itab-check = ' '.
     modify itab index sy-tabix.
    endloop.</b>
  endcase.
endform.                    "USER_COMMAND

First of all set the pf-status have two buttons for select all and deselect all. using the pf-status option, handle them using user_command form.

Regards

vijay

0 Kudos

Hi,

I have done the same but records are not getting selected.

Here is the code & declaration:

DATA: BEGIN OF i_display_data OCCURS 0,

selected TYPE c,

kschl LIKE nast-kschl,

vbeln LIKE vbak-vbeln,

posnr LIKE vbap-posnr,

END OF i_display_data.

LOOP AT i_display_data.

i_display_data-selected = c_x.

MODIFY i_display_data TRANSPORTING selected.

CLEAR i_display_data.

ENDLOOP.

But in output it is still showing nothing selected.

Can anybody tell me the reason!

Thanks,

Prasad.

0 Kudos

Hi prasad,

i am able to use selectall, deselect all.

and also tell me where you are placing the code. and show me your total coding.did you check my code. don't forget to create your pf-status ,and create two buttons for select all and deslect all.

Regards

vijay

0 Kudos

Hi,

<b>Call to F.M is as below:</b>

FORM f_display_alv_report .

DATA: l_valid,

l_params LIKE pri_params.

SET PF-STATUS c_alv.

CALL FUNCTION 'GET_PRINT_PARAMETERS'

EXPORTING

mode = 'BATCH'

report = v_repid

no_dialog = c_x

IMPORTING

out_parameters = l_params

valid = l_valid.

IF sy-subrc <> 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'

EXPORTING

i_callback_program = v_repid

i_callback_user_command = c_command

i_callback_pf_status_set = c_alv

is_layout = i_gd_layout

it_fieldcat = i_fieldcatalog[]

it_events = i_events

is_print = i_params

i_save = c_x

TABLES

t_outtab = i_display_data

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. " f_display_alv_report

<b>Then User Command Call is as below:</b>

FORM f_user_command USING p_ucomm LIKE sy-ucomm

p_selfield TYPE slis_selfield.

CLEAR: v_field, v_index, v_line, v_value.

IF p_ucomm EQ c_select.

LOOP AT i_display_data.

i_display_data-selected = c_x.

MODIFY i_display_data TRANSPORTING selected.

CLEAR i_display_data.

ENDLOOP.

ELSEIF p_ucomm EQ c_deselect.

LOOP AT i_display_data.

i_display_data-selected = space.

MODIFY i_display_data TRANSPORTING selected.

CLEAR i_display_data.

ENDLOOP.

ENDIF.

  • Get cursor field, value and Line

GET CURSOR FIELD v_field

VALUE v_value

LINE v_line.

v_line = v_line - 3.

CLEAR: i_display_data,

i_mem,

v_mem_kschl,

v_mem_printer,

v_ucomm,

v_mem_print.

REFRESH: i_mem.

LOOP AT i_display_data

WHERE selected EQ c_x.

i_mem-v_mem_vbeln = i_display_data-vbeln.

i_mem-v_mem_posnr = i_display_data-posnr.

APPEND i_mem.

CLEAR i_mem.

ENDLOOP.

  • READ TABLE i_display_data INDEX v_line.

IF sy-subrc EQ 0.

v_mem_kschl = p_kschl.

v_mem_printer = p_print.

v_ucomm = sy-ucomm.

EXPORT i_mem TO MEMORY ID 'MEM'.

EXPORT v_mem_kschl TO MEMORY ID 'KSCHL'.

EXPORT v_mem_printer TO MEMORY ID 'PRINTE'.

EXPORT v_ucomm TO MEMORY ID 'UCOM'.

ENDIF.

CASE p_ucomm.

  • To Print SAP Script Output

WHEN c_print.

v_mem_print = c_x.

EXPORT v_mem_print TO MEMORY ID 'PRINT'.

v_return_code = c_999.

v_screen = c_x.

IF ( v_field EQ c_mark OR

v_field EQ c_selected OR

v_field EQ c_vbeln OR

v_field EQ c_posnr OR

v_field EQ c_kschl ) AND

NOT v_value IS INITIAL.

PERFORM f_entry IN PROGRAM zasdf0012_sales_order

USING v_return_code v_screen.

ENDIF.

  • Display SAP Script Output

WHEN c_pripreview.

v_return_code = c_999.

v_screen = c_x.

IF ( v_field EQ c_mark OR

v_field EQ c_selected OR

v_field EQ c_vbeln OR

v_field EQ c_posnr OR

v_field EQ c_kschl ) AND

NOT v_value IS INITIAL.

PERFORM f_entry IN PROGRAM zasdf0012_sales_order

USING v_return_code v_screen.

ENDIF.

WHEN c_back.

BACK.

WHEN c_exit.

CALL METHOD cl_gui_cfw=>flush.

LEAVE TO SCREEN 0.

WHEN c_cancel.

CALL METHOD cl_gui_cfw=>flush.

LEAVE TO SCREEN 0.

WHEN c_others.

ENDCASE.

ENDFORM. " F_USER_COMMAND

<b>The Field Catalog Build up is :</b>

i_fieldcatalog-fieldname = 'KSCHL'.

i_fieldcatalog-tabname = 'I_DISPLAY_DATA'.

i_fieldcatalog-seltext_m = 'Output Type'.

i_fieldcatalog-col_pos = 1.

i_fieldcatalog-outputlen = 11.

APPEND i_fieldcatalog.

CLEAR i_fieldcatalog.

i_fieldcatalog-fieldname = 'VBELN'.

i_fieldcatalog-tabname = 'I_DISPLAY_DATA'.

i_fieldcatalog-seltext_m = 'Sales Document No'.

i_fieldcatalog-col_pos = 2.

i_fieldcatalog-outputlen = 17.

APPEND i_fieldcatalog.

CLEAR i_fieldcatalog.

i_fieldcatalog-fieldname = 'POSNR'.

i_fieldcatalog-tabname = 'I_DISPLAY_DATA'.

i_fieldcatalog-seltext_m = 'Sales Item No'.

i_fieldcatalog-col_pos = 3.

i_fieldcatalog-outputlen = 14.

APPEND i_fieldcatalog.

CLEAR i_fieldcatalog.

<b>Events Build Up:</b>

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 = slis_ev_top_of_page.

IF sy-subrc = 0.

MOVE c_top_of_page TO wa_events-form.

MODIFY i_events FROM wa_events INDEX sy-tabix.

ENDIF.

READ TABLE i_events WITH KEY name = c_user_command

INTO wa_events.

IF sy-subrc = 0.

MOVE c_command TO wa_events-form.

MODIFY i_events FROM wa_events INDEX sy-tabix.

ENDIF.

<b>Layout Buil up is as:</b>

i_gd_layout-no_input = space.

i_gd_layout-colwidth_optimize = c_x.

i_gd_layout-totals_text = 'Totals'(201). "#EC *

i_gd_layout-box_fieldname = 'SELECTED'.

i_gd_layout-box_tabname = 'I_DISPLAY_DATA'.

i_gd_layout-edit = c_x.

Here one thing we need to take care id i am combining Check Box with & another field Output Type [KSCHL] like in Std. TCode VL71.

Can anybody solve this issue!

Thanks for reply.

Thanks & Regards,

Prasad.

former_member188685
Active Contributor
0 Kudos
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,
      VBELN LIKE VBAK-VBELN,
      POSNR LIKE VBAP-POSNR,
      CHK(1),
     END OF ITAB.

SELECT VBELN
       POSNR
       FROM VBAP
       UP TO 20 ROWS
       INTO TABLE ITAB.
LOOP AT ITAB.
  ITAB-CHK = 'X'.
  MODIFY ITAB INDEX SY-TABIX.
ENDLOOP.
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 = 'VBELN'.
X_FIELDCAT-SELTEXT_L = 'VBELN'.
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 = 'POSNR'.
X_FIELDCAT-SELTEXT_L = 'POSNR'.
X_FIELDCAT-TABNAME = 'ITAB'.
X_FIELDCAT-COL_POS = 3.
APPEND X_FIELDCAT TO IT_FIELDCAT.
CLEAR X_FIELDCAT.


CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
  EXPORTING
    I_CALLBACK_PROGRAM       = SY-REPID
    IS_LAYOUT                = L_LAYOUT
    I_CALLBACK_PF_STATUS_SET = 'STATUS'
    I_CALLBACK_USER_COMMAND  = 'USER_COMMAND'
    IT_FIELDCAT              = IT_FIELDCAT
  TABLES
    T_OUTTAB                 = ITAB
  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.


*&--------------------------------------------------------------------*
*&      Form  status
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
*      -->P_EXTAB    text
*---------------------------------------------------------------------*
FORM STATUS USING P_EXTAB TYPE SLIS_T_EXTAB.
*- Pf status
  SET PF-STATUS 'STATUS'.
ENDFORM.                 " STATUS

*&--------------------------------------------------------------------*
*&      Form  user_command
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
*      -->R_UCOMM    text
*      -->RS_SELFIELDtext
*---------------------------------------------------------------------*
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 'SALL'.
      LOOP AT ITAB.
        ITAB-CHK = 'X'.
        MODIFY ITAB INDEX SY-TABIX.
      ENDLOOP.
    WHEN 'DALL'.
      LOOP AT ITAB.
        ITAB-CHK = ' '.
        MODIFY ITAB INDEX SY-TABIX.
      ENDLOOP.
  ENDCASE.
<b>RS_SELFIELD-refresh = 'X'.</b>

ENDFORM.                    "USER_COMMAND

you are missing that....

Regards

vijay

Former Member
0 Kudos

Hi Prasad,

u r modifying the internal table it self while looping at ur internal table not the fieldcatalog.

see, u have to modify the fieldcatalog and set the folowing..

x_fieldcat-fieldname = 'SELECTED'.

x_fieldcat-tabname = 'I_DISPLAY_DATA'.

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.

REGARDS.

KIRAN B

former_member188685
Active Contributor
0 Kudos

Hi prasad,

<b>RS_SELFIELD-refresh = 'X'.</b>

place this in the last of user_command form.

Regards

vijay

0 Kudos

Hi Vijay,

That's Great Reply.

Thank you very much for your help.

Both the Select & De-Select functionalities are working perfectly.

once again thanks a lot.

Thanks & Regards,

Prasad.