on 12-10-2015 2:24 PM
Buenas Días Ingenieros
estoy realizando una consulta de trazabilidad para el proceso de compras que va desde
1. Solicitud de compras (
2. orden de pedido (pedido)
3. entrada
4. factura
es algo igual al mapa de relaciones
el código que estoy intentando hacer es el siguiente:
SELECT Distinct T1.[DocNum], T1.[DocType], T0.[U_Tipo_Compra], T0.[U_FechaEntrega]
FROM PRQ1 T0
INNER JOIN OPRQ T1 ON T1.BaseEntry=T0.DocEntry and T1.BaseType='22'
INNER JOIN OPOR T2 ON T2.DocEntry=T1.DocEntry
INNER JOIN OPDN T3 ON T3.DocEntry=T2.DocEntry
estas son las tablas que necesito enlazar
OPRQ.T1
PRQ1.T0
OPDN.T3
OPOR.T2
OPCH.T4
pero me genera error , o se bloquea el sistema
Agradezco su valiosa ayuda
esta es una nueva consulta pero no me trae datos sale en blanco
SELECT Distinct T1.[DocNum], T1.[DocType], T0.[U_Tipo_Compra], T0.[U_FechaEntrega],T2.[DocNum],T3.[DocNum]
FROM PRQ1 T0
INNER JOIN OPRQ T1 ON T1.DocEntry=T0.DocEntry
INNER JOIN OPOR T2 ON T2.DocEntry=T1.DocEntry
INNER JOIN OPDN T3 ON T3.DocEntry=T2.DocEntry
INNER JOIN OPCH T4 ON T4.DocEntry=T3.DocEntry
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hola
el enlace que buscas en las tablas es a nivel de líneas (tablas XXX1), porque un pedido de compras puedes recibirlo en varias entradas por ejemplo.
SELECT Distinct T1.Docnum, T1.Doctype, T0.U_Tipo_Compra, T0.U_FechaEntrega, T2.Docnum, T3.Docnum
FROM PRQ1 T0
INNER JOIN OPRQ T1 ON T1.Docentry = T0.Docentry
INNER JOIN POR1 T21 ON T0.TrgetEntry = T21.Baseentry
INNER JOIN OPOR T2 ON T21.docentry = T2.Docentry
INNER JOIN PDN1 T31 ON T21.TrgetEntry = T31.Baseentry
INNER JOIN OPDN T3 ON T31.docentry = T3.docentry
INNER JOIN PCH1 T41 ON T31.TrgetEntry = T41.Baseentry
INNER JOIN OPCH T4 IN T41.docentry = Tt4.docentry
Con esta consulta sólo aparecerán aquellos procesos de compra que tengan los documentos indicados. Si algún pedido, por ejemplo, se convirtió en factura directamente no aparecerá.
Un saludo
Agustín Marcos Cividanes
Hola Edwin, el query debería mostrarte datos que cumplen el ciclo completo, tal como lo comentaba Agustin.
cambia los Inner Join por Left Join y busca el documento.
SELECT Distinct T1.Docnum, T1.Doctype, T0.U_Tipo_Compra, T0.U_FechaEntrega, T2.Docnum, T3.Docnum
FROM PRQ1 T0
INNER JOIN OPRQ T1 ON T1.Docentry = T0.Docentry
LEFT JOIN POR1 T21 ON T0.TrgetEntry = T21.Baseentry
LEFT JOIN OPOR T2 ON T21.docentry = T2.Docentry
LEFT JOIN PDN1 T31 ON T21.TrgetEntry = T31.Baseentry
LEFT JOIN OPDN T3 ON T31.docentry = T3.docentry
LEFT JOIN PCH1 T41 ON T31.TrgetEntry = T41.Baseentry
LEFT JOIN OPCH T4 IN T41.docentry = Tt4.docentry
Si no arroja datos podrías darnos mas antecedentes, subir unas capturas(Mapa relaciones y el query ejecutado).
Saludos.
Buenas tardes Boris , ante todo gracias por tu ayuda
copie la consulta tal cual se muestra en pantalla pero me arroja errores, como se muestra en la imagen1
mire en la consulta y realice unos cambio para que me arroje información , pero no me arroja la informacion correcta , como se muestra en la imagen2
En la solicitud numero 373 se realizo todo el proceso, como se muestra en la imagen3
Cualquier información que necesites me avisas por favor
Muchas gracias......
Hola Edwin.
Ejecuta el siguiente query y nos comentas los resultados.
SELECT DISTINCT
T0.DocNum 'S.C',
T3.DocNum 'O.C',
T5.DocNum 'E.M',
T7.DocNum 'F.P'
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.DOCNUM = 373
Tal como lo menciona Antonio el query anterior tiene errores de sintaxis.
Nos comentas. Saludos
Hola Aporto Código Espero sus amables comentarios y observaciones
ya funciona correctamente
-- Detalle Por Solicitante de Compra
declare @gerente varchar(50) = 'Solicitante'
Select [Documento_S_C], [Documento_O_C], [Documento_E_M], [Documento_F_P], Gerente, DSCRIPTION,
FECHA_SC, Hora_SC, FECHA_OC, Hora_OC, FECHA_EM, Hora_EM, Dias_Proceso,
FECHA_FP, Hora_FP
From (
SELECT DISTINCT
T0.DOCNUM [Documento_S_C],
isnull(Convert(varchar,T3.DOCNUM), 'No Realizado') [Documento_O_C],
isnull(Convert(varchar,T5.DOCNUM), 'No Realizado') [Documento_E_M],
isnull(Convert(varchar,T7.DOCNUM), 'No Realizado') [Documento_F_P],
T0.REQNAME AS Gerente,
T1.DSCRIPTION,
convert(varchar, T0.Docdate, 111) AS FECHA_SC,
case when len(T0.DocTime) = 3 then '0'+SUBSTRING(convert(varchar,T0.DocTime),1,1)+':'+SUBSTRING(convert(varchar,T0.DocTime),2,2)
when len(T0.DocTime) = 4 then SUBSTRING(convert(varchar,T0.Doctime),1,2)+':'+SUBSTRING(convert(varchar,T0.Doctime),3,2)
end as Hora_SC,
convert(varchar, T3.Docdate, 111) AS FECHA_OC,
case when len(T3.DocTime) = 3 then '0'+SUBSTRING(convert(varchar,T3.DocTime),1,1)+':'+SUBSTRING(convert(varchar,T3.DocTime),2,2)
when len(T3.DocTime) = 4 then SUBSTRING(convert(varchar,T3.Doctime),1,2)+':'+SUBSTRING(convert(varchar,T3.Doctime),3,2)
end as Hora_OC,
convert(varchar, T5.Docdate, 111) AS FECHA_EM,
case when len(T5.DocTime) = 3 then '0'+SUBSTRING(convert(varchar,T5.DocTime),1,1)+':'+SUBSTRING(convert(varchar,T5.DocTime),2,2)
when len(T5.DocTime) = 4 then SUBSTRING(convert(varchar,T5.Doctime),1,2)+':'+SUBSTRING(convert(varchar,T5.Doctime),3,2)
end as Hora_EM,
DATEDIFF(dd, T0.Docdate, T5.DocDate) Dias_Proceso,
convert(varchar, T7.Docdate, 111) AS FECHA_FP,
case when len(T7.DocTime) = 3 then '0'+SUBSTRING(convert(varchar,T7.DocTime),1,1)+':'+SUBSTRING(convert(varchar,T7.DocTime),2,2)
when len(T7.DocTime) = 4 then SUBSTRING(convert(varchar,T7.Doctime),1,2)+':'+SUBSTRING(convert(varchar,T7.Doctime),3,2)
end as Hora_FP
FROM OPRQ T0
INNER JOIN PRQ1 T1 ON T0.DOCENTRY = T1.DOCENTRY
LEFT JOIN POR1 T2 ON T2.BASEENTRY = T0.DOCENTRY AND T2.DocEntry=T1.TrgetEntry AND T2.basetype=T0.objtype
LEFT JOIN OPOR T3 ON T3.DOCENTRY = T2.DOCENTRY
LEFT JOIN PDN1 T4 ON T4.BASEENTRY = T3.DOCENTRY AND T4.BASETYPE = 22 and T4.BaseRef=T3.DocNum
LEFT JOIN OPDN T5 ON T5.DOCENTRY = T4.DOCENTRY
LEFT JOIN PCH1 T6 ON T6.BASEENTRY = T4.DOCENTRY AND T6.BASETYPE = 20 AND T6.BaseRef=T5.DocNum
LEFT JOIN OPCH T7 ON T7.DOCENTRY = T6.DOCENTRY
where T0.REQNAME in (@gerente)
AND T0.DocEntry not in (Select OPRQ.DocEntry FROM OPRQ
INNER JOIN PRQ1 ON OPRQ.DOCENTRY = PRQ1.DOCENTRY AND OPRQ.DocStatus = 'C' AND PRQ1.TargetType = '-1'
AND OPRQ.REQNAME in (@gerente) )
AND T0.DocEntry not in (Select OPRQ.DOCENTRY from OPRQ INNER JOIN PQT1 on PQT1.BASEENTRY = OPRQ.DOCENTRY AND OPRQ.DOCENTRY = T1.DOCENTRY)
) temp
UNION ALL
Select [Documento_S_C], [Documento_O_C], [Documento_E_M], [Documento_F_P], Gerente, DSCRIPTION,
FECHA_SC, Hora_SC, FECHA_OC, Hora_OC, FECHA_EM, Hora_EM, Dias_Proceso,
FECHA_FP, Hora_FP
From (
SELECT DISTINCT
T0.DOCNUM [Documento_S_C],
isnull(Convert(varchar,T3.DOCNUM), 'No Realizado') [Documento_O_C],
isnull(Convert(varchar,T5.DOCNUM), 'No Realizado') [Documento_E_M],
isnull(Convert(varchar,T7.DOCNUM), 'No Realizado') [Documento_F_P],
T0.REQNAME AS Gerente,
T1.DSCRIPTION,
convert(varchar, T0.Docdate, 111) AS FECHA_SC,
case when len(T0.DocTime) = 3 then '0'+SUBSTRING(convert(varchar,T0.DocTime),1,1)+':'+SUBSTRING(convert(varchar,T0.DocTime),2,2)
when len(T0.DocTime) = 4 then SUBSTRING(convert(varchar,T0.Doctime),1,2)+':'+SUBSTRING(convert(varchar,T0.Doctime),3,2)
end as Hora_SC,
convert(varchar, T3.Docdate, 111) AS FECHA_OC,
case when len(T3.DocTime) = 3 then '0'+SUBSTRING(convert(varchar,T3.DocTime),1,1)+':'+SUBSTRING(convert(varchar,T3.DocTime),2,2)
when len(T3.DocTime) = 4 then SUBSTRING(convert(varchar,T3.Doctime),1,2)+':'+SUBSTRING(convert(varchar,T3.Doctime),3,2)
end as Hora_OC,
convert(varchar, T5.Docdate, 111) AS FECHA_EM,
case when len(T5.DocTime) = 3 then '0'+SUBSTRING(convert(varchar,T5.DocTime),1,1)+':'+SUBSTRING(convert(varchar,T5.DocTime),2,2)
when len(T5.DocTime) = 4 then SUBSTRING(convert(varchar,T5.Doctime),1,2)+':'+SUBSTRING(convert(varchar,T5.Doctime),3,2)
end as Hora_EM,
DATEDIFF(dd, T0.Docdate, T5.DocDate) Dias_Proceso,
convert(varchar, T7.Docdate, 111) AS FECHA_FP,
case when len(T7.DocTime) = 3 then '0'+SUBSTRING(convert(varchar,T7.DocTime),1,1)+':'+SUBSTRING(convert(varchar,T7.DocTime),2,2)
when len(T7.DocTime) = 4 then SUBSTRING(convert(varchar,T7.Doctime),1,2)+':'+SUBSTRING(convert(varchar,T7.Doctime),3,2)
end as Hora_FP
FROM OPRQ T0
INNER JOIN PRQ1 T1 ON T0.DOCENTRY = T1.DOCENTRY
INNER JOIN PQT1 T8 ON T8.BASEENTRY = T1.DOCENTRY AND T8.TargetType = 22
LEFT JOIN POR1 T2 ON T2.BASEENTRY = T8.DOCENTRY
LEFT JOIN OPOR T3 ON T3.DOCENTRY = T2.DOCENTRY
LEFT JOIN PDN1 T4 ON T4.BASEENTRY = T3.DOCENTRY AND T4.BASETYPE = 22 and T4.BaseRef=T3.DocNum
LEFT JOIN OPDN T5 ON T5.DOCENTRY = T4.DOCENTRY
LEFT JOIN PCH1 T6 ON T6.BASEENTRY = T4.DOCENTRY AND T6.BASETYPE = 20 AND T6.BaseRef=T5.DocNum
LEFT JOIN OPCH T7 ON T7.DOCENTRY = T6.DOCENTRY
where T0.REQNAME in (@gerente)
AND T0.DocEntry not in (Select OPRQ.DocEntry FROM OPRQ
INNER JOIN PRQ1 ON OPRQ.DOCENTRY = PRQ1.DOCENTRY AND OPRQ.DocStatus = 'C' AND PRQ1.TargetType = '-1'
AND OPRQ.REQNAME in (@gerente) )
) temp
order by [Documento_S_C], [Documento_O_C], [Documento_E_M], [Documento_F_P]
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hola Edwin buenas tardes
Esto funciona perfecto asimilando que el proceso no tuvo Cotizaciones
Pero cuando tiene Ofertas de compra "Cotizaciones" se me rompe le proceso
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
99 | |
11 | |
11 | |
6 | |
6 | |
4 | |
4 | |
3 | |
3 | |
3 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.