Espero que esto te sirva
*&---------------------------------------------------------------------*
*& Report ZEARA_ALV *
*& *
*&---------------------------------------------------------------------*
*& *
*& *
*&---------------------------------------------------------------------*
REPORT ZEARA_ALV.
INCLUDE z_dati.
INCLUDE z_procedures.
START-OF-SELECTION.
CALL SCREEN 101.
*&---------------------------------------------------------------------*
*& Include Z_DATI *
*&---------------------------------------------------------------------*
TYPE-POOLS : icon.
TABLES : sflight.
TYPES : BEGIN OF st_sflight,
carrid LIKE sflight-carrid,
connid LIKE sflight-connid,
fldate LIKE sflight-fldate,
paymentsum LIKE sflight-paymentsum,
price LIKE sflight-price,
currency LIKE sflight-currency,
vicon TYPE lvc_emphsz,
cellcolors TYPE lvc_t_scol,
END OF st_sflight.
* Definizione dei dati per ALV
DATA : gr_alvgrid TYPE REF TO cl_gui_alv_grid.
* Nome del control custom da aggiungere alla dynpro
*DATA : gc_custom_control_name TYPE scrfname VALUE 'CC_ALV'.
* Istanza del contenitore custom
*DATA : gr_ccontainer TYPE REF TO cl_gui_custom_container.
* Catalogo dei campi
DATA : gt_fieldcat TYPE lvc_t_fcat.
* Struttura layout
DATA : gs_layout TYPE lvc_s_layo.
DATA : gr_docking TYPE REF TO cl_gui_docking_container,
g_splitter TYPE REF TO cl_gui_splitter_container,
g_container_1 TYPE REF TO cl_gui_container,
g_container_2 TYPE REF TO cl_gui_container.
* Tabella interna per scaricare dei dati
DATA : tb_sflight TYPE st_sflight OCCURS 0 WITH HEADER LINE.
DATA : ok_code LIKE sy-ucomm,
lt_selected_rows TYPE lvc_t_roid,
ls_selected_row TYPE lvc_s_roid,
ls_fcat TYPE lvc_s_fcat,
lv_stable TYPE lvc_s_stbl,
ls_cellcolor TYPE lvc_s_scol.
CLASS lcl_event_handler DEFINITION.
PUBLIC SECTION.
METHODS:
handle_hotspot_click
FOR EVENT hotspot_click OF cl_gui_alv_grid
IMPORTING e_row_id e_column_id es_row_no.
ENDCLASS.
CLASS lcl_event_handler IMPLEMENTATION.
METHOD handle_hotspot_click.
PERFORM handle_hotspot_click USING e_row_id e_column_id es_row_no.
ENDMETHOD.
ENDCLASS.
DATA : gr_event_handler TYPE REF TO lcl_event_handler.
*&---------------------------------------------------------------------*
*& Include Z_PROCEDURES *
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module STATUS_0101 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE STATUS_0101 OUTPUT.
SET PF-STATUS 'STANDARD'.
* SET TITLEBAR 'xxx'.
ENDMODULE. " STATUS_0101 OUTPUT
*&---------------------------------------------------------------------*
*& Module display_alv OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE display_alv OUTPUT.
PERFORM get_dati.
PERFORM split_screen.
PERFORM display_alv.
ENDMODULE. " display_alv OUTPUT
*&---------------------------------------------------------------------*
*& Form get_dati
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_TB_SFLIGHT text
*----------------------------------------------------------------------*
FORM get_dati.
* La clàsica instrucciòn SQL ....
ENDFORM. " get_dati
*&---------------------------------------------------------------------*
*& Form display_alv
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM display_alv .
IF gr_alvgrid IS INITIAL.
* Añadir el ALV al contenedor inferior
CREATE OBJECT gr_alvgrid
EXPORTING
* I_SHELLSTYLE = 0
* I_LIFETIME =
I_PARENT = g_container_2
* I_APPL_EVENTS = space
* I_PARENTDBG =
* I_APPLOGPARENT =
* I_GRAPHICSPARENT =
* I_NAME =
EXCEPTIONS
ERROR_CNTL_CREATE = 1
ERROR_CNTL_INIT = 2
ERROR_CNTL_LINK = 3
ERROR_DP_CREATE = 4
others = 5
.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
* Creaciòn del catàlogo de campos
PERFORM prepare_field_catalog CHANGING gt_fieldcat.
* Creaciòn del layout
PERFORM prepare_layout CHANGING gs_layout.
CALL METHOD gr_alvgrid->set_table_for_first_display
EXPORTING
* I_BUFFER_ACTIVE =
* I_BYPASSING_BUFFER =
* I_CONSISTENCY_CHECK =
* I_STRUCTURE_NAME =
* IS_VARIANT =
* I_SAVE =
* I_DEFAULT = 'X'
IS_LAYOUT = gs_layout
* IS_PRINT =
* IT_SPECIAL_GROUPS =
* IT_TOOLBAR_EXCLUDING =
* IT_HYPERLINK =
* IT_ALV_GRAPHICS =
CHANGING
IT_OUTTAB = tb_sflight[]
IT_FIELDCATALOG = gt_fieldcat
* IT_SORT =
* IT_FILTER =
EXCEPTIONS
INVALID_PARAMETER_COMBINATION = 1
PROGRAM_ERROR = 2
TOO_MANY_LINES = 3
others = 4.
ELSE.
CALL METHOD gr_alvgrid->refresh_table_display
* EXPORTING
* IS_STABLE = lv_stable
* I_SOFT_REFRESH =
EXCEPTIONS
FINISHED = 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.
CALL METHOD GR_ALVGRID->SET_SELECTED_ROWS
EXPORTING
* IT_INDEX_ROWS =
IT_ROW_NO = lt_selected_rows.
ENDIF.
ENDFORM. " display_alv
*&---------------------------------------------------------------------*
*& Form prepare_field_catalog
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_GT_FIELDCAT text
*----------------------------------------------------------------------*
FORM prepare_field_catalog CHANGING p_gt_fieldcat TYPE lvc_t_fcat.
* El procedimiento habitual para la creaciòn del catàlogo de campos....
ENDFORM. " prepare_field_catalog
*&---------------------------------------------------------------------*
*& Form prepare_layout
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_GS_LAYOUT text
*----------------------------------------------------------------------*
FORM prepare_layout CHANGING p_gs_layout TYPE lvc_s_layo.
p_gs_layout-zebra = 'X'.
p_gs_layout-grid_title = 'Flights'.
p_gs_layout-smalltitle = 'X'.
p_gs_layout-sel_mode = 'A'.
p_gs_layout-ctab_fname = 'CELLCOLORS'.
ENDFORM. " prepare_layout
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0101 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0101 INPUT.
CASE ok_code.
WHEN 'BACK'.
LEAVE PROGRAM.
WHEN 'BTMOSTRA'.
PERFORM read_rows.
ENDCASE.
ENDMODULE. " USER_COMMAND_0101 INPUT
*&---------------------------------------------------------------------*
*& Form read_rows
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM read_rows .
DATA : v_cont TYPE i.
CLEAR lt_selected_rows.
REFRESH lt_selected_rows.
LOOP AT tb_sflight.
CLEAR tb_sflight-paymentsum.
MODIFY tb_sflight INDEX sy-tabix.
ENDLOOP.
CALL METHOD GR_ALVGRID->GET_SELECTED_ROWS
IMPORTING
* ET_INDEX_ROWS =
ET_ROW_NO = lt_selected_rows.
IF NOT lt_selected_rows IS INITIAL.
LOOP AT lt_selected_rows INTO ls_selected_row.
READ TABLE tb_sflight INDEX ls_selected_row-row_id.
SELECT SINGLE * FROM sflight
WHERE carrid EQ tb_sflight-carrid AND connid EQ tb_sflight-connid
AND fldate EQ tb_sflight-fldate.
tb_sflight-paymentsum = sflight-paymentsum.
MODIFY tb_sflight INDEX ls_selected_row-row_id.
ENDLOOP.
CLEAR tb_sflight.
ENDIF.
v_cont = 0.
* Definir un color diferente a las celdas que son vacìas
LOOP AT tb_sflight.
v_cont = sy-tabix.
IF tb_sflight-paymentsum = '0.00'.
ls_cellcolor-fname = 'PAYMENTSUM'.
ls_cellcolor-color-col = '6'.
ls_cellcolor-color-int = '1'.
ls_cellcolor-nokeycol = 'X'.
APPEND ls_cellcolor TO tb_sflight-cellcolors.
MODIFY tb_sflight INDEX v_cont.
ELSE.
tb_sflight-vicon = ICON_FLIGHT.
MODIFY tb_sflight INDEX v_cont.
ENDIF.
CLEAR tb_sflight.
ENDLOOP.
CLEAR v_cont.
PERFORM show_price_rows.
ENDFORM. " read_rows
*&---------------------------------------------------------------------*
*& Form show_price_rows
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM show_price_rows .
DATA : v_ind TYPE i.
CALL METHOD gr_alvgrid->get_frontend_fieldcatalog
IMPORTING
ET_FIELDCATALOG = gt_fieldcat[].
IF lt_selected_rows IS INITIAL.
LOOP AT gt_fieldcat INTO ls_fcat.
IF ls_fcat-fieldname = 'PAYMENTSUM'.
ls_fcat-no_out = 'X'.
MODIFY gt_fieldcat FROM ls_fcat.
ENDIF.
ENDLOOP.
LOOP AT tb_sflight.
v_ind = sy-tabix.
tb_sflight-vicon = ICON_WS_PLANE.
MODIFY tb_sflight INDEX v_ind.
ENDLOOP.
ELSE.
LOOP AT gt_fieldcat INTO ls_fcat.
IF ls_fcat-fieldname = 'PAYMENTSUM'.
ls_fcat-no_out = SPACE.
MODIFY gt_fieldcat FROM ls_fcat.
ENDIF.
ENDLOOP.
ENDIF.
CALL METHOD gr_alvgrid->set_frontend_fieldcatalog
EXPORTING
IT_FIELDCATALOG = gt_fieldcat.
ENDFORM. " show_price_rows
*&---------------------------------------------------------------------*
*& Form handle_hotspot_click
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_E_ROW_ID text
* -->P_E_COLUMN_ID text
* -->P_ES_ROW_NO text
*----------------------------------------------------------------------*
FORM handle_hotspot_click USING P_E_ROW_ID TYPE lvc_s_row
P_E_COLUMN_ID TYPE lvc_s_col
P_ES_ROW_NO TYPE lvc_s_roid.
PERFORM read_rows.
ENDFORM. " handle_hotspot_click
*&---------------------------------------------------------------------*
*& Form split_screen
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM split_screen .
CLEAR : gr_docking,
g_splitter,
g_container_1,
g_container_2.
CREATE OBJECT gr_docking
EXPORTING
REPID = sy-repid
DYNNR = sy-dynnr "Nro dynpro actual
RATIO = '95' .
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
* Crear un splitter control con 2 filas y 1 columna
CREATE OBJECT g_splitter
EXPORTING
PARENT = gr_docking
ROWS = 2
COLUMNS = 1 .
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF.
* Contenedor superior
CALL METHOD g_splitter->get_container
EXPORTING
ROW = 1
COLUMN = 1
RECEIVING
CONTAINER = g_container_1.
.
* Contenedor inferior
CALL METHOD g_splitter->get_container
EXPORTING
ROW = 2
COLUMN = 1
RECEIVING
CONTAINER = g_container_2.
* Altura del contenedor superior
CALL METHOD g_splitter->set_row_height
EXPORTING
ID = 1
HEIGHT = 20.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF.
PERFORM header.
ENDFORM. " split_screen
*&---------------------------------------------------------------------*
*& Form header
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM header .
* Documentos dinàmicos
DATA : l_document TYPE REF TO cl_dd_document, "DOCUMENTO
l_doctable TYPE REF TO cl_dd_table_element, "TABELLA ELEMENTI
l_column1 TYPE REF TO cl_dd_area, "AREA DOCUMENTO
l_column2 TYPE REF TO cl_dd_area.
* Crear la istancia del DOCUMENTO y el texto de encabezamiento
CREATE OBJECT l_document.
CALL METHOD l_document->add_text
EXPORTING
TEXT = 'Descrizione totali statistiche'
SAP_STYLE = cl_dd_area=>heading.
* Creare la tabella degli elementi del documento dinamico CALL METHOD l_document->add_table
EXPORTING
NO_OF_COLUMNS = 5 "Nro colonne della tabella
CELL_BACKGROUND_TRANSPARENT = 'X' "='X' celle della tabella senza
"colore di background
BORDER = '0' "='0' senza bordo
IMPORTING
TABLE = l_doctable "Istanza tabella di
"elementi
.
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 METHOD l_doctable->add_column
IMPORTING
COLUMN = l_column1 "Area della colonna
.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF.
PERFORM titles CHANGING l_column1.
CALL METHOD l_doctable->add_column
IMPORTING
COLUMN = l_column2 .
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 METHOD l_column2->add_gap
EXPORTING
WIDTH = 150 "Nro degli spazi
.
CALL METHOD l_document->merge_document.
CALL METHOD l_document->display_document
EXPORTING
parent = g_container_1.
ENDFORM. " header
*&---------------------------------------------------------------------*
*& Form titles
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_L_COLUMN1 text
*----------------------------------------------------------------------*FORM titles CHANGING dg_dyndoc_id TYPE REF TO cl_dd_area.
DATA : dl_text(255) TYPE c. "Testo
dl_text = sy-title.
CONDENSE dl_text.
CALL METHOD dg_dyndoc_id->add_text
EXPORTING
TEXT = dl_text.
CALL METHOD dg_dyndoc_id->new_line.
CLEAR dl_text.
dl_text = 'Fecha:'.
CALL METHOD dg_dyndoc_id->add_gap.
CALL METHOD dg_dyndoc_id->add_text
EXPORTING
TEXT = dl_text.
CLEAR dl_text.
WRITE sy-datum TO dl_text.
CALL METHOD dg_dyndoc_id->add_text
EXPORTING
TEXT = dl_text.
CALL METHOD dg_dyndoc_id->new_line.
CLEAR dl_text.
dl_text = 'Hora:'.
CALL METHOD dg_dyndoc_id->add_gap.
CALL METHOD dg_dyndoc_id->add_text
EXPORTING
TEXT = dl_text.
CLEAR dl_text.
WRITE sy-uzeit TO dl_text.
CALL METHOD dg_dyndoc_id->add_text
EXPORTING
TEXT = dl_text.
CALL METHOD dg_dyndoc_id->new_line.
dl_text = 'Usuario:'.
CALL METHOD dg_dyndoc_id->add_gap.
CALL METHOD dg_dyndoc_id->add_text
EXPORTING
TEXT = dl_text.
CLEAR dl_text.
dl_text = sy-uname.
CALL METHOD dg_dyndoc_id->add_text
EXPORTING
TEXT = dl_text.
ENDFORM. " titles
|