Entendendo a Formula 320 - Understanding the formula 320
Autor: Aparecido Borges | Publicado: 2016-06-16T20:24:00-03:00


Entendendo
a Formula 320&nbsp;

A alguns anos, tive que fazer uma melhoria em um cliente onde a formula
da TAXBRA em SD era a &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;920, copiada da 320 e modificada para atender as necessidades do cliente.&nbsp;&nbsp;

Infelizmente se
tratava de substituição tributária e o desenvolvimento focava a mudança da

base de cálculo da
ST em algumas situações relacionadas a Estado de origem e destino, 

CNAE de cliente e
NCM de produto. A nova formula refazia os cálculos da ST com as regras fiscais

que o cliente
necessitava. Contudo, a coisa estava ruim e fora de controle que o numero

de chamados
gerados pela área tributária da empresa para corrigir os problemas relacionados

a este assunto
eram absurdos. Neste caso, o cliente queria uma solução definitiva para o
problema.

Bom, debugando e
analisando a classe da 320 e seus métodos, conclui que apenas um pequeno ajuste&nbsp;em um dos métodos
via enhencement resolveria o problema de forma cirúrgica e definitiva.

Isso foi feito e o
problema foi resolvido. Contudo, a consultoria que havia feito a encrenca toda
havia

levado dois meses
para fazer tudo aquilo. Neste caso, não culpo a consultoria, afinal, fizeram o
que sabiam&nbsp;e bem ou mal,
entregaram o que foi pedido. Mas, o ruim de tudo isso é que o cliente queria o
dinheiro pago&nbsp;por este
desenvolvimento de volta. E o papo final era o seguinte, poxa Aparecido Borges,
você nos ferrou&nbsp;com isso e agora
estamos no prejuízo e isso que você fez não se faz, isso é falta de
profissionalismo.&nbsp;Inclusive para
fechar o assunto, ultimamente um amigo meu me indicou nesta consultoria. E
disseram o&nbsp;seguinte...lembra
deste assunto..? Se depender de algumas pessoas aqui você jamais será
contratado.

Ou seja, você conhecer mais que os outros pode ser prejudicial.....

Pensando nesta
rejeição absurda, resolvi fazer um documento que mostrasse um pouco mais como

funciona a formula
320, para prevenir que este tipo de coisa não ocorra mais comigo ou com outros
consultores.

Bom, deixando de
choradeiras, para os desenvolvimentos relacionados a cálculos de impostos, temos
algumas alternativas:

<!--[if !supportLists]-->A.&nbsp;&nbsp;&nbsp;&nbsp;
<!--[endif]-->Copiar a formula 320 e
modificar a mesma

<!--[if !supportLists]-->B.&nbsp;&nbsp;&nbsp;&nbsp;
<!--[endif]-->Criar uma outra formula
,chamar a 320 e modificar a formula criada

<!--[if !supportLists]-->C.&nbsp;&nbsp;&nbsp;&nbsp;
<!--[endif]-->&nbsp;Modificar o standard

<!--[if !supportLists]-->D.&nbsp;&nbsp;&nbsp;&nbsp;
<!--[endif]-->&nbsp;Criar enhencements

Na opção A e C, teremos problemas
com aplicação de Notas, packages e novas versões.

Na opção B, a formula 320 fica
preservada, mas a solução normalmente não é a mais adequada.

Na opção C, temos os problemas da
opção A, além de não ser aconselhável 

Na opção D, temos uma intervenção
cirúrgica, no ponto certo para atender a necessidade do cliente.

Bom, eu sempre fui pela opção D,
mas sempre temos a falta de tempo, a pressão, o calor do projeto

&nbsp;no momento e outros fatores onde decidimos
pela opção mais rápida e não a melhor tecnicamente.

Pessoalmente, eu acho a opção D
sempre a melhor e mais rápida por dominar o assunto e 

me sentir à vontade para
desenvolver na TAXBRA.



A intenção deste
documento é mostrar a formula 320 por dentro e qual o desenvolvimento por traz

desta encrenca que
tanto se fala. Coisa que alguns consultores ficam incomodados com o assunto,

por não entenderem
exatamente como funciona. O que é essa tal de classe e método.

Apesar de ser
mostrado um exemplo de SD, este documento também é aplicável ao modulo de MM. 

Na TAXBRA, a
formula 320 é o coração de todo o processo de cálculo para os dois módulos.

Para isso a SAP
desenvolveu algumas parametrizações de apoio para que a 320 funcione
corretamente.



Um dos pontos é o
Numero interno do imposto, onde podemos chegar pela J1btax. 





































Os números internos
são definidos como um campo de 30 posições, descrição e grupo de imposto.











A atribuição dos
tipos de condição a códigos internos de imposto, são essenciais para que

A 320 funcione da
forma correta.













A atribuição é
código interno e tipo de condição de SD e MM.

Onde SD = V&nbsp; e MM = TX, informações utilizadas a todo
momento....































Classe de função: CL_TAX_CALC_BR





































































Para ter acesso ao
principal grupo de função executado na formula 320, temos que executar a

Transação SE24,
indicar a classe CL_TAX_CALC_BR e clicar em exibir.














































































A classe de função é como se fosse
uma mãe e os métodos seus filhos.

Os conceitos de orientação a
objeto, herança e instanciamento não são relevantes neste momento

para o funcional. Devemos entender
que uma classe pode ser chamada de uma função, de um ALV, 

