Está en la página 1de 18

INCLUDE ZIALV

*
* DESCRIPCIN: Tipos, variables, constantes y forms para trabajo
* con ALV's
*
* INSTRUCCIONES: Sera obligatorio para un correcto funcionamiento de la
* libreria aadir al codigo del report un form llamado USER_COMMAND
* creado con la estructura del existente comentado al final de este
* include.
*
* Adems ser obligatorio tambin aadir al codigo del report un form
* llamado LAYOUT creado con la estructura del existente comentado al
* final de este include.
*
* Si se cumple todo esto, simplemente habra que llamar al form
* ALV_MOSTRAR_INFORME pasandole como parametros la tabla a mostrar y el
* nombre de la estructura de dicha tabla, estructura que debera ser del
* diccionario de datos, no definida en el codigo del listado, ademas se
* le pasar una constante que podr tener dos valores.
*
- C_TIPO_ALV
<- Si queremos modo grid
*
- C_TIPO_LIST <- Si queremos modo listado
*
* Si se prefiere podr crearse el catalogo de campos manualmente
* rellenando la estructura GT_FIELDCAT aunque es la opcin menos
* recomendada, en este caso el parametro P_STRUCT de
* ALV_MOSTRAR_INFORME se pasar en blanco.
*
* Permite aadir lineas a la cabecera mediante el uso del form
* ALV_RELLENAR_CABECERA pasandole los textos y los tres modos de
* texto en la cabecera, a saber: (SOLO FUNCIONA EN MODO GRID)
*
- C_TIPO_GRANDE
*
- C_TIPO_MEDIANO
*
- C_TIPO_PEQUEO
*
* Ademas es posible mostrar un logo por pantalla, para ello es
* necesario usar el form ALV_ASIGNAR_LOGO pasandole el nombre del
* logo que previamente se habr creado siguiendo lo siguientes pasos:
* (SOLO FUNCIONA EN MODO GRID)
* PASOS PARA SUBIR LOGO:
*
*
1. Ir a la transccin OAER
*
*
2. En el nombre de clase, pon 'PICTURES'
*
*
3. El tipo de clase es 'OT'
*
*
4. En el "object key" introduce el nombre que le quieres dar al
*
logo.
*
*
5. Ejecuta
*
*
6. En la siguiente pantalla seleciona documento standard. Pincha
*
sobre el incono de pantalla y entonces te preguntar por el
*
nombre del fichero que vas a subir.
*
* La librera tambin permite aadir rutinas a los distintos eventos que
* el programador desee asignandole al nombre del evento el nombre de una

* form mediante la funcion ALV_EVENTS.


*
* EJEMPLO DE USO:
*
* END-OF-SELECTION.
*
** Preparamos los eventos:
* PERFORM alv_events.
*
** Excluimos codigos para status
*
PERFORM alv_excluir_codigo USING 'CODE'.
** Con esta linea activaremos nuestro status personal, caso de no
** reellenar esta linea o rellenarla con el status en blanco mostraria
** el status standar
* PERFORM alv_aniadir_status USING 'STANDARD_FULLSCREEN'.*
** Se pueden insertar tantas lineas como se deseen en el encabezado.
* PERFORM alv_rellenar_cabecera USING 'TITULO 1'
*
'TITULO 2'
*
c_tipo_grande.
*
** Asignamos codigo a los eventos que queramos ejecutar (TOP-OF-PAGE)
* PERFORM alv_rellenar_eventos
*
USING
*
'USER_COMMAND'
<-Nombre evento
*
'USER_COMMAND'. <-Nombre form para evento
* PERFORM alv_rellenar_eventos
*
USING
*
'TOP-OF-PAGE'
*
c_form_cabecera.
* PERFORM alv_asignar_logo
*
USING
*
'ZLOGOSUBIDO'.
*
** Mostramos el listado
* PERFORM alv_mostrar_informe TABLES i_listado
*
USING 'ZSTR_LISTADO'
*
c_tipo_alv.
*
* AUTOR: Ignacio Arnaiz Piorno
FECHA: 06-03-2005
* CONTACTO: i_arnaiz@sanesteban.com
*
* ---------------------------------------------------------------------* CONTROL DE MODIFICACIONES
*
AUTOR
EMPRESA
FECHA
MOTIVO
* ..........
.......
DD/MM/AA ................................
* ..........
.......
DD/MM/AA ................................
*----------------------------------------------------------------------************************************************************************
************************************************************************
* Definicin de tipos
************************************************************************
TYPE-POOLS: slis.
TYPE-POOLS: icon.
************************************************************************
* Definicin de tablas del sistema
************************************************************************

