PDA

Ver la Versión Completa : Mostrar cabecera y detalle en ALV separados?


decom4
10/02/10, 12:35:27
Saludos a todos,
Por favor necesito ejemplos de codigo abap que me permita mostras una tabla de encabezados en un alv o table control y otra de detalle(posiciones) en otro alv o table control.

La idea es que cuando elija una posicion de la tabla cabecera me muestre el detalle correspondiente en la otra tabla.

Gracias de antemano.

Fabian leonardo velasquez
10/02/10, 20:41:16
REPORT zsd_libped_rep_3.

TYPES: BEGIN OF ty_tablaped,
land1 LIKE zsd_ped_bloq-land1,
vkbur LIKE zsd_ped_bloq-vkbur,
ctlpc LIKE zsd_ped_bloq-ctlpc,
vbeln LIKE zsd_ped_bloq-vbeln,
fec_ini LIKE zsd_ped_bloq-fec_ini,
fec_fin LIKE zsd_ped_bloq-fec_fin,
nivel_act LIKE zsd_ped_bloq-nivel_act,
nivel_fin LIKE zsd_ped_bloq-nivel_fin,
estado LIKE zsd_ped_bloq-estado,
END OF ty_tablaped.

TYPES: BEGIN OF ty_pedbloq,
land1 LIKE zsd_ped_bloq-land1,
vkbur LIKE zsd_ped_bloq-vkbur,
rtext LIKE t691t-rtext,
vbeln LIKE zsd_ped_bloq-vbeln,
fec_ini LIKE zsd_ped_bloq-fec_ini,
fec_fin LIKE zsd_ped_bloq-fec_fin,
nivel_act LIKE zsd_ped_bloq-nivel_act,
nivel_fin LIKE zsd_ped_bloq-nivel_fin,
estado TYPE char18,
END OF ty_pedbloq.

TYPES: BEGIN OF ty_pedaprob,
land1 LIKE zsd_ped_aprob-land1,
vkbur LIKE zsd_ped_aprob-vkbur,
rtext LIKE t691t-rtext,
vbeln LIKE zsd_ped_aprob-vbeln,
nivel LIKE zsd_ped_aprob-nivel,
ename LIKE zsd_extcup_datosusuario-ename,
fecha LIKE zsd_ped_aprob-fecha,
accion TYPE char18,
END OF ty_pedaprob.

TYPES: BEGIN OF t_vbak,
vbeln TYPE vbak-vbeln,
bukrs_vf TYPE vbak-bukrs_vf,
END OF t_vbak.
DATA wa_t001-bukrs TYPE t001-bukrs.
DATA ti_t691t TYPE TABLE OF t691t.
DATA wa_t691t TYPE t691t.
DATA ti_vbak TYPE TABLE OF t_vbak.
DATA wa_vbak TYPE t_vbak.
DATA: ti_pedbloq TYPE STANDARD TABLE OF ty_pedbloq WITH HEADER LINE.
DATA: ti_tablaped TYPE STANDARD TABLE OF ty_tablaped WITH HEADER LINE.
DATA: ti_pedaprob TYPE STANDARD TABLE OF ty_pedaprob WITH HEADER LINE.
DATA: ti_datosusuario LIKE TABLE OF zsd_extcup_datosusuario WITH HEADER LINE.
DATA: ti_aprob LIKE TABLE OF zsd_ped_aprob WITH HEADER LINE.
DATA: ti_observaciones LIKE TABLE OF zsd_ped_obs WITH HEADER LINE.
DATA p_file LIKE rlgrap-filename VALUE 'C:\'.

*Variables del ALV
DATA: go_cl_alvgrid TYPE REF TO cl_gui_alv_grid,
go_cl_alvgrid2 TYPE REF TO cl_gui_alv_grid,
go_cl_alvgrid3 TYPE REF TO cl_gui_alv_grid,
go_container TYPE REF TO cl_gui_custom_container,
go_container2 TYPE REF TO cl_gui_custom_container,
go_container3 TYPE REF TO cl_gui_custom_container,
gtd_fieldcat TYPE lvc_t_fcat,
gst_layout TYPE lvc_s_layo.


