Você está na página 1de 6

www.localizationforum.

com

Introdução
Este manual tem por finalidade auxiliar consultores a debugar a função J_1BCALCULATE_TAXES,
pertencente ao pacote J1BA de localização Brasil no sistema SAP ERP.

Público-alvo
Consultores que trabalham com localização Brasil nos módulos de MM/SD e FI.

Pré-requisitos
Conhecimentos intermediários de localização Brasil
Conhecimentos de ABAP
Conhecimentos de debug

Debugando a função
A seguir são apresentadas as diferentes seções da função, com a respectiva explicação sobre a
finalidade de cada uma delas e como identificá-las no código:

1. Preparação dos dados relevantes para cálculo de impostos por aplicação


de chamada:
*----------------------------------------------------------------------*
* fill application dependent parameters *
*----------------------------------------------------------------------*
Aplicações de chamada: MM-IM, MM-IV, MM-PUR-PO, MM-SRV ou SD.

Dados relevantes: parâmetros-chave (e.g. fornecedor, cliente, NCM,


etc)

2. Preparação dos impostos a serem calculados

a. Determinação das características dos impostos ativos


(tabela taxes[])

PERFORM determine_active_tax_types
TABLES taxes.

Taxes[] é preenchida a partir das informações das condições ativas no


IVA, da tabela J_1BAJV e da chave de contas atribuída no procedimento de
cálculo

Taxes[] dirá quais as características dos impostos a serem calculados


(É dedutível? É um serviço? Está Incluso no preço líquido? É retido na
fonte?) Etc...)

b. Seleção dos impostos ativos


(tabela calc[])

PERFORM determine_calc_taxes
www.localizationforum.com

TABLES taxes
USING calc.

Calc[] é preenchida a partir do conteúdo da tabela interna Taxes[]


(2.a.)

Calc[] dirá quais partes da função J_1BCALCULATE_TAXES deverão ser


processadas
em função do imposto a ser calculado

3. Leitura dos parâmetros de cálculo dos impostos ativos por tipo de imposto
(perform determine_X_parameters, onde ‘X’ é o nome do imposto)

Determinação da alíquota, base, direito fiscal e outras informações


relevantes
de cada imposto.

Calc[] (2.b.) dirá quais partes da função J_1BCALCULATE_TAXES deverão


ser
processadas em função do imposto a ser calculado

a. Parâmetros de IPI
PERFORM determine_ipi_parameters

b. Parâmetros de ICMS

IF calc-icms = 'X'.
PERFORM determine_icms_parameters

c. Parâmetros de ICMS Complementar


IF calc-icms_comp = yes.

* get ICMS rate for SHIP_FROM = SHIP_TO
PERFORM determine_icms_parameters USING cf-caller

d. Parâmetros de Substituição Tributária ICMS (normal e sobre frete)


IF calc-icms_st = 'X' OR
calc-icms_freight_st = 'X'.

e. Parâmetros de Substituição Tributária (somente frete)


IF calc-icms_freight = 'X' OR
calc-icms_freight_st = 'X'.

f. Parâmetros do ISSQN LC116 (Imposto Sobre Serviço de Qualquer Natureza)


(ver nota 747607)

o ISS no Local do Prestador do Serviço (Fornecedor)


IF calc-issp = 'X'.
PERFORM determine_issnew_parameters
www.localizationforum.com

o ISS no Local do Tomador do Serviço (Cliente)


IF calc-isss = 'X'.
PERFORM determine_issnew_parameters

g. Parâmetros de PIS
(ver nota 747607)

PERFORM determine_pis_parameters

h. Parâmetros de COFINS
(ver nota 747607)

PERFORM determine_cofins_parameters

i. Parâmetros de IRF (Imposto Retido na Fonte, inclusive ISSQN retido na


fonte)
(ver nota 747607)

PERFORM determine_wht_parameters

4. Cálculo dos impostos ativos


*----------------------------------------------------------------------*
* start of calculation *
*----------------------------------------------------------------------*

os parâmetros obtidos no passo 3 são processados em conjunto para o


cálculo dos valores dos impostos.

a. Determinação dos impostos inclusos no preço líquido


(ver nota 747607)
(Leitura da view J_1BKONV em função do procedimento de cálculo de preço utilizado no documento de
referência)

PERFORM determine_additional_rate

CHANGING
lv_additional_rate
lv_additional_base

lv_additional_rate e lv_additional_base armazena as alíquotas/bases


de PIS/COFINS quando não inclusos no preço líquido, para que estes
componham a base de ICMS. Caso seja um serviço, lv_additional_rate e
lv_additional_base armazenam as alíquotas/bases de PIS/COFINS e ISS para
a composição da base de cálculo do serviço.

b. Cálculo de ICMS, IPI e ICMS Complementar/DIFAL* de acordo com a utilização


do material.
* somente consumo/ativo (ver notas 679372 e 844630)

(a utilização do IVA – definida na tabela J_1BTXMMCV (4.6C) ou J_1BTAXCODEV (4.7+) –, combinada


com a utilização do material – definida no registro mestre – irá determinar qual fórmula de cálculo será
utilizada para cada tipo de imposto. Influenciam o cálculo também outros parâmetros como Convênio 100,
descontos e o processo. No processo de transferência para consumo, por exemplo, não há cálculo de
ICMS).
www.localizationforum.com

