CE PLUS - Nota 003744

Módulo: CÂMBIO EXPORTAÇÃO

Funcionalidade: Rotina Mensal

Data/Hora da Publicação: 23/05/2007 00:00:00

Data/Hora Última Alteração: 18/02/2011 17:17:56

Descrição da Nota: ROTINA MENSAL EXPORTAÇÃO E CAPTAÇÃO - CÁLCULO JUROS

Sintoma

Ao rodar a Rotina Mensal de Exportação onde uma parcela de principal foi liquidada parcialmente, o

programa não separou os juros da data início até a liquidação e da liquidação até a data da rotina,

somente para primeira parcela de juros.

 

 

Solução

Tratar para todas parcelas o cálculo quando existe liquidação no meio do período e tem deduz_juros.

 

Versões Tratadas

7.0


Pré-Requisitos

Produto:

Nota

Descrição

CAPTAÇÃO - CALCULO DE JUROS DA PARCELA

CAPTAÇÃO - CALCULO DE JUROS

Informações Complementares

----------------------------------------------------------------------------------------------------

Nota Número 03744 Data: 23/05/2007 Hora: 15:22:43

----------------------------------------------------------------------------------------------------

 

----------------------------------------------------------------------------------------------------

Nota Número              : 03744

Categoria                : Erro de Programa

Prioridade               : Média

Versão PW.CE             : 7.0

Pacote                   : 00001

Agrupamento              : 00167

----------------------------------------------------------------------------------------------------

Referência às notas relacionadas:

Número - Ordem - Versão - Pacote - Descrição Breve

 

02253  - 00001 - 6.0    - 00025  - CAPTAÇÃO - CALCULO DE JUROS DA PARCELA

03071  - 00002 - 6.0    - 00026  - CAPTAÇÃO - CALCULO DE JUROS

----------------------------------------------------------------------------------------------------

ROTINA MENSAL EXPORTAÇÃO E CAPTAÇÃO - CÁLCULO JUROS

----------------------------------------------------------------------------------------------------

Palavras Chave:

ROTINA MENSAL EXPORTAÇÃO E CAPTAÇÃO CÁLCULO JUROS

DEDUZ_JUROS PRIMEIRA PARCELA DE JUROS

----------------------------------------------------------------------------------------------------

Objetos da nota:

REPS /PWS/MZYCB001F01

REPS /PWS/ZYCBR003

 

----------------------------------------------------------------------------------------------------

Modificações efetuadas em REPS /PWS/MZYCB001F01

 

...

  v_nrdias = itab_zycbt010-nrdias.

  SELECT SINGLE * FROM /pws/zycbt006

                  WHERE nrseqc EQ /pws/zycbe001-nrseqc.

  CLEAR :  v_liquid, v_dias.

  IF sy-subrc EQ 0.

    SORT itab_zycbt006 BY dtpagto ASCENDING.

    LOOP AT itab_zycbt006 WHERE dtpagext >  itab_zycbt002-dtinicio AND

                                dtpagext <= itab_zycbt002-dtfinal.

      v_liquid = v_liquid + itab_zycbt006-vljur.

      v_dtcalc = itab_zycbt006-dtpagto.

* >> Início da inclusão: FORM CALCJ_PRE_CAMBIAIS

    ENDLOOP.

    LOOP AT itab_zycbt006 WHERE dtpagext <= itab_zycbt002-dtfinal.

* << Fim da inclusão

      SELECT SINGLE parid

             FROM /pws/zycbt005

             INTO itab_zycbt005-parid

             WHERE nrseqc = itab_zycbt006-nrseqc

               AND tpdesp = itab_zycbt006-tpdesp

               AND nrparc = itab_zycbt006-nrparc

               AND dtincl = itab_zycbt006-dtincl

               AND nrinvoic = itab_zycbt006-nrinvoic

               AND nrparcf = itab_zycbt006-nrparcf

               AND gsberf = itab_zycbt006-gsberf

               AND dtvincul = itab_zycbt006-dtvincul

               AND dtvencto = itab_zycbt006-dtvencto.

      v_slpagar = v_slpagar + ( itab_zycbt006-vlme *

                                itab_zycbt005-parid ).

    ENDLOOP.

    v_slpagar = /pws/zycbe001-vlme - v_slpagar.

    IF itab_zycbt002j_aux[] IS INITIAL.

      itab_zycbt002j_aux[] = itab_zycbt002[].

    ENDIF.

* >> Início da exclusão: FORM CALCJ_PRE_CAMBIAIS

    IF itab_zycbt002-dtpagto      IS INITIAL AND

       ( /pws/zycbe001-tpcontr(1) EQ 'P'     OR

         /pws/zycbe001-tpcontr(1) EQ 'S' )   AND

       /pws/zycbe001-ffrcalc      EQ 'C'.

      v_nrparcj_aux = itab_zycbt002-nrparc.

      READ TABLE itab_zycbt002j_aux WITH KEY nrparc = v_nrparcj_aux.

      IF sy-subrc = 0 AND itab_zycbt002j_aux-dtpagto IS INITIAL.

        IF NOT v_slpagar IS INITIAL.

          LOOP AT itab_zycbt002p WHERE dtfinal <  itab_zycbt002-dtfinal.

            v_slpagar = v_slpagar - itab_zycbt002p-vlme.

          ENDLOOP.

        ENDIF.

      ENDIF.

    ENDIF.