*************************************************************
* Declarar la Clase
*************************************************************
CLASS gcl_event DEFINITION.
PUBLIC SECTION.
* Metodo double click
METHODS:
handle_double_click
FOR EVENT double_click OF cl_gui_alv_grid
IMPORTING e_row e_column.
ENDCLASS. "gcl_event DEFINITION
* Implementacion de Metodos.
CLASS gcl_event IMPLEMENTATION.
* Implementacion del metodo doble click
METHOD handle_double_click.
DATA: ltd_read TYPE STANDARD TABLE OF ty_tablaped.
DATA: lwa_read TYPE ty_pedbloq.
READ TABLE ti_tablaped INDEX e_row-index INTO lwa_read.

DATA: ls_tablaped LIKE LINE OF ti_tablaped.

* read selected row from internal table gt_sflight
CLEAR: ls_tablaped,
ls_tablaped,
ti_aprob.

READ TABLE ti_tablaped INDEX e_row-index INTO ls_tablaped.

* §4.At Doubleclick(2): Select booking data
PERFORM select_table_aprob USING ls_tablaped.
* IF e_column EQ 'VBELN'.
CALL SCREEN '0200'.
* ENDIF.
ENDMETHOD. "handle_double_click
ENDCLASS. "gcl_event IMPLEMENTATION
* Instancia de la Clase gcl_event.
DATA: go_event TYPE REF TO gcl_event.
TABLES: zsd_ped_bloq.
SELECTION-SCREEN BEGIN OF BLOCK a1 WITH FRAME TITLE text-001.
PARAMETER: pa_bukrs LIKE vbak-bukrs_vf OBLIGATORY.
SELECT-OPTIONS: pa_land1 FOR zsd_ped_bloq-land1,
pa_vkbur FOR zsd_ped_bloq-vkbur,
pa_ctlpc FOR zsd_ped_bloq-ctlpc,
pa_vbeln FOR zsd_ped_bloq-vbeln,
pa_fec_i FOR zsd_ped_bloq-fec_ini OBLIGATORY,
pa_fec_f FOR zsd_ped_bloq-fec_fin,
pa_n_act FOR zsd_ped_bloq-nivel_act,
pa_n_fin FOR zsd_ped_bloq-nivel_fin,
pa_estad FOR zsd_ped_bloq-estado.

SELECTION-SCREEN END OF BLOCK a1.



AT SELECTION-SCREEN ON pa_bukrs.
SELECT SINGLE bukrs INTO wa_t001-bukrs
FROM t001 WHERE bukrs = pa_bukrs.
IF sy-subrc <> 0.
MESSAGE ID 'ZM' TYPE 'E' NUMBER '224' WITH pa_bukrs.
ELSE.
AUTHORITY-CHECK OBJECT 'Z_FI_SOC01'
ID 'BUKRS' FIELD wa_t001-bukrs
ID 'ACTVT' FIELD '03'.
IF sy-subrc <> 0.
MESSAGE e100(zsd) WITH pa_bukrs.
ENDIF.
ENDIF.


START-OF-SELECTION.

PERFORM get_data.
CALL SCREEN '0100'.


END-OF-SELECTION.

*&---------------------------------------------------------------------*
*& Form get_data
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM get_data .