************************************************************************
* Definicin de constantes
************************************************************************
CONSTANTS: c_logo_alv(100) TYPE c VALUE 'ZLOGO_ARM_ALV',
"#EC *
c_click LIKE sy-ucomm VALUE '&IC1',
"#EC *
"Codigo del doble click
c_aceptar LIKE sy-ucomm VALUE '&ONT',
"#EC *
"Codigo del aceptar
c_struct(50)
TYPE c VALUE ,
c_pf_status_set
TYPE slis_formname VALUE 'ALV_SET_STATUS',
c_user_command
TYPE slis_formname VALUE 'USER_COMMAND',
"#EC *
c_layout
TYPE slis_formname VALUE 'ALV_LAYOUT',
"#EC *
c_xselp(5)
TYPE c VALUE 'XSELP',
"#EC *
c_marked
TYPE c VALUE 'X',
"#EC *
c_form_cabecera
TYPE slis_formname VALUE 'ALV_CABECERA',
"#EC *
c_tipo_grande TYPE c VALUE 'H',
"#EC *
c_tipo_mediano TYPE c VALUE 'S',
"#EC *
c_tipo_pequeno TYPE c VALUE 'A',
"#EC *
c_tipo_alv TYPE c VALUE '1',
"#EC *
c_tipo_list TYPE c VALUE '2'.
"#EC *
* Definicin de colores para listas.
CONSTANTS: c_color_azul(4)
VALUE 'C100',
"#EC *
c_color_blanco(4)
VALUE 'C200',
"#EC *
c_color_amarillo(4)
VALUE 'C300',
"#EC *
c_color_cyan(4)
VALUE 'C400',
"#EC *
c_color_verde(4)
VALUE 'C500',
"#EC *
c_color_rojo(4)
VALUE 'C600',
"#EC *
c_color_rojo_intens(4)
VALUE 'C610',
"#EC *
c_color_marron(4)
VALUE 'C700'.
"#EC *
************************************************************************
* Definicin de variables
************************************************************************
************************************************************************
* Definicin de estructuras
************************************************************************
DATA: x_structure TYPE dd02l-tabname. "SAP Table
"#EC *
DATA: x_header TYPE dd02l-tabname.
"SAP Table
"#EC *
DATA: x_item TYPE dd02l-tabname.
"SAP Table
"#EC *
DATA: gt_layout
TYPE slis_layout_alv.

"#EC *
DATA: gt_print

TYPE slis_print_alv.

DATA: gt_variant

TYPE disvariant.

"#EC *
"#EC *
DATA: gt_list_top_of_page TYPE slis_t_listheader.
"#EC *
DATA: gt_fieldcat TYPE slis_t_fieldcat_alv.
"#EC *
DATA: gt_fieldcat_hd LIKE LINE OF gt_fieldcat.
"#EC *
DATA: gt_events TYPE slis_t_event

.
"#EC *

DATA: gt_okcodes_a_excluir TYPE TABLE OF slis_extab.


"#EC
DATA: gt_okcodes_a_excluir_wa LIKE LINE OF gt_okcodes_a_excluir.
"#EC
DATA: d_logo(1000) TYPE c.
"#EC
DATA: d_status LIKE c_pf_status_set.
"#EC
* Relacion entre los datos de cabecera y posicion
DATA: gt_key TYPE slis_keyinfo_alv.
"#EC
DATA: gt_sort TYPE slis_t_sortinfo_alv.
"#EC
DATA: gt_sort_hd LIKE LINE OF gt_sort.
"#EC
DATA: gt_filter TYPE slis_t_filter_alv.
"#EC
DATA: gt_filter_hd LIKE LINE OF gt_filter.
"#EC
DATA: gt_color TYPE lvc_t_scol. "slis_t_specialcol_alv.
"#EC
DATA: gt_color_hd LIKE LINE OF gt_color.
"#EC
DATA:
DATA:
DATA:
DATA:

gt_grid_scroll
gt_marked_columns
gt_filtered_entries
gt_fieldcat_backend

TYPE
TYPE
TYPE
TYPE

*
*
*
*
*
*
*
*
*
*
*

lvc_s_scrl.
slis_t_fieldcat_alv.
slis_t_filtered_entries.
slis_t_fieldcat_alv.

DATA d_alv_status LIKE c_pf_status_set.


DATA gd_alv_grid_settings TYPE lvc_s_glay.
DATA gd_html_top_of_page TYPE slis_formname.
DATA gd_html_end_of_list TYPE slis_formname.
DATA gd_mostrado.
************************************************************************
* Definicin de tablas internas
************************************************************************
************************************************************************
* Definicin de parmetros
************************************************************************

