PDA

Ver la Versión Completa : 2 Grid ALV y detalles


ayasir
13/09/07, 17:14:29
Hola, necesito que aparezcan 2 ALV en un reporte, esto es, quiero que pararezca uno con una informacion y abajo de ese quisiera otro con otra informacion. Tambien quiero saber como puedo hacer que al darle click a un campo del grid me aparezca una ventanita con un alv tipo pop up que despliegue algunos datos de ese campo.

Espero puedan ayudarme.

Muchas Gracias de antemano..

ibecerra
13/09/07, 19:20:05
hola lo que deseas es tener en una pantalla donde 2 alv
bueno eso lo puedes hacer con la funcion
si no entiendes y deseas el programa completo dame tu correo y te lo paso

*------------------------------------------------*
* Inicializamos el Bloque de la Lista ALV *
*------------------------------------------------*
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_INIT'
EXPORTING
I_callback_program = w_repid
I_CALLBACK_PF_STATUS_SET = 'SET_STATUS'
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'.
w_print-no_print_listinfos = 'X'.

PERFORM fieldcat_init USING i_fieldcat_alv[].

*------------------------------------------------*
* Imprimimos los Bloques del ALV *
*------------------------------------------------*
w_print-reserve_lines = 1.
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_DISPLAY'
EXPORTING
IS_PRINT = w_print.

Donde
Fielcat_init


* Monto IVA
CLEAR ls_fieldcat.
ls_fieldcat-tabname = 'IT_DATA'.
ls_fieldcat-fieldname = 'MONTOIVA'.
ls_fieldcat-seltext_m = text-h20.
ls_fieldcat-outputlen = 20.
ls_fieldcat-just = 'R'.
ls_fieldcat-do_sum = 'X'.
ls_fieldcat-datatype = 'CURR'.
APPEND ls_fieldcat TO rt_fieldcat.

* Retención IVA
CLEAR ls_fieldcat.
ls_fieldcat-tabname = 'IT_DATA'.
ls_fieldcat-fieldname = 'RETENIVA'.
ls_fieldcat-seltext_m = text-h21.
ls_fieldcat-outputlen = 20.
ls_fieldcat-just = 'R'.
ls_fieldcat-do_sum = 'X'.
ls_fieldcat-datatype = 'CURR'.
APPEND ls_fieldcat TO rt_fieldcat.

* IVA Percibido
CLEAR ls_fieldcat.
ls_fieldcat-tabname = 'IT_DATA'.
ls_fieldcat-fieldname = 'IVAPER'.
ls_fieldcat-seltext_m = text-h22.
ls_fieldcat-outputlen = 20.
ls_fieldcat-just = 'R'.
ls_fieldcat-do_sum = 'X'.
ls_fieldcat-datatype = 'CURR'.
APPEND ls_fieldcat TO rt_fieldcat.

* PERFORM eventtab_build USING gt_events[].

CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_APPEND'
EXPORTING
is_layout = w_layout
it_fieldcat = rt_fieldcat[]
it_events = i_events[]
i_tabname = 'IT_DATA'
TABLES
t_outtab = IT_DATA
EXCEPTIONS
PROGRAM_ERROR = 1
MAXIMUM_OF_APPENDS_REACHED = 2
OTHERS = 3.


CLEAR ls_fieldcat.
ls_fieldcat-tabname = 'IT_RESUMEN'.
ls_fieldcat-fieldname = 'CASILLERO2'.
ls_fieldcat-seltext_s = text-T04.
ls_fieldcat-outputlen = 09.
ls_fieldcat-just = 'C'.
APPEND ls_fieldcat TO RE_FIELDCAT.
* Subtotal
CLEAR ls_fieldcat.
ls_fieldcat-tabname = 'IT_RESUMEN'.
ls_fieldcat-fieldname = 'SUBTOTAL2'.
ls_fieldcat-seltext_s = text-T05.
ls_fieldcat-outputlen = 20.
ls_fieldcat-just = 'R'.
ls_fieldcat-datatype = 'CURR'.
ls_fieldcat-no_zero = 'X'.
APPEND ls_fieldcat TO RE_FIELDCAT.
* Debito Fiscal (IVA)debitofis
CLEAR ls_fieldcat.
ls_fieldcat-tabname = 'IT_RESUMEN'.
ls_fieldcat-fieldname = 'DEBITOFIS'.
ls_fieldcat-seltext_s = text-T06.
ls_fieldcat-outputlen = 20.
ls_fieldcat-just = 'R'.
ls_fieldcat-datatype = 'CURR'.
ls_fieldcat-no_zero = 'X'.
APPEND ls_fieldcat TO RE_FIELDCAT.

PERFORM build_eventtab1 USING X_EVENTS[].

CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_APPEND'
EXPORTING
is_layout = w_layout
it_fieldcat = RE_FIELDCAT[]
it_events = X_EVENTS[]
i_tabname = 'IT_RESUMEN'
tables
t_outtab = it_resumen
EXCEPTIONS
PROGRAM_ERROR = 1
MAXIMUM_OF_APPENDS_REACHED = 2
OTHERS = 3.

