on 07-24-2020 1:36 AM
Saudações a todos!!
Estou precisando de ajuda para solucionar um problema na query que fiz.
Travei na query para calcular o estoque (quantidade e valor) de forma acumulativa, ou seja, preciso que a quantidade acumulada seja alterada por adição ou subtração. Por exemplo:
Dessa forma montei a seguinte Query:
T2."DocDate", T4."WhsCode", T3."WhsName", T0."ItmsGrpNam",T1."ItemCode", T1."ItemName",
T1."InvntryUom" As "UM",T2."TransType", T2."JrnlMemo",AVG(T2."InQty") AS "Qtd Entrada",AVG(T2."OutQty") AS "Qtd Saída",
SUM((T2."InQty") - (T2."OutQty"))OVER(ORDER BY T2."DocDate") As "Estoque Acumulado", (t2."Price") AS "Preço Unitário",
CASE
WHEN T2."InQty" >0 and T2."OutQty" =0 THEN SUM((T2."InQty") * (T2."Price"))OVER(ORDER BY T2."DocDate")
ELSE SUM((T2."OutQty") * (T2."CalcPrice"))OVER(ORDER BY T2."DocDate") END AS "Valor Acumulado",
T1."U_RSD_PesoBruto", T1."U_RSD_UN_Conversao"
FROM OITB T0
INNER JOIN OITM T1 ON T1."ItmsGrpCod" = T0."ItmsGrpCod"
INNER JOIN OINM T2 ON T2."ItemCode" = T1."ItemCode"
INNER JOIN OWHS T3 ON T3."WhsCode" = T2."Warehouse"
INNER JOIN OITW T4 ON T4."WhsCode" = T3."WhsCode"
--INNER JOIN OIVL T5 ON T5."ItemCode" = T1."ItemCode"
WHERE
T2."TransType" in (13,14,15,16,18,19,20,59,60,67,69,310000001) AND
T1."ItemCode" = '[%0]'
GROUP BY T2."TransType",T2."DocDate",T4."WhsCode",T3."WhsName", T1."ItemCode", T1."ItemName", t2."Price",T2."JrnlMemo",
T0."ItmsGrpNam", T1."InvntryUom",T1."U_RSD_PesoBruto", T1."U_RSD_UN_Conversao",T2."OutQty",T2."InQty",T2."CalcPrice"
Mas conforme mostra no print:
1º - O Estoque Acumulado está contabilizando "correto", porém o lançamento está por dia, ou seja, se na data 23/07 eu tiver 3 entradas separadamente do produto, ao invés de gerar 3 linhas e fazer o somatório individualmente, a query já calcula as 3 entradas e exibe o resultado agregado.
2º - O valor acumulado está apenas somando, ou seja, quando tenho NS(Nota Fiscal de Saída) ao invés de subtrair está somando ao acumulado.
3º - O valor Acumulado também está calculando os lançamentos agregados por dia e não por linha de produto.
Desde já agradeço a ajuda.
Bem, analisando melhor pude perceber que estava usando o agregador (DocDate), com isso a query estava calculando todas os lançamentos do dia.
Ao invez de "DocDate" fiz agregação por lançamento "TransNum" da OINM.
SUM((T2."InQty") - (T2."OutQty"))OVER(ORDER BY T2."TransNum")
Caso resolvido.
Grato a todos!
Junior
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Algum ajuda, orientação?
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.