* << Fim da exclusão

    IF v_dtcalc EQ '00000000'.

      v_dtcalc = itab_zycbt002-dtinicio.

    ENDIF.

    IF v_dtcalc < itab_zycbt002-dtfinal.

      v_dias = itab_zycbt002-dtfinal - v_dtcalc.

    ENDIF.

    CLEAR itab_zycbt002-vlme.

    IF itab_zycbt002-txjtotal > 0 AND

       v_dias > 0.

      itab_zycbt002-vlme = v_slpagar *

...

 

...

                    IF /pws/zycbe001-tpcontr(1) = 'P' OR

                       /pws/zycbe001-tpcontr(1) = 'S'.

                      MOVE itab_zycbt002p[] TO itab_prorrogacao[].

                      LOOP AT itab_prorrogacao.

                        IF NOT itab_prorrogacao-dtpror IS INITIAL.

                          itab_prorrogacao-dtfinal =

                             itab_prorrogacao-dtpror.

                          MODIFY itab_prorrogacao.

                        ENDIF.

                      ENDLOOP.

* >> Início da inclusão: FORM DIAS_JUROS

                      SELECT SINGLE * FROM /pws/zycbt006

                                    WHERE nrseqc = /pws/zycbe001-nrseqc.

                      IF sy-subrc EQ 0 AND itab_zycbt002-nrparc = '001'.

                        PERFORM verifica_pagamento_parc USING v_vlmeamj

                                                              v_valme.

                      ELSEIF itab_zycbt002-nrparc > '001'.

* << Fim da inclusão

                      LOOP AT itab_prorrogacao

                       WHERE dtfinal <  itab_zycbt002-dtfinal.

                        v_vlmeamj = v_vlmeamj - itab_prorrogacao-vlme.

                      ENDLOOP.

* >> Início da inclusão: FORM DIAS_JUROS

                      ENDIF.

* << Fim da inclusão

                    ELSE.

                      LOOP AT itab_zycbt002p

                        WHERE dtfinal <= itab_zycbt002-dtinicio.

                        v_vlmeamj = v_vlmeamj - itab_zycbt002p-vlme.

                      ENDLOOP.

                    ENDIF.

                  ELSE.

                    v_vlmeamj = /pws/zycbe001-vlme.

                  ENDIF.

                ENDIF.

* >> Início da inclusão: FORM DIAS_JUROS

                IF NOT v_valme IS INITIAL.

                  itab_zycbt002-vlme = v_valme.

                ELSE.

* << Fim da inclusão

                IF itab_zycbt002-nrdiasj IS INITIAL.

                  itab_zycbt002-vlme =

                     ( ( v_vlmeamj * ( itab_zycbt002-txjtotal / 100 ) )

                          / itab_zycbt010-nrdias )

                   * ( itab_zycbt002-dtfinal - itab_zycbt002-dtinicio ).

                ELSE.

                  itab_zycbt002-vlme =

                    ( ( v_vlmeamj * ( itab_zycbt002-txjtotal / 100 ) )

                   / itab_zycbt010-nrdias ) * ( itab_zycbt002-nrdiasj ).

* >> Início da inclusão: FORM DIAS_JUROS

                  ENDIF.

* << Fim da inclusão

                ENDIF.

              ENDIF.

              itab_zycbt002_aux-vlme = itab_zycbt002-vlme.

              MODIFY itab_zycbt002_aux TRANSPORTING vlme

                     WHERE nrseqc = itab_zycbt002-nrseqc

                       AND nrparc = itab_zycbt002-nrparc

                       AND tpparc = itab_zycbt002-tpparc.

              IF sy-subrc <> 0.

                MOVE itab_zycbt002 TO itab_zycbt002_aux.

                APPEND itab_zycbt002_aux.

...

 

...

  LOOP AT itab_zycbt221.

    MOVE-CORRESPONDING itab_zycbt221 TO /pws/zycbt221.

    MOVE: /pws/zycbe001-nrseqc TO /pws/zycbt221-nrseqc.

    INSERT /pws/zycbt221.

  ENDLOOP.

  itab_zycbt221_ant[] = wa_zycbt221[].

ENDFORM.

FORM period_refresh.

  CALL FUNCTION 'FI_PERIOD_REFRESH'.

ENDFORM.

* >> Início da inclusão:

