CE PLUS - Nota 003375

Módulo: DRAWBACK

Funcionalidade: CE Reports Formulários

Data/Hora da Publicação: 02/04/2007 00:00:00

Data/Hora Última Alteração: 01/03/2010 16:48:11

Descrição da Nota: DESENVOLVIMENTO DOS ANEXOS AO PEDIDO DE DRAWBACK "EXCEL"

Sintoma

 

Desenvolvimento dos anexos ao pedido de drawback "excel"

 

Solução

 

Desenvolvimento dos anexos ao pedido de drawback "excel"

Versões Tratadas

6.0

Informações Complementares

 

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

Nota Número 03375 Data: 02/04/2007 Hora: 16:28:07

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

 

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

Nota Número              : 03375

Categoria                : Melhoria

Prioridade               : Baixa

Versão PW.CE             : 6.0

Pacote                   : 00026

Agrupamento              : 00156

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

Referência às notas relacionadas:

Número - Ordem - Descrição Breve

 

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

DESENVOLVIMENTO DOS ANEXOS AO PEDIDO DE DRAWBACK "EXCEL"

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

Palavras Chave:

ANEXO - PEDIDO - DRAWBACK - EXCEL - /PWS/ZYCRR004

/PWS/ZYCRR005

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

Objetos da nota:

REPS /PWS/ZYCRR004

REPS /PWS/ZYCRR005

TRAN /PWS/ZYCRR004

TRAN /PWS/ZYCRR005

 

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

Modificações efetuadas em REPS /PWS/ZYCRR004

 

***Programa novo

*Codigo fonte:

 

 

* --------------------------------------------------------------------

* PROCWORK Software

* Produto  : pw.CE

* Módulo   : CR - pw.CE Reports

* Descrição: Report gerador de ACE59

* Help Desk: (11) 5504-0270

* --------------------------------------------------------------------

* ESTE PROGRAMA NÃO DEVE SER ALTERADO SEM PRÉVIA CONSULTA

* --------------------------------------------------------------------

* Chamado      Data         Descrição

* --------------------------------------------------------------------

* 360378       13/02/07   Codificação inicial

* --------------------------------------------------------------------

 

REPORT /pws/zycrr004 MESSAGE-ID /pws/zycrm.

 

* INCLUDES ------------------------------------------------------------*

 

INCLUDE: /pws/zycri004, " Up/download de arquivos xls

         /pws/zycri003, " Interface com o Excel

         /pws/zycri002. " Rotinas comuns

 

*tables

TABLES: tcurx.

* TIPOS ---------------------------------------------------------------*

* Tipo da estrutura do cabeçalho

TYPES: BEGIN OF s_cabecalho.

TYPES: empresa   TYPE t001-bukrs,

       desc_emp  TYPE t001-butxt,

       local_neg TYPE t001w-j_1bbranch,

       ender     TYPE   t001w-stras,

       cgc(19)   TYPE c               ,

       anexo     TYPE /pws/zycit474-anexo,

       qtd_tot   TYPE /pws/zycit245-qtd_tot,

       peso_tot  TYPE /pws/zycit245-ntgew,

       vltot     TYPE /pws/zycit245-netpr_t,

       moeda     TYPE /pws/zycit245-waers,

       gewei     TYPE /pws/zycit245-gewei,

       um_ncm    TYPE /pws/zycit245-um_ncm.

INCLUDE TYPE /pws/zycit244 AS zycit244.

TYPES:  END OF s_cabecalho.

 

* Tipo da estrutura e tabela dos itens

TYPES: BEGIN OF s_itens.

        INCLUDE STRUCTURE /pws/zycit245.

TYPES: valor(30) TYPE c,

       qtd(30) TYPE c,

       END OF s_itens,

       t_itens TYPE STANDARD TABLE OF s_itens.

 

 

* VARIÁVEIS -----------------------------------------------------------*

 

 

* Cabeçalho e itens

DATA: wa_cabecalho  TYPE s_cabecalho,

      v_filename(20) TYPE c,

    it_itens     TYPE t_itens.

 

* Parâmetros de geração de reports

DATA: wa_gen_param     TYPE /pws/zycrt012,

      wa_rep_param     TYPE /pws/zycrt013,

      it_matrix        TYPE t_matrix,

      it_report_fields TYPE t_rep_fields,

      p_repmod TYPE /pws/zycrt010-report_module VALUE 'D' ,

      p_report TYPE /pws/zycrt010-report_id VALUE 'ANEXOD_I'.

 

* Dados para o arquivo do excel

DATA: it_excel_content TYPE t_excel_content,

      it_sect_height   TYPE t_sect_height.

DATA: it_generation_options TYPE t_generation_options.

* TELA DE SELEÇÃO -----------------------------------------------------*

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-000.

 

PARAMETERS: p_nrseqd TYPE /pws/zycit244-nrseqd        OBLIGATORY

                                                      MODIF ID key.

 

SELECTION-SCREEN END OF BLOCK b1.

 

* PBO DA TELA DE SELEÇÃO ----------------------------------------------*

 