ayasir
13/09/07, 21:48:38
Hola Muchas Gracias!!!

Si por favor pasame el programa, mi correo es ibaa_29@hotmail.com

Muchas Gracias por tu atención y ayuda. :D

darona
17/09/07, 13:55:48
¿Podrías mandarme a mi también el código?
Mi mail es david.romay@gmail.com

Gracias.

ibecerra
17/09/07, 14:25:56
hay les mande la informacion solicitada
saludos coordiales

ayasir
17/09/07, 20:36:51
hola lo que deseas es tener en una pantalla donde 2 alv
bueno eso lo puedes hacer con la funcion
si no entiendes y deseas el programa completo dame tu correo y te lo paso

*------------------------------------------------*
* Inicializamos el Bloque de la Lista ALV *
*------------------------------------------------*
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_INIT'
EXPORTING
I_callback_program = w_repid
I_CALLBACK_PF_STATUS_SET = 'SET_STATUS'
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'.
w_print-no_print_listinfos = 'X'.

PERFORM fieldcat_init USING i_fieldcat_alv[].

*------------------------------------------------*
* Imprimimos los Bloques del ALV *
*------------------------------------------------*
w_print-reserve_lines = 1.
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_DISPLAY'
EXPORTING
IS_PRINT = w_print.

Donde
Fielcat_init


* Monto IVA
CLEAR ls_fieldcat.
ls_fieldcat-tabname = 'IT_DATA'.
ls_fieldcat-fieldname = 'MONTOIVA'.
ls_fieldcat-seltext_m = text-h20.
ls_fieldcat-outputlen = 20.
ls_fieldcat-just = 'R'.
ls_fieldcat-do_sum = 'X'.
ls_fieldcat-datatype = 'CURR'.
APPEND ls_fieldcat TO rt_fieldcat.

* Retención IVA
CLEAR ls_fieldcat.
ls_fieldcat-tabname = 'IT_DATA'.
ls_fieldcat-fieldname = 'RETENIVA'.
ls_fieldcat-seltext_m = text-h21.
ls_fieldcat-outputlen = 20.
ls_fieldcat-just = 'R'.
ls_fieldcat-do_sum = 'X'.
ls_fieldcat-datatype = 'CURR'.
APPEND ls_fieldcat TO rt_fieldcat.

* IVA Percibido
CLEAR ls_fieldcat.
ls_fieldcat-tabname = 'IT_DATA'.
ls_fieldcat-fieldname = 'IVAPER'.
ls_fieldcat-seltext_m = text-h22.
ls_fieldcat-outputlen = 20.
ls_fieldcat-just = 'R'.
ls_fieldcat-do_sum = 'X'.
ls_fieldcat-datatype = 'CURR'.
APPEND ls_fieldcat TO rt_fieldcat.

* PERFORM eventtab_build USING gt_events[].

CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_APPEND'
EXPORTING
is_layout = w_layout
it_fieldcat = rt_fieldcat[]
it_events = i_events[]
i_tabname = 'IT_DATA'
TABLES
t_outtab = IT_DATA
EXCEPTIONS
PROGRAM_ERROR = 1
MAXIMUM_OF_APPENDS_REACHED = 2
OTHERS = 3.


CLEAR ls_fieldcat.
ls_fieldcat-tabname = 'IT_RESUMEN'.
ls_fieldcat-fieldname = 'CASILLERO2'.
ls_fieldcat-seltext_s = text-T04.
ls_fieldcat-outputlen = 09.
ls_fieldcat-just = 'C'.
APPEND ls_fieldcat TO RE_FIELDCAT.
* Subtotal
CLEAR ls_fieldcat.
ls_fieldcat-tabname = 'IT_RESUMEN'.
ls_fieldcat-fieldname = 'SUBTOTAL2'.
ls_fieldcat-seltext_s = text-T05.
ls_fieldcat-outputlen = 20.
ls_fieldcat-just = 'R'.
ls_fieldcat-datatype = 'CURR'.
ls_fieldcat-no_zero = 'X'.
APPEND ls_fieldcat TO RE_FIELDCAT.
* Debito Fiscal (IVA)debitofis
CLEAR ls_fieldcat.
ls_fieldcat-tabname = 'IT_RESUMEN'.
ls_fieldcat-fieldname = 'DEBITOFIS'.
ls_fieldcat-seltext_s = text-T06.
ls_fieldcat-outputlen = 20.
ls_fieldcat-just = 'R'.
ls_fieldcat-datatype = 'CURR'.
ls_fieldcat-no_zero = 'X'.
APPEND ls_fieldcat TO RE_FIELDCAT.

PERFORM build_eventtab1 USING X_EVENTS[].

CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_APPEND'
EXPORTING
is_layout = w_layout
it_fieldcat = RE_FIELDCAT[]
it_events = X_EVENTS[]
i_tabname = 'IT_RESUMEN'
tables
t_outtab = it_resumen
EXCEPTIONS
PROGRAM_ERROR = 1
MAXIMUM_OF_APPENDS_REACHED = 2
OTHERS = 3.

