Skip to Content
0
Feb 01, 2023 at 02:46 PM

Como posso obter o último preço de compra com base no que tenho em estoque?

21 Views

Eu criei uma consulta para buscar:

O que tenho em estoque + o último preço de compra.

A consulta é para obter a valoração do meu estoque.

Mas quando utilizo a função MAX(), ela procura algum valor que não consegui descobrir. E se eu não usar MAX() em determinadas colunas, a consulta simplesmente duplicará os valores.

Pesquisei algumas documentações mas sem exito.

Pode ser algo simples, mas não consegui encontrar o erro. Refiz essa query algumas vezes e quando fica mais complexa é quando começa a duplicar.

Sua ajuda é gentilmente(MUITO) apreciada.

A consulta que fiz:

SELECT T0.ItemCode, T0.ItemName, T2.WhsCode, T2.OnHand, x.preco,

x.moeda,

CASE WHEN x.Taxa = 0 THEN 1

WHEN x.Taxa IS NULL THEN 1

ELSE x.Taxa

END [Taxa],

CASE WHEN X.doc = 31882 or X.doc = 31881 THEN '20221216' ELSE X.UltData END UltData , x.processo,

CASE WHEN T3.U_Nac = 0 THEN 0.56

WHEN T3.U_Nac IS NULL THEN 0.56

ELSE T3.U_Nac

END [Nacionalização %],

CASE WHEN X.moeda <> 'R$' AND T3.U_Nac = 0 AND T0.ItemCode NOT LIKE 'N%' THEN (T2.OnHand * x.preco * x.Taxa )*(1 + 0.56)

WHEN X.moeda <> 'R$' AND T3.U_Nac IS NULL AND T0.ItemCode NOT LIKE 'N%' THEN (T2.OnHand * x.preco * x.Taxa )*(1 + 0.56)

--WHEN X.moeda <> 'R$' AND T3.U_Nac IS NULL AND T0.ItemCode NOT LIKE 'N%' THEN (T2.OnHand * x.preco * x.Taxa )*(1 + 0.56)

WHEN X.moeda = 'R$' AND T0.ItemCode NOT LIKE 'N%' AND T3.U_Nac = 0 THEN (T2.OnHand * x.preco)*(1 + 0.56)

WHEN X.moeda = 'R$' AND T0.ItemCode NOT LIKE 'N%' AND T3.U_Nac IS NULL THEN (T2.OnHand * x.preco)*(1 + 0.56)

WHEN X.moeda = 'R$' AND T0.ItemCode NOT LIKE 'N%' AND T3.U_Nac IS NULL AND x.Taxa = 0 THEN (T2.OnHand * x.preco)*(1 + 0.56)

WHEN X.moeda = 'R$' AND T0.ItemCode NOT LIKE 'N%' AND T3.U_Nac = 0 AND x.Taxa = 0 THEN (T2.OnHand * x.preco)*(1 + 0.56)

WHEN X.moeda = 'R$' AND T0.ItemCode NOT LIKE 'N%' AND T3.U_Nac > 0 AND x.Taxa = 0 THEN (T2.OnHand * x.preco)*(1 + T3.U_Nac)

WHEN X.moeda = 'R$' AND T0.ItemCode LIKE 'N%' AND T3.U_Nac = 0 THEN (T2.OnHand * x.preco)

WHEN X.moeda = 'R$' AND T0.ItemCode LIKE 'N%' AND T3.U_Nac IS NULL THEN (T2.OnHand * x.preco)

WHEN T0.ItemCode LIKE 'N%' THEN (T2.OnHand * x.preco)

ELSE (T2.OnHand * x.preco * x.Taxa )*(1 + T3.U_Nac) END as [valoração]

FROM OITM T0

LEFT JOIN (

SELECT MAX(T1.DocEntry) as doc, T1.ItemCode, MAX(T1.Price) as preco, MAX(T1.Currency) as moeda, MAX(T1.Rate) as Taxa,

MAX(T1.U_Processo) as processo, MAX(T1.DocDate) as UltData

FROM POR1 T1

GROUP BY T1.ItemCode

) X ON T0.ItemCode = X.ItemCode

LEFT JOIN (SELECT U_Nac, DocEntry, DocCur FROM OPOR where CANCELED = 'N')T3 ON X.doc = T3.DocEntry

JOIN OITW T2 ON T0.ItemCode = T2.ItemCode

WHERE T2.OnHand > 0 and T2.WhsCode not in ('11','08')

AND T0.ItemCode NOT IN ('ICATALOGO-001','ISAMPLES-001','ICRATE-001','ICRATEBELLSIDE-001','ISAMPLEBOX-001','ITRANSPORT-001','IFLATCHARGE-001')

order by T0.ItemCode