AT SELECTION-SCREEN OUTPUT.

 

 

START-OF-SELECTION.

 

* Seleção e preparação de dados do cabeçalho e itens

  PERFORM select_data

          USING

             p_nrseqd

          CHANGING

             wa_cabecalho

             it_itens.

 

 

  IF wa_cabecalho IS INITIAL.

 

    MESSAGE e015(/pws/zycim) WITH text-003.

 

  ENDIF.

 

* Seleção de parâmetros para geração do report

  PERFORM select_parameters

          USING

             p_repmod

             p_report

             sy-langu

             wa_cabecalho-zycit244-bukrs

             ''

             ''

             ''

             ''

             ''

             ''

             ''

             ''

             ''

             ''

          CHANGING

             wa_gen_param

             wa_rep_param

             it_matrix[]

             it_report_fields[].

 

  IF wa_gen_param IS INITIAL

      OR wa_rep_param IS INITIAL

      OR it_matrix[] IS INITIAL.

 

    msg_module = p_repmod.

    msg_report = p_report.

    msg_langu  = sy-langu.

    msg_bukrs  = wa_cabecalho-bukrs.

 

    MESSAGE e000.

 

  ENDIF.

 

* Criação das tabelas de dados para o report

  PERFORM create_excel_content_table

          USING

             it_itens[]

             wa_rep_param

             it_matrix[]

             it_report_fields[]

          CHANGING

             wa_cabecalho

             it_excel_content[]

             it_sect_height[].

 

* Determinação do nome do arquivo do report

  CLEAR: v_filename.

  CONCATENATE 'ANEXOI' wa_cabecalho-zycit244-nrseqd INTO v_filename.

 

  PERFORM generate_file_name

          USING

             v_filename

             wa_gen_param

             wa_rep_param

          CHANGING

             v_file_name.

 

* Baixa o report em branco na máquina do frontend

  PERFORM download_file

          USING

             wa_rep_param

             v_file_name.

 

* Cria o report

  PERFORM create_report

          USING

             wa_gen_param-report_generator

             v_file_name

             'REPORT'

              ''

             it_excel_content[]

             it_sect_height[]

             it_generation_options[].

 

 

  LEAVE PROGRAM.

 

END-OF-SELECTION.

 

* --------------------------------------------------------------------

* Form select_data

* --------------------------------------------------------------------

* Objetivo: Selecionar os dados do report: cabeçalho, itens,

*           sub_itens, etc.

* --------------------------------------------------------------------

* Parâmetros:   ( --> Entrada ) ( <-- Saída ) ( <-> Tabelas )

* --------------------------------------------------------------------

* --> p_nrseq      Seqüencial do embarque

* <-- p_cabecalho  Dados do cabeçalho do report

*     p_t_itens    Dados de itens do report

* <-> <nenhum>

* --------------------------------------------------------------------

* Chamado     Data            Descrição

* --------------------------------------------------------------------

* 360378      13/02/2007      Codificação inicial

* --------------------------------------------------------------------

FORM select_data

     USING

        p_nrseqd TYPE /pws/zycit244-nrseqd

     CHANGING

        p_cabecalho      TYPE s_cabecalho

        p_t_itens        TYPE t_itens.

 

  DATA: wa_itens LIKE LINE OF p_t_itens,

        itab_makt TYPE makt OCCURS 0 WITH HEADER LINE,

        itab_604n TYPE t604n OCCURS 0 WITH HEADER LINE.

 

  SELECT SINGLE *

      INTO p_cabecalho-zycit244

      FROM /pws/zycit244

      WHERE nrseqd = p_nrseqd.

 

  CHECK sy-subrc = 0.

 

  SELECT SINGLE bukrs butxt

      INTO (p_cabecalho-empresa, p_cabecalho-desc_emp)

      FROM t001

      WHERE bukrs = p_cabecalho-zycit244-bukrs.

 

  SELECT SINGLE j_1bbranch stras

  FROM t001w

  INTO (p_cabecalho-local_neg, p_cabecalho-ender)

  WHERE werks = p_cabecalho-zycit244-werks.

 

  CALL FUNCTION 'J_1BREAD_BRANCH_DATA'

       EXPORTING

            branch     = p_cabecalho-local_neg

            bukrs      = p_cabecalho-empresa

       IMPORTING

            cgc_number = p_cabecalho-zycit244-cnpj.

 

  WRITE p_cabecalho-zycit244-cnpj TO p_cabecalho-cgc

           USING EDIT MASK '__.___.___/____-__'.

 

  SELECT *

        FROM  /pws/zycit245

         INTO TABLE p_t_itens

         WHERE nrseqd EQ p_nrseqd.

 

  LOOP AT p_t_itens INTO wa_itens.

 

    WRITE wa_itens-netpr_t TO wa_itens-valor

          CURRENCY wa_itens-waers.

    SHIFT wa_itens-valor BY 3 PLACES.

    CONCATENATE wa_itens-waers wa_itens-valor INTO wa_itens-valor.

 

 

    WRITE wa_itens-qtd_ncm TO wa_itens-qtd

          UNIT wa_itens-um_ncm.

    SHIFT wa_itens-qtd BY 3 PLACES.

    CONCATENATE wa_itens-um_ncm wa_itens-qtd INTO wa_itens-qtd.

 

    wa_itens-ntgew = wa_itens-ntgew * wa_itens-qtd_tot.

    TRANSLATE wa_itens-j_1bnbm USING '. '.

    CONDENSE wa_itens-j_1bnbm NO-GAPS.

    MODIFY p_t_itens FROM wa_itens.

  ENDLOOP.

  SORT p_t_itens BY j_1bnbm nritem.

 

