2006 Jun 22 8:40 AM
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
2006 Jun 22 8:44 AM
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'.
2006 Jun 22 8:45 AM
2006 Jun 22 8:45 AM
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
2006 Jun 22 9:12 AM
Hi Ravikumar,
Can you post the code?
CAn't seem to find CHECK_CHANGED_DATA.
Thanks,
Kenny
2006 Jun 22 9:24 AM
2006 Jun 22 8:46 AM
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
2006 Jun 22 8:47 AM
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
2006 Jun 22 9:18 AM
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.
2006 Jun 22 9:33 AM
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>
2007 Mar 09 4:34 AM
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
2007 Mar 20 5:07 PM
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.
2007 Mar 09 4:35 AM
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