Consulta de Pedido y factura de proveedor

Hola a tod@s. Estoy tratando de realizar un query para consultar los pedidos de compra con sus respectivas facturas, el principal problema que he encontrado es que hay algunos pedidos que tienen entrada de mercancía y a su vez esta entrada se liga a la factura, en fin tengo esta consulta:

SELECT DISTINCT T0.[DocNum], T0.[DocDate], T0.[CardName], T0.[DocCur],  
'Subtotal' = CASE T0.[DocCur] WHEN 'MXN' THEN (T0.[DocTotal]-T0.[VatSum]) ELSE (T0.[DocTotalFC]-T0.[VatSum]) END, 'Impuesto' = T0.[VatSum],
'Total' = CASE T0.[DocCur] WHEN 'MXN' THEN T0.[DocTotal] ELSE T0.[DocTotalFC] END, 
T2.DocNum, T2.[DocStatus], FE.DocNum

FROM OPOR T0  INNER JOIN POR1 T1 ON T0.[DocEntry] = T1.[DocEntry]
	LEFT OUTER JOIN OPCH T2 ON T1.[TargetType] = T2.[ObjType] AND T1.[TrgetEntry] = T2.[DocNum]
	INNER JOIN PCH1 T3 ON T2.[DocEntry] = T3.[DocEntry]

	LEFT OUTER JOIN 
( 
SELECT DISTINCT T2.[DocNum], T2.[DocEntry], T1.[BaseType], T1.[BaseEntry]
FROM OPDN T0  INNER JOIN PDN1 T1 ON T0.[DocEntry] = T1.[DocEntry]
LEFT JOIN  OPCH T2 ON T1.[TargetType] = T2.[ObjType] AND T1.[TrgetEntry] = T2.[DocNum]
WHERE T1.[BaseType] = '22' AND T1.[TargetType] = '18'
)  FE ON FE.[BaseType] = T0.[DocType] AND FE.[BaseEntry] = T0.[DocNum]

WHERE T0.[CANCELED]='N' AND T2.[CANCELED]='N'

El error que tengo es que al traer en el SELECT el campo FE.DocNum, me arroja lo siguiente:

Conversion failed when converting the varchar value ‘I’ to data type int.

La idea es colocar un CASE para traer el valor de la factura según sea el caso (ya sea que parta del pedido o de la entrada de mercancía).

De antemano gracias por la ayuda.

Hola

lo primero que me llama la atención es que enlazas el trgetEntry con el docnum; creo que debería ser el docentry del documento destino. Cuando utilizas campos “XXXEntry” no puedes compararlos con el docnum porque el docnum lo parametrizas y puede haber el mismo valor en diferentes ejercicios fiscales; los “XXXEntry” los gestiona SBO y serán únicos siempre.

Un saludo
Agustín

1 me gusta

Gracias por la observación, ya realice la corrección, pero me sigue mandando el mismo error. También intente utilizar CAST y CONVERT, pero me arroja el mismo error.

Hola @Mike1
Tu error esta aquí FE.[BaseType] = T0.[DocType]
Lo primero es que estas comparando dos campos que no tienen ninguna relacion y lo segundo son tipos de datos diferentes.

Andres Ramirez Jaramillo :colombia:

Les comparto la consulta que me funciono, espero le sea de utilidad a alguien.

DECLARE @FACT AS TABLE(DocNum INT, DocDate DATE, Comments VARCHAR(256), BaseEntry INT, BaseType INT, DocCur VARCHAR(3))

INSERT INTO @FACT

   SELECT DISTINCT T1.DocNum, T1.DocDate, T1.Comments, T0.BaseEntry, T0.BaseType,               T1.DocCur 
   FROM PCH1 T0 INNER JOIN OPCH T1 ON T0.DocEntry = T1.DocEntry
   WHERE T0.BaseType = 22 AND T0.[TargetType] <> 19

UNION ALL

   SELECT DISTINCT T1.DocNum, T1.DocDate, T1.Comments,  T2.BaseEntry, T2.BaseType, T1.DocCur 
   FROM PCH1 T0 INNER JOIN OPCH T1 ON T0.DocEntry = T1.DocEntry
                INNER JOIN PDN1 T2 ON T0.BaseEntry = T2.DocEntry AND T0.BaseType = T2.ObjType
   WHERE T2.BaseType = 22  AND T0.[TargetType] <> 19

SELECT DISTINCT
T0.DocNum [Pedido] , T0.DocDate [Fecha] , T0.Comments [Referencia] , T0.DocCur, 
[Subtotal] = CASE T0.DocCur WHEN 'MXN' THEN (T0.DocTotal-T0.VatSum) ELSE (T0.DocTotalFC-T0.VatSumFC) END, 
[Impuesto] = CASE T0.DocCur WHEN 'MXN' THEN T0.VatSum ELSE T0.VatSumFC END,
[Total] = CASE T0.DocCur WHEN 'MXN' THEN T0.DocTotal ELSE T0.DocTotalFC END,
T1.DocNum [Fact. SAP], T1.DocDate [Fecha] , T1.Comments [Referencia]

FROM OPOR T0
LEFT JOIN @FACT T1 ON T0.DocEntry = T1.BaseEntry AND T0.ObjType = T1.BaseType

WHERE T0.[CANCELED] = 'N' 

ORDER BY 2 DESC
2 Me gusta