Módulo: CÂMBIO EXPORTAÇÃO
Funcionalidade: Rotina Mensal
Data/Hora da Publicação: 29/04/2008 00:00:00
Data/Hora Última Alteração: 18/02/2011 17:16:21
Descrição da Nota: CAPTAÇÃO/ROTINA MENSAL - CALCULO DA COMISSAO
Sintoma
O programa não faz o calculo da comissao corretamente.
Solução
ajustado para que o calculo da comissão seja feito de maneira correta.
Informações Complementares
----------------------------------------------------------------------------------------------------
Nota Número 06478 Data: 29/04/2008 Hora: 13:07:24
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
Nota Número : 06478
Categoria : Erro de Programa
Prioridade : Média
Versão PW.CE : 7.0
Pacote : 00005
Agrupamento : 00045
----------------------------------------------------------------------------------------------------
Referência às notas relacionadas:
Número - Ordem - Versão - Pacote - Descrição Breve
03938 - 00001 - 7.0 - 00002 - ROTINA MENSAL EXPORTAÇÃO - CAMPO DATA OBRIGATÓRIO
03942 - 00002 - 7.0 - 00002 - ROTINA MENSAL EXPORTAÇÃO - TAXAS
04010 - 00003 - 7.0 - 00002 - ROTINA MENSAL - CONTABILIZAÇÃO DE PARCELAS DE COMISSÃO
04930 - 00004 - 7.0 - 00003 - CODE INSPECTOR(ROTINA MENSAL)
----------------------------------------------------------------------------------------------------
CAPTAÇÃO/ROTINA MENSAL - CALCULO DA COMISSAO
----------------------------------------------------------------------------------------------------
Palavras Chave:
CAPTAÇÃO/ROTINA MENSAL - CALCULO DA COMISSAO
----------------------------------------------------------------------------------------------------
Objetos da nota:
FUNC /PWS/ZYCB_CALCULA_COMISSAO
REPS /PWS/ZYCBR003
----------------------------------------------------------------------------------------------------
Modificações efetuadas em FUNC /PWS/ZYCB_CALCULA_COMISSAO
FUNCTION /pws/zycb_calcula_comissao.
TYPES: BEGIN OF t_base,
nrparc TYPE /pws/zycbe002-nrparc,
base_pol TYPE /pws/zycbe002-vlme,
valor_pol TYPE /pws/zycbe002-vlme,
base_com TYPE /pws/zycbe002-vlme,
valor_com TYPE /pws/zycbe002-vlme,
END OF t_base.
DATA: v_nrdias_taxa TYPE /pws/zycbt010-nrdias,
* >> Início da inclusão: FUNCTION /PWS/ZYCB_CALCULA_COMISSAO
v_nrdias type i,
v_vlme TYPE /pws/zycbt002-vlme,
v_vlme2 TYPE /pws/zycbt002-vlme,
* << Fim da inclusão
v_vlme_princ TYPE /pws/zycbt002-vlme,
v_indice TYPE i,
v_ind_dtinicio TYPE i,
v_ind_dtfinal TYPE i,
itab_base TYPE STANDARD TABLE OF t_base
WITH HEADER LINE,
wa_juros TYPE /pws/zycbe002.
SELECT SINGLE nrdias
FROM /pws/zycbt010
INTO v_nrdias_taxa
...
...
IF sy-subrc NE 0.
RAISE nrdias_comis_not_found.
ENDIF.
IF i_princ_juros IS INITIAL.
IF i_perc_comis IS INITIAL.
RAISE perc_comis_empty.
ENDIF.
LOOP AT t_comissao.
CLEAR: t_comissao-vlme, v_vlme_princ.
LOOP AT t_principal
* >> Início da exclusão: FUNCTION /PWS/ZYCB_CALCULA_COMISSAO
WHERE dtfinal LT t_comissao-dtfinal.
* << Fim da exclusão
* >> Início da inclusão: FUNCTION /PWS/ZYCB_CALCULA_COMISSAO
WHERE dtfinal LT t_comissao-dtfinal.
* << Fim da inclusão
v_vlme_princ = v_vlme_princ + t_principal-vlme.
ENDLOOP.
* >> Início da exclusão: FUNCTION /PWS/ZYCB_CALCULA_COMISSAO
t_comissao-vlme = ( i_vlme - v_vlme_princ ) * t_comissao-nrdias *
* << Fim da exclusão
* >> Início da inclusão: FUNCTION /PWS/ZYCB_CALCULA_COMISSAO
v_vlme = i_vlme.
CLEAR: v_nrdias.
LOOP AT t_principal
WHERE dtfinal LT t_comissao-dtfinal.
IF t_comissao-dtinicio < t_principal-dtfinal.
IF t_comissao-dtfinal > t_principal-dtfinal.
v_nrdias = t_principal-dtfinal - t_comissao-dtinicio.
IF t_principal-nrdias < v_nrdias.
v_nrdias = t_principal-nrdias.
ENDIF.
ELSE.
v_nrdias = t_comissao-dtfinal - t_principal-dtfinal.
ENDIF.
t_comissao-vlme = t_comissao-vlme +
( v_vlme ) *
( v_nrdias ) *
( i_perc_comis / 100 ) / v_nrdias_taxa.
ENDIF.
v_vlme = v_vlme - t_principal-vlme.
IF t_principal-dtfinal < t_comissao-dtinicio.
v_nrdias = t_comissao-dtfinal - t_comissao-dtinicio.
ELSE.
v_nrdias = t_comissao-dtfinal - t_principal-dtfinal.
ENDIF.
ENDLOOP.
IF sy-subrc NE 0.
t_comissao-vlme = t_comissao-vlme +
( v_vlme ) *
( t_comissao-nrdias - v_nrdias ) *
( i_perc_comis / 100 ) / v_nrdias_taxa.
ENDIF.
IF v_nrdias > 0.
v_vlme = i_vlme - v_vlme_princ.
t_comissao-vlme = t_comissao-vlme +
( v_vlme ) *
( v_nrdias ) *
* << Fim da inclusão
( i_perc_comis / 100 ) / v_nrdias_taxa.
* >> Início da inclusão: FUNCTION /PWS/ZYCB_CALCULA_COMISSAO
ENDIF.
* << Fim da inclusão
MODIFY t_comissao TRANSPORTING vlme.
ENDLOOP.
ELSE.
IF t_principal[] IS INITIAL.
RAISE t_principal_empty.
ENDIF.
...
----------------------------------------------------------------------------------------------------
Modificações efetuadas em REPS /PWS/ZYCBR003
REPORT /pws/zycbr003 LINE-SIZE 273
LINE-COUNT 65
MESSAGE-ID /pws/zycbm
NO STANDARD PAGE HEADING.
TYPES: BEGIN OF t_zycbt074,
nrseqc TYPE /pws/zycbt074-nrseqc,
* >> Início da inclusão:
tptaxa_comis type /pws/zycbt074-tptaxa_comis,
perc_comis type /pws/zycbt074-perc_comis,
* << Fim da inclusão
END OF t_zycbt074.
TABLES:
lfa1,
/pws/zycbt001,
/pws/zycbt007,
/pws/zycbt005,
/pws/zycbt039.
DATA:
itab_zycbt001 LIKE /pws/zycbt001 OCCURS 10 WITH HEADER LINE,
itab_zycbt001_ence LIKE /pws/zycbt001 OCCURS 10 WITH HEADER LINE,
itab_zycbt002p LIKE /pws/zycbt002 OCCURS 20 WITH HEADER LINE,
itab_zycbt002j LIKE /pws/zycbt002 OCCURS 20 WITH HEADER LINE,
itab_zycbt002j_aux LIKE /pws/zycbt002 OCCURS 20 WITH HEADER LINE,
itab_zycbt002c TYPE STANDARD TABLE OF /pws/zycbt002
WITH HEADER LINE,
* >> Início da exclusão:
itab_zycbt074 TYPE STANDARD TABLE OF t_zycbt074,
* << Fim da exclusão
* >> Início da inclusão:
itab_zycbt074 TYPE STANDARD TABLE OF t_zycbt074 WITH HEADER LINE,
* << Fim da inclusão
itab_zycbt003 LIKE /pws/zycbt003 OCCURS 20 WITH HEADER LINE,
itab_zycbt004 LIKE /pws/zycbt004 OCCURS 20 WITH HEADER LINE,
itab_zycbt004_pr LIKE /pws/zycbt004 OCCURS 20 WITH HEADER LINE,
itab_zycbt004_ence LIKE /pws/zycbt004 OCCURS 20 WITH HEADER LINE,
itab_zycbt005 LIKE /pws/zycbt005 OCCURS 20 WITH HEADER LINE,
itab_zycbt005_pos LIKE /pws/zycbt005 OCCURS 10 WITH HEADER LINE,
itab_zycbt005_ence LIKE /pws/zycbt005 OCCURS 10 WITH HEADER LINE,
itab_zycbt006_pos LIKE /pws/zycbt006 OCCURS 10 WITH HEADER LINE,
itab_zycbt006 LIKE /pws/zycbt006 OCCURS 20 WITH HEADER LINE,
itab_zycbt006_aux LIKE /pws/zycbt006 OCCURS 20 WITH HEADER LINE,
...
...
FOR ALL ENTRIES IN itab_zycbt001
WHERE nrseqc = itab_zycbt001-nrseqc AND
tpparc = 'P'.
SELECT *
FROM /pws/zycbt002
INTO TABLE itab_zycbt002j
FOR ALL ENTRIES IN itab_zycbt001
WHERE nrseqc = itab_zycbt001-nrseqc AND
tpparc = 'J'.
SELECT nrseqc
* >> Início da inclusão: FORM SELECIONA_DADOS
tptaxa_comis
perc_comis
* << Fim da inclusão
FROM /pws/zycbt074
INTO TABLE itab_zycbt074
FOR ALL ENTRIES IN itab_zycbt001
WHERE nrseqc EQ itab_zycbt001-nrseqc AND
fpagto_comis EQ 'P' AND
tipo_comis EQ 'P'.
IF sy-subrc EQ 0.
SELECT *
FROM /pws/zycbt002
INTO TABLE itab_zycbt002c
...
...
v_txjtotal = itab_zycbt002j-txjtotal.
v_tptxjur = itab_zycbt002j-tptxjur.
ENDIF.
itab_relat-vlme = p_vlme.
itab_relat-ftpj = 'E'.
itab_relat-dtde = itab_zycbt005-dtvincul.
itab_relat-dtate = p_dtfim.
PERFORM preenche_itab_relat.
CHECK NOT itab_relat IS INITIAL.
CHECK itab_relat-dtde =< itab_relat-dtate.
* >> Início da inclusão: FORM PROCESSA_PERIODO_JACE
IF v_dtate IS INITIAL.
v_dtate = itab_relat-dtde.
ENDIF.
* << Fim da inclusão
PERFORM processa_calculo_juros USING p_vlme
v_txjtotal
v_tptxjur
v_dtate
p_dtfim
itab_zycbt001-waers
itab_zycbt011-ctmoed
'E'.
ENDIF.
ENDFORM.
...
...
MESSAGE i015 WITH text-044.
ENDIF.
ENDIF.
ENDFORM.
FORM preenche_variacao_cambial USING value(p_vlme).
CHECK NOT wa_taxa_cambial IS INITIAL.
itab_relat-vlmev =
( ( ( wa_taxa_cambial-txc - itab_zycbt001-txcneg ) * p_vlme ) /
wa_taxa_cambial-ftme ) * wa_taxa_cambial-ftmi.
DESCRIBE TABLE itab_relat LINES v_nrlines.
* >> Início da inclusão: FORM PREENCHE_VARIACAO_CAMBIAL
IF itab_relat-vlmev < 0.
CLEAR itab_relat-vlmev.
ENDIF.
* << Fim da inclusão
MODIFY itab_relat INDEX v_nrlines TRANSPORTING vlmev.
CLEAR: wa_taxa_cambial, itab_relat-vlmev.
ENDFORM.
FORM data_inicio.
v_dtentr = s_dtentr.
IF v_dtentr+4(2) = '01'.
v_dtentr+4(2) = 12.
v_dtentr(4) = v_dtentr(4) - 1.
v_dtinicio = v_dtentr.
ELSE.
...
...
itab_msg-tpmsg = 'W'.
itab_msg-msg = text-003.
APPEND itab_msg.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDFORM.
FORM processa_periodo_comissao
USING value(p_dtfinal) TYPE sy-datum.
* >> Início da inclusão: FORM PROCESSA_PERIODO_COMISSAO
DATA:
v_dtfinal type sy-datum,
v_dtinicio type sy-datum,
v_vl_prcvenc type /pws/zycbt002-vlme,
v_vlme type /pws/zycbt002-vlme,
v_nrdias_taxa type /pws/zycbt010-nrdias,
v_nrdias type i.
* << Fim da inclusão
LOOP AT itab_zycbt002c
WHERE dtinicio LT p_dtfinal.
CLEAR itab_relat.
itab_relat-dtde = itab_zycbt002c-dtinicio.
IF itab_zycbt002c-dtfinal LT p_dtfinal.
itab_relat-dtate = itab_zycbt002c-dtfinal.
ELSE.
itab_relat-dtate = p_dtfinal.
ENDIF.
v_dias_mes = itab_relat-dtate - itab_relat-dtde.
IF NOT s_rbrotd IS INITIAL AND
itab_relat-dtde LE v_dtinicio AND
itab_relat-dtate GE v_dtinicio.
v_dias_mes = itab_relat-dtate - v_dtinicio.
ENDIF.
PERFORM preenche_itab_relat_comissao.
PERFORM seleciona_taxa.
itab_relat-txc = v_taxac.
* >> Início da exclusão: FORM PROCESSA_PERIODO_COMISSAO
itab_relat-vlme = itab_zycbt002c-vlme * v_dias_mes /
itab_zycbt002c-nrdias.
* << Fim da exclusão
* >> Início da inclusão: FORM PROCESSA_PERIODO_COMISSAO
READ TABLE itab_zycbt074 WITH KEY nrseqc = itab_zycbt002c-nrseqc.
SELECT nrdias FROM /pws/zycbt010
INTO v_nrdias_taxa
WHERE tptxjur = itab_zycbt074-TPTAXA_COMIS.
ENDSELECT.
clear: v_vl_prcvenc, v_nrdias.
READ TABLE itab_zycbt001 WITH KEY nrseqc = itab_zycbt002c-nrseqc.
v_vlme = itab_zycbt001-vlme.
v_dtinicio = itab_zycbt002c-dtinicio.
LOOP AT itab_zycbt002p
WHERE nrseqc = itab_zycbt002c-nrseqc
AND dtfinal LT itab_zycbt002c-dtfinal.
IF itab_zycbt002p-dtfinal < v_dtinicio.
v_vlme = v_vlme - itab_zycbt002p-vlme.
CONTINUE.
ENDIF.
v_vl_prcvenc = v_vl_prcvenc + itab_zycbt002p-vlme.
if itab_zycbt002c-dtfinal <= itab_zycbt002p-dtfinal.
v_dtfinal = itab_zycbt002c-dtfinal.
if s_dtentr <= itab_zycbt002c-dtfinal.
v_dtfinal = s_dtentr.
ENDIF.
ELSE.
v_dtfinal = itab_zycbt002p-dtfinal.
if s_dtentr <= itab_zycbt002p-dtfinal.
v_dtfinal = s_dtentr.
ENDIF.
ENDIF.
v_nrdias = v_dtfinal - v_dtinicio.
itab_relat-vlme = itab_relat-vlme +
( v_vlme ) *
( v_nrdias ) *
( itab_zycbt074-perc_comis / 100 ) / v_nrdias_taxa.
v_vlme = v_vlme - itab_zycbt002p-vlme.
CLEAR:
v_nrdias.
v_dtinicio = v_dtfinal.
ENDLOOP.
IF sy-subrc NE 0.
v_nrdias = s_dtentr - itab_zycbt002c-dtinicio.
IF v_nrdias > itab_zycbt002c-nrdias.
v_nrdias = itab_zycbt002c-nrdias.
ENDIF.
itab_relat-vlme = itab_relat-vlme +
( v_vlme ) *
( v_nrdias ) *
( itab_zycbt074-perc_comis / 100 )
/ v_nrdias_taxa.
clear:
v_nrdias.
ELSE.
IF itab_zycbt002c-dtfinal > s_dtentr.
v_nrdias = s_dtentr - v_dtinicio.
ELSE.
v_nrdias = itab_zycbt002c-dtfinal - v_dtinicio.
ENDIF.
ENDIF.
IF v_nrdias > 0.
itab_relat-vlme = itab_relat-vlme +
( v_vlme ) *
( v_nrdias ) *
( itab_zycbt074-perc_comis / 100 )
/ v_nrdias_taxa.
ENDIF.
* << Fim da inclusão
READ TABLE itab_tcurx WITH KEY currkey = itab_zycbt002c-waers.
IF sy-subrc NE 0.
itab_tcurx-currdec = 2.
ENDIF.
itab_relat-vlme = itab_relat-vlme / ( 10 **
( itab_tcurx-currdec - 2 ) ).
itab_relat-vlmej = itab_relat-vlme.
itab_relat-vlmij = itab_relat-vlmej * itab_relat-txc.
itab_relat-aliqir = itab_zycbt002c-aliqir.
itab_relat-vlmeir = itab_relat-vlme * itab_relat-aliqir / 100.
...