MUNDOSAP

Regresar   MUNDOSAP > DESARROLLO > Programación ABAP IV
Nombre de Usuario
Contraseña
Home Descargas Registrar FAQ Miembros Calendario Buscar Temas de Hoy Marcar Foros Como Leídos




 
Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Viejo 18/06/08, 15:30:09
Avatar de stormshadow
stormshadow stormshadow is offline
Senior Member
 
Fecha de Ingreso: jun 2008
Mensajes: 117
Ayuda con registros duplicados

Hola gente, pues traigo esta leve duda, yo estaba creando un programa para extraer registros duplicados de una tabla, bien pues un bro de aquí me alivianó y me dió una solución, estubo bien pero tardaba en sacar todos los registros, ahora me ayudaron a crear este que voy a mostrar acontinuación, pero me falta algo, bien explico, este programa extrae todos los registros duplicados del campo bstnk, que es la clave del pedido, ok pues hay otra tabla la cual contiene un campo que dice el motivo por el que se rechazó ese pedido, pues yo lo que quiero es que si por ejemplo un pedido se repite ocho veces y uno de esos tiene motivo de rechazo, excluirlo y ahora mostrar solo 7 registros repetidos, no sé si me de a entender...

Eh pensado en crearlo con un loop pero no me sale pero bueno espero su ayuda, gracias!


************************************************** **********************
* TABLAS
************************************************** **********************
TABLES: vbak,
vbap.
************************************************** **********************
* ESTRUCTURAS
************************************************** **********************
DATA: BEGIN OF t_pedidos OCCURS 0,
vbeln LIKE vbak-vbeln, "REFERENCIA
bstnk LIKE vbak-bstnk, "CLAVE PEDIDO
ernam LIKE vbak-ernam, "NOMBRE
audat LIKE vbak-audat, "FECHA
abgru LIKE vbap-abgru, "MOTIVO RECHAZO
END OF t_pedidos.

DATA: BEGIN OF t_clavesAux OCCURS 0,
bstnk LIKE vbak-bstnk, "CLAVE PEDIDO
Numreg TYPE i,
END OF t_clavesAux.

Data: t_claves LIKE STANDARD TABLE OF ZTSD_PEDUP,
wa_claves LIKE LINE OF t_claves.

START-OF-SELECTION.

DELETE FROM ZTSD_PEDUP.

IF sy-subrc EQ 0.

SELECT
vbak~bstnk "CLAVE DEL PEDIDO
count( * ) As Numreg
FROM vbak
INTO TABLE t_clavesAux
WHERE vbak~bstnk NE ''
Group BY bstnk
HAVING count( * ) GT 1.

LOOP AT t_clavesAux INTO wa_aux.

wa_claves-bstnk = wa_aux-bstnk.
wa_claves-NumReg = wa_aux-NumReg.

APPEND wa_claves TO t_claves.

ENDLOOP.

INSERT ZTSD_PEDUP FROM TABLE t_claves.

SELECT DISTINCT vbeln bstnk ernam audat
FROM vbak
INTO TABLE t_pedidos
WHERE bstnk IN ( SELECT bstnk FROM ZTSD_PEDUP ).


ENDIF.

Úlima edición por stormshadow fecha: 18/06/08 a las 16:11:45.
Responder Con Cita
  #2  
Viejo 20/06/08, 19:00:26
Avatar de stormshadow
stormshadow stormshadow is offline
Senior Member
 
Fecha de Ingreso: jun 2008
Mensajes: 117
Hola gente, soy yo de nuevo, pues bien, e resuelto mi problema, y ahora ya conseguí lo que quería, pero ahora, hay otro leve requerimiento, ya eh sacado los registros duplicados, si alguno de ellos tiene un motivo de rechazo ya lo excluí pero ahora les voy a explicar lo que sigue:
Como ponía anteriormente, si hay un registro que se repite 8 veces y uno tiene motivo de rechazo tenía que excluirlo, pues lo e hecho, pero ahora si por ejemplo, un registro está repetido dos veces y uno de estos dos tiene motivo de rechazo pues mi programa lo va a excluir y me va a quedar solo uno, y ese me lo va a mostrar, lo cual no tiene porque! porque ya va a ser solo un registro y el cual ya no va a estar duplicado...
Lo que yo tengo que hacer es que en ese tipo de casos ya no me lo muestre, no sé si me expliqué, bueno ojalá me puedan ayudar, eh pensado en hacer esto con un contador, pero pues espero sus respuestas, gracias!!
Eh aquí mi código:

REPORT ZSD_PEDIDOSDUPLICADOS.


TABLES: vbak,
vbap.

DATA: BEGIN OF t_pedidos OCCURS 0,
vbeln LIKE vbak-vbeln, "REFERENCIA
bstnk LIKE vbak-bstnk, "CLAVE PEDIDO
ernan LIKE vbak-ernam, "NOMBRE
audat LIKE vbak-audat, "FECHA
refer LIKE vbap-vbeln,
abgru LIKE vbap-abgru,
END OF t_pedidos.

