cancel
Showing results for 
Search instead for 
Did you mean: 

Ayuda con Query

Former Member
0 Kudos

Buen día Ingenieros

estoy haciendo un informe pero tengo unas dudas

el informe se basa en el proceso de compras que empieza desde solicitud de compra hasta factura de proveedores 

en enlace de las tablas creo que lo hice bien , pero cuando hay una solicitud que tiene varias ordenes de compra,  me muestra la solicitud la linea y las ordenes en total que se hicieron en la solicitud   , como se ve en la imagen llamada solicitudes, Adjunto imagen

la idea es que muestre cada linea con su orden de pedido

este es el código SQL

SELECT  DISTINCT

T0.ReqName as Usuario,

T1.Dscription,

T0.DocDate as Fecha_SC,

T1.U_FechaEntrega as Fecha_SS,

T3.DocDate as Fecha_OC,

T5.DocDate as Fecha_EM,

T5.U_FechaZF,

T7.DocDate as Fecha_FP,

T0.DocNum 'S.C',

T3.DocNum 'O.C',

T5.DocNum 'E.M',

T7.DocNum 'F.P',

Datediff(day,T0.DocDate,

T3.DocDate) as D_Mora,

Datediff(day,T0.DocDate,

T1.U_FechaEntrega) as D_Mora_SS

FROM OPRQ T0 INNER JOIN PRQ1 T1 ON T0.DocEntry = T1.DocEntry

  LEFT JOIN POR1 T2 ON T2.BaseEntry = T0.DocEntry

  LEFT JOIN OPOR T3 ON T3.DocEntry = T2.DocEntry

  LEFT JOIN PDN1 T4 ON T4.BaseEntry = T3.DocEntry AND  T4.BaseType = 22

  LEFT JOIN OPDN T5 ON T5.DocEntry = T4.DocEntry

  LEFT JOIN PCH1 T6 ON T6.BaseEntry = T4.DocEntry AND T6.BaseType = 20

  LEFT JOIN OPCH T7 ON T7.DocEntry = T6.DocEntry

WHERE T0.DocDate Between [%0] AND [%1] AND T0.DocType=[%2]  order by T0.DocDate

Accepted Solutions (0)

Answers (1)

Answers (1)

Former Member
0 Kudos

Hola Edwin.

Veo que todo va bien. Considero un Group By antes del Order by podria ayudarte con agrupar por tu documento y campos necesarios.

Nos cuentas!

Saludos,

Carlos Belteton

Former Member
0 Kudos

Buen día Carlos

lo intente varias veces pero tengo un error en la sintaxis , no lo he podido ejecutar

el GROUP BY es antes o después del WHERE ,,

ya lo intente de las dos formas y nada no se que me faltara ???

Former Member
0 Kudos

Hola Edwin buen dia!

Por favor corre esto en SQL, nota en donde estoy ubicando el Group By adicional dejo a tu discrecion la manera de que campos usar para la agrupacion. Me cuentas como te va. Ahora bien pasame un PRTSC de tu sentencia SQL y el error.

SELECT  DISTINCT

T0.REQNAME AS USUARIO,

T1.DSCRIPTION,

T0.DOCDATE AS FECHA_SC,

T1.U_FECHAENTREGA AS FECHA_SS,

T3.DOCDATE AS FECHA_OC,

T5.DOCDATE AS FECHA_EM,

T5.U_FECHAZF,

T7.DOCDATE AS FECHA_FP,

T0.DOCNUM 'S.C',

T3.DOCNUM 'O.C',

T5.DOCNUM 'E.M',

T7.DOCNUM 'F.P',

DATEDIFF(DAY,T0.DOCDATE,

T3.DOCDATE) AS D_MORA,

DATEDIFF(DAY,T0.DOCDATE,

T1.U_FECHAENTREGA) AS D_MORA_SS

FROM OPRQ T0 INNER JOIN PRQ1 T1 ON T0.DOCENTRY = T1.DOCENTRY

  LEFT JOIN POR1 T2 ON T2.BASEENTRY = T0.DOCENTRY

  LEFT JOIN OPOR T3 ON T3.DOCENTRY = T2.DOCENTRY

  LEFT JOIN PDN1 T4 ON T4.BASEENTRY = T3.DOCENTRY AND  T4.BASETYPE = 22

  LEFT JOIN OPDN T5 ON T5.DOCENTRY = T4.DOCENTRY

  LEFT JOIN PCH1 T6 ON T6.BASEENTRY = T4.DOCENTRY AND T6.BASETYPE = 20

  LEFT JOIN OPCH T7 ON T7.DOCENTRY = T6.DOCENTRY

WHERE T0.DOCDATE BETWEEN '20160601' AND '20160630' AND T0.DOCTYPE='I'

GROUP BY T0.REQNAME, T1.DSCRIPTION, T0.DOCDATE, T1.FECHAU_ENTREGA, T3.DOCDATE,T5.DOCDATE,T7.DOCDATE, T0.DOCNUM,T3.DOCNUM,T5.DOCNUM,T7.DOCNUM

ORDER BY T0.DOCDATE

Saludos,

Carlos Belteton

Former Member
0 Kudos

Buen día Carlos

me sale todavía error

Former Member
0 Kudos

Edwin.

Vamos resolviendo por partes.

El error de PRQ.U_FECHAENTREGA no es valido, es porque el campo de usuario no existe en la tabla o bien tiene o lleva otro nombre. Corrige eso y luego vemos lo del Group By.

Te parece?

Saludos,

Carlos Belteton

Former Member
0 Kudos

ok

si esos errores ya los corregí ,

estuve investigando y dicen que para llevar un Group by se debe tener en cuenta unas cosas por ejemplo

Para poder utilizar el GROUP BY, debes hacer un COUNT, SUM, etc.


y en el código no esta

Former Member
0 Kudos

Edwin,

Eso no es asi, lo único que debes tomar en cuenta como imperativo es, que los campos del SELECT que estas usando deben estar en el Group By.

No es necesario count, sum o algo parecido.

Comparte el error que te esta mostrando con la correccion del error anterior. Como consejo, ejecuta primero tu sentencia en SQL y ahi valida si te corre el Query!

Saludos,

Carlos B.

Former Member
0 Kudos

Hola Edwin prueba colocando el Group By de esta forma, reemplazarlo por tuyo.

GROUP BY T0.REQNAME, T1.DSCRIPTION, T0.DOCDATE, T1.U_FECHAENTREGA, T3.DOCDATE,T5.DOCDATE,T7.DOCDATE, T0.DOCNUM,T3.DOCNUM,T5.DOCNUM,T7.DOCNUM

Nos cuentas como te fue

Saludos

Former Member
0 Kudos

Buen día Carlos

el informe si se ejecuto bien sin errores

pero la informacion sigue siendo la misma  no cambia en nada

juancarlos_huerta
Contributor
0 Kudos

Edwin,

En tu query original hace falta hacer el vínculo de las filas entre documento origen y documento destino:

- En los JOINS que tienes indicando el campo BaseEntry, también incluye en campo BaseLine contra el LineNum.

Ejemplo:

LEFT JOIN POR1 T2 ON T2.BaseEntry = T0.DocEntry and T2.BaseLine = T1.LineNum and T2.BaseType = T0.ObjType

Suerte y saludos.

JC.