CE PLUS - Nota 005117

Módulo: DOC. EXPORTAÇÃO

Funcionalidade: Relatórios

Data/Hora da Publicação: 30/10/2007 00:00:00

Data/Hora Última Alteração: 22/02/2011 11:41:48

Descrição da Nota: CONVERSAO DE MONTANTE E MELHORIA DE PERFORMANCE RELATORIO KPI

Sintoma

Ausência de conversão de montante na coluna "Valor Remessa em Dólar".

 

 

Solução

Conversão de montante nos itens de remessa.

 

Versões Tratadas

7.0


Pré-Requisitos

Produto:

Nota

Descrição

MELHORIA DE PERFORMANCE EM RELATÓRIO KPI

Informações Complementares

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

Nota Número 05117 Data: 30/10/2007 Hora: 17:12:31

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

 

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

Nota Número              : 05117

Categoria                : Melhoria

Prioridade               : Baixa

Versão PW.CE             : 7.0

Pacote                   : 00003

Agrupamento              : 00019

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

Referência às notas relacionadas:

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

 

05055  - 00001 - 7.0    - 00003  - MELHORIA DE PERFORMANCE EM RELATÓRIO KPI

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

CONVERSAO DE MONTANTE E MELHORIA DE PERFORMANCE RELATORIO KPI

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

Palavras Chave:

CONVERSAO MONTANTE MELHORIA PERFORMANCE KPI

 

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

Objetos da nota:

FUNC /PWS/ZYCE_VLR_CONV_VERIF_MOEDA

REPS /PWS/LZYCEGF6UXX

REPS /PWS/ZYCER216

 

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

Modificações efetuadas em FUNC /PWS/ZYCE_VLR_CONV_VERIF_MOEDA

 

FUNCTION /PWS/ZYCE_VLR_CONV_VERIF_MOEDA.

*"----------------------------------------------------------------------

*"*"Interface local:

*"       IMPORTING

*"             VALUE(I_MONTANTE)  LIKE  /PWS/ZYCET002-VLME

*"             VALUE(I_DEMOEDA)   LIKE  TCURR-FCURR

*"             VALUE(I_PARAMOEDA) LIKE  TCURR-TCURR

*"             VALUE(I_CTMOEDA)   LIKE  TCURR-KURST

*"             VALUE(I_DTBASE)    LIKE  SY-DATUM

*"       EXPORTING

*"             VALUE(E_MONTANTE)  LIKE  /PWS/ZYCET002-VLME

*"             VALUE(E_TXC)       LIKE  TCURR-UKURS

*"             VALUE(E_DEFATOR)   LIKE  TCURR-FFACT

*"             VALUE(E_PARAFATOR) LIKE  TCURR-TFACT

*"       EXCEPTIONS

*"              I_DEMOEDA_NAO_ENCONTRADO

*"              I_PARAMOEDA_NAO_ENCONTRADO

*"              I_CTMOEDA_NAO_ENCONTRADO

*"              I_DTBASE_NAO_ENCONTRADA

*"              TAXA_NAO_ENCONTRADA

*"              FATOR_NAO_ENCONTRADO

*"              I_MONTANTE_NAO_ENCONTRADO

*"              TABELA_CATEG_NAO_CONFIGURADA

*"              OTHERS

*"----------------------------------------------------------------------

  TABLES tcurr.

  DATA:

    v_existe_conversao(1) TYPE c,

    v_preco_base          TYPE /pws/zycet002-vlme,

    v_taxac1              TYPE /pws/zycee002-kurrf,

    v_taxac2              TYPE /pws/zycee002-kurrf,

    v_moeda               TYPE waers,

    v_defator1            TYPE tcurr-ffact,

    v_parafator1          TYPE tcurr-tfact,

    v_defator2            TYPE tcurr-ffact,

    v_parafator2          TYPE tcurr-tfact.

  PERFORM verifica_conversao_cadastrada

    USING

      i_ctmoeda

      i_dtbase

      i_demoeda

      i_paramoeda

    CHANGING

      v_existe_conversao.

  IF v_existe_conversao IS INITIAL.

    v_moeda = 'BRL'.

    PERFORM converte_taxa

      USING

        i_ctmoeda

        i_dtbase

        i_demoeda

        v_moeda

        i_montante

      CHANGING

        v_preco_base

        v_taxac1

        v_defator1

        v_parafator1.

  ELSE.

    v_moeda      = i_demoeda.

    v_preco_base = i_montante.

    v_taxac1     = 1.

    v_defator1   = 1.

    v_parafator1 = 1.

  ENDIF.

  PERFORM converte_taxa USING i_ctmoeda

                              i_dtbase

                              v_moeda

                              i_paramoeda

                              v_preco_base

                     CHANGING e_montante

                              v_taxac2

                              v_defator2

                              v_parafator2.

  e_txc       = v_taxac1 * v_taxac2.

  e_defator   = v_defator1 * v_defator2.

  e_parafator = v_parafator1 * v_parafator2.

