✒️ABAP POO El catálogo de campos del ALV GRID CONTROL
ABAP POO El catálogo de campos del ALV GRID CONTROL
EL CATALOG DE CAMPOS DEL ALV_GRID_CONTROL
Es una tabla interna donde se almacenan los campos que se visualizaran en la salida de un reporte ALV
Las columnas que mostramos en un reporte son especificadas por el programador.
La tabla interna del catálogo son del tipo estándar LVC_T_FCAT.
Cada una de las líneas que componen esta tabla son del tipo LVC_S_FCAT, está compuesta por los campos que determinan las propiedades que se pueden configurar de cada una de las columnas que se mostrarán en el reporte ALV GRID.
En el ejercicio de la lección anterior, todas las definiciones de los campos y propiedades de los mismos se tomaron en el reporte ALV fueron tomadas de la tabla ZTABLA_USUARIOS mediante la asignación del parámetro I_STRUCTURE_NAME = ‘ZTABLA_USUARIO’ en la llamada al método SET_TABLE_FOR_FIRST_DISPLAY.
Nota: es posible configurar las propiedades de cada uno de los campos de la estructura LVC_S_FCAT de modo que dichas configuraciones se apliquen en la salida del reporte ALV.
Las principales propiedades de la estructura LVC_S_FCAT:
TABNAME: contiene el nombre de la tabla interna de salida del ALV.
FIELDNAME: contiene el nombre del campo de la tabla interna del ALV.
REF_TABLE: tabla de referencia del diccionario de datos ABAP.
REF_FIELD: campo perteneciente a la tabla de ref. del dic. De datos ABAP.
CHECKBOX: muestra un checbox
COL_POS: contiene la posición de la columna. Solo es relevante si las posiciones relativas de las columnas no son idénticas a la secuencia de los campos en el catalgo de campos cuando se muestran por primera vez el listado. El parámetro determina la posición relativa del campo dentro de la lista de salida. Se puede modificar el orden de las columnas de manera dinámica, el orden de las columnas corresponderá a la secuencia de campos en el catálogo de campos.
DO_SUM: totales para la columna (SI/NO)
HOTSPOT: columna sensible al hotspot (SI/NO)
OUTPUTLEN: determina el ancho de una columna. Si el campo de la ALV tiene una referencia al diccionario de datos, se puede dejar este campo con el valor inicial y tomara el valor de longitud de salida del dominio del campo del diccionario de datos. Si no tiene una referencia a un diccionario de datos debemos especificar aquí la longitud de salida del campo que deseamos.
EMPHASIZE: destaca el contenido de una columna. Para destacar con el color estándar se debe asignar una ‘X’.
KEY: la columna es clave (SI/NO)
LOWERCASE: Mayúscula o Minúscula (SI/NO)
NO_OUT: no se muestra la columna (SI/NO). La columna está oculta en la lista (pantalla o impresora), pero aparece en el campo de selección de cuadros de di´logo de las funciones estándar (clasificación y filtros).
SCRTEXT_S: descripción corta del campo.
SCRTEXT_M: descripción media del campo
SCRTEXT_L: descripción larga del campo.
JUST: alineación del contendio de la columna. ‘R’ para derecha ‘L’ para izquierda ‘C’ centrado, siempre que los tipos sean CHAR o NUMC.
NO_ZERO: no muestra el valor ‘0’ (SI/NO)
NO_SIGN: no muestra el signo (SI/NO).
AGREGAR O CAMBIAR LAS PROPIEDADES DE LAS COLUMNAS DEL CATÁLOGO
Tomando como ejemplo el report ALV que realizamos en la lección anterior, veremos cómo hacer para agregar columnas o cambiar las propiedades de las columnas ya existentes en el report.
Lo primero es definir la tabla interna y la estructura que utilizaremos para trabajar con el catálogo tal como vemos a continuación:
TYPE-POOLS: slis, icon.
DATA: BEGIN OF wa_usuarios,
………dni TYPE z_dni,
……..nombre_ape TYPE z_nombre_ape,
……..estado_usu TYPE z_estado_usu,
……..icono_estado_usu TYPE icon-id,
……...direccion TYPE z_dirección,
………fecha_nac TYPE z_fecha_nac,
………estado-civil TYPE z_estado_civil,
END OF wa_usuarios.
DATA: ti_usuarios LIKE TABLE OF wa_usuarios,
………st_usuarios LIKE LINE OF ti_usuadios.
DATA: ti_catalog TYPE lvc_t_fcat,
………st_catalogo LIKE LINE OF ti_catalogo,
……..ok_code TYPE sy-ucomm,
……..obj_grilla TYPE REF TO cl_gui_alv_grid,
……..obj_contenedor TYPE REF TO cl_gui_custom_container.
Como vamos a usar un campo que será un icono agregamos en la declaración TYPE-POOLS a icon.
Creamos la subrutina ARMAR_CATALOGO, en esta se definen las propiedades de cada una de las columnas:
MODULE crear_objetos_0100 OUTPUT.
…IF obj_contenedor IS INITIAL.
……CREATE OBJECT obj_contenedor EXPORTING container_name = ‘CONTENEDOR’.
……CREATE OBJECT obj_grilla EXPORTING i_parent = o_contenedor.
……PERFORM armar_catalogo.
……CALL METHOD obj_grilla->set_table_for_first_display
………CHANGING
…………it_outtab = ti_usuarios
…………it_fieldcatalgo = ti_catalogo[ ]
………EXCEPTIONS
…………OTHERS = 4.
…ELSE.
……CALL METHOD obj_grilla->refresh_table_display
………EXPORTING
…………i_soft_refresh = ‘X’
………EXCEPTIONS
…………finished = 1
…………OTHERS = .
…ENDIF
ENDMODULE
Dentro de la subrutina ARMAR_CATALOGO definimos las propiedades de cada una de las columnas del listado.
CLEAR ti_catalogo.
REFRESH ti_cataldo.
CLEAR st_catalogo.
St_catalogo-fieldname = ‘DNI’.
St_catalog-tabname = ‘TI_USUARIOS’.
St_catalogo-col-pos = 1.
St_catalgoo_outputlen = 10.
St_catalogo_scrtext_s = ‘DNI’.
St_catalogo_scrtext_m = ‘DNI’.
St_catalogo_scrtext_l = ‘DNI’.
APPEND st_catalogo TO ti_catalgo.
CLEAR st_catalogo.
St_catalogo-fieldname = ‘NOMBRE_APE’.
St_catalog-tabname = ‘TI_USUARIOS’.
St_catalogo-col-pos = 2.
St_catalgoo_outputlen = 25.
St_catalogo_scrtext_s = ‘nombre y apellidos’.
St_catalogo_scrtext_m = ‘nombre y apellidos’.
St_catalogo_scrtext_l = ‘nombre y apellidos’.
St_catalogo-just = ‘L’.
APPEND st_catalogo TO ti_catalgo.
Agregamos una nueva columna que sería un icono
CLEAR st_catalogo.
St_catalogo-fieldname = ‘ICONO_ESTADO_USU’.
St_catalog-tabname = ‘TI_USUARIOS’.
St_catalogo-col-pos = 4.
St_catalogo-icon =’X’.
St_catalogo-coltext = ‘Estado’.
APPEND st_catalogo TO ti_catalgo.
Hay 3 formas de completar el catálogo de campos:
La simple: Si la estructura de salida del report es idéntica a la estructura o tabla base de datos del diccionario de datos en el método SET_TABLE_FOR_FIRST_DIPLAY en el parámetro i_structure_name pasamos el nombre de la tabla.
la forma manual: a mano añadimos los campos.
La semiautomática: ejecutamos el módulo de funciones LBC_FILL_CATALOG_MERGE pasando como parámetro el nombre de la estructura que utilizara la función para generar el catalogo por nosotros en el parámetro i_estructura_name. Luego mediante un loop podemos modificar campos.
 
 
 
Agradecimiento:
Ha agradecido este aporte: Juan Carro
Sobre el autor
Publicación académica de Josep Antoni Lopez Moyano, en su ámbito de estudios para el Máster ABAP POO.
Josep Antoni Lopez Moyano
Profesión: It Manager - Espa?a - Legajo: QP26P
✒️Autor de: 375 Publicaciones Académicas
🎓Egresado de los módulos:
- Carrera Consultor en SAP HCM Nivel Inicial
- Carrera Consultor Basis NetWeaver Nivel Avanzado
- Carrera Consultor Basis NetWeaver Nivel Inicial
- Máster Funcional ABAP
- Máster ABAP Orientado a Objetos
- Carrera Consultor ABAP Nivel Avanzado
- Carrera Consultor ABAP Nivel Inicial