DATA: BEGIN OF t_clavesAux OCCURS 0,
bstnk LIKE vbak-bstnk, "CLAVE PEDIDO
Numreg TYPE i,
END OF t_clavesAux.

DATA: BEGIN OF t_motaux OCCURS 0,
vbeln LIKE vbap-vbeln, "REFERENCIA
abgru LIKE vbap-abgru,
END OF t_motaux.

Data wa_aux LIKE LINE OF t_clavesAux.

Data: t_claves LIKE STANDARD TABLE OF ZTSD_PEDUP,
wa_claves LIKE LINE OF t_claves.



START-OF-SELECTION.


DELETE FROM ZTSD_PEDUP.

IF sy-subrc EQ 0.

SELECT
vbak~bstnk "CLAVE DEL PEDIDO
count( * ) As Numreg
FROM vbak
INTO TABLE t_clavesAux
WHERE vbak~bstnk NE ''
Group BY bstnk
HAVING count( * ) GT 1.

LOOP AT t_clavesAux INTO wa_aux.

wa_claves-bstnk = wa_aux-bstnk.
wa_claves-NumReg = wa_aux-NumReg.

APPEND wa_claves TO t_claves.

ENDLOOP.

INSERT ZTSD_PEDUP FROM TABLE t_claves.

SELECT DISTINCT vbeln bstnk ernam audat
FROM vbak
INTO TABLE t_pedidos
WHERE bstnk IN ( SELECT bstnk FROM ZTSD_PEDUP ).

SORT t_pedidos BY bstnk.


LOOP AT t_pedidos.

SELECT DISTINCT vbeln abgru
FROM vbap
APPENDING TABLE t_motaux
WHERE vbeln EQ t_pedidos-vbeln
AND abgru NE ''.

IF sy-subrc EQ 0.

DELETE t_pedidos.

ENDIF.

ENDLOOP.

ENDIF.


LOOP AT t_pedidos.
WRITE:/ t_pedidos-vbeln,
t_pedidos-bstnk,
t_pedidos-ernan,
t_pedidos-audat,
t_pedidos-refer,
t_pedidos-abgru.
ENDLOOP.


LOOP AT t_motaux.
WRITE:/ t_motaux-vbeln,
t_motaux-abgru.
ENDLOOP.
Responder Con Cita
  #3  
Viejo 20/06/08, 19:51:50
ludmila22 ludmila22 is offline
Junior Member
 
Fecha de Ingreso: may 2008
Mensajes: 24
analicemos un poco:

el registro que debe mostrar debe ser distinto de rechazado y además debe tener un duplicado por lo menos.
Y hacer un write sólo cuando estas condiciones son ciertas

Entonces tenemos un loop a la tabla en cuestión

un if para que cuando se cumplan las condiciones enumeradas más arriba se haga un then write el record que corresponda. Ya sea haciendo un write de cada campo del registro o solo de uno.

Espero haber echado algo de luz.
Responder Con Cita
  #4  
Viejo 23/06/08, 15:41:36
Avatar de stormshadow
stormshadow stormshadow is offline
Senior Member
 
Fecha de Ingreso: jun 2008
Mensajes: 117
Ey que tal, gracias por tú respuesta, de hecho si m ayudaste, solo que tengo un leve problemita de sintaxis, mira esto fué lo que hize:

LOOP AT t_pedidos.
SELECT DISTINCT vbeln
FROM vbap
APPENDING TABLE t_motaux
WHERE vbeln EQ t_pedidos-vbeln.
IF t_motaux-vbeln GT 1.
LOOP AT t_pedidos.
WRITE:/ t_pedidos-vbeln,
t_pedidos-bstnk,
t_pedidos-ernan,
t_pedidos-audat,
t_pedidos-refer,
t_pedidos-abgru.
ENDLOOP.

ENDIF.

ENDLOOP.


Pero no me imprime nada podrían ayudarme??

--------
Pongo el código completo:

START-OF-SELECTION.


DELETE FROM ZTSD_PEDUP.

IF sy-subrc EQ 0.

SELECT
vbak~bstnk "CLAVE DEL PEDIDO
count( * ) As Numreg
FROM vbak
INTO TABLE t_clavesAux
WHERE vbak~bstnk NE ''
Group BY bstnk
HAVING count( * ) GT 1.

LOOP AT t_clavesAux INTO wa_aux.

wa_claves-bstnk = wa_aux-bstnk.
wa_claves-NumReg = wa_aux-NumReg.

APPEND wa_claves TO t_claves.

ENDLOOP.

INSERT ZTSD_PEDUP FROM TABLE t_claves.

SELECT DISTINCT vbeln bstnk ernam audat
FROM vbak
INTO TABLE t_pedidos
WHERE bstnk IN ( SELECT bstnk FROM ZTSD_PEDUP ).

SORT t_pedidos BY bstnk.


LOOP AT t_pedidos.