************************************************************************
* Definicin de rango de seleccin
************************************************************************
************************************************************************
* Definicin de la pantalla de seleccin
************************************************************************
************************************************************************
* Definicin de FIELD-SYMBOLS
************************************************************************
************************************************************************
*
*
FORMS ADICIONALES
*
************************************************************************
*---------------------------------------------------------------------*
*
FORM alv_excluir_codigo
*
*---------------------------------------------------------------------*
*
Una vez que se lance el ALV con un STATUS cualquiera definido
*
por el usuario (o bien el standar) el codigo P_CODIGO ser
*
omitido, y por tanto no se dibujar el botn asociado a l.
*---------------------------------------------------------------------*
FORM alv_excluir_codigo
"#EC CALLED
USING p_codigo TYPE any.
DATA lt_okcodes_a_excluir TYPE slis_extab.
lt_okcodes_a_excluir-fcode = p_codigo.
APPEND lt_okcodes_a_excluir TO gt_okcodes_a_excluir.
SORT gt_okcodes_a_excluir.
DELETE ADJACENT DUPLICATES FROM gt_okcodes_a_excluir.
ENDFORM.

"alv_excluir_codigo

*&---------------------------------------------------------------------*
*&
Form alv_mostrar_informe
*&---------------------------------------------------------------------*
*
Se utilizar en el programa una vez que se haya rellenado todo
*
lo necesario para lanzar el listado de la tabla P_OUTPUT.
*
P_TIPO ser igual a C_TIPO_ALV si se quiere lanzar el ALV en
*
modo GRID en caso de preferirlo en modo lista se pasar este
*
parametro igual a C_TIPO_LIST.
*
P_STRUCT ser el nombre de una estructura del diccionario de
*
la que tomar la estructura de salida del listado. En caso de
*
pasarlo en blanco habr que haber creado con anterioridad un
*
catalogo de campos bien con el perform ALV_CATALOGO o bien
*
aadiendo directamente los campos al catalogo gt_fieldcat[].
*----------------------------------------------------------------------*
FORM alv_mostrar_informe
"#EC CALLED
TABLES p_output
USING p_struct TYPE any
p_tipo TYPE any.
DATA l_struct LIKE c_struct.

l_struct = p_struct.
* Damos forma al informe
* DATA l_dyn TYPE REF TO cx_sy_dyn_call_illegal_form.
* try.
PERFORM (c_layout) IN PROGRAM (sy-cprog) IF FOUND.
*
catch cx_sy_dyn_call_illegal_form into l_dyn.
* endtry.

"#EC NO_HANDLER

PERFORM alv_show_report TABLES p_output


USING l_struct
p_tipo.
gd_mostrado = 'X'.
ENDFORM.

" alv_mostrar_informe

*&--------------------------------------------------------------------*
*&
Form alv_mostrar_informe_jerarquico
*&--------------------------------------------------------------------*
*
REDEFINIR CUANDO SE USE
*---------------------------------------------------------------------*
FORM alv_mostrar_informe_jerarquico
"#EC *
TABLES i_header
i_item
USING pt_header TYPE any
pt_item
TYPE any
pt_key
LIKE gt_key.
* Define local data
DATA: v_repid LIKE sy-repid.
v_repid = sy-repid.
x_header = pt_header.
x_item = pt_item.
DATA i_tabname_header TYPE slis_tabname.
DATA i_tabname_item TYPE slis_tabname.
i_tabname_header = pt_header.
i_tabname_item = pt_item.
* Damos forma al informe
* DATA l_dyn TYPE REF TO cx_sy_dyn_call_illegal_form.
* try.
PERFORM (c_layout) IN PROGRAM (sy-cprog) IF FOUND.
* catch cx_sy_dyn_call_illegal_form into l_dyn.
*
endtry.
IF gt_fieldcat[] IS INITIAL
AND NOT pt_header IS INITIAL
AND NOT pt_item IS INITIAL.
PERFORM alv_catalogo_jerarquico
USING
pt_header
pt_item.
ENDIF.

"#EC NO_HANDLER

IF NOT gt_layout-expand_fieldname IS INITIAL.


DELETE gt_fieldcat WHERE fieldname = gt_layout-expand_fieldname.
ENDIF.
IF NOT d_alv_status IS INITIAL
AND NOT gt_events[] IS INITIAL.
PERFORM alv_rellenar_eventos
USING
'PF_STATUS_SET'
c_pf_status_set.
ENDIF.

*
*
*

*
*
*
*
*
*
*
*
*

*
*
*
*
*
*

CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'


