MUNDOSAP

MUNDOSAP (foro/index.php)
-   Programación ABAP IV (foro/forumdisplay.php?f=4)
-   -   Cargar de dos tablas a una - SELECT INTO TABLE FROM (foro/showthread.php?t=73737)

zayas555@gmail.com 08/04/15 12:00:54

Cargar de dos tablas a una - SELECT INTO TABLE FROM
 
Buenos días, estoy queriendo realizar la siguiente operación quiero cargar datos de dos tablas distintas a una para luego mostrar en un reporte pero me sale el siguiente error en mi código:

Err.tmpo.ejec.: ITAB_DUPLICATE_KEY
A row with the same key already exists.

Este es mi código:

SELECT Z~mandt Z~kunnr K~name1 Z~zsd_fecha_nac Z~zsd_doc_ident Z~zsd_dom_parti
Z~zsd_dom_comer Z~zsd_est_civil Z~zsd_nacional Z~zsd_ruc
Z~zsd_telefono Z~zsd_celular Z~zsd_email Z~zsd_localidad
INTO TABLE gt_det_cliente
FROM zsd_det_cliente AS Z
JOIN KNA1 AS K
ON Z~name1 = K~name1
WHERE Z~kunnr IN p_kunnr
AND K~name1 IN so_name1
AND zsd_fecha_nac IN so_fnaci
AND zsd_doc_ident IN so_dni
AND zsd_dom_parti IN so_dompa
AND zsd_dom_comer IN so_domco
AND zsd_est_civil IN so_estci
AND zsd_nacional IN so_nacio
AND zsd_ruc IN so_ruc
AND zsd_telefono IN so_telef
AND zsd_celular IN so_celul
AND zsd_email IN so_email
AND zsd_localidad IN so_local.


El error me señala en la primera línea que expuse aquí.
Las tablas de donde deseo sacar los datos son KNA1 y zsd_det_cliente, los dos contienen el campo name1 pero solo está cargado en la tabla KNA1.
Les agradecería que me den una manito.

Desde ya muchas gracias.

oskymoreok 08/04/15 13:06:40

Proba lo siguiente
 
Siempre mante un orden, primero pone todos los Z y despues lo K no mesclado

SELECT z~mandt z~kunnr z~zsd_fecha_nac z~zsd_doc_iden z~zsd_dom_parti z~zsd_dom_comer z~zsd_est_civil z~zsd_nacional z~zsd_ruc z~zsd_telefono z~zsd_celular z~zsd_email z~zsd_localidad K~name1

Ahora utiliza este
INTO CORRESPONDING FIELDS OF gt_det_cliente "Esta tabla debe estar declara con header

FROM zsd_det_cliente AS Z
JOIN KNA1 AS K
ON Z~name1 = K~name1
WHERE Z~kunnr IN p_kunnr
AND K~name1 IN so_name1
AND zsd_fecha_nac IN so_fnaci
AND zsd_doc_ident IN so_dni
AND zsd_dom_parti IN so_dompa
AND zsd_dom_comer IN so_domco
AND zsd_est_civil IN so_estci
AND zsd_nacional IN so_nacio
AND zsd_ruc IN so_ruc
AND zsd_telefono IN so_telef
AND zsd_celular IN so_celul
AND zsd_email IN so_email
AND zsd_localidad IN so_local.

Avisame si sigue el error!

coloso 08/04/15 13:09:51

Hola compañero, el problema es que en la tabla que estás montando el resultado estás intentando metes dos veces o más el mismo registro, como has definido la tabla gt_det_cliente ?????

Has probado hacer un appending corresponding fields ....

SELECT budat hkont belnr shkzg wrbtr FROM bsas
APPENDING CORRESPONDING FIELDS OF TABLE it_temp
WHERE hkont = w_glacct "wa_cb-gl_account
AND bukrs IN (so_bukrs-low)
AND budat < so_date-low.

Luego ordena los registros y tienes que tener registros duplicados, es decir coinciden todos los campos...

Salu2.

zayas555@gmail.com 08/04/15 14:22:16

Hola oskymoreok, muchas gracias por responder.. al colocar este codigo:

