Está en la página 1de 42

Traducido del inglés al español - www.onlinedoctranslator.

com

Un
Referencia facil
por
CONTROL DE RED ALV

Serdar ŞİMŞEKLER
2004, Ankara TURQUÍA
© Copyright 2003 SAP AG. Reservados todos los derechos.

Ninguna parte de esta publicación puede reproducirse o transmitirse de ninguna forma ni para
ningún propósito sin el permiso expreso de SAP AG. La información aquí contenida puede
cambiar sin previo aviso.

Algunos productos de software comercializados por SAP AG y sus distribuidores contienen componentes
de software patentados de otros proveedores de software.

Microsoft®, WINDOWS®, NT®, EXCEL®, Word®, PowerPoint® y SQL Server® son marcas
comerciales registradas de Microsoft Corporation.

IBM®, DB2®, DB2 Universal Database, OS / 2®, Parallel Sysplex®, MVS / ESA, AIX®, S /
390®, AS / 400®, OS / 390®, OS / 400®, iSeries, pSeries, xSeries, zSeries, z / OS, AFP,
Intelligent Miner, WebSphere®, Netfinity®, Tivoli®, Informix e Informix® Dynamic
ServerTM son marcas comerciales de IBM Corporation en EE. UU. y / o en otros países.

ORACLE® es una marca registrada de ORACLE Corporation.

UNIX®, X / Open®, OSF / 1® y Motif® son marcas comerciales registradas de Open Group.

Citrix®, el logotipo de Citrix, ICA®, Program Neighborhood®, MetaFrame®, WinFrame®,


VideoFrame®, MultiWin® y otros
Los nombres de productos Citrix a los que se hace referencia en este documento son marcas comerciales de Citrix Systems, Inc.

HTML, DHTML, XML, XHTML son marcas comerciales o marcas comerciales registradas de W3C®,
World Wide Web Consortium, Massachusetts Institute of Technology.

JAVA® es una marca registrada de Sun Microsystems, Inc.

JAVASCRIPT® es una marca registrada de Sun Microsystems, Inc., utilizada bajo licencia para
tecnología inventada e implementada por Netscape.

MarketSet y Enterprise Buyer son marcas comerciales de propiedad conjunta de SAP AG y Commerce
One.

SAP, el logotipo de SAP, R / 2, R / 3, mySAP, mySAP.com, xApps, SAP NetWeaver, mySAP Business Suite y
otros productos y servicios de SAP mencionados en este documento, así como sus respectivos
logotipos, son marcas comerciales o marcas comerciales registradas de SAP AG. en Alemania y en
varios otros países de todo el mundo. Todos los demás nombres de productos y servicios mencionados
son marcas comerciales de sus respectivas empresas.
Tabla de contenido

Objetivo................................................. .................................................. ....................... 1


Requisitos previos ................................................. .................................................. .............. 1
A. Introducción............................................... .................................................. ............ 1
B. Bloques de construcción .............................................. .................................................. ........ 1
B.1. Esquema general ................................................ .................................................. 2
B.2. Catálogo de campo de construcción ............................................... ........................................ 7
B.2.1. Estructura de un catálogo de campo ............................................. ........................... 7
B.2.2. Creación manual del catálogo de campos .............................................. ................. 9
B.2.3. Creación de un catálogo de campo de forma semiautomática ............................................ 10
B.3. Ajustes de diseño ................................................ ......................................... 12
B.4. Ajustes de impresión ................................................ ........................................ 14
B.5. Exclusión de botones de función estándar no deseados ........................................... 15
C.Funcionalidades adicionales no basadas en eventos .......................................... ........... dieciséis
C.1. Cambiar el catálogo de campo o el diseño después de la primera visualización ..................................... 16
C.2. Configuración de las condiciones de clasificación ............................................... .....................................dieciséis
C.3. Filtrado ................................................. .................................................. ......... 17
C.4. Haciendo selecciones ................................................ ............................................ 18
C.5. Recuperación y configuración de la información de estado de desplazamiento ............................................ ............. 19
C.6. Colorante................................................. .................................................. ......... 19
C.6.1. Colorear una columna entera .............................................. ......................... 20
C.6.2. Colorear una fila completa .............................................. ............................... 20
C.6.3. Colorear celdas individuales ............................................... ........................... 21
C.7. Insertar hipervínculos ................................................ ......................................... 22
C.8. Hacer campos como menús desplegables ............................................. ................... 23
C.9. Gestión de variantes ................................................ ............................................ 24
D. Funcionalidades adicionales basadas en eventos ............................................ .................. 25
D.1. Esquema general para la clase de controlador de eventos ........................................... ....... 26
D.2. Hacer clic en Hotspot ................................................ .............................................. 28
D.3. Doble clic ................................................ ............................................... 29
D.4. Botones pulsadores en la lista .............................................. .................................... 29
D.5. Adición de sus propias funciones .............................................. ............................. 30
D.6. Funciones estándar anuladas ............................................... ......................... 32
D.7. Menús contextuales ................................................ ................................................. 32
D.8. Acerca de la impresión ................................................ .................................................. 33
D.9. Haciendo editable la cuadrícula ALV .............................................. ............................... 34
D.10. Control de cambios de datos ............................................... ............................... 35
D.11. Vinculación de la ayuda F1 a los campos ............................................. ................................. 36
D.12. Vinculación de la ayuda de F4 a los campos ............................................. ................................. 37
E. Una pieza de resolución de problemas ............................................ ....................................... 38
MARCAS COMERCIALES ................................................. ......... ¡Error! Marcador no definido.
Objetivo

El propósito de este tutorial es proporcionar una referencia fácil y rápida que puede
usarse como guía mientras se codifica para construir listas usando ALV Grid Control. En realidad,
hay información de fácil acceso sobre la implementación de listas de cuadrícula ALV. Sin embargo,
generalmente se requiere encontrar la información buscada de una manera más rápida. Este
tutorial maneja esto, siendo una fuente condensada que puede usarse como una "guía". No se
ocupará de la infraestructura técnica sobre la que descansa ALV. Algunas de las tablas se han
extraído de la biblioteca SAP en línea, que es la fuente más confiable sobre el tema. En breve, este
será un folleto que resume las principales capacidades del ALV Grid Control.

Para profundizar en el control de la red ALV, puede consultar el curso estándar de SAP " BC412
- Programación de cuadros de diálogo ABAP con controles EnjoySAP "Y el libro" Tecnología de controles
”. También es mejor que inspeccione los programas de demostración.

Prerrequisitos
Para utilizar ALV Grid Control de forma sencilla, será suficiente tener experiencia en la
programación de diálogos. Sin embargo, para hacer uso de más capacidades, se requieren
algunos conocimientos sobre la perspectiva orientada a objetos de la programación ABAP. Se
supone que existe un conocimiento general sobre el marco de control.

A. Introducción
Aquí está la definición de ALV de la Ayuda de SAP:
“El control ALV Grid es una herramienta flexible para mostrar listas. La herramienta proporciona
operaciones de lista comunes como funciones genéricas y se puede mejorar con opciones
autodefinidas ".
El control ALV Grid se utiliza para crear listas no jerárquicas, interactivas y de
diseño moderno. Como control, es un componente que se instala en la PC local.
El control ALV Grid proporciona funciones de lista típicas como ordenar, filtrar, sumar,
etc., mientras que también brinda la oportunidad de desarrollar funciones de usuario donde sea
necesario. Presenta numerosas interfaces como Excel Inplace y Crystal Reports.
La clase contenedora implementada para encapsular la funcionalidad de ALV
Grid es " CL_GUI_ALV_GRID ”. Hay otra forma de mostrar listas con ALV utilizando las
funciones "REUSE_ALV ...". Sin embargo, esa forma no se incluye en este tutorial.

B. Bloques de construcción
Mientras preparamos una lista para que se muestre a través de un control de cuadrícula ALV, tenemos algunos
componentes básicos para preparar. Estos son;
I. Listar datos: Obviamente, estos son los datos de una tabla interna que se listarán. Las funciones
estándar de ALV, excepto la clasificación, solo permiten el acceso de lectura a los datos de la lista. Sin
embargo, la clasificación cambia el estado de la tabla interna. La tabla interna que contiene los datos
de la lista puede ser de cualquier tipo plano. Los tipos profundos solo se permiten cuando se
configuran para algunas funcionalidades de ALV Grid.
ii. Catálogo de campos: utilizamos otra tabla interna para definir especificaciones sobre
cómo se mostrarán los campos de nuestra lista. Esta tabla interna se llama
“Catálogo de campo”. El catálogo de campo debe incluir información técnica y
adicional sobre las opciones de visualización para cada columna que se
mostrará. Hay tres procedimientos para generar el catálogo de campos como
“Generación automática”, “Generación semiautomática” y “Generación
manual”. La tabla interna del catálogo de campos debe estar referenciada al
tipo de diccionario " LVC_T_FCAT ”.
iii. Estructura de diseño: llenamos una estructura para especificar opciones de diseño generales para
la cuadrícula. Con esta estructura podemos establecer opciones generales de visualización,
personalización de cuadrículas, opciones de totales, ajustes de color, etc. La estructura de
diseño debe ser del tipo “ LVC_S_LAYO ”.
iv. Controlador de eventos: Debemos definir e implementar una clase de controlador de eventos si
queremos manejar eventos desencadenados por la instancia de ALV Grid. Después de crear la
instancia de ALV Grid, debemos registrar una instancia de esta clase de controlador de eventos
para manejar los eventos de ALV Grid.
v. Datos adicionales: para activar algunas características adicionales de ALV Grid, podemos
tener algunos datos adicionales para pasar como parámetros. Por ejemplo, criterios de
ordenación inicial, botones a desactivar, etc ...

B.1. Esquema general


Ahora, podemos descubrir un esquema primitivo para preparar nuestra cuadrícula
ALV. Como objeto de control, la instancia de ALV Grid requiere que un contenedor esté
vinculado a la pantalla. Generalmente, una instancia de la clase " cl_gui_custom_container ”Se
utiliza para este propósito. Instancias de algunas otras clases de contenedores como
" cl_gui_docking_container "," cl_gui_dialogbox_container " tambien puede ser
usó. En nuestro ejemplo, tomamos un contenedor personalizado. Para crear una instancia de contenedor
personalizada, necesitamos un área de control personalizada en la pantalla.

Paso 1 Agregue un control personalizado en la pantalla que estará relacionado con el


contenedor personalizado. Démosle el nombre ' CC_ALV '.
Paso 2 Declare las variables globales que se utilizarán para ALV Grid.

* - - Definiciones de datos globales para ALV

* - - - Referencia de instancia de ALV Grid


DATOS gr_alvgrid TIPO REF TO cl_gui_alv_grid.
* - - - Nombre del control personalizado agregado en la pantalla
DATOS gc_custom_control_name TYPE scrfname VALUE 'CC_ALV'.
* - - - Referencia de instancia de contenedor personalizada
DATOS gr_ccontainer TIPO REF TO cl_gui_custom_container.
* - - - Tabla de catálogo de campo
DATOS gt_fieldcat TIPO lvc_t_fcat.
* - - - Estructura de diseño
DATOS gs_layout TYPE lvc_s_layo.

Parte del código 1 - Definiciones de datos globales para ALV

Paso 3 Declare su tabla interna que se supone que contiene los datos de la lista.
Vamos a llamarlo "gt_list". Aquí hay una declaración de ejemplo.
* - - - Tabla interna que contiene datos de la lista
DATOS COMIENZO DE gt_list OCURRE 0.
INCLUYE ESTRUCTURA SFLIGHT.
* - - En secciones posteriores, se agregarán algunos campos adicionales aquí
* - - para algunas funciones
FIN DE DATOS DE gt_list.

Parte del código 2 - Declaración de la tabla interna que contendrá los datos de la lista

Paso 4 En algún lugar de su programa antes de que aparezca la lista de llamadas, complete su
enumere los datos que desee. Aquí, no es de nuestra incumbencia cuáles son los datos. Suponemos
que la tabla interna se llena razonablemente. Usaremos los datos de la tabla. VUELO como nuestra lista
datos.

Paso 5 Llame a la pantalla que comprende el control ALV Grid. En PBO de


En esta pantalla nos ocuparemos de la creación de la instancia de ALV Grid.

* - - PBO
PROCESO ANTES DE LA SALIDA.
...

MÓDULO display_alv.
...

Parte del código 3 - PBO de la lógica de flujo para la pantalla que contiene ALV Grid control

...
MÓDULO display_alv SALIDA.
REALIZAR display_alv.
ENDMODULE.

Parte del código 4 - Dentro del módulo

Paso 6 Ahora es hora de que escribamos algo para jugar. Entonces, esta pieza
será el que nos ocuparemos principalmente. Lo que hacemos es comprobar si existe una
instancia del contenedor (o ALV Grid). Si existe, actualizándolo, y si no, creando y
configurando ALV para la primera pantalla.

FORM display_alv.
SI gr_alvgrid ES INICIAL.
* - - - - Creando una instancia de contenedor personalizada
CREAR OBJETO gr_ccontainer
EXPORTADOR
container_name = gc_custom_control_name
Excepciones
cntl_error = 1
cntl_system_error = 2
create_error = 3
Lifetime_error = 4
life_dynpro_dynpro_link = 5 otros = 6.