SELECT a~land1 a~vkbur a~ctlpc a~vbeln a~fec_ini a~fec_fin
a~nivel_act a~nivel_fin a~estado " B~BUKRS_VF
INTO CORRESPONDING FIELDS OF TABLE ti_tablaped
FROM ( zsd_ped_bloq AS a INNER JOIN vbak AS b ON b~vbeln = a~vbeln )
WHERE land1 IN pa_land1
AND a~vkbur IN pa_vkbur
AND a~ctlpc IN pa_ctlpc
AND a~vbeln IN pa_vbeln
AND a~fec_ini IN pa_fec_i
AND a~fec_fin IN pa_fec_f
AND a~nivel_act IN pa_n_act
AND a~nivel_fin IN pa_n_fin
AND a~estado IN pa_estad
AND b~bukrs_vf = pa_bukrs.

SELECT vbeln bukrs_vf
INTO TABLE ti_vbak
FROM vbak FOR ALL ENTRIES IN ti_tablaped
WHERE vbeln = ti_tablaped-vbeln.


SELECT *
INTO TABLE ti_t691t
FROM t691t FOR ALL ENTRIES IN ti_tablaped
WHERE spras = sy-langu
AND ctlpc = ti_tablaped-ctlpc.



LOOP AT ti_tablaped.

READ TABLE ti_vbak WITH KEY vbeln = ti_tablaped-vbeln
INTO wa_vbak.

READ TABLE ti_t691t WITH KEY ctlpc = ti_tablaped-ctlpc
kkber = wa_vbak-bukrs_vf
INTO wa_t691t.

ti_pedbloq-land1 = ti_tablaped-land1.
ti_pedbloq-vkbur = ti_tablaped-vkbur.
ti_pedbloq-rtext = wa_t691t-rtext.
ti_pedbloq-vbeln = ti_tablaped-vbeln.
ti_pedbloq-fec_ini = ti_tablaped-fec_ini.
ti_pedbloq-fec_fin = ti_tablaped-fec_fin.
ti_pedbloq-nivel_act = ti_tablaped-nivel_act.
ti_pedbloq-nivel_fin = ti_tablaped-nivel_fin.
ti_pedbloq-estado = ti_tablaped-estado.
CASE ti_tablaped-estado.
WHEN 'A'.
ti_pedbloq-estado = 'APROBADO'.
WHEN 'R'.
ti_pedbloq-estado = 'RECHAZADO'.
WHEN 'S'.
ti_pedbloq-estado = 'SIN ASIGNAR'.
WHEN 'X'.
ti_pedbloq-estado = 'SIN RANGO'.
WHEN 'P'.
ti_pedbloq-estado = 'PENDIENTE'.
WHEN 'E'.
ti_pedbloq-estado = 'ERROR'.
ENDCASE.
APPEND ti_pedbloq.

ENDLOOP.
ENDFORM. " get_data
*----------------------------------------------------------------------*
* MODULE crear_alv OUTPUT
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
MODULE crear_alv OUTPUT.
PERFORM crear_alvgrid.
ENDMODULE. " CREAR_ALV OUTPUT

*&---------------------------------------------------------------------*
*& Form crear_alvgrid
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM crear_alvgrid .
IF go_container IS INITIAL.
CREATE OBJECT go_container
EXPORTING
container_name = 'CONTENEDOR'
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
create_error = 3
lifetime_error = 4
OTHERS = 5.
IF sy-subrc EQ 0.
CREATE OBJECT go_cl_alvgrid
EXPORTING
i_parent = go_container.
* Invocar a los metodos del objeto go_cl_alvgrid.
CALL METHOD go_cl_alvgrid->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_modified.
CALL METHOD go_cl_alvgrid->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_enter.
CALL METHOD go_cl_alvgrid->set_ready_for_input
EXPORTING
i_ready_for_input = 1.
PERFORM genera_catalogo CHANGING gtd_fieldcat.

PERFORM genera_layout CHANGING gst_layout.

CREATE OBJECT go_event.
SET HANDLER go_event->handle_double_click FOR go_cl_alvgrid.
CALL METHOD go_cl_alvgrid->set_table_for_first_display
EXPORTING
is_layout = gst_layout
i_save = 'A'
CHANGING
it_outtab = ti_pedbloq[]
it_fieldcatalog = gtd_fieldcat.

