Módulo: DOC. IMPORTAÇÃO
Funcionalidade: DI
Data/Hora da Publicação: 01/04/2010 00:00:00
Data/Hora Última Alteração: 22/02/2011 14:14:15
Descrição da Nota: CORREÇÃO DO CALCULO DA BASE DOS IMPOSTOS.
Sintoma
O montante base dos impostos fica errado quando um dos impostos faz parte da base de outro.
Solução
Ajustada programa para limpar as variveis antes dos calculos e corrigida leitura da tabela de
impostos.
8.0
Produto:
Nota
Descrição
Informações Complementares
----------------------------------------------------------------------------------------------------
Nota Número 10032 Data: 01/04/2010 Hora: 16:09:48
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
Nota Número : 10032
Categoria : Erro de Programa
Prioridade : Média
Versão PW.CE : 8.0
Pacote : 00003
Agrupamento : 00015
----------------------------------------------------------------------------------------------------
Referência às notas relacionadas:
Número - Ordem - Versão - Pacote - Descrição Breve
05181 - 00001 - 7.0 - 00003 - ATUALIZAÇÃO DO CALCULO DAS BASES DOS IMPOSTOS
10017 - 00002 - 8.0 - 00003 - GRAVAR AS ALTERAÇÕES DAS CONDIÇÕES DOS IMPOSTOS DA ANA
----------------------------------------------------------------------------------------------------
CORREÇÃO DO CALCULO DA BASE DOS IMPOSTOS.
----------------------------------------------------------------------------------------------------
Palavras Chave:
IMPOSTOS - ANA - ALTERAR - CALCULO - BASE
/PWS/SAPMZYCI059
----------------------------------------------------------------------------------------------------
Objetos da nota:
DYNP /PWS/SAPMZYCI059 0433
REPS /PWS/MZYCI059F03
REPS /PWS/MZYCI059I01
REPS /PWS/MZYCI059O01
----------------------------------------------------------------------------------------------------
Modificações efetuadas em DYNP /PWS/SAPMZYCI059 0433
MODIFICAR LÓGICA DE PROCESSAMENTO TELA 0433
...
carrega_totais.
LOOP AT itab_zycit403_i WITH CONTROL tc_trib.
MODULE: carrega_zycie403,
ajuste.
ENDLOOP.
PROCESS AFTER INPUT.
MODULE clear_variavel.
LOOP AT itab_zycit403_i.
MODULE: carrega_zycit403.
ENDLOOP.
* >> Início da inclusão:
module reapura_imp.
* << Fim da inclusão
----------------------------------------------------------------------------------------------------
Modificações efetuadas em REPS /PWS/MZYCI059F03
...
chave = /pws/zycie085-canal2.
IF sy-subrc NE 0.
IF /pws/zycie085-canal2 IS INITIAL.
CLEAR /pws/zycie085-canal.
ELSE.
CLEAR /pws/zycie085-canal2.
CLEAR /pws/zycie085-canal.
MESSAGE i015 WITH text-234.
ENDIF.
ENDIF.
* >> Início da exclusão: FORM PROPOE_BANCO
IF /pws/zycie085-aduana IS INITIAL.
SELECT SINGLE lifnr FROM /pws/zycit125 INTO /pws/zycie085-aduana
WHERE tipo = 'ADU' AND nrseq = /pws/zycie100a-nrseq.
MOVE /pws/zycie085-aduana TO /pws/zycie085-aduanadest.
ENDIF.
* << Fim da exclusão
ENDFORM.
...
...
ebelp = itab_zycit403-ebelp.
IF sy-subrc EQ 0.
MOVE:
itab_zycit403_t-percentual TO itab_zycit403-percentual,
itab_zycit403_t-condicoes TO itab_zycit403-condicoes,
itab_zycit403_t-creditar TO itab_zycit403-creditar.
ELSE.
MOVE itab_zycit403-advalorem TO itab_zycit403-percentual.
ENDIF.
v_index = v_index + 1.
* >> Início da exclusão: FORM CARREGA_TRIBUTOS
READ TABLE itab_zycit403 INTO wa_zycit403 INDEX v_index.
* << Fim da exclusão
* >> Início da inclusão: FORM CARREGA_TRIBUTOS
v_ate = v_ate - 1.
READ TABLE itab_zycit404 INTO itab_zycit404_aux
WITH KEY linha = v_ate.
CLEAR wa_zycit403.
READ TABLE itab_zycit403 INTO wa_zycit403
WITH KEY codigo = itab_zycit404_aux-codigo
ebeln = itab_zycit003-ebeln
ebelp = itab_zycit003-ebelp .
ADD 1 TO v_ate.
* << Fim da inclusão
v_valtot = v_valtot + wa_zycit403-valorcalc.
ENDIF.
ENDWHILE.
MOVE: itab_it-nrseqdi TO itab_zycit403-nrseqdi,
itab_it-ebeln TO itab_zycit403-ebeln,
itab_it-ebelp TO itab_zycit403-ebelp,
itab_zycit404-codigo TO itab_zycit403-codigo,
v_valtot TO itab_zycit403-base,
100 TO itab_zycit403-basered.
CLEAR v_valtot.
...
...
itab_zycit403-valorcalc =
itab_zycit403-base * itab_zycit403-percentual / 100.
IF itab_zycit403-valorcalc < itab_zycit399-vlmin AND
NOT itab_zycit399-vlmin IS INITIAL.
itab_zycit403-valorcalc = itab_zycit399-vlmin.
ENDIF.
IF itab_zycit403-valorcalc > itab_zycit399-vlmax AND
NOT itab_zycit399-vlmax IS INITIAL.
itab_zycit403-valorcalc = itab_zycit399-vlmax.
ENDIF.
itab_zycit403-valorrec = itab_zycit403-valorcalc.
APPEND itab_zycit403.
READ TABLE itab_adic INTO wa_adic
WITH KEY ebeln = itab_it-ebeln
ebelp = itab_it-ebelp
codigo = itab_zycit403-codigo.
IF sy-subrc NE 0.
...
----------------------------------------------------------------------------------------------------
Modificações efetuadas em REPS /PWS/MZYCI059I01
...
/pws/zycie403-ebelp TO itab_zycit403_i-ebelp,
/pws/zycie403-codigo TO itab_zycit403_i-codigo,
/pws/zycie403-base TO itab_zycit403_i-base,
/pws/zycie403-basered TO itab_zycit403_i-basered,
/pws/zycie403-advalorem TO itab_zycit403_i-advalorem,
/pws/zycie403-percentual TO itab_zycit403_i-percentual,
/pws/zycie403-valorcalc TO itab_zycit403_i-valorcalc,
/pws/zycie403-valorrec TO itab_zycit403_i-valorrec,
/pws/zycie403-condicoes TO itab_zycit403_i-condicoes,
/pws/zycie403-creditar TO itab_zycit403_i-creditar.
* >> Início da exclusão: MODULE CARREGA_ZYCIT403
LOOP AT itab_zycit404 WHERE exibir EQ 'X' AND
codigo = itab_zycit403_i-codigo.
CLEAR v_ate.
CLEAR v_index.
WHILE v_ate <= itab_zycit404-nivelate.
IF v_ate IS INITIAL.
v_ate = itab_zycit404-nivelde.
ENDIF.
CLEAR: itab_zycit404_aux, wa_zycit404.
READ TABLE itab_zycit404 INTO wa_zycit404 WITH KEY linha = v_ate.
READ TABLE itab_zycit404_aux WITH KEY linha = v_ate.
v_ate = v_ate + 1.
IF itab_zycit404_aux-codigo EQ 'FOB'.
IF NOT v_usd IS INITIAL.
v_valtot = v_valtot +
/pws/zycie100a-vlfob.
ENDIF.
ELSEIF itab_zycit404_aux-codigo EQ 'FRETEC'.
v_valtot = v_valtot + /pws/zycie100a-vlfre.
ELSEIF itab_zycit404_aux-codigo EQ 'SEGURO'.
v_valtot = v_valtot + /pws/zycie100a-vlseg.
ELSEIF itab_zycit404_aux-codigo EQ 'AJUSTE'.
v_valtot = v_valtot +
/pws/zycie100a-ajuste.
ELSEIF sy-subrc EQ 4.
READ TABLE itab_zycit403_i INTO wa_zycit403 WITH KEY
nrseqdi = itab_zycit403_i-nrseqdi
ebeln = itab_zycit403_i-ebeln
ebelp = itab_zycit403_i-ebelp
codigo = wa_zycit404-codigo.
v_valtot = v_valtot + wa_zycit403-valorcalc.
ENDIF.
ENDWHILE.
MOVE: v_valtot TO itab_zycit403_i-base.
CLEAR v_valtot.
IF sy-tcode NE '/PWS/ZYCI059_E'.
LOOP AT itab_trib WHERE ebeln = itab_zycit403_i-ebeln AND
ebelp = itab_zycit403_i-ebelp.
IF NOT v_usd IS INITIAL.
IF itab_trib-waers NE wa_zycbt007-waersb.
itab_trib-t_ivdesp = itab_trib-t_ivdesp / v_usd.
ENDIF.
ENDIF.
itab_zycit403_i-base = itab_zycit403_i-base + itab_trib-t_ivdesp.
ENDLOOP.
ENDIF.
IF ( itab_zycit403_i-codigo EQ '000415' OR
itab_zycit403_i-codigo EQ '000422' OR
itab_zycit403_i-codigo EQ '000429' ) AND
t001-land1 EQ 'AR'.
itab_zycit403_i-base = itab_zycit403_i-base
+ itab_it-vlicms.
ELSEIF wa_zycit477-land EQ t001-land1.
READ TABLE itab_zycit020
WITH KEY codigo = 'SISC'
baseii = 'X'.
IF sy-subrc EQ 0.
itab_zycit403_i-base = itab_zycit403_i-base
+ itab_it-vlicms.
ENDIF.
ENDIF.
CLEAR v_valtot.
IF itab_zycit403_i-codigo EQ '000010' OR
itab_zycit403_i-codigo EQ '000011' OR
itab_zycit403_i-codigo EQ 'DERECH'.
READ TABLE itab_zycit082 WITH KEY ebeln = itab_zycit403_i-ebeln
ebelp = itab_zycit403_i-ebelp.
IF sy-subrc EQ 0 AND itab_zycit082-doc NE space.
CLEAR: itab_zycit403_i-percentual, itab_zycit403_i-basered.
ENDIF.
ENDIF.
ENDLOOP.
itab_zycit403_i-valorcalc =
itab_zycit403_i-base * itab_zycit403_i-percentual / 100.
CLEAR itab_zycit399.
READ TABLE itab_zycit399
WITH KEY codigo = itab_zycit403_i-codigo.
IF itab_zycit403_i-valorcalc < itab_zycit399-vlmin AND
NOT itab_zycit399-vlmin IS INITIAL.
itab_zycit403_i-valorcalc = itab_zycit399-vlmin.
ENDIF.
IF itab_zycit403_i-valorcalc > itab_zycit399-vlmax AND
NOT itab_zycit399-vlmax IS INITIAL.
itab_zycit403_i-valorcalc = itab_zycit399-vlmax.
ENDIF.
IF /pws/zycie085-recal EQ 'X'.
itab_zycit403_i-valorrec = itab_zycit403_i-valorcalc.
ENDIF.
* << Fim da exclusão
MODIFY itab_zycit403_i INDEX tc_trib-current_line.
ENDMODULE.
...
...
* >> Início da inclusão:
MODULE reapura_imp INPUT.
DATA: v_first TYPE i,
v_index_imp TYPE sy-index.
IF itab_zycit404[] IS INITIAL.
IF NOT itab_it[] IS INITIAL.
SELECT nrseq ebeln ebelp doc FROM /pws/zycit082
INTO TABLE itab_zycit082
FOR ALL ENTRIES IN itab_it WHERE
ebeln = itab_it-ebeln AND
ebelp = itab_it-ebelp AND
nrseq = /pws/zycie001-nrseq.
ENDIF.
IF j_1bbranch-bukrs NE /pws/zycie085-bukrs OR
j_1bbranch-branch NE /pws/zycie085-j_1bbranch.
SELECT SINGLE * FROM j_1bbranch
WHERE bukrs = /pws/zycie085-bukrs
AND branch = /pws/zycie085-j_1bbranch.
SELECT SINGLE * FROM adrc
WHERE addrnumber = j_1bbranch-adrnr.
SELECT SINGLE * FROM /pws/zycit477 INTO wa_zycit477
WHERE land = t001-land1.
ENDIF.
SELECT * FROM /pws/zycit404 INTO TABLE itab_zycit404
WHERE codmod = 'D' AND
regio IN (adrc-region, space) AND
pais = t001-land1.
IF sy-subrc EQ 0.
SELECT * FROM /pws/zycit399 INTO TABLE itab_zycit399
FOR ALL ENTRIES IN itab_zycit404
WHERE codigo = itab_zycit404-codigo AND
codmod = 'D' AND
regio IN (adrc-region, space) AND
pais = t001-land1.
ENDIF.
ENDIF.
SORT: itab_zycit404 DESCENDING BY regio,
itab_zycit399 DESCENDING BY regio.
READ TABLE: itab_zycit404 INDEX 1,
itab_zycit399 INDEX 1.
DELETE: itab_zycit404 WHERE regio NE itab_zycit404-regio,
itab_zycit399 WHERE regio NE itab_zycit399-regio.
SORT itab_zycit404 BY linha.
LOOP AT itab_zycit404 WHERE exibir NE 'X'
OR somatoria EQ space.
MOVE itab_zycit404 TO itab_zycit404_aux.
APPEND itab_zycit404_aux.
ENDLOOP.
READ TABLE itab_it WITH KEY ebeln = /pws/zycie100a-ebeln
ebelp = /pws/zycie100a-ebelp.
READ TABLE itab_zycit003 WITH KEY ebeln = /pws/zycie100a-ebeln
ebelp = /pws/zycie100a-ebelp.
LOOP AT itab_zycit404 WHERE exibir EQ 'X'.
READ TABLE itab_zycit403_i
WITH KEY codigo = itab_zycit404-codigo
ebeln = itab_zycit003-ebeln
ebelp = itab_zycit003-ebelp.
v_index_imp = sy-tabix.
IF sy-subrc NE 0 .
CONTINUE.
ENDIF.
CLEAR v_ate.
v_index = v_first.
v_ate = itab_zycit404-nivelde.
WHILE v_ate <= itab_zycit404-nivelate.
CLEAR itab_zycit404_aux.
READ TABLE itab_zycit404_aux WITH KEY linha = v_ate.
IF itab_zycit404_aux-codigo EQ 'FOB'.
IF NOT v_usd IS INITIAL.
v_valtot = v_valtot + itab_it-vlfob .
ENDIF.
ELSEIF itab_zycit404_aux-codigo EQ 'FRETEC'.
v_valtot = v_valtot + itab_it-vlfre.
ELSEIF itab_zycit404_aux-codigo EQ 'SEGURO'.
v_valtot = v_valtot + itab_it-vlseg.
ELSEIF itab_zycit404_aux-codigo EQ 'AJUSTE'.
v_valtot = v_valtot + itab_it-ajuste.
ELSEIF sy-subrc EQ 4.
READ TABLE itab_zycit404 INTO itab_zycit404_aux
WITH KEY linha = v_ate.
CLEAR wa_zycit403.
READ TABLE itab_zycit403_i INTO wa_zycit403
WITH KEY codigo = itab_zycit404_aux-codigo
ebeln = itab_zycit003-ebeln
ebelp = itab_zycit003-ebelp .
v_valtot = v_valtot + wa_zycit403-valorcalc.
ENDIF.
v_ate = v_ate + 1.
ENDWHILE.
MOVE: v_valtot TO itab_zycit403_i-base.
CLEAR v_valtot.
LOOP AT itab_trib WHERE ebeln = itab_it-ebeln AND
ebelp = itab_it-ebelp.
IF NOT v_usd IS INITIAL.
IF itab_trib-waers NE wa_zycbt007-waersb.
itab_trib-t_ivdesp = itab_trib-t_ivdesp / v_usd.
ELSE.
itab_trib-t_ivdesp = itab_trib-t_ivdesp / v_usd.
ENDIF.
ENDIF.
itab_zycit403_i-base =
itab_zycit403_i-base + itab_trib-t_ivdesp.
ENDLOOP.
IF ( itab_zycit404-codigo EQ '000415' OR
itab_zycit404-codigo EQ '000422' OR
itab_zycit404-codigo EQ '000429' ) AND
t001-land1 EQ 'AR'.
itab_zycit403_i-base = itab_zycit403_i-base
+ itab_it-vlicms.
ELSEIF wa_zycit477-land EQ t001-land1.
READ TABLE itab_zycit020
WITH KEY codigo = 'SISC'
baseii = 'X'.
IF sy-subrc EQ 0.
itab_zycit403_i-base = itab_zycit403_i-base
+ itab_it-vlicms.
ENDIF.
ENDIF.
CLEAR v_valtot.
IF itab_zycit404-codigo EQ '000010' OR
itab_zycit404-codigo EQ '000011' OR
itab_zycit404-codigo EQ 'DERECH'.
READ TABLE itab_zycit082 WITH KEY ebeln = itab_it-ebeln
ebelp = itab_it-ebelp.
IF sy-subrc EQ 0 AND itab_zycit082-doc NE space.
MODIFY itab_zycit403_i INDEX v_index_imp.
READ TABLE itab_zycit403 WITH KEY
codigo = itab_zycit404-codigo
ebeln = itab_zycit003-ebeln
ebelp = itab_zycit003-ebelp.
IF sy-subrc EQ 0 .
MOVE itab_zycit403_i TO itab_zycit403.
MODIFY itab_zycit403 INDEX sy-tabix.
ENDIF.
CLEAR itab_zycit403_i.
CONTINUE.
ENDIF.
ENDIF.
CLEAR: itab_zycit399.
READ TABLE itab_zycit399 WITH KEY
codigo = itab_zycit403_i-codigo.
itab_zycit403_i-valorcalc =
itab_zycit403_i-base * itab_zycit403_i-percentual / 100.
IF itab_zycit403_i-valorcalc < itab_zycit399-vlmin AND
NOT itab_zycit399-vlmin IS INITIAL.
itab_zycit403_i-valorcalc = itab_zycit399-vlmin.
ENDIF.
IF itab_zycit403_i-valorcalc > itab_zycit399-vlmax AND
NOT itab_zycit399-vlmax IS INITIAL.
itab_zycit403_i-valorcalc = itab_zycit399-vlmax.
ENDIF.
MODIFY itab_zycit403_i INDEX v_index_imp.
READ TABLE itab_zycit403 WITH KEY
codigo = itab_zycit404-codigo
ebeln = itab_zycit003-ebeln
ebelp = itab_zycit003-ebelp.
IF sy-subrc EQ 0 .
MOVE itab_zycit403_i TO itab_zycit403.
MODIFY itab_zycit403 INDEX sy-tabix.
ENDIF.
READ TABLE itab_adic INTO wa_adic
WITH KEY ebeln = itab_it-ebeln
ebelp = itab_it-ebelp
codigo = itab_zycit403-codigo.
IF sy-subrc EQ 0.
MOVE: itab_zycit403-base TO wa_adic-base,
itab_zycit403-percentual TO wa_adic-percentual,
itab_zycit403-valorrec TO wa_adic-valorrec,
itab_zycit403-condicoes TO wa_adic-condicoes.
MODIFY itab_adic FROM wa_adic INDEX sy-tabix.
ENDIF.
CLEAR itab_zycit403.
ENDLOOP.
DESCRIBE TABLE itab_zycit403 LINES v_first.
ENDMODULE.
* << Fim da inclusão
----------------------------------------------------------------------------------------------------
Modificações efetuadas em REPS /PWS/MZYCI059O01
...
IF sy-subrc EQ 0.
IF NOT itab_zyglt100-zexit_ativa IS INITIAL.
PERFORM (itab_zyglt100-formulario)
IN PROGRAM (itab_zyglt100-programa)
CHANGING e_subrc.
IF e_subrc NE 0.
EXIT.
ENDIF.
ENDIF.
ENDIF.
* >> Início da exclusão: MODULE CARREGA_ZYCIE403
LOOP AT itab_zycit404 WHERE exibir EQ 'X' AND
codigo = itab_zycit403_i-codigo.
CLEAR v_ate.
CLEAR v_index.
WHILE v_ate <= itab_zycit404-nivelate.
IF v_ate IS INITIAL.
v_ate = itab_zycit404-nivelde.
ENDIF.
CLEAR: itab_zycit404_aux, wa_zycit404.
READ TABLE itab_zycit404 INTO wa_zycit404 WITH KEY linha = v_ate.
READ TABLE itab_zycit404_aux WITH KEY linha = v_ate.
v_ate = v_ate + 1.
IF itab_zycit404_aux-codigo EQ 'FOB'.
IF NOT v_usd IS INITIAL.
v_valtot = v_valtot +
/pws/zycie100a-vlfob .
ENDIF.
ELSEIF itab_zycit404_aux-codigo EQ 'FRETEC'.
v_valtot = v_valtot + /pws/zycie100a-vlfre.
ELSEIF itab_zycit404_aux-codigo EQ 'SEGURO'.
v_valtot = v_valtot + /pws/zycie100a-vlseg.
ELSEIF itab_zycit404_aux-codigo EQ 'AJUSTE'.
IF NOT v_usd IS INITIAL.
v_valtot = v_valtot +
/pws/zycie100a-ajuste.
ENDIF.
ELSEIF sy-subrc EQ 4.
READ TABLE itab_zycit403_i INTO wa_zycit403 WITH KEY
nrseqdi = itab_zycit403_i-nrseqdi
ebeln = itab_zycit403_i-ebeln
ebelp = itab_zycit403_i-ebelp
codigo = wa_zycit404-codigo.
v_valtot = v_valtot + wa_zycit403-valorcalc.
ENDIF.
ENDWHILE.
MOVE: v_valtot TO /pws/zycie403-base.
CLEAR v_valtot.
ENDLOOP.
IF sy-tcode NE '/PWS/ZYCI059_E'.
LOOP AT itab_trib WHERE ebeln = itab_zycit403_i-ebeln AND
ebelp = itab_zycit403_i-ebelp.
IF NOT v_usd IS INITIAL.
IF itab_trib-waers NE wa_zycbt007-waersb.
itab_trib-t_ivdesp = itab_trib-t_ivdesp / v_usd.
ENDIF.
ENDIF.
/pws/zycie403-base = /pws/zycie403-base + itab_trib-t_ivdesp.
ENDLOOP.
ENDIF.
IF ( /pws/zycie403-codigo EQ '000415' OR
/pws/zycie403-codigo EQ '000422' OR
/pws/zycie403-codigo EQ '000429' ) AND
t001-land1 EQ 'AR'.
/pws/zycie403-base = /pws/zycie403-base
+ itab_it-vlicms.
ELSEIF wa_zycit477-land EQ t001-land1.
READ TABLE itab_zycit020
WITH KEY codigo = 'SISC'
baseii = 'X'.
IF sy-subrc EQ 0.
/pws/zycie403-base = /pws/zycie403-base
+ itab_it-vlicms.
ENDIF.
ENDIF.
CLEAR v_valtot.
IF /pws/zycie403-codigo EQ '000010' OR
/pws/zycie403-codigo EQ '000011' OR
/pws/zycie403-codigo EQ 'DERECH'.
READ TABLE itab_zycit082 WITH KEY ebeln = /pws/zycie403-ebeln
ebelp = /pws/zycie403-ebelp.
IF sy-subrc EQ 0 AND itab_zycit082-doc NE space.
CLEAR: /pws/zycie403-percentual, /pws/zycie403-basered.
ENDIF.
ENDIF.
/pws/zycie403-valorcalc =
/pws/zycie403-base * /pws/zycie403-percentual / 100.
CLEAR itab_zycit399.
READ TABLE itab_zycit399
WITH KEY codigo = /pws/zycie403-codigo.
IF /pws/zycie403-valorcalc < itab_zycit399-vlmin AND
NOT itab_zycit399-vlmin IS INITIAL.
/pws/zycie403-valorcalc = itab_zycit399-vlmin.
ENDIF.
IF /pws/zycie403-valorcalc > itab_zycit399-vlmax AND
NOT itab_zycit399-vlmax IS INITIAL.
/pws/zycie403-valorcalc = itab_zycit399-vlmax.
ENDIF.
IF /pws/zycie085-recal EQ 'X'.
/pws/zycie403-valorrec = /pws/zycie403-valorcalc.
ENDIF.
* << Fim da exclusão
READ TABLE itab_zycit029 WITH KEY codmod = 'D'
codigo = /pws/zycie403-codigo
land1 = t001-land1.
IF sy-subrc EQ 0.
MOVE itab_zycit029-descricao TO /pws/zycit029-descricao.
ENDIF.
ENDMODULE.
...