‎2008 May 21 8:19 AM
Hi,
I created a report to display in ALV using the grid function module,in the out put i have a check box to select some of the values and press a push button that i created to store the selected values to be send to file.here how to get only the selected values when i press the push button.i check in the user command i can get all values in the itab.the check box is not showing 'X'.so how to get.
Thanks,
Deesanth
‎2008 May 21 8:22 AM
‎2008 May 21 8:22 AM
‎2008 May 21 8:27 AM
Hi,
make use of
Class CL_GUI_ALV_GRID : To get selected rows
CL_GUI_ALV_GRID=>get_selected_rows
Check the code
Report.
************************************************************************
TABLES
************************************************************************
*
TYPE-POOLS : slis.
************************************************************************
GLOBAL TYPES
naming convention: "TY_name"
************************************************************************
*
************************************************************************
GLOBAL CONSTANTS
naming convention: "c_name"
************************************************************************
*
************************************************************************
GLOBAL ELEMENTARY VARIABLES
naming convention: "w_name"
************************************************************************
*
************************************************************************
GLOBAL STRUCTURES
naming convention: "st_name"
************************************************************************
*
************************************************************************
GLOBAL INTERNAL TABLES
naming convention: "i_name"
************************************************************************
DATA:i_bdcdata TYPE TABLE OF bdcdata ,
i_fieldcat TYPE slis_t_fieldcat_alv ,
i_vbrk TYPE TABLE OF ty_vbrk ,
i_sort TYPE slis_t_sortinfo_alv , "for sorting the fields
i_rows TYPE lvc_t_row .
************************************************************************
PARAMETERS & SELECT-OPTIONS
aming convention: "p_name" & "s_name"
************************************************************************
*{
SELECTION-SCREEN BEGIN OF BLOCK b1." WITH FRAME TITLE text-010.
SELECT-OPTIONS : s_vkorg FOR vbrk-vkorg OBLIGATORY,
s_fkart FOR vbrk-fkart OBLIGATORY,
s_kunag FOR vbrk-kunag ,
s_vbeln FOR vbrk-vbeln ,
s_fkdat FOR vbrk-fkdat OBLIGATORY.
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN BEGIN OF BLOCK b2.
PARAMETERS: p_file1 TYPE string DEFAULT 'C:\'.
SELECTION-SCREEN END OF BLOCK b2.
*}
DEFINE m_fieldcat.
add 1 to st_fieldcat-col_pos.
st_fieldcat-fieldname = &1.
st_fieldcat-ref_tabname = 'VBRK'.
st_fieldcat-seltext_s = &2.
st_fieldcat-seltext_m = &3.
st_fieldcat-seltext_l = &4.
append st_fieldcat to i_fieldcat.
END-OF-DEFINITION.
************************************************************************
START-OF-SELECTION
************************************************************************
*{
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file1.
CALL METHOD cl_gui_frontend_services=>directory_browse
CHANGING
selected_folder = p_file1
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
START-OF-SELECTION.
EXPORT w_file FROM p_file1 TO MEMORY ID 'ZMEM1'(005).
*}
PERFORM f1000_get_data.
PERFORM f2000_display_data.
*&----
*
*& Form F1000_get_data
*&----
This routine is used for Get the data from VBRK based on
Selection Screen
*----
*
FORM f1000_get_data.
SELECT vkorg
fkart
kunag
vbeln
fkdat
INTO TABLE i_vbrk
FROM vbrk
WHERE vkorg IN s_vkorg
AND fkart IN s_fkart
AND kunag IN s_kunag
AND vbeln IN s_vbeln
AND fkdat IN s_fkdat.
IF sy-subrc NE 0.
MESSAGE i014(zmsg) WITH 'No data is available for your Input'(003).
ENDIF.
ENDFORM. "get_data
*&----
*
*& Form F2000_display_data
*&----
This routine is used for building field catalogs and display
ALV Data
*----
*
FORM f2000_display_data.
PERFORM f6000_field_cat.
PERFORM f7000_sort.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-repid
i_callback_pf_status_set = 'F3000_PF_STATUS_SET'
i_callback_user_command = 'F4000_USER_COMMAND'
is_layout = st_layout
it_fieldcat = i_fieldcat
it_sort = i_sort
TABLES
t_outtab = i_vbrk.
ENDFORM. "display_data
*&----
*
*& Form F6000_field_cat
*&----
This routine is used for building field catalogs and display
ALV Data
*----
*
FORM f6000_field_cat.
m_fieldcat 'VKORG' '' '' ''.
m_fieldcat 'FKART' 'Billing Document Type'(007) 'Billing Document Type'(007) 'Billing Document Type'(007).
m_fieldcat 'KUNAG' 'Customer No'(008) 'Customer No'(008) 'Customer No'(008).
m_fieldcat 'VBELN' 'Invoice No'(009) 'Invoice No'(009) 'Invoice No'(009).
m_fieldcat 'FKDAT' '' '' ''.
st_layout-cell_merge = 'X'.
st_layout-colwidth_optimize = 'X'.
st_layout-box_fieldname = 'VKORG'.
ENDFORM. "F7000_field_cat
&----
*& Form F7000_sort
&----
FORM f7000_sort .
CLEAR st_sort.
st_sort-fieldname = 'VBELN'.
st_sort-up = 'X'.
st_sort-group = 'UL'.
APPEND st_sort TO i_sort.
ENDFORM. "f6000_sort
----
FORM F3000_PF_STATUS_SET *
*&----
This routine is for creating User button on output
----
FORM f3000_pf_status_set USING ut_extab TYPE slis_t_extab. "#EC CALLED
SET PF-STATUS 'ZPF_STATUS' OF PROGRAM 'ZVRXX_SF_PDF_DOWNLOAD'
EXCLUDING ut_extab.
ENDFORM. " PF_STATUS_SET
----
FORM F4000_USER_COMMAND *
*&----
This routine is for When user on clicks on custom button in
OUTPUT and Download to PDF format
----
FORM f4000_user_command USING ucomm TYPE sy-ucomm
sel TYPE slis_selfield.
TYPES: BEGIN OF ty_alv,
lights(1) TYPE c, "Exception, Holding the value of the lights
number(14) TYPE c, "billing document no
text(150) TYPE c, "text
END OF ty_alv.
DATA: gs_alv TYPE ty_alv,
gt_alv TYPE TABLE OF ty_alv,
gr_alv TYPE REF TO cl_salv_table,
gr_columns TYPE REF TO cl_salv_columns_table,
gr_column TYPE REF TO cl_salv_column,
lw_ref TYPE REF TO cx_salv_not_found,
lw_ref1 TYPE REF TO cx_salv_msg,
lw_ref2 TYPE REF TO cx_salv_data_error,
lw_text TYPE string.
DATA: ref_grid TYPE REF TO cl_gui_alv_grid.
DATA :lw_row_index TYPE lvc_index ,
lw_subrc TYPE sy-subrc .
CONSTANTS : c_0 TYPE c VALUE '0'.
*then insert the following code in your USER_COMMAND routine...
IF ref_grid IS INITIAL.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = ref_grid.
ENDIF.
IF NOT ref_grid IS INITIAL.
CALL METHOD ref_grid->check_changed_data.
ENDIF.
CASE ucomm.
WHEN 'PDF'.
CALL METHOD ref_grid->get_selected_rows
IMPORTING
et_index_rows = i_rows.
LOOP AT i_rows
INTO st_selected_line.
lw_row_index = st_selected_line-index.
CLEAR st_selected_line.
READ TABLE i_vbrk
INTO st_vbrk
INDEX lw_row_index.
IF sy-subrc EQ 0.
CLEAR:w_vbeln.
MOVE st_vbrk-vbeln TO w_vbeln.
EXPORT lw_vbeln1 FROM w_vbeln TO MEMORY ID 'ZMEM'(004).
lw_subrc = 1.
PERFORM f5000_print_vbeln USING w_vbeln.
IMPORT lw_subrc1 TO lw_subrc FROM MEMORY ID 'ZMEM2'(006).
CLEAR : w_objky.
SELECT objky
FROM nast
UP TO 1 ROWS
INTO w_objky
WHERE kappl EQ c_v3
AND objky EQ w_vbeln
AND kschl EQ c_zrd0.
ENDSELECT.
*displaying the status of download.
IF w_objky NE space
AND lw_subrc EQ c_0.
st_check-value = 'PDF is Generated Successfully'(001).
gs_alv-lights = '3'. "Color green
gs_alv-number = w_objky.
gs_alv-text = st_check-value.
APPEND gs_alv TO gt_alv.
ELSE.
st_check-value = 'PDF is not Generated'(002).
gs_alv-lights = '1'. "Color red
gs_alv-number = w_vbeln.
gs_alv-text = st_check-value.
APPEND gs_alv TO gt_alv.
ENDIF.
ENDIF.
lw_subrc = 1.
EXPORT lw_subrc1 FROM lw_subrc TO MEMORY ID 'ZMEM2'.
ENDLOOP.
ENDCASE.
*GETTING ALL THE COLUMNS AND ASSISGNING THE COLUMN NAMES TO THE RESPECTIVE.
TRY.
CALL METHOD cl_salv_table=>factory
IMPORTING
r_salv_table = gr_alv
CHANGING
t_table = gt_alv.
CATCH cx_salv_msg INTO lw_ref1.
lw_text = lw_ref1->get_text( ).
IF NOT lw_text IS INITIAL.
ENDIF.
ENDTRY.
gr_columns = gr_alv->get_columns( ).
TRY.
CALL METHOD gr_columns->get_column
EXPORTING
columnname = 'NUMBER'
RECEIVING
value = gr_column.
CATCH cx_salv_not_found INTO lw_ref .
lw_text = lw_ref->get_text( ).
IF NOT lw_text IS INITIAL.
ENDIF.
ENDTRY.
TRY.
CALL METHOD gr_column->set_long_text
EXPORTING
value = 'Invoice number'(010).
CALL METHOD gr_columns->get_column
EXPORTING
columnname = 'TEXT'
RECEIVING
value = gr_column.
CALL METHOD gr_column->set_long_text
EXPORTING
value = 'Status'(011).
CATCH cx_salv_not_found ."INTO LW_REF.
lw_text = lw_ref->get_text( ).
IF NOT lw_text IS INITIAL.
ENDIF.
ENDTRY.
*DISPALYING THE STATUS OF PDF GENERATION.
TRY.
gr_columns->set_exception_column( value = 'LIGHTS' ).
CALL METHOD gr_alv->display.
CATCH cx_salv_data_error INTO lw_ref2.
lw_text = lw_ref2->get_text( ).
IF NOT lw_text IS INITIAL.
ENDIF.
ENDTRY.
IF NOT sel IS INITIA
Regards,
Raj.
‎2008 May 21 8:27 AM
Hi,
Please refer to the SAP standard demo program BCALV_EDIT_05.
Logic:
Use Method get_selected_rows of
Class CL_GUI_ALV_GRID : To get selected rows
CL_GUI_ALV_GRID=>get_selected_rows
Regards,
Shiva Kumar