ENDFUNCTION.

FORM verifica_conversao_cadastrada

  USING    p_categ_moeda

           p_data

           p_moeda_de

           p_moeda_para

  CHANGING p_existe_conversao.

  SELECT SINGLE * FROM tcurr

    INTO tcurr

    WHERE

      kurst = p_categ_moeda AND

      fcurr = p_moeda_de    AND

      tcurr = p_moeda_para  AND

      gdatu = p_data.

  IF sy-subrc = 0.

    p_existe_conversao = 'X'.

  ELSE.

    CLEAR p_existe_conversao.

  ENDIF.

ENDFORM.

FORM converte_taxa USING value(p_categ) TYPE tcurr-kurst

                         value(p_datum) TYPE sy-datum

                         value(p_waewr) TYPE tcurr-fcurr

                         value(p_waedm) TYPE tcurr-tcurr

                         value(p_wrbtr)

                CHANGING p_dmbtr

                         p_taxac        TYPE /pws/zycee002-kurrf

                         p_defator      TYPE tcurr-ffact

                         p_parafator    TYPE tcurr-tfact.

  DATA v_taxa TYPE /pws/zycet002-kurrf.

  IF p_waewr EQ p_waedm OR

     p_waewr IS INITIAL OR

     p_waedm IS INITIAL.

    p_dmbtr = p_wrbtr.

    p_taxac = 1.

    EXIT.

  ENDIF.

  CALL FUNCTION '/PWS/ZYGL_MONTANTE_CONVERTE'

       EXPORTING

            i_montante                   = p_wrbtr

            i_demoeda                    = p_waewr

            i_paramoeda                  = p_waedm

            i_ctmoeda                    = p_categ

            i_dtbase                     = p_datum

       IMPORTING

            e_montante                   = p_dmbtr

            e_txc                        = v_taxa

            e_defator                    = p_defator

            e_parafator                  = p_parafator

       EXCEPTIONS

            i_demoeda_nao_encontrado     = 1

            i_paramoeda_nao_encontrado   = 2

            i_ctmoeda_nao_encontrado     = 3

            i_dtbase_nao_encontrada      = 4

            taxa_nao_encontrada          = 5

            fator_nao_encontrado         = 6

            i_montante_nao_encontrado    = 7

            tabela_categ_nao_configurada = 8

            OTHERS                       = 9.

  CASE sy-subrc.

    WHEN 1.

      RAISE i_demoeda_nao_encontrado.

    WHEN 2.

      RAISE i_paramoeda_nao_encontrado.

    WHEN 3.

      RAISE i_ctmoeda_nao_encontrado.

    WHEN 4.

      RAISE i_dtbase_nao_encontrada.

    WHEN 5.

      RAISE taxa_nao_encontrada.

    WHEN 6.

      RAISE fator_nao_encontrado.

    WHEN 7.

      RAISE i_montante_nao_encontrado.

    WHEN 8.

      RAISE tabela_categ_nao_configurada.

    WHEN 9.

      RAISE others.

  ENDCASE.

  p_taxac = ( v_taxa / p_defator ) * p_parafator.

ENDFORM.                    " converte_taxa

 

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

Modificações efetuadas em REPS /PWS/LZYCEGF6UXX (Inclusão automática)

 

...

INCLUDE /PWS/LZYCEGF6U06.

INCLUDE /PWS/LZYCEGF6U07.

INCLUDE /PWS/LZYCEGF6U08.

INCLUDE /PWS/LZYCEGF6U09.

INCLUDE /PWS/LZYCEGF6U10.

INCLUDE /PWS/LZYCEGF6U11.

INCLUDE /PWS/LZYCEGF6U12.

INCLUDE /PWS/LZYCEGF6U13.

INCLUDE /PWS/LZYCEGF6U14.

INCLUDE /PWS/LZYCEGF6U15.