ENDIF.
ELSE.
CALL METHOD go_cl_alvgrid->refresh_table_display.
ENDIF.
ENDFORM. " crear_alvgrid

*&---------------------------------------------------------------------*
*& Form genera_catalogo
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->PO_FIELDCAT text
*----------------------------------------------------------------------*
FORM genera_catalogo CHANGING po_fieldcat TYPE lvc_t_fcat.

IF sy-dynnr = '0100'.
PERFORM set_cat USING 'TI_PEDBLOQ' 'LAND1' 'País' 5 space space
CHANGING po_fieldcat.

PERFORM set_cat USING 'TI_PEDBLOQ' 'VKBUR' 'Regional' 15 space space
CHANGING po_fieldcat.

PERFORM set_cat USING 'TI_PEDBLOQ' 'RTEXT' 'Cl. Riesgo' 15 space space
CHANGING po_fieldcat.

PERFORM set_cat USING 'TI_PEDBLOQ' 'VBELN' 'N° PEDIDO' 15 space space
CHANGING po_fieldcat.

PERFORM set_cat USING 'TI_PEDBLOQ' 'FEC_INI' 'FEC. Ini' 10 space space
CHANGING po_fieldcat.

PERFORM set_cat USING 'TI_PEDBLOQ' 'FEC_FIN' 'FEC. FIN' 10 space space
CHANGING po_fieldcat.

PERFORM set_cat USING 'TI_PEDBLOQ' 'NIVEL_ACT' 'N. Act.' 6 space space
CHANGING po_fieldcat.

PERFORM set_cat USING 'TI_PEDBLOQ' 'NIVEL_FIN' 'N. Fin.' 6 space space
CHANGING po_fieldcat.

PERFORM set_cat USING 'TI_PEDBLOQ' 'ESTADO' 'ESTADO' 18 space space
CHANGING po_fieldcat.

ELSEIF sy-dynnr = '0200'.


PERFORM set_cat USING 'TI_PEDAPROB' 'LAND1' 'País' 5 space space
CHANGING po_fieldcat.

PERFORM set_cat USING 'TI_PEDAPROB' 'VKBUR' 'Regional' 15 space space
CHANGING po_fieldcat.

PERFORM set_cat USING 'TI_PEDAPROB' 'RTEXT' 'Cl. Riesgo' 15 space space
CHANGING po_fieldcat.

PERFORM set_cat USING 'TI_PEDAPROB' 'VBELN' 'N° PEDIDO' 15 space space
CHANGING po_fieldcat.

PERFORM set_cat USING 'TI_PEDAPROB' 'ENAME' 'APROBADOR' 50 space space
CHANGING po_fieldcat.

PERFORM set_cat USING 'TI_PEDAPROB' 'NIVEL' 'NIVEL' 7 space space
CHANGING po_fieldcat.

PERFORM set_cat USING 'TI_PEDAPROB' 'FECHA' 'Fec. Resp' 10 space space
CHANGING po_fieldcat.

PERFORM set_cat USING 'TI_PEDAPROB' 'ACCION' 'RESPUESTA' 18 space space
CHANGING po_fieldcat.




* ti_pedaprob-ctlpc = ti_aprob-ctlpc.

