Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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.
UNIX®, X / Open®, OSF / 1® y Motif® son marcas comerciales registradas de Open Group.
HTML, DHTML, XML, XHTML son marcas comerciales o marcas comerciales registradas de W3C®,
World Wide Web Consortium, Massachusetts Institute of Technology.
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
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 ...
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.
* - - 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.
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.
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_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_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.
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_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
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
Parámetro Sentido
¡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.
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:
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
Si se establece este campo, todas las celdas de esta columna son sensibles al hotspot.
HOTSPOT
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:
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.
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.
tipo lvc_s_fcat.
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'.
ENDFORM.
tipo lvc_s_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.
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_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_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_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.
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.
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.
ENDFORM. "prepare_layout
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.
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
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
GE
• 3
P: RIAF norte te T r_t T h O mi PAG e_v O mi F Nuevo Testamento Pensilvania
GE
ENDFORM.
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.
Usando estos métodos, en cualquier momento durante la ejecución, puede obtener el contenido y
modificarlos.
....
ENDLOOP.
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.
ENDFORM. "prepare_sort_table
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.
ENDFORM. "prepare_filter_table
• Varias filas
• Varias filas
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.
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
X Color Destinado a
1 gris azulado encabezados
3 amarillo totales
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.
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.
Parte del código 14 - Agregar una tabla interna que contendrá datos de color de celda
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.
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.
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.
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.
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.
ENDFORM. "prepare_drilldown_values
Código Parte 20 - Preparando valores para el menú desplegable con el identificador '1'
haga doble clic Consultar un doble clic en una celda del control de cuadrícula
ALV
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 22 - Creación de una instancia de controlador de eventos y registro de métodos de controlador
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 ”.
ENDFORM.
Código Parte 24 - Una implementación de ejemplo para el método, que maneja el evento "double_click"
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.
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
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.
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ú
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'
TERMINARA SI .
CUANDO 'UE'.
LEER TABLA gt_list INDEX ls_selected_row-row_id. SI sy-subrc = 0.
....
ENDCASE.
ENDFORM.
CASO e_ucomm.
ENDFORM.
* - - 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.
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.
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
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:
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'.
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 .
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.
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:
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}.
MÉTODO handle_on_f1.
MÉTODO FINAL.
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.
Código Parte 36 - Preparando la tabla para que los campos se registren para desencadenar el evento F4
MÉTODO handle_on_f1.
MÉTODO FINAL.
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.
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