cancel
Showing results for 
Search instead for 
Did you mean: 

Trazabilidad proceso compras

Former Member
0 Kudos

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

Accepted Solutions (1)

Accepted Solutions (1)

Former Member
0 Kudos

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

agustin_marcoscividanes
Active Contributor
0 Kudos

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

Former Member
0 Kudos

Buenos Días Marcos

realice el proceso, pero es raro por que no me arroja ninguna información , y si hay solicitudes que cumplen con todo el proceso

Agradezco si me puedes ayudar

bfierro
Active Participant
0 Kudos

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.

Former Member
0 Kudos

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......

former_member220991
Participant
0 Kudos

esta mal escrito la ultima linea

LEFT JOIN OPCH T4 ON T41.docentry = T4.docentry

bfierro
Active Participant
0 Kudos

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

Former Member
0 Kudos

Muchas gracias Boris

me fue de mucha ayuda

salio correcto

Answers (2)

Answers (2)

Former Member
0 Kudos

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]

Former Member
0 Kudos

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