SI sy-subrc <> 0.
* - - Manejo de excepciones
TERMINARA SI.
* - - - - Creando instancia ALV Grid
CREAR OBJETO gr_alvgrid
EXPORTADOR
i_parent = gr_ccontainer
Excepciones
error_cntl_create = 1
error_cntl_init = 2
error_cntl_link = 3
error_dp_create = 4
otros = 5.
SI sy-subrc <> 0.
* - - Manejo de excepciones
TERMINARA SI.

* - - - - Preparando catálogo de campo.


REALIZAR prepare_field_catalog CAMBIANDO gt_fieldcat.

* - - - - Preparación de la estructura del diseño


REALIZAR prepare_layout CAMBIANDO gs_layout.

* - - - - Aquí habrá preparativos adicionales


* - - por ejemplo, criterios de clasificación iniciales, criterios de filtrado iniciales, excluyendo
* - - funciones

MÉTODO DE LLAMADA gr_alvgrid-> set_table_for_first_display


EXPORTADOR
* I_BUFFER_ACTIVE =
* I_CONSISTENCY_CHECK =
* I_STRUCTURE_NAME =
* IS_VARIANT =
* I_SAVE =
* I_DEFAULT = 'X'
is_layout = gs_layout
* IS_PRINT =
* IT_SPECIAL_GROUPS =
* IT_TOOLBAR_EXCLUDING =
* IT_HYPERLINK =
CAMBIANDO
it_outtab = gt_list []
it_fieldcatalog = gt_fieldcat
* IT_SORT =
* IT_FILTER =
Excepciones
combinación_parámetros_inálidos = 1
error_programa =2
too_many_lines = 3
OTROS = 4.
SI sy-subrc <> 0.
* - - Manejo de excepciones
TERMINARA SI.

DEMÁS .
MÉTODO DE LLAMADA gr_alvgrid-> refresh_table_display
* EXPORTACION
* ES_ESTABLE =
* I_SOFT_REFRESH =
Excepciones
finalizado =1
OTROS = 2.
SI sy-subrc <> 0.
* - - Manejo de excepciones
TERMINARA SI.

TERMINARA SI .

ENDFORM.
Parte del código 5 - Formulario de verificación de la existencia de la instancia, creación de la instancia, configuración para la primera visualización y actualización
De los objetos ABAP, estamos familiarizados con " CREAR OBJETO ”Declaración que
instancia clases. En este fragmento de código, usamos dos métodos de instancia de
" cl_gui_alv_grid ”. Primero es " set_table_for_first_display " cuyo nombre
implica para lo que se usa. Después de crear la instancia de ALV Grid, llamamos a este método para que se
muestre nuestra lista. Pasamos tabla de datos de lista, tabla de catálogo de campo, estructura de diseño e
información adicional. Aquí están las definiciones de parámetros tomadas de la biblioteca SAP.

Parámetro Sentido

I_BUFFER_ACTIVE Indicador que debe establecer la aplicación si la llamada al método es estática.


Esto significa que el método siempre se llama con el mismo catálogo de campos.
En este caso, el catálogo de campo se puede guardar en un búfer especial. Esto
acelera la visualización de listas pequeñas, en particular.

I_STRUCTURE_NAME Nombre de la estructura DDIC (por ejemplo, 'SFLIGHT') para los datos en
la tabla de salida. Si especifica este parámetro, el catálogo de campos se
genera automáticamente.

IS_VARIANT Determina el diseño que se utilizará para mostrar la tabla de salida.


Si usa este parámetro, al menos debe completar el campo
REPORTE de la estructura de tipo DESVARIANTE.

YO LO GUARDE Determina las opciones disponibles para el usuario para guardar un


diseño:
• 'X': solo ahorro global
• 'U': el ahorro específico del usuario
• 'A': solo corresponde a 'X' y 'U'
• ESPACIO: sin guardar

I_DEFAULT Este parámetro determina si el usuario puede definir diseños


predeterminados:
• 'X': diseños predeterminados permitidos (configuración predeterminada)

• ESPACIO: diseños predeterminados no permitidos


Si se permiten los diseños predeterminados y si tal diseño existe y
no se especifica ningún otro diseño en ES_VARIANTE, el diseño predeterminado se
carga automáticamente cuando se llama a este método.

IS_LAYOUT Determina las propiedades del control de cuadrícula. La estructura de diseño tiene
nada que ver con el diseño para guardar las propiedades de filtro, clasificación y
columna.

IS_PRINT Parámetro para imprimir en el backend

IT_SPECIAL_GROUPS Si en el catálogo de campo las columnas se agruparon junto con


campo SP_GROUP, debes pasar una mesa con textos para estos
grupos. En la ventana de diseño actual, es posible utilizar un cuadro
de lista para restringir la selección de columnas a uno de estos
grupos.

IT_TOOLBAR_EXCLUDING Esta tabla contiene los códigos de función de la barra de herramientas que
desea ocultar durante la vida útil del control de cuadrícula ALV. La función
Los códigos son atributos constantes y tienen el prefijo MC_FC_.

IT_HYPERLINK Esta tabla asigna una dirección de hipervínculo (campo HREF de


LVC_S_HYPE). Con este identificador, puede incluir
hipervínculos en la cuadrícula.

IT_ALV_GRAPHICS Configuración para mostrar la lista ALV como un diagrama (por ejemplo,
etiquetas de eje). El tipo de fila de la tabla tiene dos campos (variables / pares
de valores):

• PROP_ID: Como n
conUprefijo
CL_ALV_GRA s PAG I H gramo IC a S co C norte CO_PROPID_
atributo permanente para
de la clase

este campo para determinar los cambios a realizar en el g

C r L a_p A h L ic V._ U GRAMO s R mi A t PAG h H mi ICS_CU => CO_PROPID_TITLE

atributo, por ejemplo, para hacer referencia al título del


diagrama.
• PROP_VAL: El valor del tema relevante, por
ejemplo, "Mi título".

IT_OUTTAB Tabla de salida con los datos que se mostrarán

IT_FIELDCATALOG Determina la estructura de la tabla de salida y el formato de los


datos que se mostrarán.

IT_SORT Tabla con propiedades de ordenación para las columnas que se ordenarán
inicialmente

IT_FILTER Tabla con propiedades de filtro para columnas para las que se debe establecer un
filtro inicialmente

los segundo método nosotros usó en nuestro código retazo era


" refresh_table_display ”Que, como se indica de nuevo en el nombre, se utiliza para actualizar la
pantalla ALV. No queremos que se cree nuestra cuadrícula ALV cada vez que se dispara el PBO. La
primera pasada debería crearlo y otras deberían simplemente actualizarse. Sin embargo, es
posible que necesitemos algunos cambios sobre la apariencia, el diseño, el catálogo de campo,
etc. En ese caso, intentaremos utilizar otros métodos ALV para realizar cambios. La tabla de
definición de parámetros de este método es la siguiente.

Parámetro Sentido

ES ESTABLE Si se establece el campo de fila o columna de esta estructura, la posición de la


barra de desplazamiento para las filas o columnas permanece estable.

I_SOFT_REFRESH Este parámetro se utiliza solo en casos excepcionales. Si establece este


parámetro, los totales creados, cualquier orden de clasificación definido y los
filtros establecidos para los datos mostrados permanecen sin cambios
cuando se actualiza el control de cuadrícula. Esto tiene sentido, por ejemplo,
si no ha modificado los datos de la tabla de datos y desea actualizar el control
de cuadrícula solo con respecto al diseño o los cambios del catálogo de
campos.

¡OK! Al ver una imagen simple pero completa, ahora estamos listos para avanzar para construir
nuestros componentes básicos que solo señalamos como llamadas de forma en el esquema.
B.2. Catálogo de campo de construcción
Como se mencionó anteriormente, existen tres procedimientos para construir un catálogo de
campo. La forma más sencilla se aplica si nuestra estructura de lista es similar a una tabla de diccionario. Para
hacer esto, simplemente eliminamos la llamada al formulario y pasamos el nombre de la estructura del
diccionario (en nuestro ejemplo, ' VUELO ') al parámetro' I_STRUCTURE_NAME '. Antes de explicar otros
procedimientos, veamos qué tiene un catálogo de campo en su estructura.

B.2.1. Estructura de un catálogo de campo


La estructura de filas de un catálogo de campos es de tipo diccionario ' LVC_S_FCAT '. Hay muchos
campos que proporcionan ajustes de opciones de visualización para nuestras columnas de lista. Aquí están
los básicos.

Utilice este campo para asignar un nombre de campo de su tabla de salida a una fila
NOMBRE DEL CAMPO del catálogo de campos. Todos los ajustes que realice en esta fila se refieren a la
columna correspondiente de la tabla de salida.
Debe completar este campo si:

• el campo de la tabla de salida descrito por la entrada actual en el catálogo


de campos tiene un campo correspondiente en el Diccionario de datos y

REF_FIELD
• el nombre del campo en la tabla de salida no es idéntico al nombre del
campo del campo en el Diccionario de datos.
Si los nombres de los campos son idénticos, es suficiente especificar la estructura
DDIC o la tabla en el campo. REF_TABLE del catálogo de campo.
Debe completar este campo solo si el campo de la tabla de salida descrito por la
entrada actual en el catálogo de campos tiene una entrada correspondiente en el
REF_TABLE
Diccionario de datos. Con esta asignación, ALV Grid Control puede copiar el texto del
encabezado de columna del Diccionario, por ejemplo. Salida de una casilla de
CAJA verificación. El usuario no puede modificar la casilla de verificación. Relevante solo si las
posiciones relativas de las columnas no deben ser idénticas a la secuencia de campos
en el catálogo de campos cuando la lista se muestra por primera vez. El parámetro
determina la posición relativa de la columna del campo para la salida de la lista. El
COL_POS usuario puede modificar de forma interactiva el orden de las columnas. Si este
parámetro es inicial para cada entrada de catálogo de campos, el orden de las
columnas corresponde a la secuencia de campos en el catálogo de campos.

Si este campo está configurado, el ALV usa este campo para calcular el total (esto corresponde
DO_SUM
a la función de totales genéricos en la barra de herramientas).
Si el campo se establece en 'X', el ALV usa un color predefinido para
resaltar la columna. Si se establece en 'Cxyz' (código de color), los
números restantes tienen el siguiente significado:
ENFATIZAR
• x: número de color
• y: visualización intensificada activada / desactivada

• z: visualización inversa activada / desactivada

Si se establece este campo, todas las celdas de esta columna son sensibles al hotspot.
HOTSPOT

Identificador al que se asigna una URL. El control de cuadrícula ALV muestra


todas las celdas de la columna como hipervínculos. Debe mantener la dirección
HREF_HNDL de destino del hipervínculo en una tabla de tipo LVC_T_HYPE y pásalo
utilizando set_table_for_first_display.

LLAVE Si se establece este campo, el control de cuadrícula ALV codifica con colores la columna como
campo clave y corrige esta columna durante el desplazamiento horizontal. El
orden de las columnas clave en el control de cuadrícula ALV se puede modificar de
forma interactiva. A diferencia del visor de listas de SAP, el control de cuadrícula
ALV le permite ocultar directamente las columnas clave con SIN SALIDA
Si se establece este campo, ALV Grid Control reconoce mayúsculas / minúsculas en la
LOWERCASE
tabla de salida. Esto afecta a la clasificación de campos, por ejemplo. Si configura este
campo, oculta la columna relevante en la lista. Sin embargo, la columna está disponible
en la selección de campo y el usuario puede seleccionarla interactivamente como un
SIN SALIDA campo de visualización. El ALV muestra el contenido de los campos ocultos en la
pantalla de detalles de una fila en el control de cuadrícula.

Si se establece este campo, las celdas con el mismo valor no se fusionan en una
NO_FUSIÓN
sola celda cuando se ordena esta columna.
NO_SUM Si establece este campo, bloquea el cálculo de totales para el campo relevante.
Determina el ancho de columna del campo:

• Si el campo tiene una referencia al Diccionario de datos, puede


dejar el campo establecido en su valor inicial. En este caso, el ALV
SALIDA
adopta la longitud de salida del dominio relevante.
• Para los campos sin referencia a la DDIC, debe especificar la longitud
de salida del campo deseada.

Muestra todas las celdas de esta columna con un estilo, por ejemplo, como
ESTILO botones. Constantes "MC_STYLE ..." de la clase " cl_gui_alv_grid ”Se puede pasar a
este campo.
Si se establece este campo, el campo relevante no se muestra en la lista y no se
TECNOLOGÍA puede mostrar de forma interactiva. El campo solo se conoce en el catálogo de
campos. (Por ejemplo, no debe especificarse como criterio de clasificación). Si un
campo no tiene moneda, puede usar este campo para determinar el número de
decimales que se mostrarán. Esta configuración se mantiene incluso si luego
DECIMALS_O
asigna un campo de moneda a este campo o asigna una moneda al DIVISA
campo del catálogo de campo.
Definición de los dígitos después de la coma fila por fila. Puede utilizar un
DECMFIELD campo adicional en la tabla de salida para determinar cuántos dígitos se
mostrarán después de la coma en cada fila. Si establece una salida de
conversión (por ejemplo, conv = '== ALFA ' por
EDIT_MASK módulo de función CONVERSION_EXIT_ALPHA_OUTPUT), usted
hacer cumplir la conversión de salida para el campo de salida asociado.
Si se establece este campo, el contenido de la columna de la tabla de salida se genera como
un icono. El contenido de la columna debe consistir en cadenas de iconos válidas (
@ xx @ o @ xx \ Q < Información rápida> @). Debería considerar el problema de
ICONO
imprimir iconos.