EXPORTING
I_INTERFACE_CHECK =
i_callback_program
= v_repid
i_callback_pf_status_set
= d_status
i_callback_user_command
= c_user_command
is_layout
= gt_layout
it_fieldcat
= gt_fieldcat[]
it_excluding
= gt_okcodes_a_excluir[]
IT_SPECIAL_GROUPS =
it_sort
= gt_sort[]
it_filter
= gt_filter[]
IS_SEL_HIDE =
I_SCREEN_START_COLUMN = 0
I_SCREEN_START_LINE = 0
I_SCREEN_END_COLUMN = 0
I_SCREEN_END_LINE = 0
I_DEFAULT = 'X'
i_save = 'A'
IS_VARIANT =
it_events = gt_events
IT_EVENT_EXIT =
i_tabname_header
= i_tabname_header
i_tabname_item
= i_tabname_item
i_structure_name_header
= x_header
i_structure_name_item
= x_item
is_keyinfo
= pt_key
is_print
= gt_print
IS_REPREP_ID =
I_BUFFER_ACTIVE =
I_BYPASSING_BUFFER =
IMPORTING
E_EXIT_CAUSED_BY_CALLER =
ES_EXIT_CAUSED_BY_USER =
TABLES
t_outtab_header
= i_header
t_outtab_item
= i_item
EXCEPTIONS
program_error = 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.
gd_mostrado = 'X'.
ENDFORM.

" alv_mostrar_informe_jerarquico

*&---------------------------------------------------------------------*
*&
Form alv_catalogo
*&---------------------------------------------------------------------*
*
Inicializa el catalogo de campos gt_fieldcat[] aadiendole
*
todos los campos de la estructura del diccionario P_ESTRUCTURA
*----------------------------------------------------------------------*
*
-->P_C_ESTRUCTURA_LISTADO text
*----------------------------------------------------------------------*
FORM alv_catalogo
"#EC CALLED
USING
p_estructura TYPE any.
*

SET PARAMETER ID 'ALVBUFFER' FIELD '99991231'.


SET PARAMETER ID 'ALVBUFFER' FIELD sy-datum.
REFRESH gt_fieldcat.
DATA l_estructura TYPE dd02l-tabname.
DATA l_estructura_int TYPE slis_tabname.
l_estructura = p_estructura.
l_estructura_int = p_estructura.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_structure_name
= l_estructura
i_client_never_display = 'X'
i_bypassing_buffer
= 'X'
CHANGING
ct_fieldcat
= gt_fieldcat[].

* Si no encontr campos seguramente sea una tabla interna


IF gt_fieldcat[] IS INITIAL.
DATA l_repid LIKE sy-repid.
l_repid = sy-repid.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_program_name
= l_repid
i_internal_tabname
= l_estructura_int
i_client_never_display = 'X'
i_bypassing_buffer
= 'X'
i_inclname
= l_repid
CHANGING
ct_fieldcat
= gt_fieldcat[].
ENDIF.
LOOP AT
WHERE
AND
AND

gt_fieldcat INTO gt_fieldcat_hd


seltext_l IS INITIAL
seltext_m IS INITIAL
seltext_s IS INITIAL.

SELECT SINGLE ddtext


INTO gt_fieldcat_hd-seltext_l
FROM dd03t

WHERE
AND
AND
AND

tabname
ddlanguage
as4local
fieldname

=
=
=
=

l_estructura
sy-langu
'A'
gt_fieldcat_hd-fieldname.

gt_fieldcat_hd-seltext_m = gt_fieldcat_hd-seltext_l.
gt_fieldcat_hd-seltext_s = gt_fieldcat_hd-seltext_l.
MODIFY gt_fieldcat FROM gt_fieldcat_hd.
ENDLOOP.
gt_fieldcat_hd-tabname = p_estructura.
MODIFY gt_fieldcat FROM gt_fieldcat_hd TRANSPORTING tabname
WHERE NOT fieldname IS INITIAL.
gt_fieldcat_hd-ctabname = p_estructura.
MODIFY gt_fieldcat FROM gt_fieldcat_hd TRANSPORTING ctabname
WHERE NOT cfieldname IS INITIAL.
ENDFORM.

" alv_catalogo

*&---------------------------------------------------------------------*
*&
Form alv_catalogo_jerarquico
*&---------------------------------------------------------------------*
*
Inicializa el catalogo de campos gt_fieldcat[] aadiendole
*
todos los campos de la estructura del diccionario P_HEADER
*
y P_ITEM
*----------------------------------------------------------------------*
*
-->P_C_ESTRUCTURA_LISTADO text
*----------------------------------------------------------------------*
FORM alv_catalogo_jerarquico
"#EC CALLED
USING
pt_header TYPE any
pt_item
TYPE any.
DATA lt_fieldcat LIKE gt_fieldcat.
PERFORM alv_catalogo
USING
pt_item.
lt_fieldcat[] = gt_fieldcat[].
PERFORM alv_catalogo
USING
pt_header.
LOOP AT lt_fieldcat INTO gt_fieldcat_hd.
APPEND gt_fieldcat_hd TO gt_fieldcat.
ENDLOOP.
ENDFORM.