* >> Início da inclusão:

INCLUDE /PWS/LZYCEGF6U16.

* << Fim da inclusão

 

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

Modificações efetuadas em REPS /PWS/ZYCER216

 

...

      END   OF itab_kpi_ordens.

DATA: BEGIN OF itab_carga OCCURS 0,

        nrseqcg      LIKE /pws/zycet053-nrseqcg,

        nrseq        LIKE /pws/zycet054-nrseq,

        dtconsolida  LIKE /pws/zycet053-dtconsolida,

      END   OF itab_carga.

DATA: BEGIN OF itab_zycet262 OCCURS 0,

        nrseq        LIKE /pws/zycet262-nrseq,

        dtchegf      LIKE /pws/zycet262-dtchegf,

      END   OF itab_zycet262.

* >> Início da inclusão:

DATA: BEGIN OF itab_zycbt011 OCCURS 1.

        INCLUDE STRUCTURE /pws/zycbt011.

DATA: END OF itab_zycbt011.

* << Fim da inclusão

DATA: BEGIN OF itab_zycet020 OCCURS 0.

        INCLUDE STRUCTURE /pws/zycet020.

DATA: END OF itab_zycet020.

DATA: BEGIN OF itab_zycet046 OCCURS 1.

        INCLUDE STRUCTURE /pws/zycet046.

DATA: END OF itab_zycet046.

DATA: BEGIN OF itab_col_lips OCCURS 1.

        INCLUDE STRUCTURE lips.

DATA: END OF itab_col_lips.

DATA: BEGIN OF itab_zycet271 OCCURS 0,

...

 

...

        END OF itab_konv.

DATA: BEGIN OF itab_likp OCCURS 1.

        INCLUDE STRUCTURE likp.

DATA: END   OF itab_likp.

DATA: BEGIN OF itab_lips OCCURS 1.

        INCLUDE STRUCTURE lips.

DATA: END   OF itab_lips.

DATA: BEGIN OF itab_zycet156 OCCURS 1.

        INCLUDE STRUCTURE /pws/zycet156.

DATA: END OF itab_zycet156 .

* >> Início da exclusão:

DATA: it_moedas   TYPE t_moedas,

      wa_moedas   TYPE st_zycbt007.

* << Fim da exclusão

* >> Início da inclusão:

DATA: it_moedas   TYPE t_moedas.

* << Fim da inclusão

DATA:

  v_kwert_tot  LIKE konv-kwert,

  v_tabix      LIKE sy-tabix.

CONSTANTS:

  c_codmod_x   LIKE /pws/zycet156-codmod   VALUE 'X',

  c_codigo_1   LIKE /pws/zycet156-codigo   VALUE '000001',

  c_codigo_9   LIKE /pws/zycet156-codigo   VALUE '000009',

  c_rd         LIKE /pws/zycet001-viatrans VALUE 'RD',

  c_ma         LIKE /pws/zycet001-viatrans VALUE 'MA',

  c_ta         LIKE /pws/zycet001-viatrans VALUE 'TA',

...

 

...

      MOVE itab_zycet047-dtbl TO itab_kpi-dtbl.

      MODIFY itab_kpi TRANSPORTING dtbl.

    ENDIF.

  ENDLOOP.

ENDFORM.

FORM day_attributes_get USING

  data1 TYPE datum

  data2 TYPE datum

  dias  TYPE num03

  sinal TYPE char1.

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

  DATA: iday_attributes LIKE casdayattr OCCURS 1 WITH HEADER LINE.

* << Fim da exclusão

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

  STATICS:

    v_data_de       TYPE datum,

    v_data_para     TYPE datum,

    iday_attributes TYPE casdayattr OCCURS 1 WITH HEADER LINE.

* << Fim da inclusão

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

  DATA: data_aux LIKE sy-datlo.

* << Fim da exclusão

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

  DATA:

    data_aux        TYPE sy-datlo,

    v_atualiza(1)   TYPE c.

* << Fim da inclusão

  CHECK NOT data1 IS INITIAL.

  CHECK NOT data2 IS INITIAL.

  CLEAR data_aux.

  IF data2 GT data1.

    data_aux = data1.

    data1 = data2.

    data2 = data_aux.

    sinal = '-'.

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

  ENDIF.

  CLEAR v_atualiza.

  IF v_data_de IS INITIAL.

    v_data_de  = data2.

    v_atualiza = 'X'.

  ENDIF.

  IF v_data_para IS INITIAL.

    v_data_para = data1.

    v_atualiza  = 'X'.

  ENDIF.

  IF data2 < v_data_de.

    v_data_de  = data2.

    v_atualiza = 'X'.

  ENDIF.

  IF data1 > v_data_para.

    v_data_para = data1.

    v_atualiza  = 'X'.

