Ver Mensaje Individual
  #6  
Viejo 21/10/09, 13:38:04
ernestoacostacuba ernestoacostacuba is offline
Junior Member
 
Fecha de Ingreso: oct 2008
Mensajes: 8
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
Responder Con Cita