Registros Duplicados

Tengo una duda con respecto a la duplicidad de registro. Se me solicita los Materiales MATNR duplicados, unirlos (que se muestre 1 Solo), teniendo en cuenta unir solo los que tengan el mismo VBELN.

A su vez los registros que sean duplicados indicar (en otra tabla), las fechas de esos registros (Campor ERDAT)

image

Alguna sugerencia?

No entiendo nada.
Estos datos están en tablas estándar? (cuales)
Dónde querrías unirlos?

Tengo los registros cargados en una tabla llamada it_vbap (vbap por la tabla Z), realizo unos filtros y obtengo la información que muestro. Debo ahora los registros en el campo MATNR eliminar los duplicados, tomando en consideración que solo se eliminaran los duplicados que tengan el mismo VBELN. Por ejemplo los que tengan VBELN 2300000083 no se tocan, pero VBELN 2300000084 notese que el MATNR 400069 y 400072 se repiten, entonces debo unirlos (o eliminar la cantidad de registros MATNR) iguales bajo el mismo VBELN y de cada registro eliminado tomar su fecha ERDAT, pues este ira para otra tabla it_historia que llevara ese UNICO registro de MATNR y las fechas en que estuvo ese registro existente. Creo me explique mas detalladamente.

Hola, creo que masomenos veo lo que estas necesitando:

  1. En un tabla SOLO tener los registros sin duplicidad por el campo VBELN

  2. En otra tabla TENER los registros duplicados con las fechas (ERDAT).

Solución:

* Recorremos la tabla original
  LOOP AT it_vbap ASSIGNING <ls_vbap>.
    AT NEW vbeln.
*     Por cada nuevo VBLEN, ira completando una tabla
      APPEND lt_tabla_1 ASSIGNING <ls_vbap>.
      CONTINUE. 
    ENDAT.
*   Si el flujo de datos pasa por aca, es por que hay un duplicado
*   Completamos una tabla con los VBELN y su correspondiente fecha
    APPEND INITIAL LINE TO lt_tabla_2 ASSIGNING <ls_tabla_2>.
    <ls_tabla_2>-vbeln = <ls_vbap>-vbeln.
    <ls_tabla_2>-erdat = <ls_vbap>-erdat.
  ENDLOOP.

De esta forma tendrás 2 tablas, la tabla 1 con los VBLEN sin duplicar y en la tabla 2 tendrás los registros duplicados con las fechas. Si sumas la cantidad de registros de ambas tabla, obtendrás la cantidad total.

Es una solución rapida que te ofresco, deberías prestar atención a la declaración de las tablas y estructuras, pero creo que esto te ayudará a obtener los que necesitas.

1 me gusta

Van por ahi los tiros:

Te explico, los VBELN pueden tener 1 o muchos materiales, en caso de tener muchos materiales, verificar que los materiales que este repetidos (bajo el mismo VBELN) se coloque solo 1 MATNR con su VBELN Correspondiente en conjunto de sus fechas, por ejemplo:

Tengo la tabla con esta data
image

Y deseo obtener la siguiente tabla
image

Como puedes ver, los materiales que posean el mismo VBELN se mueven a un solo registro, indicando sus fechas respectivas

Bien, cambia la estrategia.

Una solución sería recorrer la Tabla 1 (la original), previamente ordenada por número de material y documento de venta.
Luego por cada material nuevo, crear registro en al Tabla 2 (la final), y por cada repetición de material, completar el correspondiente campo de fecha, esto se puede hacer de forma dinámica.

* Ordenamos por material y documento. 
  SORT tabla_1 by matnr vbeln. 

* Recorremos la tabla principal
  LOOP AT <tabla_1> ASSIGNING <ls_tabla_1>.
    
*   Por cada nuevo número de material iremos ingresando registros en tabla 2
    AT NEW matnr.
*     Contador de materiales, inicializamos en 2 
      lv_num = 2. 
      
      APPEND INITIAL LINE TO <tabla_2> ASSIGNING <ls_tabla_2>.
      <ls_tabla_2>-vbeln  = <ls_tabla_1>-vbeln.
      <ls_tabla_2>-matnr  = <ls_tabla_1>-matnr.
      <ls_tabla_2>-fecha1 = <ls_tabla_1>-erdat.
      CONTINUE.
      
    ENDAT.
    
*   Validación, por las capturas se ve que no se puede ingresar mas de 4 materiales por documento.
    IF lv_num EQ 5.
      CONTINUE. 
    ENDIF.

*   Asignamos de forma dinámica el campo a completar de la tabla 2
    CONCATENATE '<ls_tabla_2>-fecha' lv_num INTO lv_fecha.
    ASSIGN (lv_fecha) TO <ls_fecha>.
    
*   Mapeamos la fecha
    <ls_fecha> = <ls_tabla_1>-erdat.
    
*   Sumamos 1, para la siguiente posición 
    lv_num = lv_num + 1.

  ENDLOOP.

La solución es como un molde, debes prestar atención a la declaración de las variables y estructuras. El Field-symbol <ls_fecha>, declararlo sin tipo.

Comentarnos si te sirve la solución. Salu2

1 me gusta

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