" alv_catalogo_jerarquico

*&---------------------------------------------------------------------*
*&
Form alv_set_status
*&---------------------------------------------------------------------*
*
Inicializa el status
*----------------------------------------------------------------------*
FORM alv_set_status
"#EC CALLED

USING p_excluidos TYPE any.


DATA l_excluidos LIKE TABLE OF gt_okcodes_a_excluir_wa.
DATA l_excluidos_aux LIKE TABLE OF gt_okcodes_a_excluir_wa.
l_excluidos_aux[] = p_excluidos.
LOOP AT l_excluidos_aux INTO gt_okcodes_a_excluir_wa.
COLLECT gt_okcodes_a_excluir_wa INTO l_excluidos.
ENDLOOP.
LOOP AT gt_okcodes_a_excluir INTO gt_okcodes_a_excluir_wa.
COLLECT gt_okcodes_a_excluir_wa INTO l_excluidos.
ENDLOOP.
SET PF-STATUS d_alv_status EXCLUDING l_excluidos.

"#EC *

* Se informa de la informacin necesaria en el ALV


PERFORM alv_escribir_layout_info.
ENDFORM.

" alv_set_status

*&---------------------------------------------------------------------*
*&
Form alv_show_report
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM alv_show_report
"#EC CALLED
TABLES p_output
USING p_struct LIKE c_struct
p_tipo TYPE any.
* Define local data
DATA: v_repid LIKE sy-repid.
DATA l_form_cabecera LIKE c_form_cabecera.
v_repid = sy-repid.
x_structure = p_struct.
* Check that our selection retrieves any result
IF p_output[] IS INITIAL.
*
MESSAGE i666(01) WITH 'No se mostrara la tabla porque esta vacia'.
*
"#EC NOTEXT
MESSAGE i128(hi).
ELSE.
IF NOT p_struct IS INITIAL.
PERFORM alv_catalogo USING p_struct.
ENDIF.
IF NOT gt_layout-box_fieldname IS INITIAL.
DELETE gt_fieldcat WHERE fieldname = gt_layout-box_fieldname.
ENDIF.
IF NOT d_alv_status IS INITIAL

AND NOT gt_events[] IS INITIAL.


PERFORM alv_rellenar_eventos
USING
'PF_STATUS_SET'
c_pf_status_set.
ENDIF.
IF gt_list_top_of_page[] IS INITIAL.
CLEAR l_form_cabecera.
ELSE.
l_form_cabecera = c_form_cabecera.
* Asignamos codigo a los eventos que queramos ejecutar (TOP-OF-PAGE)
PERFORM alv_rellenar_eventos
USING
'TOP_OF_PAGE'
c_form_cabecera.
ENDIF.
CASE p_tipo.
WHEN c_tipo_alv.
* Visualice the list with a standard function
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program
= v_repid
*
i_callback_pf_status_set = d_alv_status
*
i_callback_user_command = c_user_command
i_callback_top_of_page
= l_form_cabecera
i_callback_html_top_of_page = gd_html_top_of_page
i_callback_html_end_of_list = gd_html_end_of_list
is_layout
= gt_layout
i_save
= 'A'
it_events
= gt_events
i_grid_settings
= gd_alv_grid_settings
it_fieldcat
= gt_fieldcat
it_sort
= gt_sort
it_filter
= gt_filter
is_print
= gt_print
TABLES
t_outtab
= p_output.
WHEN c_tipo_list.
* Visualice the list with a standard function
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
i_callback_program
= v_repid
*
i_callback_pf_status_set = d_alv_status
*
i_callback_user_command = c_user_command
*
i_callback_top_of_page
= l_form_cabecera
*
i_structure_name
= x_structure
is_layout
= gt_layout
i_save
= 'A'
it_events
= gt_events
it_fieldcat
= gt_fieldcat
it_sort
= gt_sort
it_filter
= gt_filter
is_print
= gt_print
TABLES

t_outtab

= p_output.

ENDCASE.
ENDIF.
ENDFORM.

" alv_show_report

*---------------------------------------------------------------------*
*
FORM ALV_ANIADIR_STATUS
*
*---------------------------------------------------------------------*
*
........
*
*---------------------------------------------------------------------*
* --> P_STATUS
*
*---------------------------------------------------------------------*
FORM alv_aniadir_status
"#EC CALLED
USING p_status TYPE any.
d_alv_status = p_status.
ENDFORM.

"alv_aniadir_status

