Mantén el cursor en la tecla DELETE en Se38.
Presiona F1 en... Lee los detalles en la documentación de SAP.
Aprenderás más sobre las opciones y limitaciones.
DELETE ADJACENT DUPLICATES FROM itab.
Extras:
1. ... COMPARANDO f1 f2 ...
2. ... COMPARANDO TODOS LOS CAMPOS
Efecto
Elimina las entradas duplicadas adyacentes de la tabla interna itab. Si hay n entradas duplicadas en sucesión, se conserva la primera entrada y se eliminan las siguientes n-1 entradas.
Dos líneas se consideran duplicadas si sus claves son idénticas.
El código de retorno se establece de la siguiente manera:
SY-SUBRC = 0:
Se encontró al menos una duplicada y al menos una entrada fue eliminada.
SY-SUBRC = 4:
No se encontraron duplicados, ninguna entrada fue eliminada.
Adición 1
... COMPARANDO f1 f2 ...
Efecto
Dos líneas de la tabla interna itab se consideran duplicadas si tienen contenidos idénticos en los campos f1, f2, ...
Adición 2
... COMPARANDO TODOS LOS CAMPOS
Efecto
Dos líneas de la tabla interna se consideran duplicadas si todos los contenidos de sus campos son idénticos.
Notas
La instrucción DELETE ADJACENT DUPLICATES funciona especialmente bien si has ordenado la tabla interna itab según los campos que deseas comparar al buscar duplicados. En este caso, eliminar duplicados adyacentes es lo mismo que eliminar todos los duplicados. La dirección de la ordenación es irrelevante.
Si no conoces una expresión de comparación hasta el tiempo de ejecución, puedes especificarla dinámicamente como el contenido del nombre del campo en la expresión COMPARANDO ... (nombre) .... Si el nombre está vacío en tiempo de ejecución, la expresión de comparación se ignora. Si el nombre contiene un nombre de componente no válido, se produce un error en tiempo de ejecución.
Puedes restringir aún más las expresiones de comparación, tanto estáticas como dinámicas, especificando desplazamiento y longitud.
Nota
Rendimiento:
Al eliminar una línea de una tabla interna, se incurre en costos de mantenimiento de índices. Estos dependen del índice de la tabla. El tiempo de ejecución es independiente del ancho de la línea de la tabla.
Eliminar una línea del medio de una tabla interna con 200 entradas generalmente requiere alrededor de 10 msn (microsegundos estandarizados).
Al eliminar un conjunto de entradas usando "DELETE itab FROM idx1 TO idx2." o "DELETE itab WHERE ...", los costos de mantenimiento de índices solo se incurren una vez. Esto significa que es considerablemente más eficiente que eliminar entradas en un bucle.
Si deseas eliminar entradas duplicadas adyacentes de una tabla interna, utiliza la variante "DELETE ADJACENT DUPLICATES FROM itab." en lugar de una construcción de bucle.
Espero que esto ayude en el futuro.