Include Zialv

21
INCLUDE ZIALV * * DESCRIPCIÓN: Tipos, variables, constantes y forms para trabajo * con ALV's * * INSTRUCCIONES: Sera obligatorio para un correcto funcionamiento de la * libreria añadir al codigo del report un form llamado USER_COMMAND * creado con la estructura del existente comentado al final de este * include. * * Además será obligatorio también añadir 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 opción menos * recomendada, en este caso el parametro P_STRUCT de * ALV_MOSTRAR_INFORME se pasará en blanco. * * Permite añadir 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_PEQUEÑO * * 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 transcción 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

Transcript of Include Zialv

Page 1: Include Zialv

INCLUDE ZIALV** DESCRIPCIÓN: Tipos, variables, constantes y forms para trabajo* con ALV's** INSTRUCCIONES: Sera obligatorio para un correcto funcionamiento de la* libreria añadir al codigo del report un form llamado USER_COMMAND* creado con la estructura del existente comentado al final de este* include.** Además será obligatorio también añadir 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 opción menos* recomendada, en este caso el parametro P_STRUCT de* ALV_MOSTRAR_INFORME se pasará en blanco.** Permite añadir 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_PEQUEÑO** 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 transcción 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 librería también permite añadir rutinas a los distintos eventos que* el programador desee asignandole al nombre del evento el nombre de una

Page 2: Include Zialv

* 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: [email protected]** ----------------------------------------------------------------------* CONTROL DE MODIFICACIONES* AUTOR EMPRESA FECHA MOTIVO* .......... ....... DD/MM/AA ................................* .......... ....... DD/MM/AA ................................*-----------------------------------------------------------------------************************************************************************

************************************************************************* Definición de tipos************************************************************************TYPE-POOLS: slis.TYPE-POOLS: icon.************************************************************************* Definición de tablas del sistema************************************************************************

Page 3: Include Zialv

************************************************************************* Definición 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 *

* Definición 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 ************************************************************************** Definición de variables************************************************************************

************************************************************************* Definición 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.

Page 4: Include Zialv

"#EC *DATA: gt_print TYPE slis_print_alv. "#EC *DATA: gt_variant TYPE disvariant. "#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 posicionDATA: 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: gt_grid_scroll TYPE lvc_s_scrl.DATA: gt_marked_columns TYPE slis_t_fieldcat_alv.DATA: gt_filtered_entries TYPE slis_t_filtered_entries.DATA: gt_fieldcat_backend TYPE 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.************************************************************************* Definición de tablas internas************************************************************************

************************************************************************* Definición de parámetros************************************************************************

Page 5: Include Zialv

************************************************************************* Definición de rango de selección************************************************************************

************************************************************************* Definición de la pantalla de selección************************************************************************

************************************************************************* Definición 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 botón 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* añadiendo 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.

Page 6: Include Zialv

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. "#EC NO_HANDLER* endtry.

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. "#EC NO_HANDLER* 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.

Page 7: Include Zialv

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.

Page 8: Include Zialv

ENDIF.

gd_mostrado = 'X'.ENDFORM. " alv_mostrar_informe_jerarquico

*&---------------------------------------------------------------------**& Form alv_catalogo*&---------------------------------------------------------------------** Inicializa el catalogo de campos gt_fieldcat[] añadiendole* 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 gt_fieldcat INTO gt_fieldcat_hd WHERE seltext_l IS INITIAL AND seltext_m IS INITIAL AND seltext_s IS INITIAL.

SELECT SINGLE ddtext INTO gt_fieldcat_hd-seltext_l FROM dd03t

Page 9: Include Zialv

WHERE tabname = l_estructura AND ddlanguage = sy-langu AND as4local = 'A' AND fieldname = 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[] añadiendole* 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

Page 10: Include Zialv

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 información 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

Page 11: Include Zialv

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

Page 12: Include Zialv

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.

Page 13: Include Zialv

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

Page 14: Include Zialv

USING p_logo. "#EC * d_logo = p_logo. "#EC *ENDFORM. " alv_asignar_logo "#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 añade el evento DATA_CHANGED que no incluye la función 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 = c_marked. " Sin cabecera de columnas* gt_layout-no_hotspot = c_marked " Las cabeceras no son* . " seleccionables* gt_layout-zebra = c_marked. " Dibuja cada linea de un color* gt_layout-no_vline = c_marked. " Las columnas mediante un espacio* gt_layout-cell_merge = c_marked. " No suprimir la réplica del campo* gt_layout-edit = c_marked. " Editable (solo modo grid)* gt_layout-edit_mode = '¿?'. " Modo de edición (solo modo grid)* gt_layout-numc_sum = c_marked " Permitir totalización en* . " campos NUMC* gt_layout-no_input = c_marked. " No permitir entrada* gt_layout-f2code = '¿?'. " ¿?* gt_layout-reprep = c_marked. " report report interface active* gt_layout-no_keyfix = c_marked. " No rellenar columnas clave* gt_layout-expand_all = c_marked. " Expandir todas las posiciones* gt_layout-no_author = c_marked. " No standard authority check* gt_layout-def_status = '20 char'. " Texto para el boton ITEM

Page 15: Include Zialv

** Opciones de visualización* 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. " Tamaño minimo de listado* gt_layout-max_linesize = 250. " Tamaño máximo 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 excepción* 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 totalización* 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** Interacción* 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 confirmación 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 también lineas* . " en blanco

Page 16: Include Zialv

* gt_layout-detail_titlebar = sy-title " Titlebar para pantalla* . " detalles** Mostrar variantes* gt_layout-header_text = '20 Char' " Texto para el botón de* . " cabecera* gt_layout-default_item = c_marked. " Posiciones por defecto** Color* gt_layout-info_fieldname = 'Nombrecampo'. " Información 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 función* gt_layout-xidirect = c_marked " eXtended* . " interaction(sapquery)* gt_layout-dtc_layout = " Layout para configurar* " pestañas (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** AÑADIR TODOS LOS CAMPOS PARA LOS QUE SE QUIERA HACER ALGO* WHEN OTHERS.* ENDCASE.** AÑADIR TODOS LOS CASOS DE COMMAND QUE EXISTA* WHEN OTHERS.* ENDCASE.*

Page 17: Include Zialv

* 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 función 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 lt_filter LIKE gt_filter. STATICS lt_layout LIKE gt_layout. STATICS lt_sort LIKE gt_sort. STATICS lt_fieldcat LIKE gt_fieldcat. STATICS lt_print LIKE gt_print. STATICS lt_grid_scroll LIKE gt_grid_scroll.

CHECK NOT gd_mostrado IS INITIAL.

IF NOT lt_filter[] = gt_filter[] OR NOT lt_grid_scroll = gt_grid_scroll OR NOT lt_sort[] = gt_sort[] OR NOT lt_layout = gt_layout OR NOT lt_print = gt_print.

Page 18: Include Zialv

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