Application Development and Automation 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: 
Read only

ALV Checkbox

Former Member
0 Likes
1,574

Hi All,

How do I put a checkbox in ALV table which is clickable?

Also how do I catch all the selected rows (with 'X' in their checkbox)?

Thanks,

Kenny

Hi All,

How do I put a checkbox in ALV table which is clickable?

Also how do I catch all the selected rows (with 'X' in their checkbox)?

Thanks,

Kenny

12 REPLIES 12
Read only

Former Member
0 Likes
1,501

add that as a field in your internal table,

In the field catalog for that field, mark CHECKBOX = 'X'.

Now in ALV GRID PAI use method CHECK_CHANGED_DATA to find out what are the entries whose checkbox are marked, then the internal table will have the value of field CHECK = 'X'.

Read only

0 Likes
1,501

same thread...

Read only

Former Member
0 Likes
1,501

Kenny,

1. You will have to make the field editable. In the field catalog set the EDIT = 'X' for the check box field.

2. Once the check box is checked, call the method CHECK_CHANGED_DATA of the grid in the PAI of the screen which will update the internal table. Now, you can just loop at the internal table with a where clause on the check box field.

loop at itab where checkbox = 'x'.

endloop.

Regards,

Ravi

Note : Please mark the helpful answers

Read only

0 Likes
1,501

Hi Ravikumar,

Can you post the code?

CAn't seem to find CHECK_CHANGED_DATA.

Thanks,

Kenny

Read only

0 Likes
1,501

Are you using OO ALV or REUSE function?

Regards,

Ravi

Read only

dani_mn
Active Contributor
0 Likes
1,501

Hi copy and paste this report.

REPORT ZWA_FI_ANNUAL_REPORT .

TYPE-POOLS: slis.

TABLES: BKPF, BSIS, PAYR.

TYPES: begin of itab_post_type,

bukrs type bkpf-bukrs,

belnr type bkpf-belnr,

gjahr type bkpf-gjahr,

blart type bkpf-blart,

bstat type bkpf-bstat,

hkont type bsis-hkont,

shkzg type bsis-shkzg,

wrbtr type bsis-wrbtr,

end of itab_post_type.

DATA: begin of itab_post occurs 0,

bukrs like bkpf-bukrs,

belnr like bkpf-belnr,

gjahr like bkpf-gjahr,

blart like bkpf-blart,

bstat like bkpf-bstat,

hkont like bsis-hkont,

shkzg like bsis-shkzg,

wrbtr like bsis-wrbtr,

flag(1),

end of itab_post.

*DATA: itab_post type standard table of itab_post_type INITIAL SIZE 0

*with header line.

data: fm_name TYPE rs38l_fnam.

data v_repid like sy-repid.

DATA: it_fieldcat TYPE slis_t_fieldcat_alv,

heading TYPE slis_t_listheader,

gs_layout TYPE slis_layout_alv,

gx_variant LIKE disvariant,

g_variant LIKE disvariant,

g_exit(1) TYPE c,

g_save(1) TYPE c,

gt_list_top_of_page TYPE slis_t_listheader,

gt_events TYPE slis_t_event,

olen TYPE i,

pageno TYPE n,

filename LIKE sy-repid.

DATA: IT_EXCL_BUTT type SLIS_T_EXTAB.

data: wa_excl_buttons type SLIS_EXTAB.

data: header type slis_keyinfo_alv.

data: wa_header type slis_keyinfo_alv.

v_repid = sy-repid.

"----


"

" Selection screen for entering search criteria "

"----


"

select-options:bukrs for bsis-bukrs,

gjahr for bkpf-gjahr,

prctr for bsis-prctr,

kostl for bsis-kostl,

belnr for bsis-belnr,

budat for bsis-budat,

bldat for bkpf-bldat,

hkont for bsis-hkont,

blart for bkpf-blart,

uname for bkpf-usnam.

SELECT bkbukrs bkbelnr

bkgjahr bkblart

bkbstat bshkont

bsshkzg bswrbtr

*INTO TABLE itab_post

INTO (itab_post-bukrs, itab_post-belnr,

itab_post-gjahr, itab_post-blart,

itab_post-bstat, itab_post-hkont,

itab_post-shkzg, itab_post-wrbtr )

FROM bkpf as bk

JOIN bsis as bs

ON ( bkbelnr = bsbelnr AND

bkbukrs = bsbukrs AND

bkgjahr = bsgjahr )