ENDFORM.                    " select_data

* --------------------------------------------------------------------

* Chamado     Data            Descrição

* --------------------------------------------------------------------

* 316455      13/11/2006      Codificação inicial

* --------------------------------------------------------------------

FORM create_excel_content_table

     USING

        p_t_items         TYPE table

        p_rep_param       TYPE /pws/zycrt013

        p_t_matrix        TYPE t_matrix

        p_t_report_fields TYPE t_rep_fields

     CHANGING

        p_header          TYPE s_cabecalho

        p_t_excel_content TYPE t_excel_content

        p_t_sect_height   TYPE t_sect_height.

 

  DATA: current_row  TYPE i VALUE 1,

        section_rows TYPE i.

 

  DATA: itab_exel_temp TYPE t_excel_content,

        wa_exel_temp   LIKE LINE OF itab_exel_temp[].

  .

 

  DATA: current_item         TYPE i VALUE 1,

        v_vltot   TYPE /pws/zycit247-netpr_t,

        v_linha              TYPE i,

        v_lines              TYPE i.

 

  DATA: filled_section_height TYPE f.

 

  DATA: subrc TYPE sy-subrc.

 

  DATA: it_section_content LIKE p_t_excel_content[].

 

  DATA: v_linhacab  TYPE i,  "Linhas do cabeçalho

        v_linhaite  TYPE i,  "Linhas dos itens

        v_linhasub  TYPE i,  "Linhas do sub_itens

        v_linhasub2 TYPE i,  "Linhas do sub_itens2

        v_completo  TYPE c.  "completou o preenchimento.

 

*Work area de itens

  DATA: wa_itens TYPE s_itens,

        itab_zycit474 TYPE /pws/zycit474 OCCURS 0 WITH HEADER LINE.

 

  PERFORM select_row_height_cache

  USING

      p_rep_param-spras

      p_rep_param-file_id

  CHANGING

      p_t_sect_height[].

 

 

  PERFORM get_section_rows

          USING

             'CAB'

             p_t_sect_height[]

          CHANGING

             v_linhacab.

 

  PERFORM get_section_rows

          USING

             'ITENS'

             p_t_sect_height[]

          CHANGING

             v_linhaite.

 

  PERFORM get_section_rows

          USING

             'RODA1'

             p_t_sect_height[]

          CHANGING

             v_linhasub.

 

  PERFORM get_section_rows

          USING

             'RODA2'

             p_t_sect_height[]

          CHANGING

             v_linhasub2.

 

  DESCRIBE TABLE p_t_items LINES v_lines.

  CLEAR: current_item, v_completo.

  WHILE v_completo NE 'X'.

    CLEAR: v_completo.

 

    ADD 1 TO p_header-anexo.

    PERFORM append_new_section

            USING

               'CAB'

               current_row

            CHANGING

               p_t_excel_content[].

    PERFORM fill_header_fields

            USING

               p_header

               'CAB'

               current_row

               p_t_matrix[]

               p_t_report_fields[]

            CHANGING

               p_t_excel_content[].

 

    ADD v_linhacab TO current_row.

 

    PERFORM append_new_section

            USING

               'ITENS'

               current_row

            CHANGING

               p_t_excel_content[].

 

    section_rows = current_row.

    CLEAR: v_linha, p_header-qtd_tot,

            p_header-peso_tot, p_header-vltot.

    DO.

      REFRESH it_section_content[].

 

      CLEAR wa_itens.

      ADD 1 TO current_item.

      READ TABLE p_t_items INTO wa_itens INDEX current_item.

      IF sy-subrc NE 0.

        v_completo = 'X'.

        EXIT.

      ENDIF.

 

