cancel
Showing results for 
Search instead for 
Did you mean: 

SELECT AVANÇADO - Somar produtos nota entrada por conta contábil

fbio_bilicki
Active Contributor
0 Kudos

Boa tarde pessoal,

gostaria de desenvolver um super select avançado onde eu conseguisse saber o total da nota (total bruto) por conta contábil.

Analisando as tabelas do SAP tenho o seguinte select inicial.


SELECT

T0.DocEntry,

T1.AcctCode,

SUM(T1.LineTotal) as ValorTotal

FROM OPCH T0

INNER JOIN PCH1 T1 ON T1.DocEntry = T0.DocEntry

GROUP BY T0.DocEntry, T1.AcctCode

ORDER BY T0.DocEntry, T1.AcctCode

O meu problema é o seguinte.

1) Quero somente itens que geraram financeiro, incluindo complementar de IPI, que está marcado "somente imposto" e gerou financeiro.

2) Quero que considere impostos (IPI, Subs.Trib).

3) Quero que considere frete, seguro, outros e descontos.

4) Quero que subtraia os impostos retidos.

Ou seja, quero o valor financeiro por conta contábil da linha, mas só da linha que gerou financeiro.

Eu cheguei no seguinte select


SELECT

T0.DocEntry,

T1.LineNum,

T1.AcctCode,

SUM(T1.[LineTotal]) + -- Total Produto

SUM(T1.[VatSum]) +     -- Soma Impostos (IPI, ST)

(SELECT ISNULL(SUM(B0.VatSum),0) FROM dbo.PCH13 B0 WHERE B0.DocEntry = T0.DocEntry and B0.LineNum = T1.LineNum) + -- Soma Impostos distribuidos (IPI, ST)

SUM(T1.DistribSum) -   -- Soma Frete, Seguro, Outros

ISNULL(((SUM(T1.LineTotal) / (max(T0.DocTotal) + max(T0.DpmAmnt) + max(T0.DiscSum))) * max(T0.DiscSum)),0) - -- Subtrai desconto (rateio por item)

ISNULL(((SUM(T1.LineTotal) / (max(T0.DocTotal) + max(T0.DpmAmnt) + max(T0.WTSum))) * max(T0.WTSum)),0) -- Subtrai impostos retidos (rateio por item)

as ValorTotal

FROM OPCH T0

INNER JOIN PCH1 T1 ON T1.DocEntry = T0.DocEntry AND T1.OpenSum > 0 -- Somente linha que gerou financeiro

WHERE

(T0.DocTotal + T0.DpmAmnt) <>  0 -- somente que gere financeiro (mesmo pago por adiantamento, gerou financeiro em algum momento)

and T0.DocEntry NOT IN (SELECT B1.BaseEntry FROM ORPC B0 INNER JOIN RPC1 B1 ON B1.DocEntry = B0.DocEntry WHERE B1.BaseEntry IS NOT NULL and B1.BaseType = 18 and B0.CANCELED = 'N' AND B0.SeqCode = 1) -- Nao entra nota cancelada ou devolvida (SAP 😎

and T0.CANCELED = 'N' -- Não entra documento cancelado (Somente SAP 9.0)]

and T0.DocEntry = 14371

GROUP BY

T0.DocEntry,

T1.LineNum, -- tive que colocar linenum senão o rateio não iria funcionar.

T1.AcctCode

Tem algum jeito de fazer isso melhor e mais fácil?

Este select não está pegando as complementares de IPI por causa do "AND T1.OpenSum > 0", só que eu tirar ele, o retorno de industrialização é considerado, e ele pega o total do item no caso de complemento, e não só o valor do IPI

Segue anexo nota complementar de IPI.

Abraço

Fabio

SAP 9.0 PL15 / SAP 9.1 PL7 (Test)

Accepted Solutions (0)

Answers (1)

Answers (1)

Former Member
0 Kudos

Bom dia!

Sugiro que faça uma tabela virtual contendo o número do documento e os impostos que está querendo. Depois você faz um join nessa tabela.

Ex.

select * from OPCH T0

inner join PCH1 T1 ON (T1.DocEntry = T0.DocEntry)

inner join (

     select impostoA, ImpostoB from tabelaA

     inner join tabelaB

     where "As condições para pegar somente os documentos que precisa"

    

     ) T2

Tente usar sempre o JOIN pois, o desempenho é muito superior que o IN ou NOT IN.