WHERE bk~belnr IN belnr AND

bk~gjahr IN gjahr AND

bk~bukrs IN bukrs AND

bk~blart IN blart AND

bk~bldat IN bldat AND

bk~usnam IN uname AND

bs~hkont IN hkont AND

bs~kostl IN kostl.

append itab_post.

ENDSELECT.

PERFORM field_catalog.

gs_layout-box_fieldname = 'FLAG'.

CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'

EXPORTING

i_callback_program = sy-repid

i_callback_user_command = 'ITAB_USER_COMMAND'

is_layout = gs_layout

i_background_id ='CGA'

i_grid_title ='Employee Cheque Advice'

it_fieldcat = it_fieldcat[]

i_save = g_save

is_variant = g_variant

it_events = gt_events[]

TABLES

t_outtab = itab_post

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.

**

**ENDLOOP.

&----


*& Form field_catalog

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM field_catalog.

*There are other fields in this structure and can be used accordingly

*for different purposes like no_zero, round, no_sign etc.

DATA: wa_fieldcat TYPE slis_fieldcat_alv.

call function 'REUSE_ALV_FIELDCATALOG_MERGE'

exporting

i_program_name = v_repid

i_internal_tabname = 'ITAB_POST'

  • I_STRUCTURE_NAME =

  • I_CLIENT_NEVER_DISPLAY = 'X'

i_inclname = v_repid

  • I_BYPASSING_BUFFER =

  • I_BUFFER_ACTIVE =

changing

ct_fieldcat = it_fieldcat[] .

ENDFORM. " field_catalog

FORM itab_user_command USING whatcomm TYPE sy-ucomm whatrow TYPE

slis_selfield.

LOOP AT itab_post.

itab_post-flag = 'X'.

MODIFY itab_post.

ENDLOOP.

*----


IMPORTANT.

WHATROW-REFRESH = 'X'.

ENDFORM. "ITAB_user_command

Regards,

Wasim Ahmed

Read only

Former Member
0 Likes
1,501

Hi,

Before passing your final internal table to FM or Method you need to add one more column.AT the time of preparing fieldcat you need to say CHECKBOX = 'X' for this particular column.

If this field has value 'X' then the row is selected row.

Cheers,

Bujji

Read only

Former Member
0 Likes
1,501

Hi Kenny

when populating the field catalog use this code for the check box at first column.

CLEAR ls_fieldcat.

ls_fieldcat-tabname = 'I_OUT1'.

ls_fieldcat-fieldname = 'CHECK_BOX'.

ls_fieldcat-col_pos = 1.

ls_fieldcat-seltext_l = 'EDIT'.

ls_fieldcat-checkbox = 'X'.

ls_fieldcat-edit = 'X'.

APPEND ls_fieldcat TO i_fieldcat.

in the internal table add

TYPES : BEGIN OF t_out,

check_box TYPE c,

end of t_out.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

EXPORTING

i_callback_program = g_repid

i_callback_pf_status_set = 'PF_STATUS_SET'

i_callback_user_command = 'USER_COMMAND'

is_layout = i_layout

it_fieldcat = i_fieldcat

TABLES

t_outtab = i_out2

EXCEPTIONS

program_error = 1

OTHERS = 2.

Read only

venkat_o
Active Contributor
0 Likes
1,501

Hi Kenny,

<b>1</b>.

Define one variable in ur final table

checkbox TYPE c .

<b>2</b>.

While building fieldcatalog Itab.

Fill up this info for Checkbox .

w_field-fieldname = 'CHECKBOX'.

w_field-tabname = 'I_MARD'.

<b> w_field-checkbox = 'X'.

w_field-input = 'X'.</b>

w_field-seltext_m = 'Checkbox'.

APPEND w_field TO i_field.

CLEAR w_field.

<b>3</b>.

Have a look at this example .

&----


*& Report ZORAY1234 *

*& *

&----


REPORT zoray1234 .

TABLES :mard .

TYPE-POOLS :slis.

DATA: BEGIN OF i_mard OCCURS 0,

checkbox TYPE c ,

matnr TYPE mard-matnr,

werks TYPE mard-werks,

lgort TYPE mard-lgort,

labst TYPE mard-labst,

END OF i_mard.

DATA :i_field TYPE slis_t_fieldcat_alv,

w_field LIKE LINE OF i_field,