SELECT DISTINCT vbeln abgru
FROM vbap
APPENDING TABLE t_motaux
WHERE vbeln EQ t_pedidos-vbeln
AND abgru NE ''.

IF sy-subrc EQ 0.

DELETE t_pedidos.

ENDIF.

ENDLOOP.


LOOP AT t_pedidos.
SELECT DISTINCT vbeln
FROM vbap
APPENDING TABLE t_motaux
WHERE vbeln EQ t_pedidos-vbeln.
IF t_motaux-vbeln GT 1.
LOOP AT t_pedidos.
WRITE:/ t_pedidos-vbeln,
t_pedidos-bstnk,
t_pedidos-ernan,
t_pedidos-audat,
t_pedidos-refer,
t_pedidos-abgru.
ENDLOOP.

ENDIF.

ENDLOOP.



ENDIF.

Úlima edición por stormshadow fecha: 23/06/08 a las 15:52:37.
Responder Con Cita
  #5  
Viejo 23/06/08, 19:03:55
Avatar de stormshadow
stormshadow stormshadow is offline
Senior Member
 
Fecha de Ingreso: jun 2008
Mensajes: 117
Bien, soy yo una vez más jeje dirán a como friega este cuate, ps yo pregunto de ratito solo me contesto, bueno otra vez tengo un dilema, ya resolví todo el programa justo como lo quería, pero ahora hay un problemita, lo calo en DEV con el mandante 250 y me muestra registros, pero cuando lo calo en QAS mandante 400 no me muestra nada! más que una línea que pinté para dividir los registros, miren este es el código:

START-OF-SELECTION.


DELETE FROM ZTSD_PEDUP.

IF sy-subrc EQ 0.

SELECT
vbak~bstnk "CLAVE DEL PEDIDO
count( * ) As Numreg
FROM vbak
INTO TABLE t_clavesAux
WHERE vbak~bstnk NE ''
Group BY bstnk
HAVING count( * ) GT 1.

LOOP AT t_clavesAux INTO wa_aux.

wa_claves-bstnk = wa_aux-bstnk.
wa_claves-NumReg = wa_aux-NumReg.

APPEND wa_claves TO t_claves.

ENDLOOP.

INSERT ZTSD_PEDUP FROM TABLE t_claves.

SELECT DISTINCT vbeln bstnk ernam audat
FROM vbak
INTO TABLE t_pedidos
WHERE bstnk IN ( SELECT bstnk FROM ZTSD_PEDUP ).

SORT t_pedidos BY bstnk.


LOOP AT t_pedidos.

SELECT DISTINCT vbeln abgru
FROM vbap
APPENDING TABLE t_motaux
WHERE vbeln EQ t_pedidos-vbeln
AND abgru NE ''.

IF sy-subrc EQ 0.

DELETE t_pedidos.

ENDIF.

ENDLOOP.

SORT t_pedidos BY bstnk.

w_index = 0.
w_contador = 0.
CLEAR w_bstnk.

LOOP AT t_pedidos.
WRITE:/ t_pedidos-vbeln,
t_pedidos-bstnk,
t_pedidos-ernan,
t_pedidos-audat,
t_pedidos-refer,
t_pedidos-abgru.
ENDLOOP.



LOOP AT t_pedidos.

w_index = sy-tabix.

IF w_bstnk NE t_pedidos-bstnk.

IF w_contador EQ 1.

w_index = w_index - 1.

DELETE t_pedidos Index w_index.

ENDIF.

w_bstnk = t_pedidos-bstnk.

w_contador = 1.

continue.

ENDIF.

w_contador = w_contador + 1.


*
* WRITE:/ t_pedidos-vbeln,
* t_pedidos-bstnk,
* t_pedidos-ernan,
* t_pedidos-audat,
* t_pedidos-refer,
* t_pedidos-abgru.

ENDLOOP.


ENDIF.

WRITE:/ '---------------------'.
LOOP AT t_pedidos.
WRITE:/ t_pedidos-vbeln,
t_pedidos-bstnk,
t_pedidos-ernan,
t_pedidos-audat,
t_pedidos-refer,
t_pedidos-abgru.
ENDLOOP.


Alguién sabe porque sucede eso???
Responder Con Cita
  #6  
Viejo 25/06/08, 15:31:52
danny danny is offline
Member
 
Fecha de Ingreso: mar 2007
Mensajes: 36
Holas
los datos en QAS Y DEV son los mismos? pasaste el desarrollo a QAS?..

Saludos;
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Reglas de Mensajes
no puedes crear nuevos temas
no puedes responder temas
no puedes adjuntar archivos
no puedes editar tus mensajes

El código vB está On
Las caritas están On
Código [IMG] está On
Código HTML está Off
Saltar a Foro


Husos Horarios son GMT. La hora en este momento es 23:59:26.


www.mundosap.com 2006 - Spain
software crm, crm on demand, software call center, crm act, crm solutions, crm gratis, crm web