*       Preenche campos de item

      PERFORM fill_items_fields

              USING

                 p_t_items[]

                 'ITENS'

                 current_row

                 p_t_matrix[]

                 p_t_report_fields[]

                 p_t_sect_height[]

                 current_item

              CHANGING

                 filled_section_height

                 p_t_excel_content[]

                 subrc.

      ADD 1 TO current_row.

 

 

      ADD 1 TO v_linha.

      itab_zycit474-anexo = p_header-anexo      .

      itab_zycit474-nrseqd = wa_itens-nrseqd.

      itab_zycit474-nritem = wa_itens-nritem.

      itab_zycit474-tipo = 'I'.

      itab_zycit474-pasta = 'I'.

      p_header-zycit244-waers = itab_zycit474-waers = wa_itens-waers.

      itab_zycit474-ncm     = wa_itens-j_1bnbm.

      itab_zycit474-linha   = v_linha.

      p_header-um_ncm = itab_zycit474-meins   = wa_itens-um_ncm.

      itab_zycit474-qtd     = wa_itens-qtd_ncm.

      p_header-gewei = itab_zycit474-gewei   = wa_itens-gewei.

      itab_zycit474-ntgew   = wa_itens-ntgew.

      itab_zycit474-netpr_t = wa_itens-netpr_t.

      itab_zycit474-matnr = wa_itens-codcomp.

      itab_zycit474-grupo = wa_itens-grupo.

      APPEND itab_zycit474.

 

 

      ADD wa_itens-qtd_ncm TO p_header-qtd_tot.

      ADD wa_itens-ntgew TO p_header-peso_tot.

      PERFORM retorna_decimais USING wa_itens-waers

                    CHANGING wa_itens-netpr_t.

 

      PERFORM converter_moeda USING wa_itens-netpr_t

                                    wa_itens-waers

                                    'USD'

                                    sy-datlo

                           CHANGING v_vltot.

 

      ADD v_vltot TO p_header-vltot.

 

      IF v_linha = 20.

        IF v_lines = current_item.

          v_completo = 'X'.

        ENDIF.

        EXIT.

      ENDIF.

    ENDDO.

 

    current_row = section_rows + v_linhaite.

 

 

    PERFORM append_new_section

            USING

               'RODA1'

               current_row

            CHANGING

               p_t_excel_content[].

 

    PERFORM fill_header_fields

            USING

               p_header

               'RODA1'

               current_row

               p_t_matrix[]

               p_t_report_fields[]

            CHANGING

               p_t_excel_content[].

 

    current_row = current_row + v_linhasub.

 

    PERFORM add_page_break

            USING

               current_row

            CHANGING

               p_t_excel_content[].

  ENDWHILE.

 

  itab_exel_temp[] = p_t_excel_content[].

  SUBTRACT 1 FROM current_row.

  section_rows = current_row.

 

  DO 4 TIMES.

 

    LOOP AT itab_exel_temp INTO wa_exel_temp.

 

      ADD current_row TO wa_exel_temp-row.

      IF wa_exel_temp-sheet EQ 'RODA1'.

        wa_exel_temp-sheet = 'RODA2'.

      ENDIF.

      APPEND wa_exel_temp TO p_t_excel_content.

    ENDLOOP.

 

    ADD section_rows TO current_row.

  ENDDO.

*  Grava histórico dos anexos para uso posterior.

  DELETE FROM /pws/zycit474 WHERE nrseqd EQ p_nrseqd

                              AND pasta  EQ 'I'.

  INSERT /pws/zycit474 FROM TABLE itab_zycit474.

 

ENDFORM.                    " create_excel_content_table

 

*&---------------------------------------------------------------------*

*&      Form  Converter_Moeda

*&---------------------------------------------------------------------*

*            -->p_devlme   "montante a ser convertido

*            -->p_deme     "Moeda original

*            -->p_parame   "Moeda destino

*            -->p_data     "Data para busca da taxa de cambio

*            <->p_paravlme "Valor convertido

 

*----------------------------------------------------------------------

*

FORM converter_moeda USING p_devlme

                           p_deme

                           p_parame

                           p_data

                  CHANGING p_paravlme.

  DATA: v_ctmoeda LIKE tcurr-kurst VALUE 'G',

        v_devlme   LIKE bsak-wrbtr,

        v_paravlme LIKE bsak-wrbtr.

  v_devlme = p_devlme .

  IF p_devlme NE 0.

    CALL FUNCTION '/PWS/ZYCB_MONTANTE_CONVERTE'

         EXPORTING

              i_montante                 = v_devlme

              i_demoeda                  = p_deme

              i_paramoeda                = p_parame

              i_ctmoeda                  = v_ctmoeda

              i_dtbase                   = p_data

         IMPORTING

              e_montante                 = v_paravlme

         EXCEPTIONS

              i_demoeda_nao_encontrado   = 1

              i_paramoeda_nao_encontrado = 2

              fator_nao_encontrado       = 3

              i_ctmoeda_nao_encontrado   = 4

              i_dtbase_nao_encontrada    = 5

              taxa_nao_encontrada        = 6

              i_montante_nao_encontrado  = 7.

    p_paravlme = v_paravlme.

 

  ENDIF.

ENDFORM.                                               " CONVERTER_MOEDA

 

*&---------------------------------------------------------------------*

*&      Form  retorna_decimais

*&---------------------------------------------------------------------*

*       tratamento para casas decimais utilizadas por moeda

*----------------------------------------------------------------------*

*      -->p_moeda  Moeda

*      <--p_valor  Valor a ser ajustado.

*----------------------------------------------------------------------*

