Marcar registros duplicados de una tabla

Hola, nuevamente requiero de su ayuda.

Tengo una tabla interna donde vienen las reservas y posiciones de reservas; pero en ocasiones se repite esa combinación RSNUM-RSPOS; cuando esto sucede debo marcar el registro; algo así (ver imagen):

TABLA

Como se puede ver los registros que se repiten se deben ir contando (las veces que se repite) y marcando con el numero de repetición; pero no deben ser borrados ni acumulados.

La idea final es enviar los datos en una tabla por grupo o marca a una función.

Agradezco su amable colaboración.

Hola GUILLE1.

Pareciera que aplicando un ordenamiento (SORT) en la tabla interna por los campos combinados RSNUM y RSPOS y dentro de un LOOP… con ruptura de control por los campos antes mencionado, pudieses lograr el resultado esperado

Gracias, me falto decir que soy algo nuevo en ABAP…:sweat_smile:

Intente hacerlo como tu dices, pero me agrupa el registro y no me toma la cantidad; a continuación muestro el código ejemplo:

REPORT duplicates.


TYPES:

    BEGIN OF ty_items_data.
TYPES:
  rsnum TYPE resb-rsnum,
  rspos TYPE resb-rspos,
  cant  TYPE i.
TYPES END OF ty_items_data.

TYPES:

 BEGIN OF ty_items_data2.
TYPES:

  rsnum TYPE resb-rsnum,
  rspos TYPE resb-rspos,
  cant  TYPE i,
  grupo TYPE i.
TYPES END OF ty_items_data2.

DATA: l_ti_item1 TYPE TABLE OF ty_items_data,
      l_ti_item2 TYPE TABLE OF ty_items_data2.

DATA: l_es_item1 LIKE LINE OF l_ti_item1,
      l_es_item2 LIKE LINE OF l_ti_item2.

DATA: l_cuenta TYPE i.


l_es_item1-rsnum = '100'.
l_es_item1-rspos = '1'.
l_es_item1-cant = 10.
APPEND l_es_item1 TO l_ti_item1.

l_es_item1-rsnum = '100'.
l_es_item1-rspos = '2'.
l_es_item1-cant = 10.
APPEND l_es_item1 TO l_ti_item1.

l_es_item1-rsnum = '100'.
l_es_item1-rspos = '3'.
l_es_item1-cant = 10.
APPEND l_es_item1 TO l_ti_item1.

l_es_item1-rsnum = '100'.
l_es_item1-rspos = '1'.
l_es_item1-cant = 20.
APPEND l_es_item1 TO l_ti_item1.

l_es_item1-rsnum = '200'.
l_es_item1-rspos = '1'.
l_es_item1-cant = 10.
APPEND l_es_item1 TO l_ti_item1.


SORT l_ti_item1 BY rsnum rspos ASCENDING.
LOOP AT l_ti_item1 INTO l_es_item1.

  AT NEW rspos.
    MOVE-CORRESPONDING l_es_item1 TO l_es_item2.
    CLEAR l_es_item2-grupo.
  ENDAT.
  ADD 1 TO l_es_item2-grupo.
  AT END OF rspos.
    APPEND l_es_item2 TO l_ti_item2.
  ENDAT.
ENDLOOP.


LOOP AT l_ti_item2 INTO l_es_item2.
  WRITE:/1 l_es_item2-grupo.
  WRITE: l_es_item2-rsnum.
  WRITE: l_es_item2-rspos.
  WRITE: l_es_item2-cant.
ENDLOOP.

image

Hola Guille1, estoy apenas iniciando en el mundo de los ABAPER.
Tal vez el tema lo tengamos aquí.

TYPES:
LLAVE TYPE I,
rsnum TYPE resb-rsnum,
rspos TYPE resb-rspos,
cant TYPE i.
TYPES END OF ty_items_data.

ANTES DEL SORT…

LOOP AT l_ti_item1.
CONCATENATE rsnum rspos into clave.
MODIFY l_ti_item1.
ENDLOOP.

SORT l_ti_item1 by clave.

LOOP AT l_ti_item1 INTO l_es_item1.

AT NEW clave.
MOVE-CORRESPONDING l_es_item1 TO l_es_item2.
CLEAR l_es_item2-grupo.
ENDAT.
ADD 1 TO l_es_item2-grupo.
AT END OF clave.
APPEND l_es_item2 TO l_ti_item2.
ENDAT.
ENDLOOP.

1 me gusta

Hola, lo que yo aria es:

  1. Ordenar por esos campos.
  2. Recorrer la tabla he ir sumando cada ciclo, en cada nuevo cambio de la combinación de esos dos campos comenzar de nuevo en la cuenta.

Mostrar resultado

Lo solucione con un While y un Loop.

Este tema se cerró automáticamente 91 días después del último post. No se permiten nuevas respuestas.