o Industrialização/Revenda
IF cf-usage = c_usage-ind. "industrialization
*........ Usage is Industrialization ..................................*

o Consumo/Ativo

ELSEIF cf-usage = c_usage-con. "consumption


*........ Usage is Consumption ........................................*

c. Cálculo de Substituição Tributária ICMS (inclusive sobre frete)


*----------------------------------------------------------------------*
* calculate Substituicao Tributaria *
*----------------------------------------------------------------------*

IF calc-icms_st = yes AND


subtrib-sur_type <> c_subtrib-no_calc.

Para que haja cálculo de S.T., é preciso que as seguintes condições


sejam satisfeitas:

1) a condição ICS1 ou ICS2 deve estar ativa no IVA

2) deve ser criada uma entrada em uma das J_1BTXST*, (com o campo
"Grp.SubF" vazio para MM). Além disso, deve-se escolher um "Método de
Cálculo" adequado, diferente de “no-calculation”.

3) para compras de material com uso consumo, a seguinte lógica adicional


se aplica:

“a alíquota de ICMS interna do estado de destino deve ser superior à


alíquota interestadual dos estados envolvidos.”

Exemplo:

se o fornecedor está em MG e o comprador está em SP, a alíquota SP-SP


deve ser superior à alíquota MG-SP.

Se essa condição for satisfeita, o valor do ICMS substituído será


exatamente o valor do Complemento ICMS.

Já se o processo ocorrer dentro do mesmo estado, não haverá Substituição


Tributária, uma vez que a figura da "sobretaxa" não se aplica no caso de
consumo.

d. Processamento especial para compra de fornecedores equiparados à indústria


(“IPI-Split” é ativado marcando-se o flag ‘Tax Split’ (LFA1-IPISP) no registro mestre de fornecedor e
ativando-se as condições IPI1 e IPI2 no IVA)

IF cf-ipi_split = yes AND


calc-ipi = yes.

e. Definição da base de cálculo de PIS/COFINS especial de acordo com a


utilização do material e definições da filial.
www.localizationforum.com

(se utilização = revenda e filial = não contribuinte de IPI nota 947218 se utilização = revenda e filial =
Contribuinte de IPI nota 1088901)

IF add_tax_data-mtuse = c_usage-res "947218


AND cf-caller <> c_caller-sd. "947218
* base id w/o IPI "1063650
if add_tax_data-ipicontributor = yes. "1063650
lv_base_pico = iic. "1063650
else. "1063650
lv_base_pico = iicip. "947218
endif. "1063650
ENDIF. "947218

f. Cálculo de PIS
IF calc-pis = yes.

PERFORM calculate_pis

g. Cálculo de COFINS
IF calc-cofins = yes.

PERFORM calculate_cofins

h. Cálculo do ISSQN (tanto no Prestador quanto no Tomador do Serviço)


IF calc-issp = yes OR calc-isss = yes.
PERFORM calculate_issnew

i. Cálculo da Base dos IRF


(ver nota 779617)

IF calc-wht = yes.
* Base amount on NF for all WHT types = WHT calculation base
* = Net + all taxes excluding SubTrib

j. Cálculo do Valor dos IRF


PERFORM calculate_wht

5. Armazenamento dos direitos fiscais

a. ICMS, IPI, PIS e COFINS

*----------------------------------------------------------------------*
* table TAX_LAWS *
*----------------------------------------------------------------------*

6. Arredondamento dos valores calculados


(ver nota 701240)

*---------------------------------------------------*
* R O U N D I N G O F B A S E S *
*---------------------------------------------------*
www.localizationforum.com

7. Mapeamento dos valores para a Nota Fiscal e para o documento contábil


*----------------------------------------------------------------------*
* TAX_RESULT and table NF_VALUES *
*----------------------------------------------------------------------*

Os valores fiscais são armazenados na tabela interna NF_VALUES[], que


é atualizada a cada chamada da rotina perform fill_nf_data.

* process all tax types / tax groups


LOOP AT taxes.
CASE taxes-group.

PERFORM fill_nf_data.

Os valores contáveis são armazenados numa área de memória com o mesmo


nome da fórmula utilizada do tipo de condição definida na TAXBRJ (e.g.
ICM1 = 523)

PERFORM fill_tax_results.

FORM fill_tax_result

* assign values
* CASE taxes-formula. "787104
CASE taxes_formula. "787104
* WHEN 301.
WHEN 521.
tax_result-taxpct1 = corr_rate.
tax_result-taxamt1 = char_amount.
tax_result-taxbas1 = char_base.

Por fim, os dados são exportados para áreas de memória globais*


(NF_VALUES, NF_LAWS e NF_ICMS_ROUNDING) que serão usada pela aplicação
de chamada para mapear os valores para a tela correspondente da Nota
Fiscal.
* ou seja, áreas válidas para toda a LUW (Logical Unit of Work)

PERFORM export_nf_values.

FORM export_nf_values.
EXPORT nf_values nf_laws nf_icms_rounding TO MEMORY ID c_id_nf.
ENDFORM.