FORM retorna_decimais USING    p_moeda

                    CHANGING p_valor.

  IF tcurx-currkey <> p_moeda.

    SELECT SINGLE * FROM tcurx WHERE currkey = p_moeda.

  ENDIF.

  IF sy-subrc <> 0.

    tcurx-currdec = 2.

  ENDIF.

  p_valor = p_valor * ( 10 ** ( tcurx-currdec - 2 ) ).

 

ENDFORM.                    " retorna_decimais

 

 

 

****************************************************************************************************

 

**Elementos de texto:

*Simbolo    Texto

 003     Ato Concessório não exite!

 

**Textos de Seleção:

P_NRSEQD Nº Seq. Ato Concessório

 

 

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

Modificações efetuadas em REPS /PWS/ZYCRR005

***Programa novo

*Codigo fonte:

 

* --------------------------------------------------------------------

* PROCWORK Software

* Produto  : pw.CE

* Módulo   : CR - pw.CE Reports

* Descrição: Report gerador de ACE59

* Help Desk: (11) 5504-0270

* --------------------------------------------------------------------

* ESTE PROGRAMA NÃO DEVE SER ALTERADO SEM PRÉVIA CONSULTA

* --------------------------------------------------------------------

* Chamado      Data         Descrição

* --------------------------------------------------------------------

* 360378       13/02/07   Codificação inicial

* --------------------------------------------------------------------

 

REPORT /pws/zycrr005 MESSAGE-ID /pws/zycrm.

 

* INCLUDES ------------------------------------------------------------*

 

INCLUDE: /pws/zycri004, " Up/download de arquivos xls

         /pws/zycri003, " Interface com o Excel

         /pws/zycri002. " Rotinas comuns

 

* TIPOS ---------------------------------------------------------------*

TABLES: tcurx.

* Tipo da estrutura do cabeçalho

TYPES: BEGIN OF s_cabecalho.

TYPES: empresa   TYPE t001-bukrs,

       desc_emp  TYPE t001-butxt,

       local_neg TYPE t001w-j_1bbranch,

       ender     TYPE t001w-stras,

       cgc(19)   TYPE c               ,

       anexo     TYPE /pws/zycit474-anexo,

       qtd_tot   TYPE /pws/zycit245-qtd_tot,

       peso_tot  TYPE /pws/zycit245-ntgew,

       vltot     TYPE /pws/zycit245-netpr_t,

       moeda     TYPE /pws/zycit245-waers,

       gewei     TYPE /pws/zycit245-gewei,

       um_ncm    TYPE /pws/zycit245-um_ncm.

INCLUDE TYPE /pws/zycit244 AS zycit244.

TYPES:  END OF s_cabecalho.

 

* Tipo da estrutura e tabela dos itens

TYPES: BEGIN OF s_itens.

        INCLUDE STRUCTURE /pws/zycit247.

TYPES: valor(30) TYPE c,

       qtd(30)   TYPE c,

       END OF s_itens,

       t_itens TYPE STANDARD TABLE OF s_itens.

 

 

* VARIÁVEIS -----------------------------------------------------------*

 

 

* Cabeçalho e itens

DATA: wa_cabecalho   TYPE s_cabecalho,

      v_filename(20) TYPE c,

      it_itens       TYPE t_itens.

 

* Parâmetros de geração de reports

DATA: wa_gen_param     TYPE /pws/zycrt012,

      wa_rep_param     TYPE /pws/zycrt013,

      it_matrix        TYPE t_matrix,

      it_report_fields TYPE t_rep_fields,

      p_repmod TYPE /pws/zycrt010-report_module VALUE 'D' ,

      p_report TYPE /pws/zycrt010-report_id VALUE 'ANEXOD_E'.

 

 

* Dados para o arquivo do excel

DATA: it_excel_content TYPE t_excel_content,

      it_sect_height   TYPE t_sect_height.

 

DATA: it_generation_options TYPE t_generation_options.

* TELA DE SELEÇÃO -----------------------------------------------------*

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-000.

 

PARAMETERS: p_nrseqd TYPE /pws/zycit244-nrseqd        OBLIGATORY

                                                      MODIF ID key.

 

SELECTION-SCREEN END OF BLOCK b1.

 

* PBO DA TELA DE SELEÇÃO ----------------------------------------------*

 

AT SELECTION-SCREEN OUTPUT.

 

 

START-OF-SELECTION.

 

* Seleção e preparação de dados do cabeçalho e itens

  PERFORM select_data

          USING

             p_nrseqd

          CHANGING

             wa_cabecalho

             it_itens.

 

 

  IF wa_cabecalho IS INITIAL.

 

    MESSAGE e015(/pws/zycim) WITH text-003.

 

  ENDIF.

 

* Seleção de parâmetros para geração do report

  PERFORM select_parameters

          USING

             p_repmod

             p_report

             sy-langu

             wa_cabecalho-zycit244-bukrs

             ''

             ''

             ''

             ''

             ''

             ''

             ''

             ''

             ''

             ''

          CHANGING

             wa_gen_param

             wa_rep_param

             it_matrix[]

             it_report_fields[].

 

  IF wa_gen_param IS INITIAL

      OR wa_rep_param IS INITIAL

      OR it_matrix[] IS INITIAL.

 

    msg_module = p_repmod.

    msg_report = p_report.

    msg_langu  = sy-langu.

    msg_bukrs  = wa_cabecalho-bukrs.

 

    MESSAGE e000.

 

  ENDIF.

 

