on 06-22-2015 9:40 PM
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)
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.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
89 | |
7 | |
6 | |
3 | |
3 | |
3 | |
3 | |
3 | |
3 | |
2 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.