CE PLUS - Nota 006478

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.

 

Versões Tratadas

7.0


Pré-Requisitos

Produto:

Nota

Descrição

ROTINA MENSAL EXPORTAÇÃO - TAXAS

ROTINA MENSAL - CONTABILIZAÇÃO DE PARCELAS DE COMISSÃO

CODE INSPECTOR(ROTINA MENSAL)

ROTINA MENSAL EXPORTAÇÃO - CAMPO DATA OBRIGATÓRIO

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.

...