Disculpa, lo que pasa es que en este ejemplo que me diste, ya estuve checando como funciona y si puede poner varios alv, pero son LIST, y yo quisiera poner varios ALV GRID, pero no he encontrado alguna forma de acerlo, espero me puedas ayudar...

ibecerra
17/09/07, 21:15:17
bueno lo que yo haria en tu caso seria alv orientado a objetos es decir
en un dympro pongo varios contenedores, dependiendo de los alvs q necesite

ayasir
17/09/07, 21:39:21
Lo que pasa es que lo quiero hacer en un reporte y no se como usar alv orientado a objetos.

garbe
26/06/08, 17:53:55
hola pueden pasarme el programa completo tambien a mi, es que preciso tengo este mismo requerimiento ahora. Mi correo es jaimegb_99@yahoo.com.

Gracias por la colaboración.

DavidXD_XD
26/06/08, 19:37:28
Hola puedes usar como dicen los ALV orientados a objetos, no son tan dificiles de entender dale una mirada a los programas que empiezan con BCALV*, ahora si quieres 2 ALV en un mismo reporte lo puedes hacer utilizando la clase CL_GUI_SPLITTER_CONTAINER, esa clase permite partir el contenedor en las partes que tu quieras y dentro de ellas colocas un ALV y cada uno es independiente .... espero te sirva :D

vickxo
27/06/08, 11:58:39
Debes de crear dos dynpros 0001 y 0100 con estos condigos:
Con los containers:

CONTEINER1
CONTEINER2

Seguro funciona.

0001
PROCESS BEFORE OUTPUT.
* MODULE STATUS_0100.
MODULE pbo.
*
PROCESS AFTER INPUT.
* MODULE USER_COMMAND_0100.
MODULE pai.

MODULE user_command_0001.



0100

PROCESS BEFORE OUTPUT.
* MODULE STATUS_0100.
MODULE pbo.
*
PROCESS AFTER INPUT.
* MODULE USER_COMMAND_0100.
MODULE pai.

Codigo de los modules
REPORT test.
TYPE-POOLS: icon.

DATA: ok_code LIKE sy-ucomm.


DATA gs_variant TYPE disvariant.
DATA: gt_fieldcat TYPE lvc_t_fcat.
DATA: gs_layout TYPE lvc_s_layo.
DATA: gs_fieldcat TYPE lvc_s_fcat.
DATA: BEGIN OF gt_sflight OCCURS 0.
INCLUDE STRUCTURE sflight.
DATA: carrname LIKE scarr-carrname,
cell TYPE lvc_t_styl,
END OF gt_sflight.

DATA: BEGIN OF it_sflight OCCURS 0.
INCLUDE STRUCTURE sflight.
DATA: END OF it_sflight.

DATA: BEGIN OF gt_sflight1 OCCURS 0.
INCLUDE STRUCTURE sflight.
DATA: carrname LIKE scarr-carrname,
END OF gt_sflight1,

* g_container TYPE scrfname VALUE 'BCALV_GRID_DEMO_0100_CONT1',
g_container TYPE scrfname VALUE 'CONTEINER1',
g_container2 TYPE scrfname VALUE 'CONTEINER2',

grid1 TYPE REF TO cl_gui_alv_grid,
grid2 TYPE REF TO cl_gui_alv_grid,

g_custom_container TYPE REF TO cl_gui_custom_container,
g_custom_container2 TYPE REF TO cl_gui_custom_container.

CLASS lcl_event_receiver DEFINITION DEFERRED.
DATA: o_event_receiver TYPE REF TO lcl_event_receiver.

*---------------------------------------------------------------------*
* CLASS lcl_event_receiver DEFINITION
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
CLASS lcl_event_receiver DEFINITION.
PUBLIC SECTION.
METHODS:
handle_toolbar FOR EVENT toolbar OF cl_gui_alv_grid
IMPORTING
e_object e_interactive,
handle_user_command FOR EVENT user_command OF cl_gui_alv_grid
IMPORTING e_ucomm.
ENDCLASS.

*---------------------------------------------------------------------*
* class lcl_event_receiver implementation
*---------------------------------------------------------------------*
CLASS lcl_event_receiver IMPLEMENTATION.
METHOD handle_toolbar.
* manejador del evento para el evento toolbar

CONSTANTS:
* constantes de botón
c_button_normal TYPE i VALUE 0,
c_menu_and_default_button TYPE i VALUE 1,
c_menu TYPE i VALUE 2,
c_separator TYPE i VALUE 3,
c_radio_button TYPE i VALUE 4,
c_checkbox TYPE i VALUE 5,
c_menu_entry TYPE i VALUE 6.

DATA:
ls_toolbar TYPE stb_button.

* añade un separador
CLEAR ls_toolbar.
MOVE c_separator TO ls_toolbar-butn_type..
APPEND ls_toolbar TO e_object->mt_toolbar.