* << Fim da inclusão

  ENDIF.

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

  IF NOT v_atualiza IS INITIAL.

* << Fim da inclusão

  CALL FUNCTION 'DAY_ATTRIBUTES_GET'

       EXPORTING

            holiday_calendar = 'BR'

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

            date_from        = data2

            date_to          = data1

* << Fim da exclusão

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

              date_from        = v_data_de

              date_to          = v_data_para

* << Fim da inclusão

            language         = sy-langu

       TABLES

            day_attributes   = iday_attributes

       EXCEPTIONS

            OTHERS           = 5.

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

  ENDIF.

* << Fim da inclusão

  IF sy-subrc EQ 0.

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

    LOOP AT iday_attributes WHERE holiday = space AND

                                ( weekday = '1' OR

                                  weekday = '2' OR

                                  weekday = '3' OR

                                  weekday = '4' OR

                                  weekday = '5' ).

* << Fim da exclusão

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

    LOOP AT iday_attributes WHERE holiday =  space AND

                                ( weekday =  '1'   OR

                                  weekday =  '2'   OR

                                  weekday =  '3'   OR

                                  weekday =  '4'   OR

                                  weekday =  '5' ) AND

                                ( date    LE data1 AND

                                  date    GE data2 ).

* << Fim da inclusão

      dias = dias + 1.

    ENDLOOP.

    dias = dias - 1.

    IF NOT data_aux IS INITIAL.

      data2 = data1.

      data1 = data_aux.

    ENDIF.

    IF dias IS INITIAL.

      dias = 1.

    ENDIF.

...

 

...

        v_campo = feld.

        GET CURSOR FIELD v_campo VALUE itab_kpi-nrseq.

        EXPORT v_valor TO MEMORY ID '/PWS/ZYCEP001'.

        SET PARAMETER ID '/PWS/ZYCEP001' FIELD v_valor.

        CALL TRANSACTION '/PWS/ZYCE003_E' AND SKIP FIRST SCREEN.

        CLEAR feld.

      ENDIF.

  ENDCASE.

ENDFORM.

FORM select_embarques_itens.

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

  DATA:

    v_taxa      TYPE tcurr-ukurs,

    v_defator   TYPE tcurr-ffact,

    v_parafator TYPE tcurr-tfact,

    wa_moedas   TYPE st_zycbt007.

* << Fim da inclusão

  CLEAR: itab_embarques, itab_kpi.

  FREE : itab_embarques, itab_kpi.

  SELECT a~nrseq

         a~bukrs

         a~dtaverb

         a~dtemb

         a~dteta

         a~dtprev

         a~viatrans

         a~dtcruze

...

 

...

    itab_kpi-viatrans  = itab_embarques-viatrans.

    itab_kpi-dtenvcamb = itab_embarques-dtenvcamb.

    itab_kpi-vbeln_va  = itab_embarques-vbeln_va.

    itab_kpi-vbeln_vf  = itab_embarques-vbeln_vf.

    itab_kpi-vbeln_vl  = itab_embarques-vbeln_vl.

    itab_kpi-auart     = itab_embarques-auart.

    itab_kpi-waers     = itab_embarques-waers.

    itab_kpi-inco1     = itab_embarques-inco1.

    itab_kpi-kurrf     = itab_embarques-kurrf.

    itab_kpi-land1     = itab_embarques-land1.

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

    itab_kpi-vlme      = itab_embarques-vlme.

* << Fim da exclusão

    itab_kpi-totfatcom = itab_embarques-vlemb.

    itab_kpi-vlme_f    = itab_embarques-vlagente_r.

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

    READ TABLE it_moedas INTO wa_moedas WITH KEY

      bukrs = itab_embarques-bukrs.

    IF itab_embarques-waers NE wa_moedas-waersa AND

        NOT itab_embarques-dtaverb IS INITIAL.

      READ TABLE itab_zycbt011 WITH KEY

        bukrs = itab_embarques-bukrs.

      PERFORM recupera_taxa_conversao

        USING

          itab_embarques-waers

          wa_moedas-waersa

          itab_zycbt011-ctmoed

          itab_embarques-dtaverb

        CHANGING

          v_defator

          v_parafator

          v_taxa.

      IF NOT v_defator IS INITIAL.

        itab_kpi-vlme =

          itab_embarques-vlme *

          ( ( v_taxa / v_defator ) * v_parafator ).

      ENDIF.

    ELSE.

      IF itab_embarques-waers = wa_moedas-waersa.

        itab_kpi-vlme = itab_embarques-vlme.

      ENDIF.

    ENDIF.