ENDIF.
ENDFORM. " genera_catalogo
**&-----------------------------------------------------------
**----------*
**& Form genera_layout
**&-----------------------------------------------------------
*----------*
** Metodos que permite determinar los atributos del ALV.
**------------------------------------------------------------
*----------*
** <--P_GST_LAYOUT text
**------------------------------------------------------------
*----------*
FORM genera_layout CHANGING po_layout TYPE lvc_s_layo.
po_layout-grid_title = 'REPORTE DE ESTADO DE PEDIDOS'.
po_layout-no_toolbar = 'X'.
* po_layout-box_fname = 'CHECK'.
ENDFORM. " genera_layout
*&-----------------------------------------------------------
*----------*
*& Form set_cat
*&-----------------------------------------------------------
*----------*
* text
*------------------------------------------------------------
*----------*
FORM set_cat USING pi_log
pi_field
pi_texto
pi_long
pi_edit
pi_checkbox
CHANGING po_fieldcat TYPE lvc_t_fcat.
DATA: lwa_fieldcat TYPE lvc_s_fcat.
lwa_fieldcat-tabname = pi_log.
lwa_fieldcat-fieldname = pi_field.
lwa_fieldcat-edit = pi_edit.
lwa_fieldcat-checkbox = pi_checkbox.
lwa_fieldcat-coltext = pi_texto.
lwa_fieldcat-seltext = pi_texto.
lwa_fieldcat-reptext = pi_texto.
lwa_fieldcat-outputlen = pi_long.
APPEND lwa_fieldcat TO po_fieldcat.
ENDFORM. " set_cat
*&-----------------------------------------------------------
*----------*
*& Module USER_COMMAND_0100 INPUT
*&-----------------------------------------------------------
*----------*
* text
*------------------------------------------------------------
*----------*
MODULE user_command_0100 INPUT.
IF sy-ucomm EQ 'CLOSE'.

LEAVE PROGRAM.
ENDIF.

IF sy-ucomm EQ 'EXIT'.
CALL SELECTION-SCREEN 1000.
ENDIF.

IF sy-ucomm EQ 'BACK'.
LEAVE TO SCREEN 0.
ENDIF.

IF sy-ucomm EQ 'SAVE'.

CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
def_filename = ' '
def_path = p_file
mask = '*.*,*.txt,*.txt.'
mode = 'S'
title = ' '
IMPORTING
filename = p_file
EXCEPTIONS
inv_winsys = 1
no_batch = 2
selection_cancel = 3
selection_error = 4
OTHERS = 5.
IF sy-subrc NE 0.
MESSAGE i098(zsd).
ELSE.

DATA p1_file TYPE string.
p1_file = p_file.

CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = p1_file
filetype = 'DAT'
TABLES
data_tab = ti_pedbloq
* FIELDNAMES =
EXCEPTIONS
file_write_error = 1
no_batch = 2
gui_refuse_filetransfer = 3
invalid_type = 4
no_authority = 5
unknown_error = 6
header_not_allowed = 7
separator_not_allowed = 8
filesize_not_allowed = 9
header_too_long = 10
dp_error_create = 11
dp_error_send = 12
dp_error_write = 13
unknown_dp_error = 14
access_denied = 15
dp_out_of_memory = 16
disk_full = 17
dp_timeout = 18
file_not_found = 19
dataprovider_exception = 20
control_flush_error = 21
OTHERS = 22
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDIF.

COMMIT WORK.

ENDIF.



ENDMODULE. " USER_COMMAND_0100 INPUT
**&-----------------------------------------------------------
*----------*
**& Module STATUS_0100 OUTPUT
**&-----------------------------------------------------------
*----------*
** text
**------------------------------------------------------------
*----------*
MODULE status_0100 OUTPUT.
SET PF-STATUS 'STATUS100'.
* SET TITLEBAR 'xxx'.
ENDMODULE. " STATUS_0100 OUTPUT
**&-----------------------------------------------------------
*----------*
**& Module USER_COMMAND_0200 INPUT
**&-----------------------------------------------------------
*----------*
** text
**------------------------------------------------------------
*----------*
MODULE user_command_0200 INPUT.
IF sy-ucomm EQ 'CLOSE'.
LEAVE PROGRAM.
ENDIF.

IF sy-ucomm EQ 'EXIT'.
CALL SELECTION-SCREEN 1000.
ENDIF.

