FILTER TABLE en ABAP
La sentencia FILTER TABLE en ABAP es una poderosa herramienta para trabajar con datos en SAP, permitiendo filtrar tablas internas de manera eficiente. En este artículo, exploraremos cómo funciona la sentencia FILTER, sus variantes más comunes, y cómo puedes implementarla para optimizar tu código ABAP. Además, incluimos ejemplos prácticos y consejos de rendimiento. Si estás buscando mejorar tus habilidades de programación en ABAP, este artículo es para ti.
¿Qué es la sentencia FILTER en ABAP?
La sentencia FILTER se utiliza para crear una nueva tabla interna que contiene solo las entradas de otra tabla interna que cumplen con una condición específica. Esto puede ser útil para reducir la cantidad de datos procesados en memoria, mejorando la eficiencia de las operaciones en grandes volúmenes de datos.
Sintaxis Básica
DATA(filtered_table) = FILTER #( itab WHERE condition ).
Aquí, itab
es la tabla interna que se filtra y condition
define los criterios para filtrar las entradas.
Ejemplo Sentencia FILTER en ABAP con Condiciones Simples
Una de las formas más comunes de usar FILTER en ABAP es con condiciones simples. Por ejemplo, si tienes una tabla interna con datos de empleados y solo necesitas aquellos que sean de un proyecto específico, puedes usar FILTER para extraer solo esos datos.
TYPES: BEGIN OF ty_filter,
emp_id TYPE zemployee-emp_id,
project_id TYPE zproject-project_id,
END OF ty_filter,
ty_filter_tab TYPE HASHED TABLE OF ty_filter
WITH UNIQUE KEY emp_id project_id.
DATA(filter_tab) = VALUE ty_filter_tab(
( emp_id = 'E001' project_id = 'P100' )
( emp_id = 'E002' project_id = 'P200' )
( emp_id = 'E003' project_id = 'P300' ) ).
SELECT emp_id, project_id, start_date, end_date
FROM zassignments
ORDER BY emp_id, project_id
INTO TABLE @DATA(assignments_tab).
" Filtrar asignaciones que coincidan con los filtros de empleado y proyecto
DATA(filtered_assignments) = FILTER #( assignments_tab IN filter_tab
WHERE emp_id = emp_id
AND project_id = project_id ).
cl_demo_output=>display( filtered_assignments ).
Explicación del código
- Declaración de tipos: Se crea una estructura
ty_filter
que contiene dos campos:emp_id
yproject_id
, que corresponden al identificador de empleado y al identificador de proyecto respectivamente. Luego, definimos la tabla internaty_filter_tab
como una HASHED TABLE con una clave única compuesta por ambos campos. - Población de la tabla
filter_tab
: UtilizamosVALUE
para definir los empleados y sus respectivos proyectos que deseamos filtrar (por ejemplo, el empleado con IDE001
en el proyectoP100
,E002
enP200
, y así sucesivamente). - Selección de datos de la tabla ZASSIGNMENTS: Se seleccionan los campos
emp_id
,project_id
,start_date
, yend_date
de la tablaZASSIGNMENTS
, que contiene las asignaciones de empleados a proyectos. Los datos se almacenan en la tabla internaassignments_tab
. - Filtrado con FILTER: Usamos
FILTER
para extraer solo las asignaciones que coincidan con los criterios de filtrado definidos enfilter_tab
, comparando los camposemp_id
yproject_id
de ambas tablas. - Visualización de resultados: Los resultados filtrados se muestran utilizando
cl_demo_output=>display
.
Beneficios del uso de FILTER en ABAP
El uso de FILTER en ABAP simplifica la búsqueda en grandes volúmenes de datos, permitiendo filtrar eficientemente proyectos asignados a empleados en base a condiciones definidas. El uso de una tabla HASHED es fundamental cuando se requiere una búsqueda rápida con claves únicas.
Para más ejemplos y mejores prácticas en ABAP, visita abapmachine.com o en SAP Help