CE PLUS - Nota 004922

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.

 

Versões Tratadas

7.0


Pré-Requisitos

Produto:

Nota

Descrição

DI E DA COM PARAMETRO DA 062

REDUÇÃO DE BASE DE IMPOSTO NOTA FISCAL

QUANDO HOUVER ICMS SUSPENSO OU DIFERIDO, NÃO SOMAR NO VALOR RECOLHER

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 ) .

...