Módulo: DOC. IMPORTAÇÃO
Funcionalidade: DI
Data/Hora da Publicação: 05/10/2007 00:00:00
Data/Hora Última Alteração: 22/02/2011 13:49:56
Descrição da Nota: DI NAO CALCULA CORRETAMENTE ICMS QUANDO REDUZIDO
Sintoma
O sistema está calculando o ICMS errado quando o mesmo tem base reduzida. o sistema apresentou
diferença das bases de ICMS somente para os casos onde a base era reduzida, quando peguei sem
suspensão de PIS/Cofins e reduzi a base do mesmo o programa continuou calculando errado
Solução
corrigir cálculo de icms quando estiver parametrizado na tabela /PWS/ZYCIT062.
Informações Complementares
----------------------------------------------------------------------------------------------------
Nota Número 04922 Data: 05/10/2007 Hora: 14:18:47
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
Nota Número : 04922
Categoria : Erro de Programa
Prioridade : Alta
Versão PW.CE : 7.0
Pacote : 00003
Agrupamento : 00015
----------------------------------------------------------------------------------------------------
Referência às notas relacionadas:
Número - Ordem - Versão - Pacote - Descrição Breve
03158 - 00001 - 6.0 - 00026 - DI E DA COM PARAMETRO DA 062
04557 - 00002 - 7.0 - 00003 - REDUÇÃO DE BASE DE IMPOSTO NOTA FISCAL
04870 - 00003 - 7.0 - 00003 - QUANDO HOUVER ICMS SUSPENSO OU DIFERIDO, NÃO SOMAR NO VALOR RECOL
----------------------------------------------------------------------------------------------------
DI NAO CALCULA CORRETAMENTE ICMS QUANDO REDUZIDO
----------------------------------------------------------------------------------------------------
Palavras Chave:
REDUÇÃO DI - /PWS/ZYCIT062 - SUSPENSÃO PIS E COFINS
----------------------------------------------------------------------------------------------------
Objetos da nota:
REPS /PWS/MZYCI016F01
REPS /PWS/MZYCI023F03
REPS /PWS/MZYCI029F01
----------------------------------------------------------------------------------------------------
Modificações efetuadas em REPS /PWS/MZYCI016F01
...
ENDIF.
ELSEIF itab_zycit036-codigo = 'II'.
v_montante1 = v_montante1 + itab_zycit036-vlreal.
ELSEIF itab_zycit036-codigo = 'IPI'.
v_ipi = v_ipi + itab_zycit036-vlreal.
ELSEIF itab_zycit036-codigo = 'ICMS'.
v_icms = v_icms + itab_zycit036-vlreal.
v_basred = itab_zycit003-basred.
ENDIF.
ENDLOOP.
* >> Início da inclusão: FORM VERIFICA_MONTANTE
if itab_zycit100-icms_dif = 'X'.
itab_zycit003-basred = '100'.
v_basred = itab_zycit003-basred.
endif.
* << Fim da inclusão
CLEAR v_advicms.
IF NOT itab_zycit003-advalicms IS INITIAL.
IF /pws/zycit062-bs_pis_cof IS INITIAL.
IF NOT itab_zycit003-basred IS INITIAL OR
NOT itab_zycit003-basred EQ '100'.
v_advicms = ( ( itab_zycit003-advalicms / 100 ) *
( itab_zycit003-basred / 100 ) ) .
ELSE.
v_advicms = ( itab_zycit003-advalicms / 100 ).
ENDIF.
...
...
( itab_zycit042_d-vldpii /
itab_zycit044-menge * itab_zycit044-qtd_item ) .
v_outras_ic = ( itab_zycit044-vldp /
itab_zycit044-menge * itab_zycit044-qtd_item ) + v_vldp_044.
it_zycee007-netoth = v_despesas + v_outras + v_ipi +
v_vldp_044 .
it_zycee007-netpr = itab_zycit044-netpr.
v_total = ( ( it_zycee007-netpr * itab_zycit044-qtd_item ) +
it_zycee007-netfre + it_zycee007-netins +
it_zycee007-netoth ).
* >> Início da inclusão: FORM VALORES_R
if itab_zycit100-icms_dif = 'X'.
itab_zycit003-basred = '100'.
v_basred = itab_zycit003-basred.
endif.
* << Fim da inclusão
CLEAR v_advicms.
IF NOT itab_zycit003-advalicms IS INITIAL.
IF /pws/zycit062-bs_pis_cof IS INITIAL.
IF NOT itab_zycit003-basred IS INITIAL OR
NOT itab_zycit003-basred EQ '100'.
v_advicms = ( ( itab_zycit003-advalicms / 100 ) *
( itab_zycit003-basred / 100 ) ) .
ELSE.
v_advicms = ( itab_zycit003-advalicms / 100 ).
ENDIF.
...
...
AND ebelp = itab_zycit042-ebelp.
IF sy-subrc EQ 0.
SELECT * UP TO 1 ROWS FROM /pws/zycit085
WHERE nrseqdi = /pws/zycit100-nrseqdi.
ENDSELECT.
ENDIF.
IF /pws/zycit001-tpdecl IS INITIAL.
SELECT SINGLE *
FROM /pws/zycit001
WHERE nrseq EQ itab_zycit042-nrseq.
* >> Início da inclusão: FORM ATUALIZA_ICMS_UNITARIO
ENDIF.
if itab_zycit100-icms_dif = 'X'.
itab_zycit003-basred = '100'.
v_basred = itab_zycit003-basred.
* << Fim da inclusão
ENDIF.
CLEAR v_advicms.
IF NOT itab_zycit003-advalicms IS INITIAL.
IF /pws/zycit062-bs_pis_cof IS INITIAL.
IF NOT itab_zycit003-basred IS INITIAL OR
NOT itab_zycit003-basred EQ '100'.
v_advicms = ( ( itab_zycit003-advalicms / 100 ) *
( itab_zycit003-basred / 100 ) ) .
ELSE.
v_advicms = ( itab_zycit003-advalicms / 100 ).
...
...
v_montante1 = itab_zycit100-baseicms.
v_base = v_montante1.
v_excbas = ( v_montante1 / v_basred * 100 ) - v_base.
IF NOT /pws/zycit062-tred IS INITIAL AND
NOT /pws/zycit062-flag_icms IS INITIAL AND
v_basred < 100.
READ TABLE itab_zycit003 WITH KEY
nrseq = itab_zycit042-nrseq
ebeln = itab_zycit042-ebeln
ebelp = itab_zycit042-ebelp.
* >> Início da exclusão: FORM ITENS_NFNEW
v_excbas = v_excbas *
( 1 - ( itab_zycit003-advalicms / 100 ) ).
* << Fim da exclusão
* >> Início da inclusão: FORM ITENS_NFNEW
v_excbas = v_excbas + ( v_excbas *
( itab_zycit003-advalicms / 100 ) ) .
* << Fim da inclusão
ENDIF.
IF itab_zycit100-icms_dif = 'X'.
IF /pws/zycit062-flag_icms = 'X'.
DATA: v_base2 LIKE j_1bdytax-base.
CLEAR v_base2.
v_base2 = v_base2 + v_base.
ENDIF.
v_base_dif = v_base_dif + v_base2.
ENDIF.
it_zycee007-base = v_base.
...
...
v_montante1 = itab_zycit100-baseicms.
v_othbas = v_montante1 .
v_excbas = ( v_montante1 / v_basred * 100 ) - v_othbas.
IF NOT /pws/zycit062-tred IS INITIAL AND
NOT /pws/zycit062-flag_icms IS INITIAL AND
v_basred < 100.
READ TABLE itab_zycit003 WITH KEY
nrseq = itab_zycit042-nrseq
ebeln = itab_zycit042-ebeln
ebelp = itab_zycit042-ebelp.
* >> Início da exclusão: FORM ITENS_NFNEW
v_excbas = v_excbas *
( 1 - ( itab_zycit003-advalicms / 100 ) ).
* << Fim da exclusão
* >> Início da inclusão: FORM ITENS_NFNEW
v_excbas = v_excbas + ( v_excbas *
( itab_zycit003-advalicms / 100 ) ).
* << Fim da inclusão
ENDIF.
IF itab_zycit100-icms_dif = 'X'.
it_zycee007-othbas = it_zycee007-othbas
- itab_zycit100-vlicms.
v_base_dif = v_base_dif + itab_zycit100-baseicms.
ENDIF.
it_zycee007-othbas = v_othbas.
it_zycee007-c_excbas = v_excbas.
IF /pws/zycit001-meioemba = 'PS'.
v_base_ps = it_zycee007-othbas + it_zycee007-c_excbas.
...
...
/ v_basred.
CASE itab_zycit033-tribicms.
WHEN 1.
it_zycee007-base = v_total.
it_zycee007-base =
( it_zycee007-base * v_basred / 100 ).
IF v_basred NE 100.
it_zycee007-c_excbas = v_total - it_zycee007-base.
IF NOT /pws/zycit062-tred IS INITIAL AND
NOT /pws/zycit062-flag_icms IS INITIAL.
* >> Início da exclusão: FORM ITENS_NFRNEW
it_zycee007-c_excbas = it_zycee007-c_excbas *
( 1 - ( itab_zycit003-advalicms / 100 ) ).
* << Fim da exclusão
* >> Início da inclusão: FORM ITENS_NFRNEW
it_zycee007-c_excbas = it_zycee007-c_excbas +
( it_zycee007-c_excbas * ( itab_zycit003-advalicms / 100 ) ).
* << Fim da inclusão
ENDIF.
ENDIF.
IF itab_zycit100-icms_dif EQ 'X'.
IF /pws/zycit062-flag_icms = 'X'.
it_zycee007-base = it_zycee007-base - v_icms.
ENDIF.
v_icms_dif = v_icms_dif + v_icms.
v_base_dif = v_base_dif + it_zycee007-base.
ELSE.
it_zycee007-taxval = v_icms.
...
...
ENDIF.
v_base = it_zycee007-c_excbas.
WHEN 3.
it_zycee007-othbas = v_total.
IF v_basred NE 100.
it_zycee007-othbas =
( it_zycee007-othbas * v_basred / 100 ).
it_zycee007-c_excbas = v_total - it_zycee007-othbas.
IF NOT /pws/zycit062-tred IS INITIAL AND
NOT /pws/zycit062-flag_icms IS INITIAL.
* >> Início da inclusão: FORM ITENS_NFRNEW
it_zycee007-c_excbas = it_zycee007-c_excbas +
( it_zycee007-c_excbas * ( itab_zycit003-advalicms / 100 ) ).
* << Fim da inclusão
* >> Início da exclusão: FORM ITENS_NFRNEW
it_zycee007-c_excbas = it_zycee007-c_excbas *
( 1 - ( itab_zycit003-advalicms / 100 ) ).
* << Fim da exclusão
ENDIF.
ENDIF.
IF itab_zycit100-icms_dif EQ 'X'.
IF /pws/zycit062-flag_icms = 'X'.
it_zycee007-othbas = it_zycee007-othbas - v_icms.
ENDIF.
v_icms_dif = v_icms_dif + v_icms.
v_base_dif = v_base_dif + v_total.
ELSE.
it_zycee007-taxval = v_icms.
...
----------------------------------------------------------------------------------------------------
Modificações efetuadas em REPS /PWS/MZYCI023F03
...
IF v_sisco3 IS INITIAL.
DESCRIBE TABLE itab_zycit116 LINES v_ipa.
PERFORM fill_taxasiscomex USING v_ipa.
ENDIF.
IF NOT v_sisco3 IS INITIAL AND NOT v_nr_itens IS INITIAL.
v_desp = ( v_sisco3 / v_nr_itens ).
ENDIF.
ENDIF.
ENDIF.
MOVE-CORRESPONDING itab_it TO /pws/zycie100a.
* >> Início da inclusão: FORM LOAD_IICMS
IF v_nr_itens GT 1.
t_ivdesp = t_ivdesp + v_desp .
ELSE.
t_ivdesp = t_ivdesp + v_sisco3.
ENDIF.
* << Fim da inclusão
IF NOT /pws/zycie100a-reduzida IS INITIAL.
v_advii = ( /pws/zycie100a-reduzida / 100 ).
ELSE.
v_advii = ( /pws/zycie003-advalii / 100 ).
ENDIF.
IF NOT /pws/zycie100a-reduzidaipi IS INITIAL.
v_advipi = ( /pws/zycie100a-reduzidaipi / 100 ).
ELSE.
v_advipi = ( /pws/zycie003-advalipi / 100 ).
ENDIF.
IF /pws/zycit062-bs_pis_cof IS INITIAL.
* >> Início da exclusão: FORM LOAD_IICMS
IF NOT /pws/zycie003-basred IS INITIAL OR
* << Fim da exclusão
* >> Início da inclusão: FORM LOAD_IICMS
IF NOT /pws/zycie003-basred IS INITIAL AND
* << Fim da inclusão
NOT /pws/zycie003-basred EQ '100'.
v_advicms = ( ( /pws/zycie003-advalicms / 100 ) *
( /pws/zycie003-basred / 100 ) ) .
v_trunc = v_advicms.
v_advicms = v_trunc.
ELSE.
v_advicms = ( /pws/zycie003-advalicms / 100 ).
ENDIF.
ELSE.
v_advicms = ( /pws/zycie003-advalicms / 100 ).
...
...
ELSE.
v_vlipirec = t_ipirec.
ENDIF.
CLEAR: v_vlpisrec , v_vlcofrec.
IF '56' CA /pws/zycie100a-codregtripiscofi.
v_vlpisrec = a_pisdevi.
v_vlcofrec = a_cofdevi.
ELSE.
v_vlpisrec = t_pis .
v_vlcofrec = t_cofins.
ENDIF.
* >> Início da exclusão: FORM LOAD_IICMS
IF v_nr_itens GT 1.
IF NOT /pws/zycie003-advalicms IS INITIAL.
t_icmsbs_d2 = t_icmsbs = ( t_ivadu + v_vliirec + v_vlipirec +
t_ivdesp + v_desp + v_vlpisrec + v_vlcofrec ) *
( v_advicms * 100 / /pws/zycie003-advalicms ).
ELSE.
t_icmsbs_d2 = t_icmsbs = ( t_ivadu + v_vliirec + v_vlipirec +
t_ivdesp + v_desp + v_vlpisrec + v_vlcofrec ) *
( /pws/zycie003-basred / 100 ).
ENDIF.
* << Fim da exclusão
* >> Início da exclusão: FORM LOAD_IICMS
ELSE.
IF NOT /pws/zycie003-advalicms IS INITIAL.
t_icmsbs_d2 = t_icmsbs = ( t_ivadu + v_vliirec + v_vlipirec +
v_sisco3 + t_ivdesp + v_vlpisrec + v_vlcofrec ) *
( v_advicms * 100 / /pws/zycie003-advalicms ).
ELSE.
t_icmsbs_d2 = t_icmsbs = ( t_ivadu + v_vliirec + v_vlipirec +
v_sisco3 + t_ivdesp + v_vlpisrec + v_vlcofrec ) *
( /pws/zycie003-basred / 100 ).
ENDIF.
ENDIF.
* << Fim da exclusão
* >> Início da inclusão: FORM LOAD_IICMS
t_icmsbs_d2 = t_icmsbs = ( t_ivadu + v_vliirec + v_vlipirec +
t_ivdesp + v_vlpisrec + v_vlcofrec ) .
* << Fim da inclusão
* >> Início da inclusão: FORM LOAD_IICMS
IF /pws/zycit062-susp_nf EQ 'S' .
IF '56' CA /pws/zycie100a-codregtri .
t_icmsbs_d2 = t_icmsbs =
t_icmsbs - a_iicalc.
ENDIF.
IF '56' CA /pws/zycie100a-codregtriipi .
t_icmsbs_d2 = t_icmsbs =
t_icmsbs - a_ipidevi.
ENDIF.
IF '56' CA /pws/zycie100a-codregtripiscofi .
t_icmsbs_d2 = t_icmsbs =
t_icmsbs - a_piscalc - a_cofcalc.
ENDIF.
ENDIF.
IF /pws/zycie100a-baseicms LT 0.
CLEAR itab_zycit100-baseicms.
ENDIF.
IF NOT /pws/zycie003-advalicms IS INITIAL AND
NOT /pws/zycie100a-icms_dif EQ 'X'.
t_icmsbs_d2 = t_icmsbs = t_icmsbs *
( v_advicms * 100 / /pws/zycie003-advalicms ).
ELSEIF NOT /pws/zycie100a-icms_dif EQ 'X'.
t_icmsbs_d2 = t_icmsbs = t_icmsbs *
( /pws/zycie003-basred / 100 ).
* << Fim da inclusão
ENDIF.
* >> Início da exclusão: FORM LOAD_IICMS
IF /pws/zycit062-susp_nf EQ 'S' .
IF '56' CA /pws/zycie100a-codregtri .
t_icmsbs_d2 = t_icmsbs =
t_icmsbs - a_iicalc.
ENDIF.
IF '56' CA /pws/zycie100a-codregtriipi .
t_icmsbs_d2 = t_icmsbs =
t_icmsbs - a_ipidevi.
ENDIF.
IF '56' CA /pws/zycie100a-codregtripiscofi .
t_icmsbs_d2 = t_icmsbs =
t_icmsbs - a_piscalc - a_cofcalc.
ENDIF.
IF /pws/zycie100a-baseicms LT 0.
CLEAR itab_zycit100-baseicms.
ENDIF.
ENDIF.
* << Fim da exclusão
IF NOT /pws/zycit062-flag_icms IS INITIAL AND
/pws/zycie100a-icms_dif NE 'X'.
t_icmsx = ( 1 - v_advicms ) .
t_icms_d2 = t_icms = ( /pws/zycie003-advalicms / 100 ) *
( t_icmsbs / t_icmsx ) .
itab_it-vlicms = t_icms.
IF NOT /pws/zycie003-basred IS INITIAL AND
NOT /pws/zycie003-basred EQ '100'.
t_icmsbs = ( t_icmsbs / t_icmsx ).
...
...
t_icmsbs_d2 = t_icmsbs = t_icmsbs + t_icms.
ENDIF.
IF /pws/zycit062-susp_nf EQ 'S'.
IF '56' CA /pws/zycie100a-codregtriicms .
t_icmsbs_d2 = t_icmsbs =
t_icmsbs - t_icms.
ENDIF.
endif.
ELSE.
IF /pws/zycit062-bs_cheia_dif EQ 'X'.
* >> Início da exclusão: FORM LOAD_IICMS
t_icmsx = 1 - v_advicms .
t_icms_d2 = t_icms = v_advicms *
* << Fim da exclusão
* >> Início da inclusão: FORM LOAD_IICMS
t_icmsx = 1 - ( /pws/zycie003-advalicms / 100 ) .
t_icms_d2 = t_icms = ( /pws/zycie003-advalicms / 100 ) *
* << Fim da inclusão
( t_icmsbs / t_icmsx ) .
t_icmsbs_d2 = t_icmsbs = t_icmsbs + t_icms.
ELSE.
* >> Início da exclusão: FORM LOAD_IICMS
t_icms_d2 = t_icms = v_advicms * t_icmsbs.
* << Fim da exclusão
* >> Início da inclusão: FORM LOAD_IICMS
t_icms_d2 = t_icms = ( /pws/zycie003-advalicms / 100 ) * t_icmsbs.
* << Fim da inclusão
ENDIF.
...
----------------------------------------------------------------------------------------------------
Modificações efetuadas em REPS /PWS/MZYCI029F01
...
it_zycee007-ownpro2 = 'X'.
ENDIF.
READ TABLE itab_zycit100 WITH KEY
nrseq = itab_zycit265_c2-nrseq
ebeln = itab_zycit265_c2-ebeln
ebelp = itab_zycit265_c2-ebelp.
READ TABLE itab_zycit003 WITH KEY
nrseq = itab_zycit265_c2-nrseq
ebeln = itab_zycit265_c2-ebeln
ebelp = itab_zycit265_c2-ebelp.
* >> Início da inclusão: FORM ITENS_NFC
if itab_zycit100-icms_dif = 'X'.
itab_zycit003-basred = '100'.
endif.
* << Fim da inclusão
it_zycee007-rate = itab_zycit003-advalicms.
it_zycee007-taxtyp = itab_zycit033-taxtyp.
CLEAR it_zycee007-taxval.
CASE itab_zycit033-tribicms.
WHEN 1.
IF /pws/zycit062-flag_icms = 'X'.
IF itab_zycit100-icms_dif NE 'X'.
it_zycee007-taxval = ( itab_zycit265_c2-vldp_dif_icms +
itab_zycit265_c2-vldp_pis + itab_zycit265_c2-vldp_cofins )
/ ( ( 100 - itab_zycit003-advalicms ) / 100 ) .
...