de um report e de uma infinidade de
objetos do SAP.

Neste caso da formula 320, a classe
acima é chamada por funções standard desenvolvidas especificamente

para a localização brasil.

Não existe um método sem uma
classe, portanto temos uma hierarquia onde a mãe é a classe e o filho

é o método. 

Podemos observar que esta classe de
função tem muitos métodos específicos para os cálculos da

formula 320.

Cada método tem a possibilidade de
se criar um enhencement no início ou no final do método.

Um enhencement é uma opção Standard
SAP, para se inserir um código ABAP, no ponto em

que é permitido o mesmo, quando temos
a necessidade de se desenvolver alguma coisa na localização 

brasileira, onde o Standard não
atende. 

O enhencement é um recurso
utilizado pela própria SAP, principalmente para atender a alguns

Industry solutions, como OIL,
Mídia,&nbsp; AFS e outros.

Agora, podemos escolher um método e
via enhencement, incluir um código ABAP no início ou no final 

do método, fazendo as modificações
necessárias para atender uma determinada necessidade, mantendo o Standard.&nbsp; 

A solução via enhencement tem o
problema que devemos saber em qual método o enhencement deve ser

aplicado. Por isso, espero ajudar
com as informações deste documento, na escolha do mesmo.



Na aba Atributos, temos todos os
campos e tabelas disponíveis na classe, 





Exemplos muito uteis na hora do
desenvolvimento:

MS_KOMK - Tabela KOMK do cabeçalho
da pricing disponível em todos os métodos.

MS_KOMP - Tabela KOMP do item da
pricing disponível em todos os métodos.

MT_KOMV - Tabela XKOM da Pricing do
item inteira, disponível em todos os métodos.

Resumindo, temos disponíveis todos
os dados de cabeçalho e item do processo, na Ordem de vendas, Remessa e

Fatura, bem como todas as condições
da Pricing.

Com estas informações disponíveis,
bem como a possibilidade de ler outras tabelas, entende-se que podemos

Implementar qualquer tipo de
logica, para atender a necessidade de um cliente. 



Para a escolha do enhencement
devemos conhecer um pouco mais quais são os métodos executados.

Para fazer o debug da formula 320
temos algumas alternativas.



Executar a transação VOFM, entrar
na opção abaixo.










































Posicionar na formula 320 e colocar
o break-point no local desejado.

Outra alternativa, seria apenas
chamar a transação SE37, 

Inserir a função 'J_1B_CHECK_CBT_CALC' ou 'J_1B_CBT'&nbsp; e colocar o Break-point

no local desejado.

Pela SE38, include FV64A320, também
é possível colocar o break-point.

Eu escolhi a primeira opção via
VOFM e vamos seguir um passo a passo de um Debug.


















































No momento do Debug, é possivel
escolher qual a condição a debugar.

Neste exemplo eu escolhi a ICMI.


















































Função: J_1B_CHECK_CBT_CALC

Verifica se a pricing esta
parametrizada como TAXBRA.












Se for TAXBRA, é chamado a função
J_1B_CBT ( TAXBRA ).









Neste ponto o sap define se vai
utilizar uma classe de MM ou SD, que herda todas as definições

da classe mãe....CL_TAX_CALC_BR

































































Neste método é selecionado o código
interno do tipo de condição ICMI ( Calculate_tax )

parametrizado na tabela de códigos
internos de impostos X tipos de condições.
































































Neste método, são carregados os
campos da tabela MS_TAX_DATA, com os códigos 

Internos de impostos e seus tipos
de condição parametrizados na TAXBRA.

















































































Neste método também é carregado o
valor líquido da pricing, antes da aplicação dos impostos

Inclusos. 
































































Neste método é são carregadas as
condições que identificam para o SAP se o valor

Liquido informado já contém PIS,
COFINS e ISS via parametrização funcional.


















































Neste método é informado quais as
taxas a serem calculadas.













Neste método, define se é consumo
ou industrialização




















































































Neste método, é definido as
alíquotas de impostos adicionais, para o calculo 

Do icms incluso, sendo alíquota de
PIS, COFINS, DIFAL e fundo de pobreza.




























Neste exemplo, montado por mim no
meu ambiente de estudos, temos o seguinte:



Onde temos o seguinte:

Adicional = 7,60 + 1,65 + ( 17 - 7
) = 19,25 


















































Neste método, um dos principais,
são chamados todos os cálculos de impostos,

ICMS, IPI, ST, PIS, COFINS e
Partilha do ICMS.













Neste método é calculado o valor do
ICMS, sendo industrialização ou consumo.










Neste método é calculado o icms
incluso conforme abaixo....

Adicional = 7,60 + 1,65 + ( 17 - 7
) = 19,25 








Adicional = 19,25 + 7,00 = 26,25 

Calculo&nbsp; = 1 - ( 26,2500000/ 100 ) = 0,7375 

Fator = 1 / 0,7375 = 1,3559 
























O valor com Impostos inclusos passa
a ser 167,39 conforme o número de casas de arredondamento,

definido na filial.






















































Neste exemplo, é mostrado todo o
Debug do tipo de condição ICMI, 

Tentando mostrar exatamente como o
SAP faz os cálculos para colocar os

valores de impostos inclusos no
valor liquido para a definição final do valor.



Da mesma forma que debugamos o tipo
de condição ICMI, podemos fazer isso para outras


condições.



Boa sorte a todos, espero ter ajudado