FILTER TABLE en ABAP

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

  1. Declaración de tipos: Se crea una estructura ty_filter que contiene dos campos: emp_id y project_id, que corresponden al identificador de empleado y al identificador de proyecto respectivamente. Luego, definimos la tabla interna ty_filter_tab como una HASHED TABLE con una clave única compuesta por ambos campos.
  2. Población de la tabla filter_tab: Utilizamos VALUE para definir los empleados y sus respectivos proyectos que deseamos filtrar (por ejemplo, el empleado con ID E001 en el proyecto P100, E002 en P200, y así sucesivamente).
  3. Selección de datos de la tabla ZASSIGNMENTS: Se seleccionan los campos emp_id, project_id, start_date, y end_date de la tabla ZASSIGNMENTS, que contiene las asignaciones de empleados a proyectos. Los datos se almacenan en la tabla interna assignments_tab.
  4. Filtrado con FILTER: Usamos FILTER para extraer solo las asignaciones que coincidan con los criterios de filtrado definidos en filter_tab, comparando los campos emp_id y project_id de ambas tablas.
  5. 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