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 16/05/12, 16:27:36
Karla V. Karla V. is offline
Senior Member
 
Fecha de Ingreso: may 2011
Mensajes: 101
Unhappy Urgente Left Join

Buen día, estoy tratando de hacer un select con varios left join pero SAP al parecer tiene un límite de left join...yo con sql si puedo hacerlo, lo que estoy tratando de hacer es buscar los precios de venta de todos los articulos y los que no lo tengan en la tabla A501 que aparezcan pero con precio en 0, para eso hice esto:
SELECT mard~matnr "Material
mard~werks "Centro
mard~lgort "Almacén
mard~labst "Libre Utilización
makt~maktx
mvke~kondm " Grupo de Material
A501~PLTYP "tipo de precio Z1 o Z2
KONP~KBETR "PRECIO
INTO CORRESPONDING FIELDS OF TABLE t_data
FROM mard
left outer JOIN makt
ON makt~matnr EQ mard~matnr AND makt~spras = 'S'
inner JOIN mvke " para sacar el grupo de material pero por material
ON mvke~matnr EQ makt~matnr " saca dos posiciones.
inner JOIN A501 "tipo de precio Z1 o Z2
ON A501~matnr EQ makt~matnr
and A501~werks = mard~werks
inner JOIN KONP "PRECIO
ON KONP~KNUMH EQ A501~KNUMH
WHERE mard~werks IN s_werks
AND mard~matnr IN s_matnr
AND mard~lgort IN s_lgort
AND A501~PLTYP IN S_TIPO "z1 o z2
AND mvke~kondm IN s_kondm
aNd A501~DATBI EQ '99991231'.
Que otra forma se les ocurre sin usar varios left?
Responder Con Cita
  #2  
Viejo 16/05/12, 19:52:09
Danielaabap Danielaabap is offline
Junior Member
 
Fecha de Ingreso: may 2012
Mensajes: 2
Sin foto no hay ayuda
Responder Con Cita
  #3  
Viejo 16/05/12, 21:04:28
Avatar de kibo
kibo kibo is offline
Senior Member
 
Fecha de Ingreso: may 2011
Localización: Quilmes - Argentina
Mensajes: 177

Daniela pide foto de karla? estas cosas existen en las abaperas?
Responder Con Cita
  #4  
Viejo 17/05/12, 15:04:02
Karla V. Karla V. is offline
Senior Member
 
Fecha de Ingreso: may 2011
Mensajes: 101
jajaja pero que esta pasando aquí? jajaja la fotos que les puedo dar es la del tremendo error que me genera sap cuando hago muchos left jejejejeje conformense con saber que son 100 90 60 jajaja no mentira
Responder Con Cita
  #5  
Viejo 26/05/12, 01:58:41
angelcruzg angelcruzg is offline
Junior Member
 
Fecha de Ingreso: mar 2006
Mensajes: 22

¿ Puedes colocar el texto completo del DUMP que te genero?
Responder Con Cita
  #6  
Viejo 29/05/12, 06:30:15
jtristan jtristan is offline
Senior Member
 
Fecha de Ingreso: oct 2007
Mensajes: 240
He hecho una prueba con varios joins y no me da ningún problema.

select
vbak~vbeln
into table
t_
from
vbak
left outer join
vbap
on
vbak~vbeln = vbap~vbeln
inner join
mara
on
vbap~matnr = mara~matnr
inner join
MAKT
on
mara~matnr = makt~matnr and
spras = sy-langu
INNER JOIN
TVak
on
vbak~auart = TVAK~auart
inner join
TVAU
on
vbak~augru = tvau~augru.

Igual viendo el dump podríamos hacernos alguna idea más concreta. Puedes probar, a ir haciendo la sql por parte, primero el left join a ver si si que recoges datos y después ir añadiendo cada uno de los inner join, a ver en qué punto te da error.
También podrías sustituir los inner join por for all entries in. Pierdes rendimiento pero podría valerte.

Un saludo.
Responder Con Cita
  #7  
Viejo 29/05/12, 20:09:22
Siem Siem is offline
Member
 
Fecha de Ingreso: jul 2009
Mensajes: 33
Hacer un join para obtener un campo de una tabla no es muy eficiente. Por ejemplo, para obtener el nombre del material metes en el join a la MAKT para obtener solo el maktx.

Es mejor ver con los datos de los que partes, no se si el material sera uno de ellos y obtener de la MARD los que vas a tratar y meterlos en una TI_MARD. Luego haces un select into table a una tabla interna for all entries de los materiales que tienes en TI_MARD por el campo que relacione las dos tablas.

Y finalmete recorres la tabla TI_MARD actualizando el campo maktx a partir de esa segunda TI, haciendo un read table.

Las TI las puedes definir incluso ordenadas para que vaya mas rapido.

Si consigues sacar mas de una tabla del join, el rendimiento mejorará. Pero debes tener cuidado con los for all entries, que si no lo haces bien, puede ser hasta peor.
Responder Con Cita
  #8  
Viejo 29/05/12, 20:33:45
Avatar de DCErick
DCErick DCErick is offline
Moderator
 
Fecha de Ingreso: mar 2006
Localización: Monterrey
Mensajes: 1,090

+1 Si fuera face le diera Like IT....

Adicional, el unico problema con el FOR ALL ENTRIES es que lo hagas con una tabla interna vacía, solo se debe tener cuidado de no ejecutar el select cuando la tabla está vacía y listo, lo demas debe andar bien.

Y viendo el select la verdad si está bien pesado, mas vale hacer muchisimas mas líneas de código pero con buen performance que una sola línea que matara el servidor, Siem ya puso un pequeño "How to do" y recomiendo que sea de esa forma.
__________________
-------------------
¿Dudas para descargar manuales? Ver este tema ->
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 20:06:34.


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