* append a new button that to the toolbar. use e_object of
* event toolbar.e_object is of type cl_alv_event_toolbar_set.
* this class has one attribute mt_toolbar which is of table type
* ttb_button.
* the structure is stb_button
*******Borrado de Botones Estandar:
DELETE e_object->mt_toolbar WHERE ( function EQ '&MB_SUM'
OR function EQ '&MB_SUBTOT'
OR function EQ '&GRAPH'
OR function EQ '&&SEP07'
OR function EQ '&INFO' ).
********
CLEAR ls_toolbar.
MOVE 'LOG' TO ls_toolbar-function.
MOVE icon_error_protocol TO ls_toolbar-icon.
MOVE 'Log Errores' TO ls_toolbar-quickinfo.
MOVE 'Log' TO ls_toolbar-text.
MOVE ' ' TO ls_toolbar-disabled.
APPEND ls_toolbar TO e_object->mt_toolbar.
ENDMETHOD.

METHOD handle_user_command.
* handle own functions defined in the toolbar
CASE e_ucomm.
WHEN 'CHANGE'.
LEAVE TO SCREEN 0.
WHEN 'LOG'.
CALL TRANSACTION 'SM35'.
ENDCASE.

ENDMETHOD.
ENDCLASS.

*---------------------------------------------------------------------*
* MAIN *
*---------------------------------------------------------------------*
START-OF-SELECTION.
DATA: wa_sflight LIKE gt_sflight.
DATA: flag1(1), flag2(1).
DATA: seatsocc LIKE gt_sflight-seatsocc.
DATA: planetype LIKE gt_sflight-planetype.

SELECT * INTO CORRESPONDING FIELDS OF TABLE it_sflight FROM sflight.

LOOP AT it_sflight.
MOVE-CORRESPONDING it_sflight TO gt_sflight.
APPEND gt_sflight.
ENDLOOP.
SORT gt_sflight BY planetype.

* SEATSMAX
*PLANETYPE
LOOP AT gt_sflight INTO wa_sflight.
IF seatsocc NE wa_sflight-seatsocc
AND planetype NE wa_sflight-planetype.
CLEAR wa_sflight-seatsmax.
MOVE '1' TO wa_sflight-seatsmax.
MODIFY gt_sflight FROM wa_sflight.
MOVE: wa_sflight-seatsocc TO seatsocc,
wa_sflight-planetype TO planetype.
ELSEIF seatsocc EQ wa_sflight-seatsocc
AND planetype NE wa_sflight-planetype.
CLEAR wa_sflight-seatsmax.
MOVE '1' TO wa_sflight-seatsmax.
MODIFY gt_sflight FROM wa_sflight.
MOVE: wa_sflight-seatsocc TO seatsocc,
wa_sflight-planetype TO planetype.
ELSEIF seatsocc NE wa_sflight-seatsocc
AND planetype EQ wa_sflight-planetype.
CLEAR wa_sflight-seatsmax.
MOVE '1' TO wa_sflight-seatsmax.
MODIFY gt_sflight FROM wa_sflight.
MOVE: wa_sflight-seatsocc TO seatsocc,
wa_sflight-planetype TO planetype.
ELSE.
MOVE: wa_sflight-seatsocc TO seatsocc,
wa_sflight-planetype TO planetype.
CLEAR wa_sflight-seatsmax.
MOVE '0' TO wa_sflight-seatsmax.
MODIFY gt_sflight FROM wa_sflight.
ENDIF.
ENDLOOP.


CLEAR gs_fieldcat.
gs_fieldcat-fieldname = 'CARRID'.
gs_fieldcat-ref_table = 'SFLIGHT'.
gs_fieldcat-outputlen = '5'.
gs_fieldcat-key = 'X'.
* gs_fieldcat-edit = 'X'.
gs_fieldcat-auto_value = 'X'.
APPEND gs_fieldcat TO gt_fieldcat.

CLEAR gs_fieldcat.
gs_fieldcat-fieldname = 'CARRNAME'.
gs_fieldcat-ref_table = 'SCARR'.
gs_fieldcat-outputlen = '12'.
gs_fieldcat-key = 'X'.
gs_fieldcat-auto_value = 'X'.
APPEND gs_fieldcat TO gt_fieldcat.

CLEAR gs_fieldcat.
gs_fieldcat-fieldname = 'CONNID'.
gs_fieldcat-ref_table = 'SFLIGHT'.
gs_fieldcat-key = 'X'.
* gs_fieldcat-edit = 'X'.
gs_fieldcat-auto_value = 'X'.
APPEND gs_fieldcat TO gt_fieldcat.

CLEAR gs_fieldcat.
gs_fieldcat-fieldname = 'FLDATE'.
gs_fieldcat-ref_table = 'SFLIGHT'.
* gs_fieldcat-edit = 'X'.
gs_fieldcat-key = 'X'.
APPEND gs_fieldcat TO gt_fieldcat.