*&---------------------------------------------------------------------*
*&
Form alv_cabecera
*&---------------------------------------------------------------------*
*
MUESTRA LA CABECERA
*----------------------------------------------------------------------*
FORM alv_cabecera.
"#EC CALLED
IF NOT gt_list_top_of_page IS INITIAL
OR NOT d_logo IS INITIAL.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = gt_list_top_of_page
i_logo
= d_logo
i_end_of_list_grid = .
ENDIF.
ENDFORM.
" alv_cabecera
*&---------------------------------------------------------------------*
*&
Form alv_rellenar_eventos
*&---------------------------------------------------------------------*
*
ASIGNA UN FORM A UN EVENTO A EJECUTAR
*----------------------------------------------------------------------*
* --> NOMBRE DEL EVENTO
* --> NOMBRE DEL FORM PARA DICHO EVENTO
*----------------------------------------------------------------------*
FORM alv_rellenar_eventos
"#EC CALLED
USING p_nombre_evento TYPE any
p_form_para_evento TYPE any.
DATA: ls_event TYPE slis_alv_event.
CASE p_nombre_evento.
WHEN 'HTML_TOP_OF_PAGE'.
gd_html_top_of_page = p_form_para_evento.
WHEN 'HTML_END_OF_LIST'.
gd_html_end_of_list = p_form_para_evento.
WHEN OTHERS.

IF gt_events[] IS INITIAL.
PERFORM alv_events.
ENDIF.
* Rutina que controlar el status GUI
READ TABLE gt_events WITH KEY name = p_nombre_evento
INTO ls_event.
IF sy-subrc = 0.
IF ls_event-form IS INITIAL.
MOVE p_form_para_evento TO ls_event-form.
MODIFY gt_events FROM ls_event TRANSPORTING form
WHERE name = p_nombre_evento.
ENDIF.
ELSE.
MESSAGE e403(63) WITH p_nombre_evento
'- Form: ALV_RELLENAR_EVENTOS'."#EC NOTEXT
ENDIF.
ENDCASE.
ENDFORM.

" alv_rellenar_eventos

*&---------------------------------------------------------------------*
*&
Form ALV_RELLENAR_CABECERA
*&---------------------------------------------------------------------*
*
Rellena una linea de la cabecera
*----------------------------------------------------------------------*
*
-->P_GT_LIST_TOP_OF_PAGE text
*----------------------------------------------------------------------*
FORM alv_rellenar_cabecera
"#EC CALLED
USING p_texto_negrita TYPE any
p_texto_normal TYPE any
p_tipo TYPE any.
DATA: ls_line TYPE slis_listheader.
CLEAR:ls_line.
ls_line-key = p_texto_negrita.
ls_line-typ = p_tipo.
ls_line-info = p_texto_normal.
APPEND ls_line TO gt_list_top_of_page.
ENDFORM.

" ALV_RELLENAR_CABECERA

*---------------------------------------------------------------------*
*
FORM alv_asignar_logo
*
*---------------------------------------------------------------------*
*
Rellena el logo que queremos que se muestre por pantalla
*
*---------------------------------------------------------------------*
* --> P_LOGO
Logo a cargar
*
*---------------------------------------------------------------------*
FORM alv_asignar_logo
"#EC CALLED

USING p_logo.
d_logo = p_logo.
ENDFORM.

" alv_asignar_logo

"#EC *
"#EC *
"#EC *

*&---------------------------------------------------------------------*
*&
Form alv_events
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
FORM alv_events.
"#EC CALLED
DATA: ls_event TYPE slis_alv_event. REFRESH gt_events.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
i_list_type = 0
IMPORTING
et_events
= gt_events.
* Se aade el evento DATA_CHANGED que no incluye la funcin
ls_event-name = 'DATA_CHANGED'.
APPEND ls_event TO gt_events.
ENDFORM.

" alv_alv_events

**&--------------------------------------------------------------------**
**&
Form alv_layout
**&--------------------------------------------------------------------**
**
ESTE FORM DEBE SER CREADO EN EL CODIGO DEL LISTADO CON UNA
**
ESTRUCTURA PARECIDA A ESTA:
**---------------------------------------------------------------------**
** --> p1
text
** <-- p2
text
**---------------------------------------------------------------------**
*FORM alv_layout.
* CLEAR gt_layout.
* gt_layout-no_colhead
* gt_layout-no_hotspot
*
* gt_layout-zebra
* gt_layout-no_vline
* gt_layout-cell_merge
* gt_layout-edit
* gt_layout-edit_mode
grid)
* gt_layout-numc_sum
*
* gt_layout-no_input
* gt_layout-f2code
* gt_layout-reprep
* gt_layout-no_keyfix
* gt_layout-expand_all
* gt_layout-no_author
* gt_layout-def_status