* Criação das tabelas de dados para o report

  PERFORM create_excel_content_table

          USING

             it_itens[]

             wa_rep_param

             it_matrix[]

             it_report_fields[]

          CHANGING

             wa_cabecalho

             it_excel_content[]

             it_sect_height[].

 

* Determinação do nome do arquivo do report

  CLEAR: v_filename.

  CONCATENATE 'ANEXOI' wa_cabecalho-zycit244-nrseqd INTO v_filename.

 

  PERFORM generate_file_name

          USING

             v_filename

             wa_gen_param

             wa_rep_param

          CHANGING

             v_file_name.

 

* Baixa o report em branco na máquina do frontend

  PERFORM download_file

          USING

             wa_rep_param

             v_file_name.

 

* Cria o report

  PERFORM create_report

          USING

             wa_gen_param-report_generator

             v_file_name

             'REPORT'

              ''

             it_excel_content[]

             it_sect_height[]

             it_generation_options[].

 

 

  LEAVE PROGRAM.

 

END-OF-SELECTION.

 

* --------------------------------------------------------------------

* Form select_data

* --------------------------------------------------------------------

* Objetivo: Selecionar os dados do report: cabeçalho, itens,

*           sub_itens, etc.

* --------------------------------------------------------------------

* Parâmetros:   ( --> Entrada ) ( <-- Saída ) ( <-> Tabelas )

* --------------------------------------------------------------------

* --> p_nrseq      Seqüencial do embarque

* <-- p_cabecalho  Dados do cabeçalho do report

*     p_t_itens    Dados de itens do report

* <-> <nenhum>

* --------------------------------------------------------------------

* Chamado     Data            Descrição

* --------------------------------------------------------------------

* 360378      13/02/2007      Codificação inicial

* --------------------------------------------------------------------

FORM select_data

     USING

        p_nrseqd TYPE /pws/zycit244-nrseqd

     CHANGING

        p_cabecalho      TYPE s_cabecalho

        p_t_itens        TYPE t_itens.

 

  DATA: wa_itens LIKE LINE OF p_t_itens,

        itab_makt TYPE makt OCCURS 0 WITH HEADER LINE,

        itab_604n TYPE t604n OCCURS 0 WITH HEADER LINE.

 

  SELECT SINGLE *

      INTO p_cabecalho-zycit244

      FROM /pws/zycit244

      WHERE nrseqd = p_nrseqd.

 

  CHECK sy-subrc = 0.

 

  SELECT SINGLE bukrs butxt

      INTO (p_cabecalho-empresa, p_cabecalho-desc_emp)

      FROM t001

      WHERE bukrs = p_cabecalho-zycit244-bukrs.

 

  SELECT SINGLE j_1bbranch stras

  FROM t001w

  INTO (p_cabecalho-local_neg, p_cabecalho-ender)

  WHERE werks = p_cabecalho-zycit244-werks.

 

  CALL FUNCTION 'J_1BREAD_BRANCH_DATA'

       EXPORTING

            branch     = p_cabecalho-local_neg

            bukrs      = p_cabecalho-empresa

       IMPORTING

            cgc_number = p_cabecalho-zycit244-cnpj.

 

  WRITE p_cabecalho-zycit244-cnpj TO p_cabecalho-cgc

           USING EDIT MASK '__.___.___/____-__'.

 

  SELECT MAX( anexo ) FROM /pws/zycit474

      INTO p_cabecalho-anexo

      WHERE nrseqd EQ p_nrseqd

        AND pasta EQ 'I'.

  IF p_cabecalho-anexo IS INITIAL.

    MESSAGE i015(/pws/zycim) WITH text-002.

    LEAVE PROGRAM.

  ENDIF.

  SELECT *

        FROM  /pws/zycit247

         INTO TABLE p_t_itens

         WHERE nrseqd EQ p_nrseqd.

 

  LOOP AT p_t_itens INTO wa_itens.

    wa_itens-ntgew = wa_itens-ntgew * wa_itens-qtd_iten.

 

    WRITE wa_itens-netpr_t TO wa_itens-valor

          CURRENCY wa_itens-waers.

    SHIFT wa_itens-valor BY 3 PLACES.

    CONCATENATE wa_itens-waers wa_itens-valor INTO wa_itens-valor.

 

    WRITE wa_itens-qtd_ncm TO wa_itens-qtd

          UNIT wa_itens-um_ncm.

    SHIFT wa_itens-qtd BY 3 PLACES.

    CONCATENATE wa_itens-um_ncm wa_itens-qtd INTO wa_itens-qtd.

 

    TRANSLATE wa_itens-j_1bnbm USING '. '.

    CONDENSE wa_itens-j_1bnbm NO-GAPS.

 

    MODIFY p_t_itens FROM wa_itens.

  ENDLOOP.

  SORT p_t_itens BY j_1bnbm nritem.

 

