Tipos, variables, constantes y forms para trabajo con ALVs
************************************************************************
*
* 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 tambien 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 tambien permite añadir 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:
Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
*
* ----------------------------------------------------------------------
* CONTROL DE MODIFICACIONES
* AUTOR EMPRESA FECHA MOTIVO
* .......... ....... DD/MM/AA ................................
* .......... ....... DD/MM/AA ................................
*-----------------------------------------------------------------------
************************************************************************
************************************************************************
* Definición de tipos
************************************************************************
TYPE-POOLS: slis.
************************************************************************
* Definición de tablas del sistema
************************************************************************
************************************************************************
* Definición de constantes
************************************************************************
CONSTANTS:
c_click LIKE sy-ucomm VALUE '&IC1', " Codigo del doble click
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',
c_layout TYPE slis_formname VALUE 'LAYOUT',
c_a(1) TYPE c VALUE 'A',
c_xselp(5) TYPE c VALUE 'XSELP',
c_marked TYPE c VALUE 'X',
c_form_cabecera TYPE slis_formname VALUE 'ALV_CABECERA',
c_tipo_grande TYPE c VALUE 'H',
c_tipo_mediano TYPE c VALUE 'S',
c_tipo_pequeno TYPE c VALUE 'A',
c_tipo_alv TYPE c VALUE '1',
c_tipo_list TYPE c VALUE '2'.
************************************************************************
* Definición de variables
************************************************************************
************************************************************************
* Definición de estructuras
************************************************************************
DATA: x_structure LIKE dd02l-tabname. "SAP Table
DATA: x_header LIKE dd02l-tabname. "SAP Table
DATA: x_item LIKE dd02l-tabname. "SAP Table
DATA: gt_layout TYPE slis_layout_alv.
DATA: gt_variant LIKE disvariant.
DATA: gt_list_top_of_page TYPE slis_t_listheader.
DATA: gt_fieldcat TYPE slis_t_fieldcat_alv.
DATA: gt_fieldcat_hd LIKE LINE OF gt_fieldcat.
DATA: gt_events TYPE slis_t_event .
DATA: gt_okcodes_a_excluir TYPE slis_extab OCCURS 0 WITH HEADER LINE.
DATA: d_logo(1000) TYPE c.
DATA: d_status LIKE c_pf_status_set.
* Relacion entre los datos de cabecera y posicion
DATA: gt_key TYPE slis_keyinfo_alv.
DATA d_alv_status LIKE c_pf_status_set.
************************************************************************
* Definición de tablas internas
************************************************************************
************************************************************************
* Definición de parámetros
************************************************************************
************************************************************************
* 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 USING p_codigo.
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.
*&---------------------------------------------------------------------*
*& 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 TABLES p_output
USING p_struct
p_tipo.
DATA l_struct LIKE c_struct.
l_struct = p_struct.
* Damos forma al informe
PERFORM (c_layout) IN PROGRAM (sy-cprog).
PERFORM alv_show_report TABLES p_output
USING l_struct
p_tipo.
ENDFORM. " alv_mostrar_informe
*
*&--------------------------------------------------------------------*
*& Form alv_mostrar_informe_jerarquico
*&--------------------------------------------------------------------*
* REDEFINIR CUANDO SE USE
*---------------------------------------------------------------------*
FORM alv_mostrar_informe_jerarquico TABLES i_header
i_item
USING p_header
p_item1
p_key1
p_key2
p_key3
p_key4
p_key5.
** Define local data
* DATA: v_repid LIKE sy-repid.
* v_repid = sy-repid.
* x_header = p_header.
* x_item = p_item.
*
** Damos forma al informe
** PERFORM (c_layout) IN PROGRAM (sy-cprog).
*
** Relacion entre los campos de cabecera y los de posicion
* gt_key-header01 = p_key1.
* gt_key-item01 = p_key1.
* gt_key-header02 = p_key2.
* gt_key-item02 = p_key2.
* gt_key-header03 = p_key3.
* gt_key-item03 = p_key3.
* gt_key-header04 = p_key4.
* gt_key-item04 = p_key4.
* gt_key-header05 = p_key5.
* gt_key-item05 = p_key5.
*
* 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 =
** IT_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 = c_a
** IS_VARIANT =
* it_events = gt_events
** IT_EVENT_EXIT =
* i_tabname_header = 'I_CAB'
* i_tabname_item = 'I_POS'
* i_structure_name_header = x_header
* i_structure_name_item = x_item
* is_keyinfo = gt_key
** IS_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.
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 USING p_estructura.
REFRESH gt_fieldcat.
DATA l_estructura LIKE dd02l-tabname.
l_estructura = p_estructura.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_structure_name = l_estructura
i_client_never_display = 'X'
CHANGING
ct_fieldcat = gt_fieldcat[].
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
WHERE tabname = l_estructura
AND ddlanguage = sy-langu
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.
ENDFORM. " alv_catalogo
*&---------------------------------------------------------------------*
*& Form alv_set_status
*&---------------------------------------------------------------------*
* Inicializa el status
*----------------------------------------------------------------------*
* -->P_C_ESTRUCTURA_LISTADO text
*----------------------------------------------------------------------*
FORM alv_set_status USING p_estructura.
SET PF-STATUS d_alv_status EXCLUDING gt_okcodes_a_excluir.
ENDFORM. " alv_set_status
*&---------------------------------------------------------------------*
*& Form alv_show_report
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM alv_show_report TABLES p_output
USING p_struct LIKE c_struct
p_tipo.
* 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 i038(001) WITH 'No se mostrara la tabla porque esta vacia'.
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.
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_structure_name = x_structure
is_layout = gt_layout
i_save = c_a
it_events = gt_events
it_fieldcat = gt_fieldcat
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 = c_a
it_events = gt_events
it_fieldcat = gt_fieldcat
TABLES
t_outtab = p_output.
ENDCASE.
ENDIF.
ENDFORM. " alv_show_report
*---------------------------------------------------------------------*
* FORM ALV_ANIADIR_STATUS *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
* --> P_STATUS *
*---------------------------------------------------------------------*
FORM alv_aniadir_status USING p_status.
d_alv_status = p_status.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form alv_cabecera
*&---------------------------------------------------------------------*
* MUESTRA LA CABECERA
*----------------------------------------------------------------------*
FORM alv_cabecera.
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 USING p_nombre_evento
p_form_para_evento.
DATA: ls_event TYPE slis_alv_event.
* Rutina que controlará el status GUI
READ TABLE gt_events WITH KEY name = p_nombre_evento
INTO ls_event.
IF sy-subrc = 0.
MOVE p_form_para_evento TO ls_event-form.
MODIFY gt_events FROM ls_event TRANSPORTING form
WHERE name = p_nombre_evento.
ELSE.
MESSAGE e000(01) WITH 'Error en el form alv_rellenar_eventos.'
'No existe el evento'
p_nombre_evento
'.'.
ENDIF.
ENDFORM. " rellenar_eventos
*&---------------------------------------------------------------------*
*& Form ALV_RELLENAR_CABECERA
*&---------------------------------------------------------------------*
* Rellena una linea de la cabecera
*----------------------------------------------------------------------*
* -->P_GT_LIST_TOP_OF_PAGE text
*----------------------------------------------------------------------*
FORM alv_rellenar_cabecera USING p_texto_negrita
p_texto_normal
p_tipo.
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 USING p_logo.
d_logo = p_logo.
ENDFORM. " alv_asignar_logo
*&---------------------------------------------------------------------*
*& Form alv_events
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM alv_events.
DATA: le_event TYPE slis_alv_event.
REFRESH gt_events.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
i_list_type = 0
IMPORTING
et_events = gt_events.
ENDFORM. " alv_alv_events
**&---------------------------------------------------------------------
**
**& Form layout
**&---------------------------------------------------------------------
**
** ESTE FORM DEBE SER CREADO EN EL CODIGO DEL LISTADO CON UNA
** ESTRUCTURA PARECIDA A ESTA:
**----------------------------------------------------------------------
**
** --> p1 text
** <-- p2 text
**----------------------------------------------------------------------
**
*FORM 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
** 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 tambien lineas
* . " en blanco
* 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. " 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
* 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.
*
* 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
|