* << Fim da inclusão

    IF itab_embarques-viatrans EQ c_rd.

      itab_kpi-dtcruze = itab_embarques-dtcruze.

    ELSE.

      CLEAR itab_kpi-dtcruze.

    ENDIF.

    COLLECT itab_kpi.

    CLEAR  itab_kpi.

    CALL FUNCTION 'K_PROGRESS_INDICATOR_PERCENT'

         EXPORTING

              i_processed = sy-tabix

...

 

...

      CLEAR:

        v_totfatcom,

        v_vlme_f.

    ENDAT.

  ENDLOOP.

ENDFORM.

FORM select_parametros.

  SELECT bukrs waersa

    FROM /pws/zycbt007

    INTO TABLE it_moedas.

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

  SELECT * FROM /pws/zycbt011

    INTO TABLE itab_zycbt011

    WHERE codeven = '001' AND

          codmod  = 'X'.

* << Fim da inclusão

ENDFORM.

* >> Início da inclusão:

FORM recupera_taxa_conversao

  USING

    p_demoeda

    p_paramoeda

    p_categ_moeda

    p_data_base

  CHANGING

    p_defator

    p_parafator

    p_taxa.

  TYPES:

    BEGIN OF t_moeda,

      demoeda     TYPE tcurr-fcurr,

      paramoeda   TYPE tcurr-tcurr,

      categ_moeda TYPE tcurr-kurst,

      data_base   TYPE sy-datum,

      taxa        TYPE tcurr-ukurs,

      defator     TYPE tcurr-ffact,

      parafator   TYPE tcurr-tfact,

    END OF t_moeda.

  STATICS:

    itab_moedas TYPE HASHED TABLE OF t_moeda WITH UNIQUE KEY

      demoeda paramoeda categ_moeda data_base.

  DATA wa_moeda TYPE t_moeda.

  READ TABLE itab_moedas INTO wa_moeda WITH TABLE KEY

    demoeda     = p_demoeda

    paramoeda   = p_paramoeda

    categ_moeda = p_categ_moeda

    data_base   = p_data_base.

  IF sy-subrc = 0.

    p_defator   = wa_moeda-defator.

    p_parafator = wa_moeda-parafator.

    p_taxa      = wa_moeda-taxa.

  ELSE.

    CALL FUNCTION '/PWS/ZYCE_VLR_CONV_VERIF_MOEDA'

         EXPORTING

              i_montante                   = 1

              i_demoeda                    = p_demoeda

              i_paramoeda                  = p_paramoeda

              i_ctmoeda                    = p_categ_moeda

              i_dtbase                     = p_data_base

         IMPORTING

              e_txc                        = p_taxa

              e_defator                    = p_defator

              e_parafator                  = p_parafator

         EXCEPTIONS

              i_demoeda_nao_encontrado     = 1

              i_paramoeda_nao_encontrado   = 2

              i_ctmoeda_nao_encontrado     = 3

              i_dtbase_nao_encontrada      = 4

              taxa_nao_encontrada          = 5

              fator_nao_encontrado         = 6

              i_montante_nao_encontrado    = 7

              tabela_categ_nao_configurada = 8

              OTHERS                       = 9.

    IF sy-subrc = 0.

      wa_moeda-demoeda     = p_demoeda.

      wa_moeda-paramoeda   = p_paramoeda.

      wa_moeda-categ_moeda = p_categ_moeda.

      wa_moeda-data_base   = p_data_base.

      wa_moeda-taxa        = p_taxa.

      wa_moeda-defator     = p_defator.

      wa_moeda-parafator   = p_parafator.

      INSERT wa_moeda INTO TABLE itab_moedas.

    ELSE.

      CLEAR:

        p_defator,

        p_parafator,

        p_taxa.

    ENDIF.

  ENDIF.

ENDFORM.

* << Fim da inclusão