i_events TYPE slis_t_event,

w_events LIKE LINE OF i_events.

START-OF-SELECTION.

PERFORM get_data.

PERFORM build_field.

PERFORM build_events.

PERFORM display_data.

&----


*& Form get_data

&----


FORM get_data .

SELECT matnr werks lgort labst

FROM mard

INTO CORRESPONDING FIELDS OF TABLE i_mard

WHERE werks = 'NB4'.

ENDFORM. " get_data

&----


*& Form build_field

&----


FORM build_field .

CLEAR w_field.

CLEAR i_field.

w_field-fieldname = 'CHECKBOX'.

w_field-tabname = 'I_MARD'.

w_field-checkbox = 'X'.

w_field-input = 'X'.

w_field-seltext_m = 'Checkbox'.

APPEND w_field TO i_field.

CLEAR w_field.

w_field-fieldname = 'MATNR'.

w_field-tabname = 'I_MARD'.

w_field-seltext_m = 'Matnr'.

APPEND w_field TO i_field.

CLEAR w_field.

w_field-fieldname = 'WERKS'.

w_field-tabname = 'I_MARD'.

w_field-seltext_m = 'Werks'.

APPEND w_field TO i_field.

CLEAR w_field.

w_field-fieldname = 'LGORT'.

w_field-tabname = 'I_MARD'.

w_field-seltext_m = 'Lgort'.

APPEND w_field TO i_field.

CLEAR w_field.

w_field-fieldname = 'LABST'.

w_field-tabname = 'I_MARD'.

w_field-seltext_m = 'Labst'.

APPEND w_field TO i_field.

CLEAR w_field.

ENDFORM. " build_field

&----


*& Form display_data

&----


FORM display_data .

CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'

EXPORTING

  • I_INTERFACE_CHECK = ' '

  • I_BYPASSING_BUFFER =

  • I_BUFFER_ACTIVE = ' '

i_callback_program = 'ZORAY1234'

    • i_callback_pf_status_set = 'SET_PF_STATUS'

  • i_callback_user_command = 'USER_COMMAND'

  • I_STRUCTURE_NAME =

  • IS_LAYOUT =

it_fieldcat = i_field

  • IT_EXCLUDING =

  • IT_SPECIAL_GROUPS =

  • IT_SORT =

  • IT_FILTER =

  • IS_SEL_HIDE =

  • I_DEFAULT = 'X'

  • I_SAVE = ' '

  • IS_VARIANT =

it_events = i_events

  • IT_EVENT_EXIT =

  • IS_PRINT =

  • IS_REPREP_ID =

  • I_SCREEN_START_COLUMN = 0

  • I_SCREEN_START_LINE = 0

  • I_SCREEN_END_COLUMN = 0

  • I_SCREEN_END_LINE = 0

  • IMPORTING

  • E_EXIT_CAUSED_BY_CALLER =

  • ES_EXIT_CAUSED_BY_USER =

TABLES

t_outtab = i_mard

  • 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_data

&----


*& Form set_pf_status

&----


FORM PF_STATUS_SET USING extab TYPE slis_t_extab.

SET PF-STATUS 'VENKAT' EXCLUDING extab.

ENDFORM. "set_pf_status

&----


*& Form user_command

&----


  • text

----


FORM user_command USING ucomm LIKE sy-ucomm

selfield TYPE slis_selfield .

CASE ucomm.

WHEN 'BUTTON' .

LOOP AT i_mard WHERE checkbox = 'X'.

WRITE 😕 i_mard-matnr,

i_mard-werks,

i_mard-lgort,

i_mard-labst.

ENDLOOP.

WHEN 'BUTTON1'.

LOOP AT i_mard WHERE checkbox = 'X'.

WRITE 😕 i_mard-matnr,

i_mard-werks,

i_mard-lgort,

i_mard-labst.

ENDLOOP.

ENDCASE.

ENDFORM. "user_command

&----


*& Form build_events

&----


FORM build_events .

CLEAR i_events.

CLEAR i_events.

w_events-form = 'PF_STATUS_SET'.

w_events-name = 'PF_STATUS_SET'.

APPEND w_events TO i_events.

CLEAR w_events.

w_events-form = 'USER_COMMAND'.

w_events-name = 'USER_COMMAND'.

APPEND w_events TO i_events.

CLEAR w_events.

ENDFORM. " build_events

I hope that it helps u .

