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