IF sy-ucomm EQ 'BACK'.
LEAVE TO SCREEN 0.
ENDIF.
ENDMODULE. " USER_COMMAND_0200 INPUT
" CREAR_ALV INPUT
*&---------------------------------------------------------------------*
*& Form SELECT_TABLE_APROB
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_LS_TABLAPED text
* <--P_GT_APROB text
*----------------------------------------------------------------------*

FORM select_table_aprob USING p_ls_pedaprob LIKE LINE OF ti_tablaped.
DATA cant_aprob TYPE n VALUE 0.
LOOP AT ti_pedaprob.
DELETE TABLE ti_pedaprob FROM ti_pedaprob.
ENDLOOP.

SELECT * FROM zsd_ped_aprob INTO TABLE ti_aprob
WHERE vbeln = p_ls_pedaprob-vbeln.

LOOP AT ti_aprob.



READ TABLE ti_vbak WITH KEY vbeln = ti_aprob-vbeln
INTO wa_vbak.

READ TABLE ti_t691t WITH KEY ctlpc = ti_aprob-ctlpc
kkber = wa_vbak-bukrs_vf
INTO wa_t691t.



CALL FUNCTION 'ZSD_EXTRACUPOS_CONS_DATUSUARIO'
EXPORTING
uname = ti_aprob-aprob
IMPORTING
datosusuario = ti_datosusuario.

ti_pedaprob-land1 = ti_aprob-land1.
ti_pedaprob-vkbur = ti_aprob-vkbur.
ti_pedaprob-rtext = wa_t691t-rtext.
ti_pedaprob-vbeln = ti_aprob-vbeln.
ti_pedaprob-nivel = ti_aprob-nivel.
ti_pedaprob-ename = ti_datosusuario-ename.
ti_pedaprob-fecha = ti_aprob-fecha.
* ti_pedaprob-accion = ti_aprob-accion.


CASE ti_aprob-accion.
WHEN 'A'.
ti_pedaprob-accion = 'APROBADO'.
WHEN 'R'.
ti_pedaprob-accion = 'RECHAZADO'.
WHEN 'S'.
ti_pedaprob-accion = 'SIN ASIGNAR'.
WHEN 'X'.
ti_pedaprob-accion = 'SIN RANGO'.
WHEN 'P'.
ti_pedaprob-accion = 'PENDIENTE'.
WHEN 'E'.
ti_pedaprob-accion = 'ERROR'.
ENDCASE.


APPEND ti_pedaprob.
CLEAR wa_vbak.
ENDLOOP.


DESCRIBE TABLE ti_pedaprob LINES cant_aprob.
IF cant_aprob = 0.
MESSAGE i086(zsd) WITH p_ls_pedaprob-vbeln.
CALL SCREEN 100.
ELSE.
SELECT * FROM zsd_ped_obs INTO TABLE ti_observaciones
WHERE vbeln = p_ls_pedaprob-vbeln.
IF sy-subrc = 0.
SORT ti_observaciones BY nivel num_lin.
ENDIF.
ENDIF.
ENDFORM. " SELECT_TABLE_APROB

*&---------------------------------------------------------------------*
*& Module CREAR_ALV200 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE crear_alv200 OUTPUT.
PERFORM crear_alvgrid200.
ENDMODULE. " CREAR_ALV200 OUTPUT
*&---------------------------------------------------------------------*
*& Form CREAR_ALVGRID200
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM crear_alvgrid200 .
IF go_container2 IS INITIAL.
CREATE OBJECT go_container2
EXPORTING
container_name = 'CONTENEDOR200'
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
create_error = 3
lifetime_error = 4
OTHERS = 5.

IF sy-subrc EQ 0.
CREATE OBJECT go_cl_alvgrid2
EXPORTING
i_parent = go_container2.
* Invocar a los metodos del objeto go_cl_alvgrid.
CALL METHOD go_cl_alvgrid2->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_modified.
CALL METHOD go_cl_alvgrid2->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_enter.
CALL METHOD go_cl_alvgrid2->set_ready_for_input
EXPORTING
i_ready_for_input = 1.
CLEAR gtd_fieldcat.
CLEAR gst_layout.
PERFORM genera_catalogo CHANGING gtd_fieldcat.