SELECT K~name1 Z~mandt Z~kunnr Z~zsd_fecha_nac Z~zsd_doc_ident Z~zsd_dom_parti
Z~zsd_dom_comer Z~zsd_est_civil Z~zsd_nacional Z~zsd_ruc
Z~zsd_telefono Z~zsd_celular Z~zsd_email Z~zsd_localidad
INTO CORRESPONDING FIELDS OF gt_det_cliente
FROM zsd_det_cliente AS Z
JOIN KNA1 AS K
ON Z~name1 = K~name1
WHERE Z~kunnr IN p_kunnr
AND K~name1 IN so_name1
AND zsd_fecha_nac IN so_fnaci
AND zsd_doc_ident IN so_dni
AND zsd_dom_parti IN so_dompa
AND zsd_dom_comer IN so_domco
AND zsd_est_civil IN so_estci
AND zsd_nacional IN so_nacio
AND zsd_ruc IN so_ruc
AND zsd_telefono IN so_telef
AND zsd_celular IN so_celul
AND zsd_email IN so_email
AND zsd_localidad IN so_local.


El mensaje que me lanza es el siguiente:
Error sintaxis
Programa ZSD_REPORTE_CLIENTES
You cannot use an internal table as a work area.

PD: adjunto a esta respuesta el codigo completo del programa --»

zayas555@gmail.com 08/04/15 14:27:47

Hola coloso
Para que veas el codigo completo de como esta declarado te lo dejo en este link:

Voy a leer sobre el método que me sugeris.. porque soy nuevo en codigo abap..

Gracias!..

zayas555@gmail.com 08/04/15 14:39:35

Quizas no fui claro con lo que busco realizar..

Lo que pasa es que cuando se ejecuta el reporte Z, en la columna nombre (campo name1) no muestra algunos nombres de clientes.. pero cuando se ingresa en el registro si existe..

Verifiqué y se debe a que en el reporte se carga el valor de la tabla Z (zsd_det_cliente) que no tiene cargado este campo (nombre) pero en el registro si muestra porque estira de la tabla KNA1..

Mi idea es hacer que cuando carga en la tabla gt_det_cliente carge del campo de la tabla KNA1 y no de zsd_det_cliente.

El codigo sin editar es el siguiente:

coloso 08/04/15 14:56:10

Hola compañero para empezar el error que te daba al principio es por la declaración del tipo de tabla

gt_det_cliente TYPE SORTED TABLE OF zsd_det_cliente WITH UNIQUE KEY kunnr,

Al ser una tabla con unique key, si se repite el mismo nº de kunnr te debe de dar el error por eso, has probado con

gt_det_cliente like standard table of zsd_det_client with header line, si te salen luego algún kunnr repetido ?????

Haz lo que te dice oskymoreok, pero declara la tabla como te digo yo.

Salu2.

oskymoreok 08/04/15 18:00:17

Primero declara la tabla como te dice coloso, es importante que mantegas un orden poner los campos en el select

si Z es la primera tabla y el que mas campos en el select lleva, primero van esos ordenados dependiendo como estan declarados en la tabla zsd_det_cliente

SELECT

Z~mandt Z~kunnr Z~zsd_fecha_nac Z~zsd_doc_ident Z~zsd_dom_parti Z~zsd_dom_comer Z~zsd_est_civil Z~zsd_nacional Z~zsd_ruc Z~zsd_telefono Z~zsd_celular Z~zsd_email Z~zsd_localidad

"Despues irian todos los correspondiente a la segunda tabla kna1, en tu caso es uno solo

K~name1

INTO CORRESPONDING FIELDS OF gt_det_cliente
FROM zsd_det_cliente AS Z
JOIN KNA1 AS K
ON Z~name1 = K~name1




En el codigo que me dijiste pusiste K~name1 primero y va ultimo, te explico, cuando pones into corresponding field va a buscar por cada campo de select en tu tabla donde se encuentra pra guardarla, pero si pones into to buscaria de a uno y no seria optimo, es importante que respetes siempre el orden

zayas555@gmail.com 08/04/15 19:17:49


ayaxrojo 04/06/15 17:36:33

Ya lo solucionaste pero me parece que el error que te mandaba es por que estas intentando metesr una WA en una tabla.

INTO CORRESPONDING FIELDS OF gt_det_cliente

Tendrias que usar :
INTO CORRESPONDING FIELDS OF TABLE gt_det_cliente


Husos Horarios son GMT. La hora en este momento es 07:02:57.

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