Relevante solo para campos de tipo de datos CARBONIZARSE o NUMC.


Justificaciones:
• 'R': justificado a la derecha

• 'L': justificado a la izquierda


SOLO
• 'C': centrado
La forma en que se justifica el encabezado de la columna depende de cómo se justifique el
contenido de la columna. No puede justificar el encabezado de la columna por separado.

LZERO Relevante solo para campos de tipo de datos NUMC. En la configuración predeterminada, el
ALV Grid Control muestra estos campos justificados a la derecha sin ceros a la
izquierda. Si pones LZERO, se muestran ceros a la izquierda. Relevante solo
para los campos de valor. Si pones NO SEÑAL, los valores se muestran sin
NO SEÑAL
signos.
Si NO_ZERO está configurado, no se muestran ceros para los campos de valor inicial. La
NO_ZERO
celda permanece vacía.
Relevante solo para campos con referencia al Diccionario de datos. Utiliza los
valores 'L', 'M', 'S' o 'R' para determinar si SCRTEXT_L,
COLDDICTXT
SCRTEXT_M, SCRTEXT_S o REPTEXT se usa como columna
encabezamiento.

Determina el encabezado de columna de la columna. Debe asignar un valor a este


COLTEXT
campo si no tiene una referencia de diccionario de datos. Relevante solo para
campos con referencia al Diccionario de datos. Para tales campos, el control de
REPTEXT cuadrícula ALV copia la etiqueta del campo para el encabezado del elemento de
datos correspondiente en este campo.
Relevante solo para campos con referencia al Diccionario de datos. Para tales
SCRTEXT_L campos, ALV Grid Control copia el largo etiqueta de campo del elemento de
datos correspondiente en este campo.
Relevante solo para campos con referencia al Diccionario de datos. Para tales
SCRTEXT_M campos, ALV Grid Control copia el medio etiqueta de campo del elemento de
datos correspondiente en este campo.
Relevante solo para campos con referencia al Diccionario de datos. Para tales
SCRTEXT_S campos, ALV Grid Control copia el pequeño etiqueta de campo del elemento de
datos correspondiente en este campo.
Relevante solo para campos con referencia al Diccionario de datos. Utiliza los
valores 'L', 'M', 'S' o 'R' para determinar si SCRTEXT_L,
SELDDICTXT
SCRTEXT_M, SCRTEXT_S o REPTEXT se utiliza como texto para
selección de columna.
Determina el texto que se utilizará en la selección de columna para la
SELTEXT columna. Debe asignar un valor a este campo si no tiene una referencia de
diccionario de datos.
Relevante solo para campos con referencia al Diccionario de datos.
Utiliza los valores 'L', 'M', 'S' o 'R' para determinar si SCRTEXT_L,
TIPDDICTXT
SCRTEXT_M, SCRTEXT_S o REPTEXT se utiliza como punta de
herramienta.
Determina el texto que se utilizará como información sobre herramientas para la
PUNTA DE HERRAMIENTA columna. Debe asignar un valor a este campo si no tiene una referencia de diccionario
de datos.
INTTYPE Tipo de datos ABAP
Utiliza la clave de grupo (char (4)) para agrupar varios campos. En el cuadro
SP_GROUP de diálogo para definir un diseño, el usuario puede limitar la lista de
columnas ocultas a este grupo.

B.2.2. Creación manual del catálogo de campos

El trabajo en este procedimiento es simplemente llenar la tabla interna para el catálogo de


campo. Hemos visto la estructura de un catálogo de campo arriba. Para lograr llenar correctamente el
catálogo de campos, se debe llenar al menos los siguientes campos de la estructura del catálogo de
campos para cada columna de la lista:
Campos de la tabla de salida con Campos de la tabla de salida sin Explicación
Referencia DDIC Referencia DDIC

NOMBRE DEL CAMPO NOMBRE DEL CAMPO Nombre del campo de la


tabla de salida interna

REF_TABLE Nombre de la estructura de


referencia DDIC

REF_FIELD Nombre del campo de referencia


DDIC (solo es necesario si se
que NOMBRE DEL CAMPO )

INTTYPE Tipo de datos ABAP del campo


de la tabla de salida interna

SALIDA Ancho de columna

COLTEXT Encabezado de la columna

SELTEXT Descripción de la columna en


selección de columna para el diseño

FORMATO prepare_field_catalog CAMBIANDO pt_fieldcat TIPO lvc_t_fcat. DATOS ls_fcat

tipo lvc_s_fcat.

ls_fcat-fieldname = 'CARRID'. ls_fcat-


inttype = 'C'.
ls_fcat-outputlen = '3'. ls_fcat-coltext = 'ID de
operador'.
ls_fcat-seltext = 'ID de operador'.
APÉNDICE ls_fcat a pt_fieldcat.

BORRAR ls_fcat.
ls_fcat-fieldname = 'CONNID'. ls_fcat-ref_table =
'VUELO'. ls_fcat-ref_table = 'CONNID'. ls_fcat-
outputlen = '3'. ls_fcat-coltext = 'ID de conexión'.

ls_fcat-seltext = 'ID de conexión'.


APÉNDICE ls_fcat a pt_fieldcat.

ENDFORM.

Parte del código 6 - Preparar el catálogo de campo manualmente

B.2.3. Creación de un catálogo de campo de forma semiautomática


Es un trabajo aburrido llenar y agregar filas para todas las columnas de nuestra lista. Y no es
flexible proceder con la generación automática del catálogo de campo. Afortunadamente, existe un
término medio como generar el catálogo de campo de forma semiautomática.
Este procedimiento requiere un módulo de función para llamar. Pasamos el nombre de la estructura
para que sea la plantilla y el módulo de funciones genera un catálogo de campos para nosotros. Después de
obtener el catálogo de campos generado, lo ejecutamos y cambiamos lo que queramos.
El nombre del módulo de funciones es " LVC_FIELDCATALOG_MERGE ”. A continuación se muestra un ejemplo de
codificación para ilustrar el procedimiento de generación de catálogo de campo semiautomático.

FORMATO prepare_field_catalog CAMBIANDO pt_fieldcat TIPO lvc_t_fcat. DATOS ls_fcat

tipo lvc_s_fcat.

FUNCIÓN DE LLAMADA 'LVC_FIELDCATALOG_MERGE'


EXPORTADOR
i_structure_name = 'SFLIGHT'
CAMBIANDO
ct_fieldcat = pt_fieldcat []
Excepciones
interfaz_inconsistente = 1
error_programa = 2
OTROS = 3.
SI sy-subrc <> 0.
* - - Manejo de excepciones
TERMINARA SI.

BUCLE EN pt_fieldcat EN ls_fcat.

CASE pt_fieldcat-fieldname.
CUANDO 'CARRID'.
ls_fcat-outpulen = '10'. ls_fcat-coltext = 'ID de la
compañía aérea'. MODIFICAR pt_fieldcat DESDE ls_fcat.
CUANDO 'PAYMENTSUM'.

ls_fcat-no_out = 'X'.
MODIFICAR pt_fieldcat DESDE ls_fcat.
ENDCASE.

ENDLOOP.

ENDFORM.

Parte del código 7 - Preparación del catálogo de campo de forma semiautomática

En el código de muestra anterior, en primer lugar se genera un catálogo de campos. Se rellena