CLEAR gs_fieldcat.
gs_fieldcat-fieldname = 'SEATSOCC'.
gs_fieldcat-ref_table = 'SFLIGHT'.
* gs_fieldcat-edit = 'X'.
APPEND gs_fieldcat TO gt_fieldcat.

CLEAR gs_fieldcat.
gs_fieldcat-fieldname = 'PLANETYPE'.
gs_fieldcat-ref_table = 'SFLIGHT'.
* gs_fieldcat-edit = 'X'.
APPEND gs_fieldcat TO gt_fieldcat.

CLEAR gs_fieldcat.
gs_fieldcat-fieldname = 'SEATSMAX'.
gs_fieldcat-ref_table = 'SFLIGHT'.
APPEND gs_fieldcat TO gt_fieldcat.



CLEAR gs_fieldcat.
gs_fieldcat-fieldname = 'PAYMENTSUM'.
gs_fieldcat-datatype = 'CURR'.
gs_fieldcat-coltext = text-004.
gs_fieldcat-cfieldname = 'CURRENCY'.
* gs_fieldcat-edit = 'X'.
APPEND gs_fieldcat TO gt_fieldcat.

CLEAR gs_fieldcat.
gs_fieldcat-fieldname = 'PRICE'.
gs_fieldcat-ref_table = 'SFLIGHT'.
gs_fieldcat-cfieldname = 'CURRENCY'.
* gs_fieldcat-edit = 'X'.
APPEND gs_fieldcat TO gt_fieldcat.

CLEAR gs_fieldcat.
gs_fieldcat-fieldname = 'CURRENCY'.
gs_fieldcat-ref_table = 'SFLIGHT'.
* gs_fieldcat-edit = 'X'.
gs_fieldcat-checktable = '!'.
gs_fieldcat-auto_value = 'X'.
APPEND gs_fieldcat TO gt_fieldcat.

gs_variant-report = sy-repid.



* CALL SCREEN 100.
CALL SCREEN 0001.

*---------------------------------------------------------------------*
* MODULE PBO OUTPUT *
*---------------------------------------------------------------------*
MODULE pbo OUTPUT.
PERFORM pbo_output.
ENDMODULE.

*---------------------------------------------------------------------*
* MODULE PAI INPUT *
*---------------------------------------------------------------------*
MODULE pai INPUT.
PERFORM pai_input.
ENDMODULE. " F4

*&---------------------------------------------------------------------*
*& Form pbo_output
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM pbo_output.
SET PF-STATUS 'MAIN100'.
* SET PF-STATUS 'MAIN0001'.
SET TITLEBAR '001'.
IF g_custom_container IS INITIAL.
IF sy-batch IS INITIAL.
CREATE OBJECT g_custom_container
EXPORTING container_name = g_container.

ENDIF.
CREATE OBJECT grid1
EXPORTING i_parent = g_custom_container.

CREATE OBJECT o_event_receiver.

SET HANDLER o_event_receiver->handle_user_command FOR grid1.
SET HANDLER o_event_receiver->handle_toolbar FOR grid1.
gs_layout-stylefname = 'CELL'.
gs_layout-no_toolbar = ' '.
gs_layout-grid_title = 'Facturas Contabilizadas en SAP'.
CALL METHOD grid1->set_table_for_first_display
EXPORTING
i_save = 'A'
is_layout = gs_layout
CHANGING it_fieldcatalog = gt_fieldcat
it_outtab = gt_sflight[].
CALL METHOD grid1->set_toolbar_interactive.



ENDIF.
IF g_custom_container2 IS INITIAL.
IF sy-batch IS INITIAL.
CREATE OBJECT g_custom_container2
EXPORTING container_name = g_container2.

ENDIF.
CREATE OBJECT grid2
EXPORTING i_parent = g_custom_container2.

* CREATE OBJECT o_event_receiver.

SET HANDLER o_event_receiver->handle_user_command FOR grid2.
SET HANDLER o_event_receiver->handle_toolbar FOR grid2.

gs_layout-stylefname = 'CELL'.
gs_layout-grid_title = 'Facturas Anuladas en SAP'.
CALL METHOD grid2->set_table_for_first_display
EXPORTING
i_save = 'A'
is_layout = gs_layout
CHANGING it_fieldcatalog = gt_fieldcat
it_outtab = gt_sflight[].
CALL METHOD grid2->set_toolbar_interactive.

ENDIF.

ENDFORM. " pbo_output

*&---------------------------------------------------------------------*
*& Form pai_input
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM pai_input.
DATA: l_valid(1) TYPE c.

ok_code = sy-ucomm.

CASE ok_code.
WHEN 'SAVE'.
CALL METHOD grid1->check_changed_data IMPORTING e_valid = l_valid.
IF l_valid = 'X'.
MESSAGE i000(0k) WITH text-009.
ELSE.
MESSAGE i000(0k) WITH text-010.
ENDIF.
WHEN 'CHANGE'.
IF grid1->is_ready_for_input( ) = 0.
CALL METHOD grid1->set_ready_for_input EXPORTING
i_ready_for_input = 1.
ELSE.
CALL METHOD grid1->check_changed_data
IMPORTING e_valid = l_valid.
IF l_valid = 'X'.
CALL METHOD grid1->set_ready_for_input EXPORTING
i_ready_for_input = 0.
ENDIF.
ENDIF.
WHEN 'EXIT'.
SET SCREEN 0.
LEAVE SCREEN.
ENDCASE.
CLEAR ok_code.
ENDFORM. " pai_input
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
* SET PF-STATUS 'xxxxxxxx'.
* SET TITLEBAR 'xxx'.