ENDFORM.                    " select_data

* --------------------------------------------------------------------

* Chamado     Data            Descrição

* --------------------------------------------------------------------

* 316455      13/11/2006      Codificação inicial

* --------------------------------------------------------------------

FORM create_excel_content_table

     USING

        p_t_items         TYPE table

        p_rep_param       TYPE /pws/zycrt013

        p_t_matrix        TYPE t_matrix

        p_t_report_fields TYPE t_rep_fields

     CHANGING

        p_header          TYPE s_cabecalho

        p_t_excel_content TYPE t_excel_content

        p_t_sect_height   TYPE t_sect_height.

 

  DATA: current_row  TYPE i VALUE 1,

        v_vltot   TYPE /pws/zycit247-netpr_t,

        section_rows TYPE i.

 

  DATA: itab_exel_temp TYPE t_excel_content,

        wa_exel_temp   LIKE LINE OF itab_exel_temp[].

  .

 

  DATA: current_item         TYPE i VALUE 1,

        v_linha              TYPE i,

        v_lines              TYPE i.

 

  DATA: filled_section_height TYPE f.

 

  DATA: subrc TYPE sy-subrc.

 

  DATA: it_section_content LIKE p_t_excel_content[].

 

  DATA: v_linhacab  TYPE i,  "Linhas do cabeçalho

        v_linhaite  TYPE i,  "Linhas dos itens

        v_linhasub  TYPE i,  "Linhas do sub_itens

        v_linhasub2 TYPE i,  "Linhas do sub_itens2

        v_completo  TYPE c.  "completou o preenchimento..

 

*Work area de itens

  DATA: wa_itens TYPE s_itens,

        itab_zycit474 TYPE /pws/zycit474 OCCURS 0 WITH HEADER LINE.

 

  PERFORM select_row_height_cache

              USING

                  p_rep_param-spras

                  p_rep_param-file_id

              CHANGING

                  p_t_sect_height[].

 

  PERFORM get_section_rows

          USING

             'CAB'

             p_t_sect_height[]

          CHANGING

             v_linhacab.

 

  PERFORM get_section_rows

          USING

             'ITENS'

             p_t_sect_height[]

          CHANGING

             v_linhaite.

 

  PERFORM get_section_rows

          USING

             'RODA1'

             p_t_sect_height[]

          CHANGING

             v_linhasub.

 

  PERFORM get_section_rows

          USING

             'RODA2'

             p_t_sect_height[]

          CHANGING

             v_linhasub2.

 

  DESCRIBE TABLE p_t_items LINES v_lines.

  CLEAR: current_item, v_completo.

  WHILE v_completo NE 'X'.

    CLEAR: v_completo.

 

    ADD 1 TO p_header-anexo.

    PERFORM append_new_section

            USING

               'CAB'

               current_row

            CHANGING

               p_t_excel_content[].

    PERFORM fill_header_fields

            USING

               p_header

               'CAB'

               current_row

               p_t_matrix[]

               p_t_report_fields[]

            CHANGING

               p_t_excel_content[].

 

    ADD v_linhacab TO current_row.

 

    PERFORM append_new_section

            USING

               'ITENS'

               current_row

            CHANGING

               p_t_excel_content[].

 

    section_rows = current_row.

    CLEAR: v_linha, p_header-qtd_tot,

            p_header-peso_tot, p_header-vltot.

    DO.

      REFRESH it_section_content[].

 

      CLEAR wa_itens.

      ADD 1 TO current_item.

      READ TABLE p_t_items INTO wa_itens INDEX current_item.

      IF sy-subrc NE 0.

        v_completo = 'X'.

        EXIT.

      ENDIF.

 