<b>Thanks,

Venkat.O</b>

Read only

Former Member
0 Likes
1,501

Hi Venkataiah, I like your sample program for the checkbox, however, could you please explain to me your set-PF staus. How doex the 'X' pass to you i_mard table?

Thanks,

Charlie Zhang

Read only

Former Member
0 Likes
1,501

I have got similar code as Venkat has written. But I still cant the see 'X' in my internal table in the Checkbox field. Except if I use the Save-Button first i can read the 'X'. Then I have to activate my button. Is there Possibility to activate both function code once.

Read only

p291102
Active Contributor
0 Likes
1,501

Hi,

Herewith i am attaching sample report for checkbox alv report.

Kindly go through it.

REPORT YMS_CHECKBOXALV.

TYPE-POOLS: slis.

DATA: t_fieldcatalog TYPE slis_t_fieldcat_alv.

DATA: s_fieldcatalog TYPE slis_fieldcat_alv.

DATA: s_layout TYPE slis_layout_alv.

DATA: BEGIN OF itab OCCURS 0,

icon TYPE icon-id,

vbeln TYPE vbeln,

kunnr TYPE kunnr,

erdat TYPE erdat,

box TYPE c,

END OF itab.

DATA: v_repid TYPE syrepid.

START-OF-SELECTION.

  • Get the data.

SELECT vbeln kunnr erdat UP TO 100 ROWS

FROM vbak

INTO CORRESPONDING FIELDS OF TABLE itab.

IF sy-subrc <> 0.

MESSAGE s208(00) WITH 'No data found'.

LEAVE LIST-PROCESSING.

ENDIF.

  • Modify the record with red light.

itab-icon = '@0A@'.

MODIFY itab TRANSPORTING icon WHERE NOT vbeln IS initial.

v_repid = sy-repid.

  • Get the field catalog.

CLEAR: s_fieldcatalog.

s_fieldcatalog-col_pos = '1'.

s_fieldcatalog-fieldname = 'ICON'.

s_fieldcatalog-tabname = 'ITAB'.

s_fieldcatalog-seltext_l = 'Status'.

s_fieldcatalog-icon = 'X'.

APPEND s_fieldcatalog TO t_fieldcatalog.

CLEAR: s_fieldcatalog.

s_fieldcatalog-col_pos = '2'.

s_fieldcatalog-fieldname = 'VBELN'.

s_fieldcatalog-tabname = 'ITAB'.

s_fieldcatalog-rollname = 'VBELN'.

APPEND s_fieldcatalog TO t_fieldcatalog.

CLEAR: s_fieldcatalog.

s_fieldcatalog-col_pos = '3'.

s_fieldcatalog-fieldname = 'KUNNR'.

s_fieldcatalog-tabname = 'ITAB'.

s_fieldcatalog-rollname = 'KUNNR'.

APPEND s_fieldcatalog TO t_fieldcatalog.

CLEAR: s_fieldcatalog.

s_fieldcatalog-col_pos = '4'.

s_fieldcatalog-fieldname = 'ERDAT'.

s_fieldcatalog-tabname = 'ITAB'.

s_fieldcatalog-rollname = 'ERDAT'.

APPEND s_fieldcatalog TO t_fieldcatalog.

  • Set the layout.

s_layout-box_fieldname = 'BOX'.

CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'

EXPORTING

i_callback_program = v_repid

is_layout = s_layout

i_callback_pf_status_set = 'SET_PF_STATUS'

i_callback_user_command = 'USER_COMMAND'

it_fieldcat = t_fieldcatalog[]

TABLES

t_outtab = itab.

----


  • FORM SET_PF_STATUS *

----


  • ........ *

----


  • --> EXTAB *

----


FORM set_pf_status USING extab TYPE slis_t_extab.

SET PF-STATUS 'TEST2'.

ENDFORM.

----


  • FORM user_command *

----


  • ........ *

----


  • --> UCOMM *

  • --> SELFIELD *

----


FORM user_command USING ucomm LIKE sy-ucomm

selfield TYPE slis_selfield.

  • Check the ucomm.

IF ucomm = 'DETAIL'.

LOOP AT itab WHERE box = 'X'.

itab-icon = '@08@'.

MODIFY itab TRANSPORTING icon.

ENDLOOP.

ENDIF.

selfield-refresh = 'X'.

ENDFORM.

Thanks,

Shankar