ENDMODULE. " STATUS_0100 OUTPUT

Te pongo el codigo principal:

REPORT test.
TYPE-POOLS: icon.

DATA: ok_code LIKE sy-ucomm.


DATA gs_variant TYPE disvariant.
DATA: gt_fieldcat TYPE lvc_t_fcat.
DATA: gs_layout TYPE lvc_s_layo.
DATA: gs_fieldcat TYPE lvc_s_fcat.
DATA: BEGIN OF gt_sflight OCCURS 0.
INCLUDE STRUCTURE sflight.
DATA: carrname LIKE scarr-carrname,
cell TYPE lvc_t_styl,
END OF gt_sflight.

DATA: BEGIN OF it_sflight OCCURS 0.
INCLUDE STRUCTURE sflight.
DATA: END OF it_sflight.

DATA: BEGIN OF gt_sflight1 OCCURS 0.
INCLUDE STRUCTURE sflight.
DATA: carrname LIKE scarr-carrname,
END OF gt_sflight1,

* g_container TYPE scrfname VALUE 'BCALV_GRID_DEMO_0100_CONT1',
g_container TYPE scrfname VALUE 'CONTEINER1',
g_container2 TYPE scrfname VALUE 'CONTEINER2',

grid1 TYPE REF TO cl_gui_alv_grid,
grid2 TYPE REF TO cl_gui_alv_grid,

g_custom_container TYPE REF TO cl_gui_custom_container,
g_custom_container2 TYPE REF TO cl_gui_custom_container.

CLASS lcl_event_receiver DEFINITION DEFERRED.
DATA: o_event_receiver TYPE REF TO lcl_event_receiver.

*---------------------------------------------------------------------*
* CLASS lcl_event_receiver DEFINITION
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
CLASS lcl_event_receiver DEFINITION.
PUBLIC SECTION.
METHODS:
handle_toolbar FOR EVENT toolbar OF cl_gui_alv_grid
IMPORTING
e_object e_interactive,
handle_user_command FOR EVENT user_command OF cl_gui_alv_grid
IMPORTING e_ucomm.
ENDCLASS.

*---------------------------------------------------------------------*
* class lcl_event_receiver implementation
*---------------------------------------------------------------------*
CLASS lcl_event_receiver IMPLEMENTATION.
METHOD handle_toolbar.
* manejador del evento para el evento toolbar

CONSTANTS:
* constantes de botón
c_button_normal TYPE i VALUE 0,
c_menu_and_default_button TYPE i VALUE 1,
c_menu TYPE i VALUE 2,
c_separator TYPE i VALUE 3,
c_radio_button TYPE i VALUE 4,
c_checkbox TYPE i VALUE 5,
c_menu_entry TYPE i VALUE 6.

DATA:
ls_toolbar TYPE stb_button.

* añade un separador
CLEAR ls_toolbar.
MOVE c_separator TO ls_toolbar-butn_type..
APPEND ls_toolbar TO e_object->mt_toolbar.

* append a new button that to the toolbar. use e_object of
* event toolbar.e_object is of type cl_alv_event_toolbar_set.
* this class has one attribute mt_toolbar which is of table type
* ttb_button.
* the structure is stb_button
*******Borrado de Botones Estandar:
DELETE e_object->mt_toolbar WHERE ( function EQ '&MB_SUM'
OR function EQ '&MB_SUBTOT'
OR function EQ '&GRAPH'
OR function EQ '&&SEP07'
OR function EQ '&INFO' ).
********
CLEAR ls_toolbar.
MOVE 'LOG' TO ls_toolbar-function.
MOVE icon_error_protocol TO ls_toolbar-icon.
MOVE 'Log Errores' TO ls_toolbar-quickinfo.
MOVE 'Log' TO ls_toolbar-text.
MOVE ' ' TO ls_toolbar-disabled.
APPEND ls_toolbar TO e_object->mt_toolbar.
ENDMETHOD.

METHOD handle_user_command.
* handle own functions defined in the toolbar
CASE e_ucomm.
WHEN 'CHANGE'.
LEAVE TO SCREEN 0.
WHEN 'LOG'.
CALL TRANSACTION 'SM35'.
ENDCASE.

ENDMETHOD.
ENDCLASS.

*---------------------------------------------------------------------*
* MAIN *
*---------------------------------------------------------------------*
START-OF-SELECTION.
DATA: wa_sflight LIKE gt_sflight.
DATA: flag1(1), flag2(1).
DATA: seatsocc LIKE gt_sflight-seatsocc.
DATA: planetype LIKE gt_sflight-planetype.