= c_marked.
= c_marked
.
= c_marked.
= c_marked.
= c_marked.
= c_marked.
= '?'.

"
"
"
"
"
"
"

Sin cabecera de columnas


Las cabeceras no son
seleccionables
Dibuja cada linea de un color
Las columnas mediante un espacio
No suprimir la rplica del campo
Editable (solo modo grid)
" Modo de edicin (solo modo

= c_marked

"
"
"
"
"
"
"
"
"

Permitir totalizacin en
campos NUMC
No permitir entrada
?
report report interface active
No rellenar columnas clave
Expandir todas las posiciones
No standard authority check
Texto para el boton ITEM

=
=
=
=
=
=
=

.
c_marked.
'?'.
c_marked.
c_marked.
c_marked.
c_marked.
'20 char'.

** Opciones de visualizacin
* gt_layout-colwidth_optimize = c_marked. " Optimizar ancho-columna
* gt_layout-no_min_linesize = c_marked. " linesize = ancho de lista
* gt_layout-min_linesize = 80.
" Tamao minimo de listado
* gt_layout-max_linesize = 250.
" Tamao mximo de listado
* gt_layout-window_titlebar = sy-title.
" Titulo en la barra de
*titulo
* gt_layout-no_uline_hs = c_marked.
" No subrayar la cabecera
** Excepciones
* gt_layout-lights_fieldname = 'Nombrecampo' " Nombre de campo para
*
. " excepcion
* gt_layout-lights_tabname = 'Nombretabla'
" Nombre de tabla para
*
. " excepcion
* gt_layout-lights_rollname = 'Elementodatos' " Nombre de elemento de
*
. " datos para excepcin
* gt_layout-lights_condense = c_marked.
" ??
** Totales
* gt_layout-no_sumchoice = c_marked.
" No permitir volver a sumar
* gt_layout-no_totalline = c_marked.
" Sin linea de totalizacin
* gt_layout-no_subchoice = c_marked
" No permitir volvera a
*
. " subtotalizar
* gt_layout-no_subtotals = c_marked.
" No permitir subtotales
* gt_layout-no_unit_splitting = c_marked
" No separar totalizaciones
*
. " para monedas diferentes
* gt_layout-totals_before_items = c_marked " Mostrar totales tras las
*
." posiciones
* gt_layout-totals_only = c_marked.
" Solo mostrar totales
* gt_layout-totals_text = '60 char'.
" Texto para linea de
*totales
* gt_layout-subtotals_text = '60 char'
" Texto para linea de
*
.
" subtotales
** Interaccin
* gt_layout-box_fieldname = 'Nombrecampo'
" Nombre de campo para
*
.
" checkbox
* gt_layout-box_tabname = 'Nombretabla'
" Nombre de tabla para
*
.
" checkbox
* gt_layout-box_rollname = 'Elementodatos'
" Nombre de elemento de
*
.
" datos para checkbox
* gt_layout-expand_fieldname = 'Nombrecampo' " Nombre de campo para
*
.
" flag expand
* gt_layout-hotspot_fieldname = 'Nombrecampo'" Nombre de campo para
*
.
" click
* gt_layout-confirmation_prompt = c_marked
" Pedir confirmacin al
*
. " salir
* gt_layout-key_hotspot = c_marked.
" Campos clave para click
* gt_layout-flexible_key = c_marked
" Permitir mover campos
*
.
" clave
* gt_layout-group_buttons = c_marked.
" Botones para COL1 - COL5
* gt_layout-get_selinfos = c_marked.
" Leer selection screen
* gt_layout-group_change_edit = c_marked
" Opciones por usuario
*
. " para nuevo grupo
* gt_layout-no_scrolling = c_marked.
" no scrolling
** Pantalla de detalle de linea
* gt_layout-detail_popup = c_marked
" Pantalla detalles en
*
.
" popup
* gt_layout-detail_initial_lines = c_marked " Mostrar tambin lineas
*
. " en blanco

*
*
**
*
*
*
**
*
*
**
*
*
*
*
*
*
*
*

gt_layout-detail_titlebar = sy-title
.

" Titlebar para pantalla


" detalles

Mostrar variantes
gt_layout-header_text = '20 Char'

" Texto para el botn de


.
" cabecera
gt_layout-default_item = c_marked.
" Posiciones por defecto
Color
gt_layout-info_fieldname = 'Nombrecampo'. " Informacin de campo
gt_layout-coltab_fieldname = 'Nombrecampo'." para salida con colores
Otros
gt_layout-list_append = c_marked.
" No hacer call screen
gt_layout-xifunckey = 'Nombre query'
" Query SAP (S): Nombre de
.
" una funcin
gt_layout-xidirect = c_marked
" eXtended
.
" interaction(sapquery)
gt_layout-dtc_layout =
" Layout para configurar
" pestaas (estructura de
.
" tipo dtc_s_layo)