con respecto a <structure_name> (por ejemplo, ' VUELO '). Después de completar, hemos cambiado la
longitud de salida y el texto de la columna de una columna (aquí ' CARRID ') y hacer otra columna ('
PAGOSUM ') no se mostrará.
Ahora que, puedo escuchar la pregunta "¿Qué pasaría si ambos paso un
nombre de estructura al parámetro" I_STRUCTURE_NAME 'y una tabla para el
parámetro' IT_FIELDCATALOG '? ”. Por supuesto, el método da prioridad a uno y es el
nombre de la estructura que se pasa al parámetro ' I_STRUCTURE_NAME 'que tiene la
prioridad.
Más sobre lo que puede hacer con el catálogo de campo se discutirá en las secciones
de "Funcionalidades adicionales".
B.3. Ajustes de diseño
Viene ahora pintando nuestra Grilla ALV en un aspecto general. Para definir la apariencia
general de nuestra cuadrícula ALV, llenamos una estructura de tipo “ LVC_S_LAYO ”. Aquí está la
tabla que contiene los campos y sus funcionalidades atendidas por este ajuste.

Nombre del campo Descripción Rango de valores

CWIDTH_OPT Si se establece este campo, ALV Grid Control optimiza el ESPACIO, 'X'
ancho de la columna. Luego puedes ver la columna
encabezado y el contenido de las celdas de esta columna.

PEQUEÑO Si se establece este campo, el tamaño del título en el control de cuadrícula se ESPACIO, 'X'
establece en el tamaño de fuente del encabezado de la columna.

GRID_TITLE Título entre el control de cuadrícula y la barra de herramientas Cadena de caracteres de máx.

NO_HEADERS Si se establece este campo, los encabezados de columna están ocultos. 70 ESPACIO, 'X'

NO_HGRIDLN Si se establece este campo, las columnas se muestran sin líneas de ESPACIO, 'X'
cuadrícula horizontales.

NO_FUSIÓN Si se establece este campo, las celdas no se fusionan cuando se ESPACIO, 'X'
ordena una columna.

NO_ROWMARK Si se establece este campo, el botón al principio de una ESPACIO, 'X'


fila se oculta en los modos de selección selección de
celda (SEL_MODE = 'D') y selección de columna / fila
(SEL_MODE = 'A').

NO_TOOLBAR Si se establece este campo, la barra de herramientas está oculta. ESPACIO, 'X'

NO_VGRIDLN Si se establece este campo, las columnas se muestran sin líneas de ESPACIO, 'X'
cuadrícula verticales.

SEL_MODE Configure el modo de selección (consulte la tabla en C.4.). ESPACIO, 'A', 'B', 'C', 'D'

EXCP_CONDS Si se establece este campo, el ALV también muestra una ESPACIO, 'X'
excepción en la línea de (sub) totales. Como color para esta
excepción, el ALV usa el valor de excepción más pequeño
('1': rojo, '2': amarillo, '3' verde) de las filas a las que se
refiere el (sub) total.

EXCP_FNAME Nombre de campo de la tabla de salida para mostrar una Cadena de caracteres de máx. 30
excepción

EXCP_LED La excepción no se muestra como un semáforo, sino ESPACIO, 'X'


como un LED.

EXCP_ROLLN Nombre de un elemento de datos. A continuación, se solicita la ayuda F1 Cadena de caracteres de máx. 30
para este elemento de datos para la columna de excepción. Además, la
etiqueta de campo largo del elemento se muestra como información
sobre herramientas para esta columna.

CTAB_FNAME Nombre de campo en la tabla de salida para colorear celdas Cadena de caracteres de máx. 30
INFO_FNAME Nombre de campo en la tabla de salida para colorear filas Cadena de caracteres de máx.

CEBRA Si se establece este campo, la lista muestra un patrón de rayas en 30 ESPACIO, 'X'
la vista previa de impresión y cuando se imprime.

NO_TOTARR El control de cuadrícula ALV muestra flechas en la línea de ESPACIO, 'X'


totales y la línea de subtotales que además indican el área
de totalización. Configure este parámetro para suprimir
estas flechas.

NO_TOTEXP Un icono que se muestra al comienzo de una línea de ESPACIO, 'X'


(sub) totales indica si la línea se ha expandido o no.
Configure este parámetro para suprimir este icono.

NO_TOTLINE Si se establece este campo, solo se muestran los subtotales, pero no ESPACIO, 'X'
los totales.

NUMC_TOTAL Si se establece este campo, el usuario puede calcular los totales de ESPACIO, 'X'
los campos de tipo de datos NUMC (normalmente, los usuarios no
pueden hacer esto).

TOTALS_BEF Si se establece este campo, el ALV muestra los totales calculados ESPACIO, 'X'
como las primeras filas en el control de la cuadrícula. Los subtotales
se muestran antes de un nuevo valor del criterio de subtotales.

DETALLE Si se establece este campo, la pantalla de detalles también ESPACIO, 'X'


muestra columnas con valores iniciales.

DETAILTITL Título en la barra de título de la pantalla de detalles. Cadena de caracteres de máx. 30

S_DRAGDROP Estructura para la configuración de arrastrar y soltar

KEYHOT Si este campo está configurado, todos los campos clave son hotspot- ESPACIO, 'X'
eySikC ase
s h mi o norte t s s eso pag iv o mi t._ li khace
C clic en el campo una vez, evento
se activa.

SGL_CLK_HD Habilita la función de un solo clic en el encabezado de la ESPACIO, 'X'


columna. Esta función ordena la lista en orden ascendente
cuando se hace clic en la columna por primera vez, y luego en
orden descendente cuando se hace clic en la columna por
segunda vez.

STYLEFNAME Utilice este campo para pasar el nombre de la tabla de Cadena de caracteres de máx. 30
celdas para mostrar celdas como botones.

FORM prepare_layout CAMBIANDO ps_layout TYPE lvc_s_layo.

ps_layout-zebra = 'X'. ps_layout-grid_title =


'Vuelos'. ps_layout-smalltitle = 'X'.

ENDFORM. "prepare_layout

Código Parte 8 - Relleno de la estructura del diseño


B.4. Ajustes de impresión
Manejamos los ajustes de impresión a través de una estructura que se pasa al
parámetro " is_print "Del método" set_table_for_first_display ”. La estructura es como
sigue:

Nombre del campo Descripción Rango de valores

GRPCHGEDIT Permite la edición de cambios de grupo definible por el ESPACIO, 'X'


usuario para el modo de vista previa de impresión. Si esto
se establece el campo, el salto al Visor de listas de SAP se
configura en consecuencia. En el cuadro de diálogo de
clasificación, el usuario puede determinar cómo se indica
gráficamente un cambio de valor de criterio de
clasificación: como un salto de página o como un
subrayado.

Con la tabla de clasificación, puede establecer


dinámicamente este formato.

NO_COLWOPT El control de cuadrícula ALV establece todas las columnas ESPACIO, 'X'
en su ancho óptimo antes de que la lista se imprima o se
muestre en la vista previa de impresión. Si establece este
parámetro, esta configuración predeterminada se anula.

PRNTLSTINF Imprime la información de la lista. Si se establece este campo, ESPACIO, 'X'


la información sobre la clasificación, los subtotales y los filtros
definidos, así como las estadísticas de datos, se imprimen al
principio de la lista.

PRNT_TITLE Especifica la hora a la que el título de la cuadrícula debe 0-3 con lo siguiente
ser impreso. sentido:

• 0 EN ev F e_n L t I

P: R Bef T mineral PARA th PAG mi_ O

ST
• 1
P: RIAF norte te T r_t T h O mi PAG e_v O mi F Nuevo Testamento LI
ST
• 2 EN ev F e_n PAG t A

P: R Bef T mineral PARA th PAG mi_ O

GE

• 3
P: RIAF norte te T r_t T h O mi PAG e_v O mi F Nuevo Testamento Pensilvania
GE

RESERVAS Nm ve pag D ag ro mi ws para el evento Número natural


pr tu en B t e_r mi o norte F D re_s o mi F r_ . Si ningún número es
especificado, el texto especificado allí es
sobrescrito por la lista.
La salida impresa del campo " PRNTLSTINF ”No es visible en la vista previa de impresión de la
cuadrícula ALV. Si crea una solicitud de spool primero, puede verificar el diseño de la lista final en la
transacción SP01.

B.5. Excluyendo botones de función estándar no deseados


En su lista, es posible que desee excluir algunos de los botones de función estándar,
ya que no son útiles para su lista. Para excluir esos botones, complete una tabla de tipo
" UI_FUNCTIONS "Y pasarlo al parámetro" IT_TOOLBAR_EXCLUDING " de El
método " set_table_for_first_display ”. Los códigos de función de los botones se pueden
adquirir inspeccionando los atributos constantes de la clase " cl_gui_alv_grid "O poner un
punto de interrupción en un método, como el método de manejo de eventos del evento"
after_user_command ”, Que se ocupa del comando ALV.
Para ocultar toda la barra de herramientas, puede configurar el campo " NO_TOOLBAR ”De la
estructura de diseño a 'X'.

FORM exclude_tb_functions CAMBIANDO pt_exclude TYPE ui_functions.

DATA ls_exclude TYPE ui_func.

ls_exclude = cl_gui_alv_grid => mc_fc_maximum. APPEND


ls_exclude TO pt_exclude.
ls_exclude = cl_gui_alv_grid => mc_fc_minimum. APPEND
ls_exclude TO pt_exclude.
ls_exclude = cl_gui_alv_grid => mc_fc_subtot. APPEND
ls_exclude TO pt_exclude.
ls_exclude = cl_gui_alv_grid => mc_fc_sum. APPEND
ls_exclude TO pt_exclude.
ls_exclude = cl_gui_alv_grid => mc_fc_average. APPEND
ls_exclude TO pt_exclude.
ls_exclude = cl_gui_alv_grid => mc_mb_sum. APPEND
ls_exclude TO pt_exclude.
ls_exclude = cl_gui_alv_grid => mc_mb_subtot.

ENDFORM.

Código Parte 9 - Llenar la tabla para excluir funciones estándar no deseadas

Aquí, los nombres que comienzan con "MC_FC_" son nombres para funciones directamente y
los los nombres que comienzan con "MC_MB_" son para los menús de funciones, incluidos algunos
subfunciones como entradas de menú. Al excluir uno del último tipo, excluye todas las
funciones que contiene.
C. Funciones adicionales no basadas en eventos
Hasta este punto, podemos mostrar nuestra lista en formato de cuadrícula ALV. Sin embargo,
dado que los requisitos nunca terminan, querremos que haga más. En esta sección, iremos más allá de
lo básico y profundizaremos mucho más para tratar específicamente las funcionalidades adicionales
que puede manejar ALV Grid Control.

C.1. Cambiar el catálogo de campo o el diseño después de la primera visualización


Durante el tiempo de ejecución, es posible establecer un nuevo diseño o un nuevo catálogo de campos
después de mostrar la lista por primera vez. Estos componentes tienen métodos set / get para lograr esto.
Para el catálogo de get_frontend_fieldcatalog
set_frontend_fieldcatalog
campo: Para el diseño: get_frontend_layout
set_frontend_layout

Usando estos métodos, en cualquier momento durante la ejecución, puede obtener el contenido y
modificarlos.

....

DATOS ls_fcat TIPO lvc_s_fcat. DATOS


lt_fcat TIPO lvc_t_fcat. DATOS ls_layout
TYPE lvc_s_layo.

MÉTODO DE LLAMADA gr_alvgrid-> get_frontend_fieldcatalog


IMPORTADOR
et_fieldcatalog = lt_fcat [].

BUCLE EN lt_fcat EN ls_fcat.


IF ls_fcat-fieldname = 'PAYMENTSUM'.
ls_fcat-no_out = espacio. MODIFICAR
lt_fcat DESDE ls_fcat. TERMINARA SI .

ENDLOOP.

MÉTODO DE LLAMADA gr_alvgrid-> set_frontend_fieldcatalog


EXPORTADOR
it_fieldcatalog = lt_fcat [].

MÉTODO DE LLAMADA gr_alvgrid-> get_frontend_layout


IMPORTADOR
es_layout = ls_layout.

ls_layout-grid_title = 'Vuelos (con sumas de pago)'.

MÉTODO DE LLAMADA gr_alvgrid-> set_frontend_layout


EXPORTADOR
is_layout = ls_layout.
....

Código Parte 10 - Cambiar el catálogo de campo y el diseño después de la primera visualización

C.2. Configuración de condiciones de clasificación

Es posible establecer condiciones de clasificación para los datos de la tabla. Esto se logra
llenando una tabla interna de estructura " LVC_T_SORT ”Que consta de los criterios de clasificación. Para
tener una clasificación inicial, pásala al parámetro " IT_SORT "Del método
" set_table_for_first_display ”.
FORM prepare_sort_table CAMBIANDO pt_sort TYPE lvc_t_sort.

DATA ls_sort TIPO lvc_s_sort.

ls_sort-spos = '1'. ls_sort-fieldname =


'CARRID'. ls_sort-up = 'X'. "A a Z ls_sort-
down = espacio.

APÉNDICE ls_sort a pt_sort.

ls_sort-spos = '2'. ls_sort-fieldname =


'SEATSOCC'. ls_sort-up = espacio.

ls_sort-down = 'X'. "Z a A APPEND


ls_sort TO pt_sort.

ENDFORM. "prepare_sort_table

Parte del código 11 - Preparar la mesa para ordenar los ajustes

Tenemos dos puntos importantes que contar sobre este tema. La primera es que esté
preparado para un breve volcado si alguno de los campos asignados para ser ordenados no está en el
contenido del catálogo de campos. En segundo lugar, cuando hace que ALV Grid ordene los datos, por
defecto fusiona verticalmente los campos que tienen el mismo contenido. Para evitar esto para todas
las columnas, puede establecer " no_merging ”Campo de la estructura de diseño a 'X'. Si desea inhabilitar
la combinación solo para algunas columnas, establezca " no_merging ”Campo de la fila del catálogo de
campos correspondiente a esa columna.
Puede obtener y establecer criterios de clasificación aplicados cuando lo desee mediante el uso de métodos
" get_sort_criteria " y " set_sort_criteria ”, Respectivamente.

C.3. Filtración
El procedimiento es como el de la clasificación. Aquí, el tipo de tabla que debe
llenar es " LVC_T_FILT ”. Llenar esta tabla es similar a llenar una variable RANGES.

FORM prepare_filter_table CAMBIANDO pt_filt TYPE lvc_t_filt.

DATOS ls_filt TIPO lvc_s_filt.

ls_filt-fieldname = 'FLDATE'. ls_filt-sign =


'E'.
ls_filt-option = 'BT'. ls_filt-low =
'20030101'. ls_filt-high = '20031231'.
APÉNDICE ls_filt A pt_filt.

ENDFORM. "prepare_filter_table

Parte del código 12 - Preparación de la tabla para la configuración del filtro

Puede obtener y establecer criterios de filtrado aplicados cuando lo desee utilizando


métodos " get_filter_criteria " y " set_filter_criteria ”, Respectivamente.
C.4. Haciendo selecciones
Generalmente es necesario seleccionar algunas celdas, filas o columnas en ALV Grid.
La estructura del control da la oportunidad de configurar diferentes modos de selección a
través del valor del campo " SEL_MODE ”En la estructura de distribución. Aqui estan esos
modos y sus funcionalidades:

Valor Modo Posibles selecciones Comentario

ESPACIO igual que 'B' ver 'B' Configuración predeterminada

'A' Columna y fila • Múltiple El usuario selecciona


selección columnas las filas a través
• Varias filas pulsadores en el
borde izquierdo del control de
cuadrícula.

'B' Selección simple, lista • Múltiple


caja columnas

• Varias filas

'C' Selección múltiple, • Múltiple


cuadro de lista columnas

• Varias filas

'D' Selección de celda • Múltiple El usuario selecciona


columnas las filas a través
pulsadores en el
• Varias filas borde izquierdo del control de
cuadrícula.
• Cualquier celda

Más allá de configurar esta opción, puede configurar " NO_ROWMARK "Opción para ocultar la marca
columna, que normalmente es visible cuando el modo de selección permite la selección de varias
filas.
Un punto a tener en cuenta aquí es que si configura su cuadrícula ALV para que sea editable, puede
anular su modo de selección independientemente de su configuración de diseño.
Después de realizar una selección, el resto es importante para el desarrollador:
averiguar qué se selecciona. Esto será esencial si implementa sus funciones como
interactuando con las selecciones realizadas. Ciertamente, ALV Grid brinda esta información.
Usas métodos:
una. GET_SELECTED_CELLS: Este método devuelve las direcciones exactas de
celdas seleccionadas en una tabla de tipo " LVC_T_CELL "A través del parámetro de salida"
et_cell ”. El control de cuadrícula ALV devuelve solo los índices de celdas que se
seleccionan individualmente. Si se selecciona una fila o columna completa, la tabla no
tiene información sobre esa fila. Para las celdas seleccionadas individualmente,
obtendrá el nombre de la columna y el índice de la fila para cada una.
B. GET_SELECTED_CELLS_ID: Este método también devuelve las direcciones de las
celdas seleccionadas. La diferencia es que primero su tipo de salida es " LVC_T_CENO "
a través del parámetro de salida " et_cells ”Y devuelve los ID de las columnas y filas
de las celdas seleccionadas.
C. GET_SELECTED_ROWS: Para el modo de selección 'A', 'C' o 'D' puede seleccionar
filas. Para obtener información sobre las filas seleccionadas, se utiliza este
método. Tiene dos parámetros de tabla de salida. Sin embargo, el parámetro "
et_index_rows " es obsoleto. El otro parámetro " et_row_no "Es de tipo" LVC_T_ROID
”Y devuelve índices de fila para las filas seleccionadas (pero no celdas o
columnas) en él.
D. GET_SELECTED_COLUMNS: Como se ha entendido hasta ahora, este método
devuelve información sobre las columnas seleccionadas. Su parámetro de tabla de
salida " et_index_columns "Es de tipo" LVC_T_COL ”Y constan de los nombres de las
columnas seleccionadas.

En su programa, es posible que desee hacer que algunas celdas, filas o columnas sean
seleccionado durante la ejecución. Para esos fines, puede utilizar versiones "SET" de los métodos
anteriores cuyas interfaces son similares pero la dirección es inversa.
Después de una transición de pantalla, cuando regrese a la pantalla con su ALV, es posible que
se pierdan sus selecciones. Puede utilizar los métodos "GET" antes de la transición, para hacer una
copia de seguridad de esa información y, después de regresar a la pantalla, puede usar los métodos
"SET" para restaurarlos.

C.5. Recuperación y configuración de la información de estado de desplazamiento

Además de configurar algunas partes seleccionadas, es posible que también desee obtener y configurar la
información de estado de desplazamiento. Tenemos un par de métodos get y set para este propósito.
una. GET_SCROLL_INFO_VIA_ID: Este método se utiliza para recuperar información de
desplazamiento. Tiene tres parámetros de salida que son " es_col_info "Con el
nombre de la columna que se muestra primero a la izquierda," es_row_no "Con el
índice de la fila que se muestra primero en la parte superior, y" es_row_info ”Que es
obsoleto.
B. SET_SCROLL_INFO_VIA_ID: Este método se utiliza para configurar el
estado de desplazamiento de la lista. Tiene la misma interfaz con la versión "get". Por
eso se pueden utilizar de forma correspondiente.
Como en las selecciones, después de una transición de pantalla, cuando regresa a la pantalla
con su ALV, la información de desplazamiento puede perderse. Puede utilizar el método "GET" antes de la transición,
para hacer una copia de seguridad de la información de desplazamiento y después de regresar a la pantalla, puede
usar el método "SET" para restaurarla.

C.6. Colorante
Es posible pintar algunas celdas, filas y columnas a través del control ALV Grid.
Básicamente, sin esfuerzo adicional, si configura una columna para que sea una columna clave, se
colorea automáticamente. Para pintar tenemos los siguientes procedimientos.
C.6.1. Colorear una columna entera
Para hacer que una columna completa se pinte con el color que desee, puede utilizar el " enfatizar
”Opción del catálogo de campo. Simplemente asigne un código de color a este campo de la fila agregada para
su columna. Los códigos de color se construyen de la siguiente manera:

Cxyz

Los números de color son:

X Color Destinado a
1 gris azulado encabezados

2 gris claro cuerpos de lista

3 amarillo totales

4 azul verde columnas clave

5 verde valor de umbral positivo


6 rojo valor de umbral negativo
7 naranja Niveles de control

El "ajuste de clave" realizado a través del campo " llave ”Del catálogo de campo anula esta
configuración. Entonces, si desea que este color tenga un color diferente al color clave, debe establecer el
campo "clave" en el espacio mientras genera el catálogo de campos. Sin embargo, puede haber algunos
efectos secundarios en el orden de las columnas. Puede establecer el orden de las columnas como desee en la
interfaz. Pero si esto no es adecuado para usted, anule todos los ajustes clave y coloree y ordene todos los
colores que desee. Tenga cuidado de que el módulo de función que genera el catálogo de campos siempre
establecerá las propiedades clave de los campos clave.

C.6.2. Colorear una fila completa


Colorear una fila es un poco (realmente un poco) más complicado. Para habilitar la coloración
de filas, debe agregar un campo adicional a su lista de tabla de datos. Debe tener un tipo de carácter y
una longitud de al menos 4. Este campo contendrá el código de color de la fila. Entonces, modifiquemos
la declaración de nuestra tabla de datos de lista " gt_list ”.

* - - - Tabla interna que contiene datos de la lista


DATOS COMIENZO DE gt_list OCURRE 0.
INCLUYE ESTRUCTURA SFLIGHT.
DATOS color de fila (4) TIPO c.
FIN DE DATOS DE gt_list.

Parte del código 13 - Agregar el campo que contendrá datos de color de fila

Como adivinas, debes completar el código de color en este campo. Su formato será
el mismo que se explicó anteriormente en sección C.6.3. Pero, ¿cómo sabrá ALV Grid que ha
cargado los datos de color para la fila en este campo? Entonces, hazle saber esto
pasando el nombre del campo que contiene códigos de color al campo " INFO_FNAME ”De la estructura de
distribución.
p.ej
ps_layout-info_fname = <field_name_containing_color_codes>. "P. Ej., 'COLOR DE FILA'

Puede completar ese campo en cualquier momento durante la ejecución. Pero, por supuesto, debido a la
lógica de flujo de las pantallas, se reflejará en la pantalla de su lista tan pronto como se produzca una actualización de
ALV.
Puede colorear una fila completa como se describe en la siguiente sección. Sin embargo, este
método requiere menos tiempo.

C.6.3. Colorear celdas individuales


Este es el último punto sobre los procedimientos de coloración para la cuadrícula ALV. El
procedimiento es similar a colorear una fila completa. Sin embargo, dado que se puede direccionar una
celda individual con dos parámetros, necesitaremos algo más. Lo que se entiende por "más" es una
estructura de tipo de tabla que se incluirá en la estructura de la tabla de datos de la lista. Parece
extraño, porque incluirlo hará que la estructura de datos de nuestra lista sea profunda. Pero de todos
modos ALV Grid control maneja esto.
La estructura que se debe incluir debe ser del tipo " LVC_T_SCOL ”. Si desea colorear
toda la fila, esta tabla interna debe contener solo una fila con el campo " fname "Se establece
en un espacio, algún valor de color en el campo" columna "," 0 "o" 1 "en los campos" int
"(intensificado) y" inv ”(Inverso).
Si desea colorear celdas individuales, entonces para cada columna de celda, agregue una
línea a esta tabla interna que también contiene el nombre de la columna en el campo " fname ”. Es
obvio que puede colorear una columna completa llenando esta tabla interna con una fila para esa
columna para cada fila en la tabla de datos de la lista. Pero también es obvio que esto llevará más
tiempo que el método en sección C.6.1.
Nuevamente, el color del campo clave anulará su configuración. Por eso, tenemos otro
campo en esta tabla interna llamado " nokeycol ”. Para cada campo representado en la tabla
interna, establezca este campo en 'X' para evitar anular la configuración de color clave.
En este procedimiento, nuevamente debemos decirle al control el nombre de la tabla interna que
contiene los datos de color. El campo " CTAB_FNAME ”De la estructura de distribución se utiliza para este
propósito.
* - - - Tabla interna que contiene datos de la lista
DATOS COMIENZO DE gt_list OCURRE 0.
INCLUYE ESTRUCTURA SFLIGHT. DATOS
color de fila (4) TIPO c.
DATOS colores de celda TIPO lvc_t_scol.
FIN DE DATOS DE gt_list.

Parte del código 14 - Agregar una tabla interna que contendrá datos de color de celda

DATOS ls_cellcolor TYPE lvc_s_scol.


...
LEER TABLA gt_list INDEX 5. ls_cellcolor-
fname = 'SEATSOCC'. ls_cellcolor-color-col =
'7'. ls_cellcolor-color-int = '1'.

APÉNDICE ls_cellcolor A gt_list-cellcolors. MODIFICAR


gt_list INDEX 5.

Código Parte 15 - Un código de muestra para hacer que la celda en la fila 5 y la columna 'SEATSOCC' sean coloreadas
Un tipo de cerebro jugoso puede preguntar qué sucede si todos estos tres procedimientos se aplicaran
para colorear al mismo tiempo. Y nuevamente se da la misma respuesta ya que hay una prioridad entre ellos. El
orden de prioridad es: configuración de celda - configuración de fila - configuración de columna. Además de estos, se
debe manejar la configuración del campo clave.

C.7. Insertar hipervínculos


La inserción de campos de hipervínculos se logra mediante una tabla de origen que contiene
hipervínculos y controladores para relacionarlos con los datos de la lista. La tabla de hipervínculos debe
ser del tipo " LVC_T_HYPE ”. Para cada campo que incluirá hipervínculos, debe agregar un " int4 ”Tipo
campo a la tabla de datos de su lista. Esos nuevos campos contendrán el identificador para obtener
información de la tabla de hipervínculos. Indique el nombre del campo que contiene el identificador
para cada campo que contendrá el hipervínculo, en el catálogo de campos colocando el nombre del
identificador en el " WEB_FIELD ”Campo para cada columna. Bien, toda esta lógica puede resultar confusa;
todos son campos, cuál es el campo que contendrá el campo con…. Ahora será bueno agregar un
código de muestra aquí.
Supongamos que queremos incluir hipervínculos en columnas ' CARRID ' y ' CONNID '. Así que
deberíamos agregar dos campos más a nuestra tabla de datos de lista:

* - - - Tabla interna que contiene datos de la lista


DATOS COMIENZO DE gt_list OCURRE 0.
INCLUYE ESTRUCTURA SFLIGHT. DATOS
color de fila (4) TIPO c.
DATOS colores de celda TIPO lvc_t_scol.
DATA carrid_handle TYPE int4. DATOS
connid_handle TYPE int4.
FIN DE DATOS DE gt_list.

Parte del código 16 - Dos nuevos campos para contener datos de manejo, cada uno para el campo que contendrá hipervínculo

Cree su tabla de hipervínculos. Recuerda que su tipo debe ser " LVC_T_HYPE ”.
* - - - Tabla de hipervínculos
FORM prepare_hyperlinks_table CAMBIANDO pt_hype TYPE lvc_t_hype.

DATOS ls_hype TYPE lvc_s_hype.

ls_hype-handle = '1'.
ls_hype-href = 'http://www.company.com/carrids/car1'. APÉNDICE
ls_hype a pt_hype.
ls_hype-handle = '2'.
ls_hype-href = 'http://www.company.com/carrids/car1'. APÉNDICE
ls_hype a pt_hype.
ls_hype-handle = '3'.
ls_hype-href = 'http://www.company.com/carrids/car1'. APÉNDICE
ls_hype a pt_hype.
ls_hype-handle = '4'.
ls_hype-href = 'http://www.company.com/connids/con11'. APÉNDICE
ls_hype a pt_hype.
ls_hype-handle = '5'.
ls_hype-href = 'http://www.company.com/connids/con12'. APÉNDICE
ls_hype a pt_hype.

....
ENDFORM.

Parte del código 17 - Preparando hipervínculos con sus identificadores


Debemos indicar el campo que contiene el identificador de cada campo. Esto se hace mientras
genera su catálogo de campo.
p.ej
Al modificar la entrada del catálogo de campo para ' CARRID ':
ls_fieldcat-web_field = 'CARRID_HANDLE'.
Y para ' CONNID ':
ls_fieldcat-web_field = 'CONNID_HANDLE'.

Al llamar al método " set_table_for_first_display "Pasa el nombre


de la tabla de datos de la manija al parámetro " it_hyperlink ”.
Mientras llena los datos de su lista, debe colocar identificadores en los campos relacionados. El
siguiente código de muestra dice que cuando se hace clic en un CARRID campo que contiene 'XX' ir
a la URL ' http://www.company.com/carrids/car1 ' y si es un CONNID campo
cumpliendo la condición anterior y conteniendo '01', vaya a la tabla de URL
'http://www.company.com/connids/con11'. Aquí, la tabla de hipervínculos considerada es la
preparada en Código Parte 15.

BUCLE EN gt_list.
SI gt_list-carrid = 'XX'.
gt_list-carrid_handle = '1'. SI gt_list-
connid = '01'.
gt_list-connid_handle = '4'.
TERMINARA SI .
MODIFICAR gt_list.
TERMINARA SI .
ENDLOOP.

Código Parte 18 - Asignar identificadores a campos

C.8. Crear campos como menús desplegables

Ciertamente, será bueno hacer algunos campos como menús desplegables. El


procedimiento para hacer que un campo sea un menú desplegable es similar a hacer que
contenga un hipervínculo. Sin embargo, en este caso, no damos nuestra tabla llena de
identificadores directamente al método " set_table_for_first_display ”. La tabla de valores debe
ser del tipo " LVC_T_DROP "Y usaremos el método" set_drop_down_table ”Para registrar nuestra
tabla de tiradores. Para hacer una columna completa como desplegable, solo mientras se genera
el catálogo de campo; pasar el número de identificador al campo " DRDN_HNDL ”Para ese campo.
p.ej ps_fcat-drdn_hndl = '1'.

Para hacer que las celdas individuales sean desplegables, debe agregar un nuevo campo para contener
el identificador, para que cada campo de columna sea un menú desplegable. Mientras llena los datos de su
lista o en algún lugar separado donde los modifica, llena estos nuevos campos con identificadores. Para hacer
coincidir los campos que contienen información del identificador con las columnas, usamos nuevamente el
catálogo de campos. Pasamos el nombre de nuestro nuevo campo al campo " DRDN_FIELD ”De la estructura del
catálogo de campos para la columna.
Por ejemplo, para el ejemplo en el Código Parte18:
ps_fcat-drdn_field = 'PTYP_DD_HNDL'.
* - - - Tabla interna que contiene datos de la lista
DATOS COMIENZO DE gt_list OCURRE 0.
INCLUYE ESTRUCTURA SFLIGHT. DATOS
color de fila (4) TIPO c.
DATOS colores de celda TIPO lvc_t_scol. DATA
carrid_handle TYPE int4. DATOS connid_handle
TYPE int4.
DATOS ptype_dd_hndl TYPE int4.
FIN DE DATOS DE la lista gt.

Código Parte 19 - Agregar un nuevo campo para contener el identificador de los valores de desglose

* - - - Valores de desglose
FORM prepare_drilldown_values.

DATOS lt_ddval TIPO lvc_t_drop. DATOS


ls_ddval TIPO lvc_s_drop.

ls_ddval-handle = '1'. ls_ddval-value =


'JFK-12'. APÉNDICE ls_ddval A lt_ddval.
ls_ddval-handle = '1'.

ls_ddval-value = 'JSF-44'. APÉNDICE


ls_ddval A lt_ddval. ls_ddval-handle =
'1'.
ls_ddval-value = 'KMDA-53'. APÉNDICE
ls_ddval A lt_ddval. ls_ddval-handle =
'1'.
ls_ddval-value = 'SS3O / N'. APÉNDICE
ls_ddval A lt_ddval.

MÉTODO DE LLAMADA gr_alvgrid-> set_drop_down_table


EXPORTADOR
it_drop_down = lt_ddval.

ENDFORM. "prepare_drilldown_values

Código Parte 20 - Preparando valores para el menú desplegable con el identificador '1'

Mientras examina en Código Parte 19, después de preparar la tabla de valores,


registramos nuestra tabla por el método " set_drop_down_table ”.

C.9. Gestionar variantes


Puede administrar las variantes de visualización mediante el uso de parámetros, "
is_variant " y " Yo lo guarde " de " set_table_for_first_display ”. Aquí hay opciones para el manejo de
variantes. <structure_name> es la estructura que define la variante del tipo " DESVARIANTE ”. El
campo " reporte "En esta estructura debe contener el valor de" sy-repid. "

Modo is_variant Yo lo guarde

Cambiar la pantalla actual


ESPACIO ESPACIO
variante
Seleccionar y cambiar la variante de
<nombre_estructura> ESPACIO
visualización actual

'U': solo específico del


Seleccionar, cambiar y guardar la
<nombre_estructura> usuario 'X': solo global
variante de visualización actual
'Un tanto
D. Funcionalidades adicionales basadas en eventos
Al ser desarrollado por la metodología orientada a objetos, el control ALV Grid tiene
algunos eventos que se activan durante la interacción entre el usuario. Estos eventos se utilizan
para utilizar algunas funcionalidades adicionales de ALV Grid. Para este tipo de funcionalidades,
necesitamos que se implemente una clase (generalmente local en nuestro programa) para que
sea el controlador de eventos para la instancia de ALV Grid. En este tutorial se asume que se
conoce la perspectiva orientada a objetos de la programación ABAP. No nos ocuparemos de la
sintaxis y la lógica sobre cómo definir e implementar una clase local, por qué registrar un método
de manejo de eventos para manejar un evento, etc.
Estos son algunos de los eventos del control ALV Grid. Esta tabla se toma de la
biblioteca SAP en línea. La columna "HTML" muestra que si el evento relacionado es
compatible con SAP GUI para HTML. "" Significa que es aplicable, " X "Es para no
aplicables y " () ”Se utiliza para aplicabilidad restringida.

Salida de texto definida por el usuario

Evento Solicitud HTML

print_end_of_list Definir el texto de salida que se imprimirá al final de la lista


completa

print_top_of_list Definir el texto de salida que se imprimirá al principio


de toda la lista.

print_end_of_page Definir el texto de salida que se imprimirá al final de


cada página

print_top_of_page Definir el texto de salida que se imprimirá al principio


de cada página

subtotal_text Definir textos de subtotales autodefinidos

Acciones controladas por el mouse en el control de cuadrícula

Evento Solicitud HTML

button_click Consultar un clic en un botón en el control de


cuadrícula ALV

haga doble clic Consultar un doble clic en una celda del control de cuadrícula
ALV

hotspot_click Consultar un hotspot, haga clic en las columnas definidas para


este propósito de antemano

onDrag Recopilar información cuando se arrastran elementos del


control de cuadrícula ALV
X

onDrop Procesar información cuando se eliminan


elementos del control de red ALV
X
onDropComplete Realice las acciones finales después de arrastrar y
soltar con éxito
X

onDropGetFlavor Distinguir entre opciones para el comportamiento de arrastrar


y soltar
X

Procesamiento de funciones estándar y autodefinidas

Evento Solicitud HTML

before_user_command Consultar códigos de función estándar y autodefinidos

user_command Consultar códigos de función autodefinidos

after_user_command Consultar códigos de función estándar y autodefinidos

Definición de funciones autodefinidas

Evento Solicitud HTML

barra de herramientas Cambiar, eliminar o agregar elementos GUI en la barra de


herramientas

botón de menú Definir menús para botones de menú en la barra de herramientas

context_menu_request Cambiar el menú contextual


X

onf1 Definir la ayuda F1 autodefinida ()

D.1. Esquema general para la clase de controlador de eventos


Aquí hay un código de muestra para ilustrar un esquema general para nuestra clase local.

CLASE lcl_event_handler DEFINICIÓN.


SECCIÓN PÚBLICA.
MÉTODOS:
* Para agregar nuevos botones funcionales a la barra de herramientas ALV
handle_toolbar PARA EVENTO barra de herramientas de cl_gui_alv_grid
IMPORTAR e_object e_interactive ,
* Para implementar comandos de usuario
handle_user_command
PARA EVENTO user_command DE cl_gui_alv_grid
IMPORTANDO e_ucomm ,
* Control de clic de Hotspot
handle_hotspot_click
PARA EVENTO hotspot_click OF cl_gui_alv_grid
IMPORTANDO e_row_id e_column_id es_row_no,
* Control de doble clic
handle_double_click
PARA EVENTO double_click OF cl_gui_alv_grid
IMPORTANDO e_row e_column ,
* Para activarse antes de los comandos del usuario
handle_before_user_command
PARA EVENTO before_user_command OF cl_gui_alv_grid
IMPORTANDO e_ucomm,
* Para activarse después de los comandos del usuario
handle_after_user_command
PARA EVENTO context_menu_request OF cl_gui_alv_grid
IMPORTAR e_object
* Control de cambios de datos cuando ALV Grid es editable
handle_data_changed
PARA EL EVENTO data_changed OF cl_gui_alv_grid
IMPORTANDO er_data_changed ,
* Se activará después de que finalice el cambio de datos
handle_data_changed_finished
PARA EVENTO data_changed_finished OF cl_gui_alv_grid
IMPORTANDO e_modified,
* Para controlar los botones del menú
handle_menu_button
PARA EVENTO menu_button OF cl_gui_alv_grid
IMPORTAR e_oject e_ucomm ,
* Para controlar los clics de los botones
handle_button_click
PARA EVENTO button_click OF cl_gui_alv_grid
IMPORTAR e_oject e_ucomm .
SECCION PRIVADA.
ENDCLASS.

CLASE lcl_event_handler IMPLEMENTACIÓN.


* Manejar barra de herramientas

METHOD handle_toolbar.
REALIZAR handle_toolbar USANDO e_object e_interactive. MÉTODO
FINAL.
* Manejar Hotspot Click
MÉTODO handle_hotspot_click.
REALIZAR handle_hotspot_click USANDO e_row_id e_column_id es_row_no. MÉTODO
FINAL.
* Manejar doble clic
METHOD handle_double_click.
REALIZAR handle_double_click USANDO e_row e_column es_row_no. MÉTODO
FINAL.
* Manejar comando de usuario
METHOD handle_user_command.
REALIZAR handle_user_command UTILIZANDO e_ucomm.
MÉTODO FINAL.
* Manejar después del comando de usuario
METHOD handle_context_menu_request.
REALIZAR handle_context_menu_request USANDO e_object. MÉTODO
FINAL.
* Manejar antes del comando de usuario
METHOD handle_before_user_command.
REALIZAR handle_before_user_command USANDO e_ucomm.
MÉTODO FINAL.
* Manejar datos cambiados
METHOD handle_data_changed.
REALIZAR handle_data_changed USANDO er_data_changed.
MÉTODO FINAL.
* Manejar datos cambiados terminado
METHOD handle_data_changed_finished.
REALIZAR handle_data_changed_finished USANDO e_modified. MÉTODO
FINAL.
* Manejar botones de menú
METHOD handle_menu_button.
EJECUTE handle_menu_button USANDO e_object e_ucomm.
MÉTODO FINAL.
* Hacer clic en el botón de la manija
METHOD handle_button_click.
REALIZAR handle_button_click UTILIZANDO e_object e_ucomm.
MÉTODO FINAL.

ENDCLASS.

Código Parte 21 - Definición e implementación de la clase del controlador de eventos local


Aquí, en la parte de implementación, nos estamos ramificando a formularios para deshacernos
de las restricciones impulsadas por el contexto OO. Es su elección bifurcar o escribir directamente sus
códigos en el método.
Aquí, en la codificación de clases locales, simplemente implemente los métodos que
manejarán los eventos que desea que se activen. En este tutorial, preferiremos tratar los temas como
funcionalidades en lugar de explicar los eventos uno por uno. Al tener una clase de controlador de
eventos, ahora podemos instanciarla y registrar sus métodos para manejar eventos de instancia de ALV
Grid.

DATA gr_event_handler TIPO REF TO lcl_event_handler.


....

* - - Creando una instancia para el controlador de eventos


CREAR OBJETO gr_event_handler.

* - - Registro de métodos de controlador para manejar eventos de ALV Grid


SET HANDLER gr_event_handler-> handle_user_command FOR gr_alvgrid. SET HANDLER
gr_event_handler-> handle_toolbar PARA gr_alvgrid.
SET HANDLER gr_event_handler-> handle_menu_button FOR gr_alvgrid.
SET HANDLER gr_event_handler-> handle_double_click FOR gr_alvgrid. SET HANDLER
gr_event_handler-> handle_hotspot_click FOR gr_alvgrid. SET HANDLER gr_event_handler-
> handle_button_click FOR gr_alvgrid. SET HANDLER gr_event_handler->
handle_before_user_command
PARA gr_alvgrid.
SET HANDLER gr_event_handler-> handle_context_menu_request
PARA gr_alvgrid.
SET HANDLER gr_event_handler-> handle_data_changed FOR gr_alvgrid. SET HANDLER
gr_event_handler-> handle_data_changed_finished
PARA gr_alvgrid.

Código Parte 22 - Creación de una instancia de controlador de eventos y registro de métodos de controlador

D.2. Hacer clic en el punto de acceso

A partir de las definiciones de campo del catálogo de campos, sabemos que


podemos hacer que algunas columnas respondan a clics individuales como puntos de acceso
estableciendo el valor del campo " HOTSPOT ”A 'X' mientras se genera el catálogo de campos.
Después de hacer clic, el evento " hotspot_click ”Se activa. Este evento tiene tres parámetros
en su interfaz. El parámetro "e_row_id" está obsoleto. Otros dos parámetros son " es_row_no
"Que es de tipo" LVC_S_ROID "Y pasa información sobre el índice de fila en" es_row_no-row_id ", y "
e_column_id "De tipo" LVC_S_COL "Que devuelve el nombre del campo de la columna en"
e_column_id-fieldname ”. Al utilizar estos parámetros, sabe dónde hizo clic el usuario y
desencadenó su acción.
FORMATO handle_hotspot_click USANDO i_row_id TYPE lvc_s_row
i_column_id TYPE lvc_s_col
is_row_no TYPE lvc_s_roid.

LEER TABLA gt_list INDEX is_row_no-row_id.


SI sy-subrc = 0 Y i_column_id-fieldname = 'SEATSOCC'.
PANTALLA DE LLAMADA 200. "Detalles sobre el ENDIF a juego del asiento del
pasajero.

ENDFORM.

Código Parte 23 - Una implementación de ejemplo para el método, que maneja el evento "hotspot_click"
D.3. Hacer doble clic
Como puede adivinar, manejar un doble clic es muy similar a manejar un clic en un punto
de acceso. No hace nada más para hacer que el doble clic en un campo sea intensivo; es decir, no
es necesario configurar alguna opción en el catálogo de campo. Después de que ocurra el evento
de doble clic, el método que lo maneja devolverá nuevamente tres parámetros y nuevamente uno
de ellos, " e_row ", es obsoleto. Los parametros " e_column " y " es_row_no "Son similares a los
parámetros del evento" hotpot_click ”.

FORMATO handle_double_click USANDO i_row TYPE lvc_s_row


i_column TYPE lvc_s_col is_row_no
TYPE lvc_s_roid.

LEER TABLA gt_list INDEX is_row_no-row_id.


SI sy-subrc = 0 Y i_column-fieldname = 'SEATSOCC'.
PANTALLA DE LLAMADA 200. "Detalles sobre el ENDIF a juego del asiento del
pasajero.

ENDFORM.

Código Parte 24 - Una implementación de ejemplo para el método, que maneja el evento "double_click"

D.4. Botones de la lista


Para hacer que una celda se muestre como un botón pulsador, tenemos dos pasos. En primer lugar,
inserte una nueva tabla interna de tipo " LVC_T_STYL ”En la tabla de datos de su lista.

* - - - Tabla interna que contiene datos de la lista


DATOS COMIENZO DE gt_list OCURRE 0.
INCLUYE ESTRUCTURA SFLIGHT. DATOS
color de fila (4) TIPO c.
DATOS colores de celda TIPO lvc_t_scol. DATA
carrid_handle TYPE int4. DATOS connid_handle
TYPE int4. DATOS de estilos de celda TIPO
lvc_t_styl. FIN DE DATOS DE gt_list.

Código Parte 25 - Insertar una tabla interna para almacenar estilos de visualización de celdas

Llene esta tabla interna para que cada campo se muestre como botón.

DATUn TIPO ls_style lvc_s_styl.


...
LEER TABLA gt_list INDEX 7. ls_style-
fieldname = 'SEATSMAX'.
ls_style-style = cl_gui_alv_grid => mc_style_button. APENDE ls_style a
gt_list-cellstyles.
MODIFICAR gt_list INDEX 7.

Código Parte 26 - Un código de muestra para hacer que la celda en la fila 7 y la columna 'SEATSMAX' se muestren como botón

Como de costumbre, declaramos nuestro campo de tabla de datos de lista relacionado con estilos en la estructura

de diseño en el campo ' STYLEFNAME '.


p.ej ps_layout-stylefname = 'ESTILOS DE CELULAS'.
El evento de clic de botón se maneja como el clic de un punto de acceso a través del
evento " button_click "A través de sus parámetros" es_col_id " y " es_row_no ”Que contiene la dirección
de la celda del botón pulsador.
D.5. Agregar sus propias funciones
El control ALV Grid tiene una puerta abierta que le permite agregar sus propias funciones
activadas al presionar un botón en la barra de herramientas ALV. Para ello, utilizamos principalmente
dos eventos de ALV Grid. Usamos el evento "barra de herramientas" para agregar el botón y el evento "
user_command ”Para implementar la nueva función.
En el método que maneja el evento "barra de herramientas", definimos un nuevo botón
llenando una estructura y añadiéndola al atributo de tabla " mt_toolbar "Del objeto a cuya
referencia podemos llegar a través del parámetro" e_object " del evento.
FORMATO handle_toolbar USANDO i_object TYPE REF TO cl_alv_event_toolbar_set.

DATOS: ls_toolbar TYPE stb_button.

BORRAR ls_toolbar.
MUEVE 3 A ls_toolbar-butn_type.
APENDE ls_toolbar A i_object-> mt_toolbar.

BORRAR ls_toolbar.
MUEVA 'PER' A ls_toolbar-function. "#EC NOTEXT
MOVER icon_display_text A ls_toolbar-icon.
MUEVA 'Información del pasajero' (201) A ls_toolbar-quickinfo.
MUEVA 'Información del pasajero' (201) A ls_toolbar-text. MOVER '' A
ls_toolbar-disabled. "#EC NOTEXT
APENDE ls_toolbar A i_object-> mt_toolbar.

BORRAR ls_toolbar.
MUEVA 'EXCH' A ls_toolbar-function. MUEVE 2 "#EC NOTEXT
A ls_toolbar-butn_type.
MUEVA icon_calculation A ls_toolbar-icon.
MUEVA 'Pago en otras monedas' (202) A ls_toolbar-quickinfo. MOVER '' A ls_toolbar-
text.
MOVER '' A ls_toolbar-disabled. "#EC NOTEXT
APENDE ls_toolbar A i_object-> mt_toolbar.

ENDFORM.

Parte del código 27 - Llenando la estructura de dos nuevos botones

Los campos de la estructura que llenamos son los siguientes:

Campo Descripción
FUNCIÓN El código de función para la función
BUTN_TYPE Tipo de botón que se agregará a la barra de herramientas. Los tipos de botones disponibles son:
0 Botón (normal)
1 Menú y botón predeterminado
2 Menú
3 Separador
4 Boton de radio
5 Caja
6 Entrada de menú

ICONO Icono para el botón (opcional) Texto para


TEXTO el botón (opcional) Información rápida
INFORMACIÓN RÁPIDA para el botón (opcional) Agrega el botón
DISCAPACITADO como deshabilitado
En el Código Parte 22, estamos agregando una línea de separación y dos botones, uno de los
cuales es un botón normal mientras que el otro es un botón de menú. Para manejar un botón de menú
que se agregó al elegir '1' o '2' como tipo de botón, también debemos implementar algo de codificación
en el método que maneja el evento " botón de menú "Para definir funciones como
ser subentradas. Las funciones de estas subentradas también se manejan bajo el evento
" user_command ”.

FORM handle_menu_button USING i_object TYPE REF TO cl_ctmenu


i_ucomm TYPE syucomm.

CASO i_ucomm.
CUANDO 'INTERCAMBIAR'.
MÉTODO DE LLAMADA i_object-> add_function
EXPORTADOR
fcode = 'UE'
texto = 'Euro'.
MÉTODO DE LLAMADA i_object-> add_function
EXPORTADOR
fcode = 'TRL'
text = 'Lira turca'.
....
ENDCASE.
ENDFORM. "handle_menu_button

Parte del código 28 - Agregar dos funciones para que sean subentradas para el botón de menú con el código de función 'EXCH'

Ahora, para implementar lo que se ejecutará cuando se presione nuestro botón o se


seleccione nuestra subentrada, necesitamos programar nuestras funciones en el método que maneja el
evento " user_command ”.

FORM handle_user_command USANDO i_ucomm TYPE syucomm.

DATA lt_selected_rows TYPE lvc_t_roid. DATOS


ls_selected_row TYPE lvc_s_roid.

MÉTODO DE LLAMADA gr_alvgrid-> get_selected_rows


IMPORTADOR
et_row_no = lt_selected_rows.
LEER TABLA lt_selected_rows EN ls_selected_row INDICE 1. SI sy-subrc ne 0.

MENSAJE s000 (su) CON '¡Seleccione una fila!' (203).


TERMINARA SI .
CASO i_ucomm.
CUANDO 'COCHE'.
LEER TABLA gt_list INDEX ls_selected_row-row_id. SI sy-subrc = 0.

FUNCIÓN DE LLAMADA 'ZDISPLAY_CARRIER_INFO'


EXPORTANDO carrid = gt_list-carrid
EXCEPCIONES carrier_not_found = 1
OTROS = 2.
SI sy-subrc NE 0.
* - - Manejo de excepciones
TERMINARA SI .

TERMINARA SI .

CUANDO 'UE'.
LEER TABLA gt_list INDEX ls_selected_row-row_id. SI sy-subrc = 0.

FUNCIÓN DE LLAMADA 'ZPOPUP_CONV_CURR_AND_DISPLAY'


EXPORTANDO monun = 'UE'
quant = gt_list-paymentsum.
TERMINARA SI .

....
ENDCASE.
ENDFORM.

Código Parte 29 - Implementación de códigos de funcionamiento para nuevas funciones


Como puede ver, estamos usando el método " get_selected_rows ”Para obtener la fila
seleccionada. Dado que el botón con función ' INTERCAMBIAR 'se ramifica en subfunciones, no
implementamos nada para ello. En su lugar, implementamos códigos funcionales para
subfunciones.
Después de todo, para que ALV muestre nuestros botones adicionales, debemos llamar al
método " set_toolbar_interactive ”Para la instancia de ALV Grid después de que se crea la instancia.
p.ej MÉTODO DE LLAMADA gr_alvgrid-> set_toolbar_interactive.

D.6. Funciones estándar anuladas


El control ALV Grid también brinda la oportunidad de anular sus funciones
estándar. Para ello, utilizamos el evento " before_user_command "Y el método que
establece el comando de usuario ALV, llamado" set_user_command ”. A "
before_user_command ", Controlas el comando de usuario para procesar tu propia función
y luego usas el método" set_user_command ”Para establecer el comando de usuario de
ALV Grid en un espacio para evitar que ALV Grid se ejecute más con la función estándar.

FORMATO handle_before_user_command USANDO i_ucomm TYPE syucomm.

CASO e_ucomm.

CUANDO '& INFO'.


LLAME A LA FUNCIÓN 'ZSFLIGHT_PROG_INFO'. MÉTODO
DE LLAMADA gr_alvgrid-> set_user_command
EXPORTANDO i_ucomm = espacio.
ENDCASE.

ENDFORM.

Código Parte 30 - Anulando la función estándar ALV Grid '& INFO'.

D.7. Menús contextuales


El evento relacionado con los menús contextuales es " context_menu_request ”. Cuando
hace clic con el botón derecho en el área de la cuadrícula ALV, se activa el método de manejo de
eventos. Con este método puede agregar entradas en el menú contextual. Puede utilizar "
GET_SELECTED… ”Para recuperar la celda, fila o columna en la que el usuario ha hecho clic con el
botón derecho. Agregar funciones al menú contextual se logra como agregar subfunciones a
botones de menú no estándar como se describe en sección D.5.

FORM handle_context_menu_request USANDO i_object TYPE REF TO cl_ctmenu.

* - - Aquí puede agregar algo de lógica para recuperar lo que se hizo clic y
* - - decidir qué agregar al menú contextual
MÉTODO DE LLAMADA i_object-> add_function
EXPORTADOR
fcode = 'CREA'
text = 'Crear reserva' (204).

ENDFORM.

Parte del código 31 - Agregar una entrada para el menú contextual

Puede agregar un separador con " add_separator ", Un menú de" add_menu ", Y un
submenú por" add_submenu " métodos.
También puedes usar " disable_functions "Para deshabilitar algunas de las funciones
del menú," enable_functions " para permitir, " hide_functions "Para ocultarlos y" show_functions
”Para que se muestren de nuevo. Pasas la lista de los códigos de función a esos métodos a
través del parámetro " fcodes ”. Todo esto se trata de la clase " CL_CTMENU ”Ya que el menú
contextual crea una instancia de esa clase. Para conocer más funcionalidades, consulte esa
clase.

DATOS: LT_FCODES TYPE UI_FUNCTIONS.

BORRAR LT_FCODES.
APPEND CL_GUI_ALV_GRID => MC_FC_COL_OPTIMIZE TO LT_FCODES.
APÉNDICE 'CREA' A LT_FCODES.
MÉTODO DE LLAMADA E_OBJECT-> DISABLE_FUNCTIONS
EXPORTANDO FCODES = LT_FCODES.

Código Parte 32 - Un ejemplo llenando la tabla que se pasará a las funciones anteriores

D.8. Acerca de la impresión


Hay algunos eventos que puede utilizar sobre la impresión. Simplemente escribe lo que se va a
generar en los métodos que manejan estos eventos. Aquí está la lista de eventos en este
contexto.

print_end_of_list Definir el texto de salida que se imprimirá al final de la lista


completa

print_top_of_list Definir el texto de salida que se imprimirá al principio de toda


la lista.

print_end_of_page Definir el texto de salida que se imprimirá al final de cada página

print_top_of_page Definir el texto de salida que se imprimirá al principio de cada


página

Para utilizar uno de los eventos anteriores, procedamos con el procedimiento estándar
ya que no agregamos este evento en nuestro esquema general en la sección D.1.
Primero agregue un método de controlador en la definición de su clase de controlador como:

p.ej METHOD handle_print_top_of_list


PARA EL EVENTO print_top_of_list OF cl_gui_alv_grid.

Luego implemente el método en la parte de implementación de su clase local.


p.ej METHOD handle_print_top_of_list.
ESCRIBIR: / 'Vuelos realizados en', sy-datum.
MÉTODO FINAL.

Y registre este método como controlador.


p.ej
SET HANDLER gr_event_handler-> handle_print_top_of_list FOR gr_alvgrid.

El resultado de estos eventos se puede examinar en la vista previa de impresión o en la


impresión.
D.9. Haciendo editable la cuadrícula ALV
Esta puede ser una de las funcionalidades más utilizadas de ALV Grid ya que como
desarrolladores preferimos usar un ALV Grid en lugar de un control de tabla por algunas razones
que todos conocen (al menos por el bien de la apariencia). De hecho, hacer que la cuadrícula ALV
sea editable no tiene nada que ver con los eventos. Sin embargo, dado que el control de la
entrada de datos que se explica en la siguiente sección está relacionado, es mejor que tratemos
este tema aquí.
Para que una columna sea editable, bastará con configurar el campo " EDITAR ”En
el catálogo de campo. La cuadrícula ALV percibe si hay algunos campos editables y
agrega botones para fines de edición. Si no necesita estos nuevos botones, sabe cómo
excluirlos.
Para hacer que las celdas individuales sean editables, utilizaremos la tabla que usamos
para hacer de una celda un botón. Como recordarás, era del tipo " LVC_T_STYL ”. Si no ha agregado
esta tabla interna, agréguela ahora. Para este procedimiento; agregue el nombre del campo al
campo " NOMBRE DEL CAMPO "Y pasar" cl_gui_alv_grid => mc_style_enabled "Para hacer que un
campo sea editable y" cl_gui_alv_grid => mc_style_disabled "Para hacer que un campo no
editable, al campo " ESTILO ”. Puede usar el que tiene "deshabilitar" cuando hace que una columna
completa sea editable y desea que solo unas pocas celdas a lo largo de ella no sean editables. Como
recordará en la sección de botones, debemos informarle al diseño sobre este campo de estilo.
p.ej ps_layout-stylefname = 'ESTILOS DE CELULAS'.

Ahora, solidifiquemos el procedimiento con las partes de código a continuación. Queremos nuestra columna

" SEATSMAX "Totalmente editable excepto el caso" CARRID ”Es 'XY' que es un caso raro y queremos
que nuestras celdas a lo largo de la columna 'PLANETYPE' sean editables si sus respectivas ' CONNID
'los campos contienen el valor' 02 '.
Supongamos que hemos agregado nuestra tabla de estilos (" ESTILOS CELULARES ”) A nuestra tabla de datos de
lista y le informamos a la estructura de diseño al respecto y ajustamos el catálogo de campos para que la columna“
SEATSMAX "Tiene la propiedad" EDITAR ”Establecido en 'X'.

FORM ajuste_editables USANDO pt_list COMO gt_list [].

DATA ls_listrow COMO LÍNEA DE pt_list. DATOS


ls_stylerow TIPO lvc_s_styl. DATA lt_styletab TIPO
lvc_t_styl.

BUCLE EN pt_list EN ls_listrow.

SI ls_listrow-carrid = 'XY'.
ls_stylerow-fieldname = 'SEATSMAX'.
ls_stylerow-style = cl_gui_alv_grid => mc_style_disabled. APÉNDICE
ls_stylerow A lt_styletab.
TERMINARA SI .

SI ls_listrow-connid = '02'.
ls_stylerow-fieldname = 'PLANETYPE'. ls_stylerow-style = cl_gui_alv_grid =>
mc_style_enabled. APÉNDICE ls_stylerow A lt_styletab.

TERMINARA SI .

INSERTAR LÍNEAS DE lt_styletab EN ls_listrow-cellstyles. MODIFICAR pt_list


DESDE ls_listrow.
ENDLOOP.
ENDFORM.

Código Parte 33 - Configurar campos condicionalmente para que sean editables o no editables
Como de costumbre, la configuración basada en celdas anula la configuración de la columna completa.
Puede cambiar dinámicamente entre casos en cualquier parte adecuada de su ejecución. Simplemente llene su tabla
interna según sea necesario y actualice la pantalla de la tabla; para la configuración de toda la columna, establezca o
desarme la propiedad " EDITAR ”Del catálogo de campos para la columna y restablezca el catálogo de campos usando“
set_frontend_fieldcatalog ”.
Como última condición que debe cumplirse para la editabilidad, debe llamar
al método " set_ready_for_input "Pasando '1' al parámetro" i_ready_for_input ”.
Con este método, puede cambiar entre el modo editable y no editable. Como
supondrá, al pasar '0' al parámetro mientras se llama al método, se cambia al modo no
editable.

D.10. Controlar los cambios de datos


Como ahora podemos hacer que nuestra cuadrícula ALV sea editable, es posible que necesitemos controlar la entrada

datos. El ALV Grid tiene eventos " datos_cambiados " y " data_changed_finished ”.
El primer método se activa justo después de que se percibe el cambio en un campo editable. Aquí
puede realizar comprobaciones de la entrada. Y el segundo evento se activa después de que se
confirma el cambio.
Puede seleccionar la forma en que el control percibe los cambios de datos mediante
el método " register_edit_event ”. Tienes dos opciones:
I. Después de presionar la tecla de retorno: Para seleccionar de esta manera, al
" i_event_id " aprobar " cl_gui_alv_grid => mc_evt_enter ”.
ii. parámetro Después de modificar el campo y mover el cursor a otro campo:
Para esto, pase " cl_gui_alv_grid => mc_evt_modifies "Al mismo
parámetro.
Para que se activen los eventos que controlan los cambios de datos, debe seleccionar
forma llamando a este método. De lo contrario, estos eventos no se activarán.
Para controlar los cambios de datos de campo, ALV Grid utiliza una instancia de la clase "
CL_ALV_CHANGED_DATA_PROTOCOL "Y pasa esto a través del evento" datos_cambiados ”. Usando
métodos de esta clase, puede obtener y modificar valores de celda y producir mensajes de error.
Éstos son algunos de esos métodos:

Obtiene el valor de la celda. Pasas la dirección de la celda a


get_cell_value
la interfaz.
modificar_celda Modifica el valor de la celda direccionado mediante parámetros. Agrega
una entrada de registro. Utiliza la interfaz de mensajes estándar con el
add_protocol_entry
tipo de mensaje, la identificación del mensaje, etc. Haga que la tabla de
protocol_is_visible errores sea visible o no.
actualizar_protocolo Actualización de las entradas del registro.

Con la referencia de la instancia, puede obtener información sobre


modificaciones. Estas útiles tablas de atributos son:
Contiene direcciones de celdas modificadas con " row_id "s
MT_MOD_CELLS
y " nombre del campo "s.
MP_MOD_ROWS Contiene filas modificadas. Su tipo es genérico.
MT_GOOD_CELLS Contiene celdas con valores adecuados Contiene
MT_DELETED_ROWS filas eliminadas de la lista Contiene filas
MT_INSERTED_ROWS insertadas en la lista
Utilizando estos métodos y atributos, puede verificar y dar el mensaje adecuado y también
modificar el contenido de la celda.

FORM handle_data_changed USANDO ir_data_changed


TIPO REF TO cl_alv_changed_data_protocol.

DATOS: ls_mod_cell TYPE lvc_s_modi,


lv_value TYPE lvc_value.

ORDENAR ir_data_changed-> mt_mod_cells POR row_id. LOOP


AT ir_data_changed-> mt_mod_cells
EN ls_mod_cell
DONDE fieldname = 'SEATSMAX'.

MÉTODO DE LLAMADA ir_data_changed-> get_cell_value


EXPORTANDO i_row_id = ls_mod_cell-row_id
i_fieldname = 'CARRID'
IMPORTANDO e_value = lv_value.

SI lv_value = 'THY' Y ls_mod_cell-value> '500'.


MÉTODO DE LLAMADA ir_data_changed-> add_protocol_entry
EXPORTADOR
i_msgid = 'SU'
i_msgno = '000'
i_msgty = 'E'
i_msgv1 = 'Este número no puede exceder de 500 para'
i_msgv2 = lv_value
i_msgv3 = 'El valor es et a' '500' '' i_fieldname =
ls_mod_cell-fieldname i_row_id = ls_mod_cell-
row_id.

MÉTODO DE LLAMADA ir_data_changed-> modified_cell


EXPORTANDO i_row_id = ls_mod_cell-row_id
i_fieldname = ls_mod_cell-fieldname i_value =
'500'.
TERMINARA SI .

ENDLOOP.

ENDFORM. "handle_data_changed

Parte del código 34 - Verificando la entrada junto con un valor no ingresado, agregando un registro y modificando el contenido de la
celda

El evento " datos_cambiados ”Le informa sobre las funciones de F4. Establece el
parámetro apropiado del grupo con respecto al lugar donde se activó. Estas
los parámetros son { E_ONF4, E_ONF4_BEFORE, E_ONF4_AFTER}.

D.11. Vinculación de la ayuda F1 a los campos


Para vincular su propia ayuda de F1 a un campo, simplemente debe utilizar el
evento " onf1 ”. En este punto, se asume que sabe cómo definir, implementar y registrar
un evento. El evento tiene los siguientes parámetros en su interfaz:

E_FIELDNAME de tipo LVC_FNAME


ES_ROW_NO de tipo LVC_S_ROID
ER_EVENT_DATA referencia al tipo CL_ALV_EVENT_DATA
Y aquí hay un código de muestra simple para el método.

MÉTODO handle_on_f1.

REALIZAR f1_help UTILIZANDO e_fieldname es_row_no.


er_event_data-> m_event_handled = 'X'.

MÉTODO FINAL.

Código Parte 35 - Un código de muestra para el evento "onf1"

Aquí configuramos el atributo " er_event_data-> m_event_handled ”Para evitar un


procesamiento posterior de la ayuda F1 estándar.

D.12. Vincular la ayuda de F4 a los campos


En la última sección, nos ocuparemos de vincular la ayuda de F4 a los campos. Es fácil.
Como de costumbre, defina, implemente y registre el evento " onf4 ”En los lugares adecuados de
su código. Para obtener ayuda de F4, debe registrar los campos cuya solicitud F4 activará el "
onf4 ”Evento. Para ello debes preparar una tabla de tipo " LVC_T_F4 "Y registre esta tabla usando
el método" register_f4_for_fields ”. Mientras prepara la tabla, debe incluir una línea para cada
campo que activará el evento F4. Para cada campo de la estructura;

Pase el nombre del campo a ' NOMBRE DEL CAMPO ' Colocar ' REGISTRARSE 'para registrar el campo, Establecer'
OBTENER ANTES 'para proporcionar transporte de contenido de campo antes de F4 en modo editable
Establecer' CAMBIAR DESPUÉS 'para hacer que los datos cambien después de F4 en modo editable.

DATOS: lt_f4 TYPE lvc_t_f4 CON LÍNEA DE ENCABEZADO.


....
lt_f4-fieldname = 'PRECIO'. lt_f4-
register = 'X'. lt_f4-getbefore = 'X'.
APÉNDICE lt_f4.

MÉTODO DE LLAMADA gr_alvgrid-> register_f4_for_fields


EXPORTADOR
it_f4 = lt_f4 [].

Código Parte 36 - Preparando la tabla para que los campos se registren para desencadenar el evento F4

MÉTODO handle_on_f1.

REALIZAR f4_help UTILIZANDO e_fieldname es_row_no.


er_event_data-> m_event_handled = 'X'.

MÉTODO FINAL.

Parte del código 37 - Un ejemplo de implementación del método "onf4"

Nuevamente, establecemos el atributo " er_event_data-> m_event_handled ”Para evitar un


procesamiento posterior de la ayuda F4 estándar.
E. Una pieza de resolución de problemas
No Pregunta Respuesta

Registro mi clase local como el controlador Como propiedad de ABAP OOP, puede utilizar el
de eventos para todos los ALV parámetro predefinido " remitente ”En la interfaz de
1 instancias. ¿Cómo se puede saber eventos. Este parámetro se refiere a la instancia de la
qué instancia evoca al persona que llama.
controlador?
Cuando quería filtrar con El problema más probable es que está
respecto a un campo, no podía intentando filtrar un campo de texto y, dado
manejarlo. Había registros que no configuró el " minúscula ”En el catálogo
2
coincidentes pero no los de campo, ALV solo busca las mayúsculas.
recuperó. Establezca esta propiedad para ese campo
mientras genera el catálogo de campos. Siga
Realizo algunos ajustes de estilo en filas o todos los pasos descritos en las secciones
celdas individuales antes de llamar al relacionadas.
primer método de visualización. 1. Es posible que haya olvidado llamar
Sin embargo, no puedo obtener el resultado " set_ready_for_input " si usted es
que quiero. hablando de hacer que las celdas sean editables.
3 2. Puede haber un filtro que hace que la fila de
celda con estilo sea invisible o una
clasificación puede haber cambiado el
orden de la fila haciéndola en algún lugar
hacia abajo para que no pueda
darse cuenta.

El evento " datos_cambiados "No No deberías haber llamado al método


se activa " register_edit_event "Por el cual tu
4
también seleccione la forma en que ALV Grid percibe los
cambios

Mis botones de función no están visibles Deberías haber olvidado llamar al


5
en la barra de herramientas método " set_toolbar_interactive ”.
¿Puedo modificar el título de la cuadrícula Si. Utilice el método " set_gridtitle ”.
6
durante la ejecución?

Quiero agregar un botón con un Si. Establecer la propiedad ' ICONO ”Para la
ícono para una columna. ¿Puedo columna a 'X' en el catálogo de campo. Luego
7 hacer eso? haga la configuración de estilo como para hacerlo
pulsador. Pase el nombre del icono al campo
como su contenido.
¿Puedo ocultar el encabezado? Si. Establezca la propiedad " sin_cabeceras ”De
8
la estructura de diseño a 'X'.
¿Puedo ocultar la barra de herramientas ALV? Si. Establezca la propiedad " no_toolbar ”De la
9
estructura de diseño a 'X'.
No puede encontrar mi clase local en la Antes de sus definiciones de datos globales,
línea donde declaro mi variable de haga que el intérprete sepa que su clase local
referencia del controlador de eventos. está definida en algún lugar de su programa.
10 Cuando tomo la definición de mi clase Para esto, use
anterior a las declaraciones de datos, las " CLASE <clase> DEFINICIÓN DIFERIDA " o
variables no se reconocen. simplemente haga sus definiciones relacionadas con
esta clase después de que se incluya.
¿Puedo mostrar listas jerárquicas No. ALV Grid Control no admite
11
usando el control de cuadrícula ALV? listas jerárquicas.
Hice una cuadrícula ALV editable y Exactamente. Usa el método
estoy utilizando " REFRESH_PROTOCOL "De la instancia
" datos_cambiados "Evento a vino a través del parámetro en el lugar
controlar la entrada de datos. Sin embargo, apropiado para superar.
12
obtuve entradas de registro, algunas de las
cuales existen allí, aunque están corregidas.
¿Hay algún problema de actualización?
¿Dónde?
Yo utilizo " print_top_of_page " Su tamaño de línea está restringido. Intente cambiar el

evento. Sin embargo, en la vista previa, diseño del encabezado de su página.

13 establece el tamaño de la línea al máximo de


80 y el tamaño de la lista. Cómo puedo
superar esto?
¿El control de cuadrícula ALV En otras interfaces que no sean SAPGUI para
admite arrastrar y soltar? HTML, el control ALV Grid admite Arrastrar y
14
soltar. Sin embargo, este tema no se incluyó en el
contexto de este tutorial. Compruebe si una
Las columnas mostradas no son las variante de pantalla está activada. Si este no es el
15 que programé motivo, vuelva a inspeccionar su catálogo de
campo.

También podría gustarte