SELECT * INTO CORRESPONDING FIELDS OF TABLE it_sflight FROM sflight.

LOOP AT it_sflight.
MOVE-CORRESPONDING it_sflight TO gt_sflight.
APPEND gt_sflight.
ENDLOOP.
SORT gt_sflight BY planetype.

* SEATSMAX
*PLANETYPE
LOOP AT gt_sflight INTO wa_sflight.
IF seatsocc NE wa_sflight-seatsocc
AND planetype NE wa_sflight-planetype.
CLEAR wa_sflight-seatsmax.
MOVE '1' TO wa_sflight-seatsmax.
MODIFY gt_sflight FROM wa_sflight.
MOVE: wa_sflight-seatsocc TO seatsocc,
wa_sflight-planetype TO planetype.
ELSEIF seatsocc EQ wa_sflight-seatsocc
AND planetype NE wa_sflight-planetype.
CLEAR wa_sflight-seatsmax.
MOVE '1' TO wa_sflight-seatsmax.
MODIFY gt_sflight FROM wa_sflight.
MOVE: wa_sflight-seatsocc TO seatsocc,
wa_sflight-planetype TO planetype.
ELSEIF seatsocc NE wa_sflight-seatsocc
AND planetype EQ wa_sflight-planetype.
CLEAR wa_sflight-seatsmax.
MOVE '1' TO wa_sflight-seatsmax.
MODIFY gt_sflight FROM wa_sflight.
MOVE: wa_sflight-seatsocc TO seatsocc,
wa_sflight-planetype TO planetype.
ELSE.
MOVE: wa_sflight-seatsocc TO seatsocc,
wa_sflight-planetype TO planetype.
CLEAR wa_sflight-seatsmax.
MOVE '0' TO wa_sflight-seatsmax.
MODIFY gt_sflight FROM wa_sflight.
ENDIF.
ENDLOOP.


CLEAR gs_fieldcat.
gs_fieldcat-fieldname = 'CARRID'.
gs_fieldcat-ref_table = 'SFLIGHT'.
gs_fieldcat-outputlen = '5'.
gs_fieldcat-key = 'X'.
* gs_fieldcat-edit = 'X'.
gs_fieldcat-auto_value = 'X'.
APPEND gs_fieldcat TO gt_fieldcat.

CLEAR gs_fieldcat.
gs_fieldcat-fieldname = 'CARRNAME'.
gs_fieldcat-ref_table = 'SCARR'.
gs_fieldcat-outputlen = '12'.
gs_fieldcat-key = 'X'.
gs_fieldcat-auto_value = 'X'.
APPEND gs_fieldcat TO gt_fieldcat.

CLEAR gs_fieldcat.
gs_fieldcat-fieldname = 'CONNID'.
gs_fieldcat-ref_table = 'SFLIGHT'.
gs_fieldcat-key = 'X'.
* gs_fieldcat-edit = 'X'.
gs_fieldcat-auto_value = 'X'.
APPEND gs_fieldcat TO gt_fieldcat.

CLEAR gs_fieldcat.
gs_fieldcat-fieldname = 'FLDATE'.
gs_fieldcat-ref_table = 'SFLIGHT'.
* gs_fieldcat-edit = 'X'.
gs_fieldcat-key = 'X'.
APPEND gs_fieldcat TO gt_fieldcat.

CLEAR gs_fieldcat.
gs_fieldcat-fieldname = 'SEATSOCC'.
gs_fieldcat-ref_table = 'SFLIGHT'.
* gs_fieldcat-edit = 'X'.
APPEND gs_fieldcat TO gt_fieldcat.

CLEAR gs_fieldcat.
gs_fieldcat-fieldname = 'PLANETYPE'.
gs_fieldcat-ref_table = 'SFLIGHT'.
* gs_fieldcat-edit = 'X'.
APPEND gs_fieldcat TO gt_fieldcat.

CLEAR gs_fieldcat.
gs_fieldcat-fieldname = 'SEATSMAX'.
gs_fieldcat-ref_table = 'SFLIGHT'.
APPEND gs_fieldcat TO gt_fieldcat.



CLEAR gs_fieldcat.
gs_fieldcat-fieldname = 'PAYMENTSUM'.
gs_fieldcat-datatype = 'CURR'.
gs_fieldcat-coltext = text-004.
gs_fieldcat-cfieldname = 'CURRENCY'.
* gs_fieldcat-edit = 'X'.
APPEND gs_fieldcat TO gt_fieldcat.

CLEAR gs_fieldcat.
gs_fieldcat-fieldname = 'PRICE'.
gs_fieldcat-ref_table = 'SFLIGHT'.
gs_fieldcat-cfieldname = 'CURRENCY'.
* gs_fieldcat-edit = 'X'.
APPEND gs_fieldcat TO gt_fieldcat.