*       Preenche campos de item

      PERFORM fill_items_fields

              USING

                 p_t_items[]

                 'ITENS'

                 current_row

                 p_t_matrix[]

                 p_t_report_fields[]

                 p_t_sect_height[]

                 current_item

              CHANGING

                 filled_section_height

                 p_t_excel_content[]

                 subrc.

      ADD 1 TO current_row.

 

 

      ADD 1 TO v_linha.

      itab_zycit474-anexo = p_header-anexo      .

      itab_zycit474-nrseqd = wa_itens-nrseqd.

      itab_zycit474-nritem = wa_itens-nritem.

      itab_zycit474-tipo = 'I'.

      itab_zycit474-pasta = 'E'.

      p_header-zycit244-waers = itab_zycit474-waers = wa_itens-waers.

      itab_zycit474-ncm     = wa_itens-j_1bnbm.

      itab_zycit474-linha   = v_linha.

      p_header-um_ncm = itab_zycit474-meins   = wa_itens-um_ncm.

      itab_zycit474-qtd     = wa_itens-qtd_ncm.

      p_header-gewei = itab_zycit474-gewei   = wa_itens-gewei.

      itab_zycit474-ntgew   = wa_itens-ntgew.

      itab_zycit474-netpr_t = wa_itens-netpr_t.

      itab_zycit474-matnr = wa_itens-codmat.

 

      APPEND itab_zycit474.

 

      ADD wa_itens-qtd_ncm TO p_header-qtd_tot.

      ADD wa_itens-ntgew TO p_header-peso_tot.

      PERFORM retorna_decimais USING wa_itens-waers

                    CHANGING wa_itens-netpr_t.

 

      PERFORM converter_moeda USING wa_itens-netpr_t

                                    wa_itens-waers

                                    'USD'

                                    sy-datlo

                           CHANGING v_vltot.

 

      ADD v_vltot TO p_header-vltot.

 

 

 

      IF v_linha = 20.

        IF v_lines = current_item.

          v_completo = 'X'.

        ENDIF.

        EXIT.

      ENDIF.

    ENDDO.

 

    current_row = section_rows + v_linhaite.

 

 

    PERFORM append_new_section

            USING

               'RODA1'

               current_row

            CHANGING

               p_t_excel_content[].

 

    PERFORM fill_header_fields

            USING

               p_header

               'RODA1'

               current_row

               p_t_matrix[]

               p_t_report_fields[]

            CHANGING

               p_t_excel_content[].

 

    current_row = current_row + v_linhasub.

 

    PERFORM add_page_break

            USING

               current_row

            CHANGING

               p_t_excel_content[].

  ENDWHILE.

 

  itab_exel_temp[] = p_t_excel_content[].

  SUBTRACT 1 FROM current_row.

  section_rows = current_row.

 

  DO 4 TIMES.

 

    LOOP AT itab_exel_temp INTO wa_exel_temp.

 

      ADD current_row TO wa_exel_temp-row.

      IF wa_exel_temp-sheet EQ 'RODA1'.

        wa_exel_temp-sheet = 'RODA2'.

      ENDIF.

      APPEND wa_exel_temp TO p_t_excel_content.

    ENDLOOP.

 

    ADD section_rows TO current_row.

  ENDDO.

*  Grava histórico dos anexos para uso posterior.

  DELETE FROM /pws/zycit474 WHERE nrseqd EQ p_nrseqd

                              AND pasta  EQ 'E'.

  INSERT /pws/zycit474 FROM TABLE itab_zycit474.

 

ENDFORM.                    " create_excel_content_table

 

*&---------------------------------------------------------------------*

*&      Form  Converter_Moeda

*&---------------------------------------------------------------------*

*            -->p_devlme   "montante a ser convertido

*            -->p_deme     "Moeda original

*            -->p_parame   "Moeda destino

*            -->p_data     "Data para busca da taxa de cambio

*            <->p_paravlme "Valor convertido

 

*----------------------------------------------------------------------

*

FORM converter_moeda USING p_devlme

                           p_deme

                           p_parame

                           p_data

                  CHANGING p_paravlme.

  DATA: v_ctmoeda LIKE tcurr-kurst VALUE 'G',

        v_devlme   LIKE bsak-wrbtr,

        v_paravlme LIKE bsak-wrbtr.

  v_devlme = p_devlme .

  IF p_devlme NE 0.

    CALL FUNCTION '/PWS/ZYCB_MONTANTE_CONVERTE'

         EXPORTING

              i_montante                 = v_devlme

              i_demoeda                  = p_deme

              i_paramoeda                = p_parame

              i_ctmoeda                  = v_ctmoeda

              i_dtbase                   = p_data

         IMPORTING

              e_montante                 = v_paravlme

         EXCEPTIONS

              i_demoeda_nao_encontrado   = 1

              i_paramoeda_nao_encontrado = 2

              fator_nao_encontrado       = 3

              i_ctmoeda_nao_encontrado   = 4

              i_dtbase_nao_encontrada    = 5

              taxa_nao_encontrada        = 6

              i_montante_nao_encontrado  = 7.

    p_paravlme = v_paravlme.

 

  ENDIF.

ENDFORM.                                               " CONVERTER_MOEDA

 

*&---------------------------------------------------------------------*

*&      Form  retorna_decimais

*&---------------------------------------------------------------------*

*       tratamento para casas decimais utilizadas por moeda

*----------------------------------------------------------------------*

*      -->p_moeda  Moeda

*      <--p_valor  Valor a ser ajustado.

*----------------------------------------------------------------------*

FORM retorna_decimais USING    p_moeda

                    CHANGING p_valor.

  IF tcurx-currkey <> p_moeda.

    SELECT SINGLE * FROM tcurx WHERE currkey = p_moeda.

  ENDIF.

  IF sy-subrc <> 0.

    tcurx-currdec = 2.

  ENDIF.

  p_valor = p_valor * ( 10 ** ( tcurx-currdec - 2 ) ).

 

ENDFORM.                    " retorna_decimais

 

****************************************************************************************************

 

**Elementos de texto:

*Simbolo    Texto

 002     É necessario gerar os anexos de importação!

 003        Ato Concessório não existe.

**Textos de Seleção:

P_NRSEQD Nº Seq. Ato Concessório