PERFORM genera_layout CHANGING gst_layout.

CREATE OBJECT go_event.
* SET HANDLER go_event->handle_double_click FOR go_cl_alvgrid.
CALL METHOD go_cl_alvgrid2->set_table_for_first_display
EXPORTING
is_layout = gst_layout
i_save = 'A'
CHANGING
it_outtab = ti_pedaprob[]
it_fieldcatalog = gtd_fieldcat.
ENDIF.
ELSE.
CALL METHOD go_cl_alvgrid2->refresh_table_display.
ENDIF.

IF go_container3 IS INITIAL.
CREATE OBJECT go_container3
EXPORTING
container_name = 'OBSER_PED'
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
create_error = 3
lifetime_error = 4
OTHERS = 5.

IF sy-subrc EQ 0.
CREATE OBJECT go_cl_alvgrid3
EXPORTING
i_parent = go_container3.
* Invocar a los metodos del objeto go_cl_alvgrid.
CALL METHOD go_cl_alvgrid3->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_modified.
CALL METHOD go_cl_alvgrid3->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_enter.
CALL METHOD go_cl_alvgrid3->set_ready_for_input
EXPORTING
i_ready_for_input = 1.
CLEAR gtd_fieldcat.
CLEAR gst_layout.
PERFORM genera_catalogo_obser CHANGING gtd_fieldcat.

PERFORM genera_layout_obs CHANGING gst_layout.

CREATE OBJECT go_event.
* SET HANDLER go_event->handle_double_click FOR go_cl_alvgrid.
CALL METHOD go_cl_alvgrid3->set_table_for_first_display
EXPORTING
is_layout = gst_layout
i_save = 'A'
CHANGING
it_outtab = ti_observaciones[]
it_fieldcatalog = gtd_fieldcat.

ENDIF.
ELSE.
CALL METHOD go_cl_alvgrid3->refresh_table_display.
ENDIF.
ENDFORM. " CREAR_ALVGRID200
*&---------------------------------------------------------------------*
*& Module STATUS_0200 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_0200 OUTPUT.
SET PF-STATUS 'STATUS100'.
* SET TITLEBAR 'xxx'.

ENDMODULE. " STATUS_0200 OUTPUT
*&---------------------------------------------------------------------*
*& Form GENERA_CATALOGO_OBSER
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_GTD_FIELDCAT text
*----------------------------------------------------------------------*
FORM genera_catalogo_obser CHANGING p_gtd_fieldcat.

PERFORM set_cat USING 'TI_OBSERVACIONES' 'LAND1' 'PAÍS' 5 space space
CHANGING gtd_fieldcat.

PERFORM set_cat USING 'TI_OBSERVACIONES' 'NIVEL' 'NIVEL' 6 space space
CHANGING gtd_fieldcat.


PERFORM set_cat USING 'TI_OBSERVACIONES' 'VBELN' 'PEDIDO' 15 space space
CHANGING gtd_fieldcat.


PERFORM set_cat USING 'TI_OBSERVACIONES' 'TEXTO' 'OBSERVACIÓN' 250 space space
CHANGING gtd_fieldcat.
ENDFORM. " GENERA_CATALOGO_OBSER

*&---------------------------------------------------------------------*
*& Form genera_layout_OBS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->PO_LAYOUT text
*----------------------------------------------------------------------*
FORM genera_layout_obs CHANGING po_layout TYPE lvc_s_layo.
po_layout-grid_title = 'REPORTE DE OBSERVACIONES'.
po_layout-no_toolbar = 'X'.
* po_layout-box_fname = 'CHECK'.
ENDFORM. " genera_layout

Con este programa el detalle le carga en un segundo layout pero es cuestion de cambiar el dynpro al que se llama y le debe funcionar.