FORM verifica_pagamento_parc USING p_vlmeamj

                                   p_vlmej.

  DATA: ultimo LIKE /pws/zycbt006-dtpagto.

  CLEAR p_vlmej.

  SELECT *

        FROM /pws/zycbt006

        INTO TABLE itab_zycbt006l

        WHERE nrseqc  =  /pws/zycbe001-nrseqc   AND

              dtpagto >= itab_zycbt002-dtinicio AND

              dtpagto <= itab_zycbt002-dtfinal

        ORDER BY dtpagto DESCENDING.

  LOOP AT itab_zycbt006l.

    p_vlmeamj = p_vlmeamj - itab_zycbt006l-vlme.

  ENDLOOP.

  READ TABLE itab_zycbt006l WITH KEY deduz_juros = 'X'.

  IF sy-subrc = 0.

    ultimo = itab_zycbt002-dtfinal.

    CLEAR itab_zycbt010.

    READ TABLE itab_zycbt010 WITH KEY tptxjur = itab_zycbt002-tptxjur.

    LOOP AT itab_zycbt006l.

      IF itab_zycbt006l-deduz_juros = 'X'.

        v_diasj = ultimo - itab_zycbt006l-dtpagto.

        p_vlmej = p_vlmej + (

                  p_vlmeamj * itab_zycbt002-txjtotal / 100

                  * v_diasj / itab_zycbt010-nrdias ).

        ultimo = itab_zycbt006l-dtpagto.

      ENDIF.

      SELECT SINGLE parid

             FROM /pws/zycbt005

             INTO /pws/zycbt005-parid

             WHERE nrseqc   = itab_zycbt006l-nrseqc

               AND tpdesp   = itab_zycbt006l-tpdesp

               AND nrparc   = itab_zycbt006l-nrparc

               AND dtincl   = itab_zycbt006l-dtincl

               AND nrinvoic = itab_zycbt006l-nrinvoic

               AND nrparcf  = itab_zycbt006l-nrparcf

               AND gsberf   = itab_zycbt006l-gsberf

               AND dtvincul = itab_zycbt006l-dtvincul

               AND dtvencto = itab_zycbt006l-dtvencto.

      p_vlmeamj = p_vlmeamj +

                      ( itab_zycbt006l-vlme * /pws/zycbt005-parid ).

    ENDLOOP.

    v_diasj = ultimo - itab_zycbt002-dtinicio.

    p_vlmej = p_vlmej + (

              p_vlmeamj * itab_zycbt002-txjtotal / 100

              * v_diasj / itab_zycbt010-nrdias ).

  ELSE.

    CLEAR itab_zycbt006l.

    REFRESH itab_zycbt006l.

    SELECT *

           FROM /pws/zycbt006

           INTO TABLE itab_zycbt006l

           WHERE nrseqc  = /pws/zycbe001-nrseqc   AND

                 dtpagto > itab_zycbt002-dtinicio.

    IF sy-subrc EQ 0.

      LOOP AT itab_zycbt006l.

        SELECT SINGLE parid

               FROM /pws/zycbt005

               INTO /pws/zycbt005-parid

             WHERE nrseqc   = itab_zycbt006l-nrseqc

               AND tpdesp   = itab_zycbt006l-tpdesp

               AND nrparc   = itab_zycbt006l-nrparc

               AND dtincl   = itab_zycbt006l-dtincl

               AND nrinvoic = itab_zycbt006l-nrinvoic

               AND nrparcf  = itab_zycbt006l-nrparcf

               AND gsberf   = itab_zycbt006l-gsberf

               AND dtvincul = itab_zycbt006l-dtvincul

               AND dtvencto = itab_zycbt006l-dtvencto.

        p_vlmeamj = p_vlmeamj +

                        ( itab_zycbt006l-vlme * /pws/zycbt005-parid ).

      ENDLOOP.

    ENDIF.

  ENDIF.

ENDFORM.

* << Fim da inclusão

 

----------------------------------------------------------------------------------------------------

Modificações efetuadas em REPS /PWS/ZYCBR003

 

...

    LOOP AT itab_zycbt006 WHERE dtpagto <= itab_zycbt002j-dtinicio

                            AND nrseqc  =  itab_zycbt001-nrseqc.

      v_saldo_inicial = v_saldo_inicial - itab_zycbt006-vlme.

    ENDLOOP.

    MOVE itab_zycbt006[] TO itab_zycbt006_aux[].

    LOOP AT itab_zycbt006 WHERE nrseqc = itab_zycbt001-nrseqc

                            AND dtpagto >= itab_zycbt002j-dtinicio

                            AND dtpagto < itab_zycbt002j-dtfinal

                            AND deduz_juros = 'X'.

    ENDLOOP.

* >> Início da exclusão: FORM PROCESSA_PERIODO_JL

    IF sy-subrc EQ 0 AND itab_zycbt002j-nrparc NE '001'.

* << Fim da exclusão

* >> Início da inclusão: FORM PROCESSA_PERIODO_JL

    IF sy-subrc EQ 0.

* << Fim da inclusão

      v_inicio = itab_zycbt002j-dtinicio.

      LOOP AT itab_zycbt006

        WHERE dtpagto >= itab_zycbt002j-dtinicio

          AND dtpagto < itab_zycbt002j-dtfinal

          AND dtpagto < s_dtentr

          AND nrseqc  = itab_zycbt001-nrseqc.

        IF v_ultimo EQ itab_zycbt006-dtpagto.

          CONTINUE.

        ENDIF.

        IF v_inicio EQ itab_zycbt006-dtpagto.

...