CLEAR gs_fieldcat.
gs_fieldcat-fieldname = 'CURRENCY'.
gs_fieldcat-ref_table = 'SFLIGHT'.
* gs_fieldcat-edit = 'X'.
gs_fieldcat-checktable = '!'.
gs_fieldcat-auto_value = 'X'.
APPEND gs_fieldcat TO gt_fieldcat.

gs_variant-report = sy-repid.



* CALL SCREEN 100.
CALL SCREEN 0001.

*---------------------------------------------------------------------*
* MODULE PBO OUTPUT *
*---------------------------------------------------------------------*
MODULE pbo OUTPUT.
PERFORM pbo_output.
ENDMODULE.

*---------------------------------------------------------------------*
* MODULE PAI INPUT *
*---------------------------------------------------------------------*
MODULE pai INPUT.
PERFORM pai_input.
ENDMODULE. " F4

*&---------------------------------------------------------------------*
*& Form pbo_output
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM pbo_output.
SET PF-STATUS 'MAIN100'.
* SET PF-STATUS 'MAIN0001'.
SET TITLEBAR '001'.
IF g_custom_container IS INITIAL.
IF sy-batch IS INITIAL.
CREATE OBJECT g_custom_container
EXPORTING container_name = g_container.

ENDIF.
CREATE OBJECT grid1
EXPORTING i_parent = g_custom_container.

CREATE OBJECT o_event_receiver.

SET HANDLER o_event_receiver->handle_user_command FOR grid1.
SET HANDLER o_event_receiver->handle_toolbar FOR grid1.
gs_layout-stylefname = 'CELL'.
gs_layout-no_toolbar = ' '.
gs_layout-grid_title = 'Facturas Contabilizadas en SAP'.
CALL METHOD grid1->set_table_for_first_display
EXPORTING
i_save = 'A'
is_layout = gs_layout
CHANGING it_fieldcatalog = gt_fieldcat
it_outtab = gt_sflight[].
CALL METHOD grid1->set_toolbar_interactive.



ENDIF.
IF g_custom_container2 IS INITIAL.
IF sy-batch IS INITIAL.
CREATE OBJECT g_custom_container2
EXPORTING container_name = g_container2.

ENDIF.
CREATE OBJECT grid2
EXPORTING i_parent = g_custom_container2.

* CREATE OBJECT o_event_receiver.

SET HANDLER o_event_receiver->handle_user_command FOR grid2.
SET HANDLER o_event_receiver->handle_toolbar FOR grid2.

gs_layout-stylefname = 'CELL'.
gs_layout-grid_title = 'Facturas Anuladas en SAP'.
CALL METHOD grid2->set_table_for_first_display
EXPORTING
i_save = 'A'
is_layout = gs_layout
CHANGING it_fieldcatalog = gt_fieldcat
it_outtab = gt_sflight[].
CALL METHOD grid2->set_toolbar_interactive.

ENDIF.

ENDFORM. " pbo_output

*&---------------------------------------------------------------------*
*& Form pai_input
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM pai_input.
DATA: l_valid(1) TYPE c.

ok_code = sy-ucomm.

CASE ok_code.
WHEN 'SAVE'.
CALL METHOD grid1->check_changed_data IMPORTING e_valid = l_valid.
IF l_valid = 'X'.
MESSAGE i000(0k) WITH text-009.
ELSE.
MESSAGE i000(0k) WITH text-010.
ENDIF.
WHEN 'CHANGE'.
IF grid1->is_ready_for_input( ) = 0.
CALL METHOD grid1->set_ready_for_input EXPORTING
i_ready_for_input = 1.
ELSE.
CALL METHOD grid1->check_changed_data
IMPORTING e_valid = l_valid.
IF l_valid = 'X'.
CALL METHOD grid1->set_ready_for_input EXPORTING
i_ready_for_input = 0.
ENDIF.
ENDIF.
WHEN 'EXIT'.
SET SCREEN 0.
LEAVE SCREEN.
ENDCASE.
CLEAR ok_code.
ENDFORM. " pai_input
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
* SET PF-STATUS 'xxxxxxxx'.
* SET TITLEBAR 'xxx'.

ENDMODULE. " STATUS_0100 OUTPUT


Saludos

PercyFloresSotelo
20/08/08, 17:11:51
hola ibecerra me puedes ayudar como crear un alv y que se mue¿stre en un grafico

mcarrasco
28/08/08, 17:59:05
Amigo vea los programas BCALV* en la trx se80... ahi salen varios demos. Saludos!

lau00_77
23/04/09, 14:51:52
Hola buenos dias, espero que me ayuden.....

tengo un reporte ALV, pero necesito que al seleccionar un registro y dar click aparezca el detalle del registro, osea que me mande a otra pantalla, donde muestre el detalle del registro...

muchas gracias

marianoa
23/04/09, 15:49:07
probaste con la funcion read_text??
Saludos

mariel1490
24/09/14, 14:03:32
hay les mande la informacion solicitada
saludos coordiales

POR FAVOR ibecerra, PODRÍAS MANDARMELO A MI CORREO: marielysg14@hotmail.com

MUCHAS GRACIAS de antemano!!