*ENDFORM.

" alv_layout

**&--------------------------------------------------------------------**
**&
Form user_command
**&--------------------------------------------------------------------**
**
ESTE FORM DEBE SER CREADO EN EL CODIGO DEL LISTADO CON UNA
**
ESTRUCTURA PARECIDA A ESTA:
**---------------------------------------------------------------------**
** --> p_UCOMM
COMANDO
** <-- p_CAMPO
CAMPO EXACTO DONDE SE GENERO EL COMANDO
**---------------------------------------------------------------------**
* FORM user_command USING p_ucomm LIKE sy-ucomm
"#EC CALLED
*
p_campo TYPE slis_selfield.
*
** Leemos la linea en la que se lanzo el comando
** MODIFICAR LA TABLA I_OUTPUT POR EL NOMBRE DE LA TABLA A MOSTRAR
*
READ TABLE i_output INDEX p_campo-tabindex.
** Comprobamos cual es el codigo .
*
CASE p_ucomm.
** Si se hizo doble click
*
WHEN c_click.
**Dependiendo de la
*
CASE p_campo-fieldname.
*
WHEN 'NOMBRE_CAMPO1' .
** Codigo para el campo 1
*
WHEN 'NOMBRE_CAMPO2'.
** Codigo para el campo 2
** AADIR TODOS LOS CAMPOS PARA LOS QUE SE QUIERA HACER ALGO
*
WHEN OTHERS.
*
ENDCASE.
** AADIR TODOS LOS CASOS DE COMMAND QUE EXISTA
*
WHEN OTHERS.
*
ENDCASE.
*

*
*
*
*
*

En caso de que queramos ver reflejadas las modificaciones en de la


tabla p_campo-refresh = 'X'.
En caso de que queramos finalizar el ALV
tabla p_campo-exit = 'X'.
ENDFORM.
"USER_COMMAND

*&---------------------------------------------------------------------*
*&
Form alv_recoger_layout_info
*&---------------------------------------------------------------------*
*
Es recomendable llamar a esta funcin desde el USER_COMMAND para
*
en el caso de que se actualice la lista se respeten todas las
*
condiciones
*----------------------------------------------------------------------*
FORM alv_recoger_layout_info .

*
*
*
*

CALL FUNCTION 'REUSE_ALV_GRID_LAYOUT_INFO_GET'


IMPORTING
es_layout
= gt_layout
et_fieldcat
= gt_fieldcat
et_sort
= gt_sort
et_filter
= gt_filter
es_grid_scroll
= gt_grid_scroll
es_variant
= gt_variant
et_marked_columns
= gt_marked_columns
et_filtered_entries = gt_filtered_entries
et_fieldcat_backend = gt_fieldcat_backend
es_print
= gt_print
EXCEPTIONS
no_infos
= 1
program_error
= 2
OTHERS
= 3.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

ENDFORM.

" alv_recoger_layout_info

*&---------------------------------------------------------------------*
*&
Form alv_escribir_layout_info
*&---------------------------------------------------------------------*
FORM alv_escribir_layout_info .
STATICS
STATICS
STATICS
STATICS
STATICS
STATICS

lt_filter
lt_layout
lt_sort
lt_fieldcat
lt_print
lt_grid_scroll

LIKE
LIKE
LIKE
LIKE
LIKE
LIKE

gt_filter.
gt_layout.
gt_sort.
gt_fieldcat.
gt_print.
gt_grid_scroll.

CHECK NOT gd_mostrado IS INITIAL.


IF
OR
OR
OR
OR

NOT
NOT
NOT
NOT
NOT

lt_filter[]
lt_grid_scroll
lt_sort[]
lt_layout
lt_print

=
=
=
=
=

gt_filter[]
gt_grid_scroll
gt_sort[]
gt_layout
gt_print.

CALL FUNCTION 'REUSE_ALV_GRID_LAYOUT_INFO_SET'


EXPORTING
is_layout
= gt_layout
it_fieldcat
= gt_fieldcat
it_sort
= gt_sort
it_filter
= gt_filter
is_grid_scroll = gt_grid_scroll
is_print
= gt_print.
lt_filter[]
= gt_filter[].
lt_grid_scroll = gt_grid_scroll.
lt_sort[]
= gt_sort[].
lt_layout
= gt_layout.
lt_print
= gt_print.
ENDIF.
ENDFORM.

" alv_escribir_layout_info