CE PLUS - Nota 003358

Módulo: DRAWBACK

Funcionalidade: Relatórios

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

Data/Hora Última Alteração: 01/03/2010 16:49:45

Descrição da Nota: DESENVOLVIMENTO DO RUD EXPORTAÇÃO, IMPORTAÇÃO E TERMO

Sintoma

 

Desenvolver novo Relatório Unificado de Drawback Importação

Desenvolver novo Relatório Unificado de Drawback Exportação

Desenvolver novo Relatório Termo

 

Solução

 

Desenvolver novo Relatório Unificado de Drawback Importação

Desenvolver novo Relatório Unificado de Drawback Exportação

Desenvolver novo Relatório Termo

Versões Tratadas

6.0

Informações Complementares

 

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

Nota Número 03358 Data: 30/03/2007 Hora: 09:53:38

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

 

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

Nota Número              : 03358

Categoria                : Melhoria

Prioridade               : Média

Versão PW.CE             : 6.0

Pacote                   : 00026

Agrupamento              : 00156

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

Referência às notas relacionadas:

Número - Ordem - Descrição Breve

 

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

DESENVOLVIMENTO DO RUD EXPORTAÇÃO, IMPORTAÇÃO E TERMO

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

Palavras Chave:

/PWS/ZYCRR002, /PWS/ZYCRR006, /PWS/ZYCRR008, /PWS/ZYCIT476

 

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

Objetos da nota:

REPS /PWS/ZYCRR002

REPS /PWS/ZYCRR006

REPS /PWS/ZYCRR008

TABL /PWS/ZYCIT476

 

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

Modificações efetuadas em REPS /PWS/ZYCRR002

 

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

* 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

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

* 355730       18/01/07   Codificação inicial

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

 

REPORT /pws/zycrr002 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: /pws/zycrt003.

 

* 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,

       cnpjmask(18) TYPE c,

       sy_datlo(25) TYPE c,

       anexo        TYPE /pws/zycit476-anexo,

       pagina       TYPE i,

       p_proc1      TYPE /pws/zycrt003-name,

       p_proc2      TYPE /pws/zycrt003-name.

INCLUDE TYPE /pws/zycit244 AS zycit244.

TYPES:  END OF s_cabecalho.

 

* Tipo da estrutura e tabela dos itens

TYPES: BEGIN OF s_itens.

TYPES: nrre       TYPE /pws/zycit259-nrre,

       dtre       TYPE /pws/zycit259-dtre,

       j_1bnbm    TYPE /pws/zycit259-j_1bnbm,

       gewei      TYPE /pws/zycit259-gewei,

       ntgew      TYPE /pws/zycit259-ntgew,

       qtd_iten   TYPE /pws/zycit259-qtd_iten,

       meins      TYPE /pws/zycit259-meins,

       vl_fob     TYPE /pws/zycit259-vlfob,

       waersfob   TYPE /pws/zycit259-waersfob,

       vl_cif     TYPE /pws/zycit259-vlcif,

       maktx      TYPE makt-maktx,

       subtot     TYPE c,

       j_1bnbmtot TYPE /pws/zycit259-j_1bnbm,

       ntgewtot   TYPE /pws/zycit259-ntgew,

       qtd_tot    TYPE /pws/zycit259-qtd_iten,

       vl_fobtot  TYPE /pws/zycit259-vlfob,

       vl_ciftot  TYPE /pws/zycit259-vlcif.

TYPES: END OF s_itens,

       t_itens TYPE STANDARD TABLE OF s_itens.

 

TYPES: BEGIN OF s_tot_ncm.

TYPES: peso    TYPE /pws/zycit259-ntgew,

       qtd     TYPE /pws/zycit259-qtd_iten,

       fob     TYPE /pws/zycit259-vlfob,

       cif     TYPE /pws/zycit259-vlcif,

       totpeso TYPE /pws/zycit259-ntgew,

       totqtd  TYPE /pws/zycit259-qtd_iten,

       totfob  TYPE /pws/zycit259-vlfob,

       totcif  TYPE /pws/zycit259-vlcif,

END OF s_tot_ncm,

t_tot_ncm TYPE STANDARD TABLE OF s_tot_ncm.

 

TYPE-POOLS vrm.

DATA: list  TYPE vrm_values,

      value LIKE LINE OF list.

 

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

DATA: v_total    TYPE /pws/zycit259-vlcif,    "Var. Vl. Tot em Dolar

      v_peso     TYPE /pws/zycit259-ntgew,    "Var. Vl. Peso Liquido

      v_quant    TYPE /pws/zycit259-qtd_iten, "Var. Vl. Quantidade

      v_vlemb    TYPE /pws/zycit259-vlfob,    "Var. Vl. Local de Emb.

      v_totncm   TYPE i,                      "Var. Contador de Reg.

      v_ncm      TYPE /pws/zycit259-j_1bnbm.  "Var. do NCM.

 

DATA: BEGIN OF v_tab OCCURS 200,

        value(40) TYPE c,

      END OF v_tab.

 

DATA: BEGIN OF f_tab OCCURS 10.

        INCLUDE STRUCTURE help_value.

DATA: END OF f_tab.

 

* Cabeçalho e itens

DATA: wa_cabecalho  TYPE s_cabecalho,

      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.

 

* Dados para o arquivo do excel

DATA: it_excel_content TYPE t_excel_content,

      it_sect_height   TYPE t_sect_height,

      it_generation_options TYPE t_generation_options.

 

* Tabela para nomes

DATA:  BEGIN OF itab_zycrt003 OCCURS 0.

        INCLUDE STRUCTURE /pws/zycrt003.

DATA: END OF itab_zycrt003.

 

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

SELECTION-SCREEN BEGIN OF BLOCK b1.

 

PARAMETERS: p_nrseqd TYPE /pws/zycit244-nrseqd  OBLIGATORY MODIF ID key.

 

SELECTION-SCREEN END OF BLOCK b1.

 

SELECTION-SCREEN BEGIN OF BLOCK b2.

 

PARAMETERS: p_proc1 TYPE /pws/zycrt003-name,

            p_proc2 TYPE /pws/zycrt003-name.

 

SELECTION-SCREEN END OF BLOCK b2.

 

PARAMETERS: p_passwd(132) TYPE c LOWER CASE.

 

PARAMETERS: p_option TYPE xfeld NO-DISPLAY.

 

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

 

AT SELECTION-SCREEN OUTPUT.

 

* A chave não pode ser alterada quando a chamada for feita pela função.

  IF p_option = 'X'.

 

    LOOP AT SCREEN.

 

      IF screen-group1 = 'KEY'.

 

        screen-input = '0'.

 

        MODIFY SCREEN.

 

      ENDIF.

 

    ENDLOOP.

 

  ENDIF.

 

  LOOP AT SCREEN.

    CASE screen-name.

 

      WHEN 'P_PASSWD'.

        screen-invisible = '1'.

        MODIFY SCREEN.

    ENDCASE.

  ENDLOOP.

 

 

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_proc1.

  PERFORM trata_procurador CHANGING p_proc1.

 

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_proc2.

  PERFORM trata_procurador CHANGING p_proc2.

 

* INÍCIO DA SELEÇÃO ---------------------------------------------------*

 

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 i015 WITH text-002.

    EXIT.

  ENDIF.

 

 

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

  PERFORM select_parameters

          USING

             'D'

             'RUDE'

             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 = 'D'.

    msg_report = 'RUDE'.

    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

             wa_cabecalho

             it_itens[]

             wa_rep_param

             it_matrix[]

             it_report_fields[]

          CHANGING

             it_excel_content[]

             it_sect_height[].

 

* Determinação do nome do arquivo do report

  PERFORM generate_file_name

          USING

             wa_cabecalho-zycit244-nrseqd

             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'

             p_passwd

             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

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

* 316455      13/11/2006      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,

        v_tabix TYPE sy-tabix,

        v_line  TYPE sy-index,

        it_itens TYPE t_itens 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

  FROM t001w

  INTO p_cabecalho-local_neg

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

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

 

 

  CALL FUNCTION '/PWS/ZYCR_DATA_EXTENSO'

       EXPORTING

            data         = sy-datlo

            spras        = 'P'

       IMPORTING

            data_extenso = p_cabecalho-sy_datlo.

 

  p_cabecalho-p_proc1 = p_proc1.

  p_cabecalho-p_proc2 = p_proc2.

 

 

  SELECT MAX( anexo ) FROM /pws/zycit476

      INTO p_cabecalho-anexo

      WHERE nrseqd EQ p_nrseqd

        AND tipo EQ 'I'.

 

  IF p_cabecalho-anexo IS INITIAL.

    MESSAGE i015(/pws/zycim) WITH text-003 text-004.

    LEAVE PROGRAM.

  ENDIF.

 

  SELECT /pws/zycit259~nrre /pws/zycit259~dtre

         /pws/zycit259~j_1bnbm /pws/zycit259~gewei

         /pws/zycit259~ntgew /pws/zycit259~qtd_iten

         /pws/zycit259~meins /pws/zycit259~vlfob

         /pws/zycit259~waersfob /pws/zycit259~vlcif

         makt~maktx

  FROM ( /pws/zycit259 INNER JOIN makt

          ON /pws/zycit259~codmat = makt~matnr )

       INTO TABLE p_t_itens

       WHERE /pws/zycit259~nrseqd EQ p_cabecalho-zycit244-nrcompos

         AND makt~spras EQ 'P'.

 

  it_itens[] = p_t_itens[].

  REFRESH p_t_itens.

 

  LOOP AT it_itens.

    COLLECT it_itens INTO p_t_itens.

  ENDLOOP.

 

  SORT p_t_itens BY j_1bnbm.

 

  LOOP AT p_t_itens INTO wa_itens.

    v_tabix = sy-tabix.

    CHECK wa_itens-subtot NE 'X'.

 

    ON CHANGE OF wa_itens-j_1bnbm.

      IF v_tabix NE 1.

        MOVE: v_ncm   TO wa_itens-j_1bnbmtot,

              'X'     TO wa_itens-subtot,

              v_peso  TO wa_itens-ntgewtot,

              v_total TO wa_itens-vl_ciftot,

              v_vlemb TO wa_itens-vl_fobtot,

              v_quant TO wa_itens-qtd_tot.

 

        INSERT wa_itens INTO p_t_itens INDEX v_tabix.

      ENDIF.

      CLEAR: v_ncm,

             v_peso,

             v_total,

             v_vlemb,

             v_quant.

 

    ENDON.

 

    MOVE wa_itens-j_1bnbm TO v_ncm.

    ADD: wa_itens-ntgew TO v_peso,

         wa_itens-vl_cif TO v_total,

         wa_itens-vl_fob TO v_vlemb,

         wa_itens-qtd_iten TO v_quant.

 

  ENDLOOP.

 

  DESCRIBE TABLE p_t_itens LINES v_line.

  ADD 1 TO v_line.

  MOVE: v_ncm    TO wa_itens-j_1bnbmtot,

        'X'      TO wa_itens-subtot,

        v_peso   TO wa_itens-ntgewtot,

        v_total  TO wa_itens-vl_ciftot,

        v_vlemb  TO wa_itens-vl_fobtot,

        v_quant  TO wa_itens-qtd_tot.

  INSERT wa_itens INTO p_t_itens INDEX v_line.

 

ENDFORM.                    " select_data

 

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

* Form create_excel_content_table

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

* Objetivo: Montar o report ACE59

*           Cada página do ACE59 é composta da seguintes seções:

*

*            1 X seção "A"

*           11 X seção "B"

*            1 X seção "C"

*            6 X seção "D"

*            1 X seção "E"

*

*          O documento tem estrutura fixa e as seções que se repetem

*         ("B" e "D") devem ser inseridas mesmo que em branco.

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

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

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

* --> p_header           Dados do cabeçalho do report

*     p_t_items          Tabela de itens do report

*     p_t_sub_items      Tabela de sub-itens do report

*     p_rep_param        Parâmetros específicos por report

*     p_t_matrix         Matriz de campos do report

*     p_t_report_fields  Campos disponíveis no programa

* <-- p_t_excel_content  Conteúdo do report para o Excel

*     p_t_sect_height    Tabela de altura das seções do report

* <-> <nenhum>

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

* Chamado     Data            Descrição

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

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

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

FORM create_excel_content_table

     USING

        p_header          TYPE any

        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_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: has_remaining_space TYPE abap_bool.

 

  DATA: current_item         TYPE i VALUE 1,

        total_items          TYPE i,

        remaining_item_space TYPE f.

 

  DATA: section_height        TYPE f,

        filled_section_height TYPE f.

 

  DATA: subrc TYPE sy-subrc.

 

  DATA: it_section_content LIKE p_t_excel_content[].

  DATA: it_iteanexo        LIKE p_t_excel_content[] WITH HEADER LINE.

 

  DATA: itab_exel_temp TYPE t_excel_content,

        wa_exel_temp   LIKE LINE OF itab_exel_temp[].

 

*Variáveis

  DATA: v_linetot   TYPE f,  "Linhas em pontos total da folha no Excel

        v_linecab   TYPE f,  "Linhas em pontos do cabeçalho

        v_lineite   TYPE f,  "Linhas em pontos dos itens

        v_linesub   TYPE f,  "Linhas em pontos do sub_itens

        v_linesub2  TYPE f,  "Linhas em pontos do sub_itens2

        v_linerod   TYPE f,  "Linhas em pontos do rodapé

        v_linencm   TYPE f,  "Linhas em pontos do total do ncm

        v_resto     TYPE f,  "Linhas em pontos restantes de itens

        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_linharod  TYPE i,  "Linhas do rodapé

        v_linhancm  TYPE i.  "Linha do total de ncm

 

*Work area de itens

  DATA: wa_itens TYPE s_itens,

        wa_iteanexo TYPE s_itens,

        wa_totanexo TYPE s_tot_ncm,

        wa_total    TYPE s_tot_ncm.

 

 

  PERFORM select_row_height_cache

  USING

  p_rep_param-spras

  p_rep_param-file_id

  CHANGING

  p_t_sect_height[].

 

  DESCRIBE TABLE p_t_items[] LINES total_items.

 

  PERFORM get_section_height

          USING

             'REPORT'

             p_t_sect_height[]

          CHANGING

             v_linetot.

 

  PERFORM get_section_height

          USING

             'VIA I (2)'

             p_t_sect_height[]

          CHANGING

             v_linecab.

 

  PERFORM get_section_height

          USING

             'VIA I (3)'

             p_t_sect_height[]

          CHANGING

             v_lineite.

 

  PERFORM get_section_height

          USING

             'VIA I (4)'

             p_t_sect_height[]

          CHANGING

             v_linesub.

 

  PERFORM get_section_height

          USING

             'VIA I (5)'

             p_t_sect_height[]

          CHANGING

             v_linesub2.

 

  PERFORM get_section_height

          USING

             'VIA I (6)'

             p_t_sect_height[]

          CHANGING

             v_linerod.

 

  PERFORM get_section_height

          USING

             'VIA I (6)'

             p_t_sect_height[]

          CHANGING

             v_linencm.

 

  PERFORM get_section_rows

          USING

             'VIA I (2)'

             p_t_sect_height[]

          CHANGING

             v_linhacab.

 

  PERFORM get_section_rows

          USING

             'VIA I (3)'

             p_t_sect_height[]

          CHANGING

             v_linhaite.

 

  PERFORM get_section_rows

          USING

             'VIA I (4)'

             p_t_sect_height[]

          CHANGING

             v_linhasub.

 

  PERFORM get_section_rows

          USING

             'VIA I (5)'

             p_t_sect_height[]

          CHANGING

             v_linhasub2.

 

  PERFORM get_section_rows

          USING

             'VIA I (6)'

             p_t_sect_height[]

          CHANGING

             v_linharod.

 

  PERFORM get_section_rows

          USING

             'VIA I (8)'

             p_t_sect_height[]

          CHANGING

             v_linhancm.

 

  WHILE current_item <= total_items.

    wa_cabecalho = p_header.

 

    wa_cabecalho-pagina = wa_cabecalho-anexo = wa_cabecalho-anexo + 1.

 

    PERFORM append_new_section

            USING

               'VIA I (2)'

               current_row

            CHANGING

               p_t_excel_content[].

 

    PERFORM fill_header_fields

            USING

               wa_cabecalho

               'VIA I (2)'

               current_row

               p_t_matrix[]

               p_t_report_fields[]

            CHANGING

               p_t_excel_content[].

 

    ADD v_linhacab TO current_row.

 

    remaining_item_space = v_linetot - v_linecab - v_linesub -

                           v_linesub2 - v_linerod.

 

    has_remaining_space = abap_true.

    CLEAR wa_totanexo.

    WHILE has_remaining_space = abap_true.

      REFRESH it_section_content[].

 

      IF v_lineite <= remaining_item_space.

        CLEAR wa_itens.

 

 

        READ TABLE p_t_items INTO wa_itens INDEX current_item.

 

        IF wa_itens-subtot = ' '.

 

          PERFORM append_new_section

                  USING

                     'VIA I (3)'

                     current_row

                  CHANGING

                     p_t_excel_content[].

 

*       Preenche campos de item

          PERFORM fill_items_fields

                  USING

                     p_t_items[]

                     'VIA I (3)'

                     current_row

                     p_t_matrix[]

                     p_t_report_fields[]

                     p_t_sect_height[]

                     current_item

                  CHANGING

                     filled_section_height

                     it_section_content[]

                     subrc.

 

          IF subrc = 0.

            it_iteanexo[] = it_section_content[].

            IF filled_section_height LE remaining_item_space.

              READ TABLE p_t_items INTO wa_iteanexo INDEX current_item.

              IF wa_iteanexo-subtot IS INITIAL.

                wa_totanexo-peso = wa_totanexo-peso + wa_iteanexo-ntgew.

               wa_totanexo-qtd = wa_totanexo-qtd + wa_iteanexo-qtd_iten.

                wa_totanexo-fob = wa_totanexo-fob + wa_iteanexo-vl_fob.

                wa_totanexo-cif = wa_totanexo-cif + wa_iteanexo-vl_cif.

 

                wa_total-totpeso =

                                wa_total-totpeso + wa_iteanexo-ntgew.

                wa_total-totqtd =

                                wa_total-totqtd + wa_iteanexo-qtd_iten.

                wa_total-totfob =

                                wa_total-totfob + wa_iteanexo-vl_fob.

                wa_total-totcif =

                                wa_total-totcif + wa_iteanexo-vl_cif.

 

 

              ENDIF.

            ENDIF.

 

          ENDIF.

        ELSE.

 

          PERFORM append_new_section

                  USING

                     'VIA I (8)'

                     current_row

                  CHANGING

                     p_t_excel_content[].

 

*       Preenche campos de item

          PERFORM fill_items_fields

                  USING

                     p_t_items[]

                     'VIA I (8)'

                     current_row

                     p_t_matrix[]

                     p_t_report_fields[]

                     p_t_sect_height[]

                     current_item

                  CHANGING

                     filled_section_height

                     it_section_content[]

                     subrc.

 

        ENDIF.

 

*       Se não é possível usar a seção preenchida, deixar em branco.

        IF subrc = 0.

 

          IF filled_section_height <= remaining_item_space.

 

            APPEND LINES OF it_section_content TO p_t_excel_content.

            ADD 1 TO current_item.

            ADD v_linhaite TO current_row.

            SUBTRACT filled_section_height FROM remaining_item_space.

 

          ENDIF.

 

        ELSE.

 

          ADD v_linhaite TO current_row.

          SUBTRACT v_lineite FROM remaining_item_space.

 

        ENDIF.

 

      ELSE.

 

        has_remaining_space = abap_false.

 

      ENDIF.

    ENDWHILE.

 

    PERFORM append_new_section

            USING

               'VIA I (4)'

               current_row

            CHANGING

               p_t_excel_content[].

 

    PERFORM fill_header_fields

            USING

               wa_totanexo

               'VIA I (4)'

               current_row

               p_t_matrix[]

               p_t_report_fields[]

            CHANGING

               p_t_excel_content[].

 

    ADD v_linhasub TO current_row.

 

    IF current_item > total_items.

      PERFORM append_new_section

              USING

                 'VIA I (5)'

                 current_row

              CHANGING

                 p_t_excel_content[].

 

      PERFORM fill_header_fields

              USING

                 wa_total

                 'VIA I (5)'

                 current_row

                 p_t_matrix[]

                 p_t_report_fields[]

              CHANGING

                 p_t_excel_content[].

      ADD v_linhasub2 TO current_row.

    ENDIF.

 

    PERFORM append_new_section

            USING

               'VIA I (6)'

               current_row

            CHANGING

               p_t_excel_content[].

 

    PERFORM fill_header_fields

            USING

               wa_cabecalho

               'VIA I (6)'

               current_row

               p_t_matrix[]

               p_t_report_fields[]

            CHANGING

               p_t_excel_content[].

    ADD v_linharod TO current_row.

 

 

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

 

    LOOP AT itab_exel_temp INTO wa_exel_temp.

      ADD current_row TO wa_exel_temp-row.

      APPEND wa_exel_temp TO p_t_excel_content.

    ENDLOOP.

 

    ADD section_rows TO current_row.

  ENDDO.

 

ENDFORM.                    " create_excel_content_table

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

*&      Form  trata_procurador

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

*       text

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

*  -->  p1        text

*  <--  p2        text

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

FORM trata_procurador CHANGING p_proc.

 

  FREE v_tab.

 

  CLEAR: v_tab, f_tab.

  REFRESH: v_tab, f_tab.

 

  SELECT * FROM /pws/zycrt003

  INTO TABLE itab_zycrt003.

 

  LOOP AT itab_zycrt003.

    MOVE itab_zycrt003-name TO v_tab.

    APPEND v_tab.

  ENDLOOP.

 

  MOVE: '/PWS/ZYCRT003' TO f_tab-tabname,

        'NAME'    TO f_tab-fieldname,

        'X'        TO f_tab-selectflag.

  APPEND f_tab.

  CLEAR f_tab.

 

  CALL FUNCTION 'HELP_VALUES_GET_WITH_TABLE'

       EXPORTING

            display      = ' '

            fieldname    = 'NAME'

            tabname      = '/PWS/ZYCRT003'

       IMPORTING

            select_value = value

       TABLES

            valuetab     = v_tab

            fields       = f_tab.

 

  IF sy-subrc EQ 0.

    MOVE value TO p_proc.

  ENDIF.

 

 

ENDFORM.                    " trata_procurador

 

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

Modificações efetuadas em REPS /PWS/ZYCRR006

 

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

* 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

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

* 355730       18/01/07   Codificação inicial

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

 

REPORT /pws/zycrr006 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: /pws/zycrt003,

        /pws/zycit476.

 

* 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,

       sy_datlo(25) TYPE c,

       anexo        TYPE i,

       pagina       TYPE i,

       p_proc1      TYPE /pws/zycrt003-name,

       p_proc2      TYPE /pws/zycrt003-name.

INCLUDE TYPE /pws/zycit244 AS zycit244.

TYPES:  END OF s_cabecalho.

 

* Tipo da estrutura e tabela dos itens

TYPES: BEGIN OF s_itens.

TYPES: nrdi       TYPE /pws/zycit260-nrdi,

       reg_di     TYPE /pws/zycit260-reg_di,

       adicao     TYPE /pws/zycit260-adicao,

       dtdi       TYPE /pws/zycit260-dtdi,

       j_1bnbm    TYPE /pws/zycit260-j_1bnbm,

       gewei      TYPE /pws/zycit260-gewei,

       ntgew      TYPE /pws/zycit260-ntgew,

       qtd_vinc   TYPE /pws/zycit260-qtd_vinc,

       meins      TYPE /pws/zycit260-meins,

       vlfob      TYPE /pws/zycit260-vlfob,

       waers      TYPE /pws/zycit260-waers,

       vlfobt     TYPE /pws/zycit260-vlfob_t,

       maktx      TYPE makt-maktx,

       subtot     TYPE c,

       j_1bnbmtot TYPE /pws/zycit260-j_1bnbm,

       ntgewtot   TYPE /pws/zycit260-ntgew,

       qtd_tot    TYPE /pws/zycit260-qtd_vinc,

       vl_fembtot TYPE /pws/zycit260-vlfob,

       vl_fobtot  TYPE /pws/zycit260-vlfob_t,

       diadic(14) TYPE c.

TYPES: END OF s_itens,

       t_itens TYPE STANDARD TABLE OF s_itens.

 

TYPES: BEGIN OF s_tot_ncm.

TYPES: peso    TYPE /pws/zycit260-ntgew,

       qtd     TYPE /pws/zycit260-qtd_vinc,

       fob     TYPE /pws/zycit260-vlfob,

       fobt    TYPE /pws/zycit260-vlfob_t,

       totpeso TYPE /pws/zycit260-ntgew,

       totqtd  TYPE /pws/zycit260-qtd_vinc,

       totfemb TYPE /pws/zycit260-vlfob,

       totfob  TYPE /pws/zycit260-vlfob_t,

END OF s_tot_ncm,

t_tot_ncm TYPE STANDARD TABLE OF s_tot_ncm.

 

TYPE-POOLS vrm.

DATA: list  TYPE vrm_values,

      value LIKE LINE OF list.

 

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

DATA: v_total    TYPE /pws/zycit260-vlfob_t,    "Var. Vl. Tot em Dolar

      v_peso     TYPE /pws/zycit260-ntgew,    "Var. Vl. Peso Liquido

      v_quant    TYPE /pws/zycit260-qtd_vinc, "Var. Vl. Quantidade

      v_vlemb    TYPE /pws/zycit260-vlfob,    "Var. Vl. Local de Emb.

      v_totncm   TYPE i,                      "Var. Contador de Reg.

      v_ncm      TYPE /pws/zycit259-j_1bnbm.  "Var. do NCM.

 

DATA: BEGIN OF v_tab OCCURS 200,

        value(40) TYPE c,

      END OF v_tab.

 

DATA: BEGIN OF f_tab OCCURS 10.

        INCLUDE STRUCTURE help_value.

DATA: END OF f_tab.

 

* Cabeçalho e itens

DATA: wa_cabecalho  TYPE s_cabecalho,

      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.

 

* Dados para o arquivo do excel

DATA: it_excel_content TYPE t_excel_content,

      it_sect_height   TYPE t_sect_height,

      it_generation_options TYPE t_generation_options.

 

* Tabela para nomes

DATA:  BEGIN OF itab_zycrt003 OCCURS 0.

        INCLUDE STRUCTURE /pws/zycrt003.

DATA: END OF itab_zycrt003.

 

DATA: BEGIN OF itab_zycit476 OCCURS 0.

        INCLUDE STRUCTURE /pws/zycit476.

DATA: END OF itab_zycit476.

 

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

SELECTION-SCREEN BEGIN OF BLOCK b1.

 

PARAMETERS: p_nrseqd TYPE /pws/zycit244-nrseqd  OBLIGATORY MODIF ID key.

 

SELECTION-SCREEN END OF BLOCK b1.

 

SELECTION-SCREEN BEGIN OF BLOCK b2.

 

PARAMETERS: p_proc1 TYPE /pws/zycrt003-name,

            p_proc2 TYPE /pws/zycrt003-name.

 

SELECTION-SCREEN END OF BLOCK b2.

 

PARAMETERS: p_passwd(132) TYPE c LOWER CASE.

 

PARAMETERS: p_option TYPE xfeld NO-DISPLAY.

 

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

 

AT SELECTION-SCREEN OUTPUT.

 

* A chave não pode ser alterada quando a chamada for feita pela função.

  IF p_option = 'X'.

 

    LOOP AT SCREEN.

 

      IF screen-group1 = 'KEY'.

 

        screen-input = '0'.

 

        MODIFY SCREEN.

 

      ENDIF.

 

    ENDLOOP.

 

  ENDIF.

 

  LOOP AT SCREEN.

    CASE screen-name.

 

      WHEN 'P_PASSWD'.

        screen-invisible = '1'.

        MODIFY SCREEN.

    ENDCASE.

  ENDLOOP.

 

 

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_proc1.

  PERFORM trata_procurador CHANGING p_proc1.

 

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_proc2.

  PERFORM trata_procurador CHANGING p_proc2.

 

* INÍCIO DA SELEÇÃO ---------------------------------------------------*

 

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 i015 WITH text-001.

    EXIT.

  ENDIF.

 

 

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

  PERFORM select_parameters

          USING

             'D'

             'RUDI'

             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 = 'D'.

    msg_report = 'RUDI'.

    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

             wa_cabecalho

             it_itens[]

             wa_rep_param

             it_matrix[]

             it_report_fields[]

          CHANGING

             it_excel_content[]

             it_sect_height[].

 

* Determinação do nome do arquivo do report

  PERFORM generate_file_name

          USING

             wa_cabecalho-zycit244-nrseqd

             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'

             p_passwd

             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

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

* 316455      13/11/2006      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,

        v_tabix TYPE sy-tabix,

        v_line  TYPE sy-index,

        it_itens TYPE t_itens 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

  FROM t001w

  INTO p_cabecalho-local_neg

  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.

 

  CALL FUNCTION '/PWS/ZYCR_DATA_EXTENSO'

       EXPORTING

            data         = sy-datlo

            spras        = 'P'

       IMPORTING

            data_extenso = p_cabecalho-sy_datlo.

 

  p_cabecalho-p_proc1 = p_proc1.

  p_cabecalho-p_proc2 = p_proc2.

 

  SELECT /pws/zycit260~nrdi /pws/zycit260~reg_di

         /pws/zycit260~adicao /pws/zycit260~dtdi

         /pws/zycit260~j_1bnbm /pws/zycit260~gewei

         /pws/zycit260~ntgew /pws/zycit260~qtd_vinc

         /pws/zycit260~meins /pws/zycit260~vlfob

         /pws/zycit260~waers /pws/zycit260~vlfob_t

         makt~maktx

  FROM ( /pws/zycit260 INNER JOIN makt

          ON /pws/zycit260~codcomp = makt~matnr )

       INTO TABLE p_t_itens

       WHERE /pws/zycit260~nrseqd EQ p_cabecalho-zycit244-nrcompos

         AND makt~spras EQ 'P'.

 

  it_itens[] = p_t_itens[].

  REFRESH p_t_itens.

 

 

 

  LOOP AT it_itens.

    CONCATENATE it_itens-reg_di '/' it_itens-adicao INTO

                                                       it_itens-diadic.

    COLLECT it_itens INTO p_t_itens.

  ENDLOOP.

 

 

 

  SORT p_t_itens BY j_1bnbm.

 

  LOOP AT p_t_itens INTO wa_itens.

    v_tabix = sy-tabix.

    CHECK wa_itens-subtot NE 'X'.

 

    ON CHANGE OF wa_itens-j_1bnbm.

      IF v_tabix NE 1.

        MOVE: v_ncm   TO wa_itens-j_1bnbmtot,

              'X'     TO wa_itens-subtot,

              v_peso  TO wa_itens-ntgewtot,

              v_total TO wa_itens-vl_fobtot,

              v_vlemb TO wa_itens-vl_fembtot,

              v_quant TO wa_itens-qtd_tot.

 

        INSERT wa_itens INTO p_t_itens INDEX v_tabix.

      ENDIF.

      CLEAR: v_ncm,

             v_peso,

             v_total,

             v_vlemb,

             v_quant.

 

    ENDON.

 

    MOVE wa_itens-j_1bnbm TO v_ncm.

    ADD: wa_itens-ntgew TO v_peso,

         wa_itens-vlfob TO v_total,

         wa_itens-vlfobt TO v_vlemb,

         wa_itens-qtd_vinc TO v_quant.

 

  ENDLOOP.

 

  DESCRIBE TABLE p_t_itens LINES v_line.

  ADD 1 TO v_line.

  MOVE: v_ncm    TO wa_itens-j_1bnbmtot,

        'X'      TO wa_itens-subtot,

        v_peso   TO wa_itens-ntgewtot,

        v_total  TO wa_itens-vl_fobtot,

        v_vlemb  TO wa_itens-vl_fembtot,

        v_quant  TO wa_itens-qtd_tot.

  INSERT wa_itens INTO p_t_itens INDEX v_line.

 

ENDFORM.                    " select_data

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

* Form create_excel_content_table

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

* Objetivo: Montar o report ACE59

*           Cada página do ACE59 é composta da seguintes seções:

*

*            1 X seção "A"

*           11 X seção "B"

*            1 X seção "C"

*            6 X seção "D"

*            1 X seção "E"

*

*          O documento tem estrutura fixa e as seções que se repetem

*         ("B" e "D") devem ser inseridas mesmo que em branco.

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

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

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

* --> p_header           Dados do cabeçalho do report

*     p_t_items          Tabela de itens do report

*     p_t_sub_items      Tabela de sub-itens do report

*     p_rep_param        Parâmetros específicos por report

*     p_t_matrix         Matriz de campos do report

*     p_t_report_fields  Campos disponíveis no programa

* <-- p_t_excel_content  Conteúdo do report para o Excel

*     p_t_sect_height    Tabela de altura das seções do report

* <-> <nenhum>

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

* Chamado     Data            Descrição

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

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

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

FORM create_excel_content_table

     USING

        p_header          TYPE any

        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_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: has_remaining_space TYPE abap_bool.

 

  DATA: current_item         TYPE i VALUE 1,

        total_items          TYPE i,

        remaining_item_space TYPE f.

 

  DATA: section_height        TYPE f,

        filled_section_height TYPE f.

 

  DATA: subrc TYPE sy-subrc.

 

  DATA: it_section_content LIKE p_t_excel_content[].

  DATA: it_iteanexo        LIKE p_t_excel_content[] WITH HEADER LINE.

 

  DATA: itab_exel_temp TYPE t_excel_content,

        wa_exel_temp   LIKE LINE OF itab_exel_temp[].

 

*Variáveis

  DATA: v_linetot   TYPE f,  "Linhas em pontos total da folha no Excel

        v_linecab   TYPE f,  "Linhas em pontos do cabeçalho

        v_lineite   TYPE f,  "Linhas em pontos dos itens

        v_linesub   TYPE f,  "Linhas em pontos do sub_itens

        v_linesub2  TYPE f,  "Linhas em pontos do sub_itens2

        v_linerod   TYPE f,  "Linhas em pontos do rodapé

        v_linencm   TYPE f,  "Linhas em pontos do total do ncm

        v_resto     TYPE f,  "Linhas em pontos restantes de itens

        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_linharod  TYPE i,  "Linhas do rodapé

        v_linhancm  TYPE i.  "Linha do total de ncm

 

*Work area de itens

  DATA: wa_itens TYPE s_itens,

        wa_iteanexo TYPE s_itens,

        wa_totanexo TYPE s_tot_ncm,

        wa_total    TYPE s_tot_ncm.

 

 

  PERFORM select_row_height_cache

  USING

  p_rep_param-spras

  p_rep_param-file_id

  CHANGING

  p_t_sect_height[].

 

  DESCRIBE TABLE p_t_items[] LINES total_items.

 

  PERFORM get_section_height

          USING

             'REPORT'

             p_t_sect_height[]

          CHANGING

             v_linetot.

 

  PERFORM get_section_height

          USING

             'VIA I (2)'

             p_t_sect_height[]

          CHANGING

             v_linecab.

 

  PERFORM get_section_height

          USING

             'VIA I (3)'

             p_t_sect_height[]

          CHANGING

             v_lineite.

 

  PERFORM get_section_height

          USING

             'VIA I (4)'

             p_t_sect_height[]

          CHANGING

             v_linesub.

 

  PERFORM get_section_height

          USING

             'VIA I (5)'

             p_t_sect_height[]

          CHANGING

             v_linesub2.

 

  PERFORM get_section_height

          USING

             'VIA I (6)'

             p_t_sect_height[]

          CHANGING

             v_linerod.

 

  PERFORM get_section_height

          USING

             'VIA I (6)'

             p_t_sect_height[]

          CHANGING

             v_linencm.

 

  PERFORM get_section_rows

          USING

             'VIA I (2)'

             p_t_sect_height[]

          CHANGING

             v_linhacab.

 

  PERFORM get_section_rows

          USING

             'VIA I (3)'

             p_t_sect_height[]

          CHANGING

             v_linhaite.

 

  PERFORM get_section_rows

          USING

             'VIA I (4)'

             p_t_sect_height[]

          CHANGING

             v_linhasub.

 

  PERFORM get_section_rows

          USING

             'VIA I (5)'

             p_t_sect_height[]

          CHANGING

             v_linhasub2.

 

  PERFORM get_section_rows

          USING

             'VIA I (6)'

             p_t_sect_height[]

          CHANGING

             v_linharod.

 

  PERFORM get_section_rows

          USING

             'VIA I (7)'

             p_t_sect_height[]

          CHANGING

             v_linhancm.

 

  WHILE current_item <= total_items.

    wa_cabecalho = p_header.

 

    itab_zycit476-nrseqd = p_nrseqd.

    itab_zycit476-tipo = 'I'.

    itab_zycit476-anexo = wa_cabecalho-anexo = wa_cabecalho-anexo + 1.

    wa_cabecalho-pagina = wa_cabecalho-pagina + 1.

 

    PERFORM append_new_section

            USING

               'VIA I (2)'

               current_row

            CHANGING

               p_t_excel_content[].

 

    PERFORM fill_header_fields

            USING

               wa_cabecalho

               'VIA I (2)'

               current_row

               p_t_matrix[]

               p_t_report_fields[]

            CHANGING

               p_t_excel_content[].

 

    ADD v_linhacab TO current_row.

 

    remaining_item_space = v_linetot - v_linecab - v_linesub -

                           v_linesub2 - v_linerod.

 

    has_remaining_space = abap_true.

    CLEAR wa_totanexo.

    WHILE has_remaining_space = abap_true.

      REFRESH it_section_content[].

 

      IF v_lineite <= remaining_item_space.

        CLEAR wa_itens.

 

        READ TABLE p_t_items INTO wa_itens INDEX current_item.

 

        IF wa_itens-subtot = ' '.

 

          PERFORM append_new_section

                  USING

                     'VIA I (3)'

                     current_row

                  CHANGING

                     p_t_excel_content[].

 

*       Preenche campos de item

          PERFORM fill_items_fields

                  USING

                     p_t_items[]

                     'VIA I (3)'

                     current_row

                     p_t_matrix[]

                     p_t_report_fields[]

                     p_t_sect_height[]

                     current_item

                  CHANGING

                     filled_section_height

                     it_section_content[]

                     subrc.

 

          IF subrc = 0.

            it_iteanexo[] = it_section_content[].

            IF filled_section_height LE remaining_item_space.

              READ TABLE p_t_items INTO wa_iteanexo INDEX current_item.

              IF wa_iteanexo-subtot IS INITIAL.

*Calcula Total do Anexo

                wa_totanexo-peso = wa_totanexo-peso + wa_iteanexo-ntgew.

               wa_totanexo-qtd = wa_totanexo-qtd + wa_iteanexo-qtd_vinc

        .

                wa_totanexo-fob = wa_totanexo-fob + wa_iteanexo-vlfob.

               wa_totanexo-fobt = wa_totanexo-fobt + wa_iteanexo-vlfobt

           .

*Calcula Total dos Itens

                wa_total-totpeso =

                                wa_total-totpeso + wa_iteanexo-ntgew.

                wa_total-totqtd =

                                wa_total-totqtd + wa_iteanexo-qtd_vinc.

                wa_total-totfemb =

                                wa_total-totfemb + wa_iteanexo-vlfob.

                wa_total-totfob =

                                wa_total-totfob + wa_iteanexo-vlfobt.

 

 

              ENDIF.

            ENDIF.

 

          ENDIF.

        ELSE.

 

          PERFORM append_new_section

                  USING

                     'VIA I (7)'

                     current_row

                  CHANGING

                     p_t_excel_content[].

 

*       Preenche campos de item

          PERFORM fill_items_fields

                  USING

                     p_t_items[]

                     'VIA I (7)'

                     current_row

                     p_t_matrix[]

                     p_t_report_fields[]

                     p_t_sect_height[]

                     current_item

                  CHANGING

                     filled_section_height

                     it_section_content[]

                     subrc.

 

        ENDIF.

*       Se não é possível usar a seção preenchida, deixar em branco.

        IF subrc = 0.

 

          IF filled_section_height <= remaining_item_space.

 

            APPEND LINES OF it_section_content TO p_t_excel_content.

            ADD 1 TO current_item.

            ADD v_linhaite TO current_row.

            SUBTRACT filled_section_height FROM remaining_item_space.

 

          ENDIF.

 

        ELSE.

 

          ADD v_linhaite TO current_row.

          SUBTRACT v_lineite FROM remaining_item_space.

 

        ENDIF.

 

      ELSE.

 

        has_remaining_space = abap_false.

 

      ENDIF.

    ENDWHILE.

 

    PERFORM append_new_section

            USING

               'VIA I (4)'

               current_row

            CHANGING

               p_t_excel_content[].

 

    PERFORM fill_header_fields

            USING

               wa_totanexo

               'VIA I (4)'

               current_row

               p_t_matrix[]

               p_t_report_fields[]

            CHANGING

               p_t_excel_content[].

 

    ADD v_linhasub TO current_row.

 

    IF current_item > total_items.

      PERFORM append_new_section

              USING

                 'VIA I (5)'

                 current_row

              CHANGING

                 p_t_excel_content[].

 

      PERFORM fill_header_fields

              USING

                 wa_total

                 'VIA I (5)'

                 current_row

                 p_t_matrix[]

                 p_t_report_fields[]

              CHANGING

                 p_t_excel_content[].

      ADD v_linhasub2 TO current_row.

    ENDIF.

 

    PERFORM append_new_section

            USING

               'VIA I (6)'

               current_row

            CHANGING

               p_t_excel_content[].

 

    PERFORM fill_header_fields

            USING

               wa_cabecalho

               'VIA I (6)'

               current_row

               p_t_matrix[]

               p_t_report_fields[]

            CHANGING

               p_t_excel_content[].

    ADD v_linharod TO current_row.

 

 

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

 

    LOOP AT itab_exel_temp INTO wa_exel_temp.

      ADD current_row TO wa_exel_temp-row.

      APPEND wa_exel_temp TO p_t_excel_content.

    ENDLOOP.

 

    ADD section_rows TO current_row.

  ENDDO.

  APPEND itab_zycit476.

*  Grava histórico dos anexos para uso posterior.

  DELETE FROM /pws/zycit476 WHERE nrseqd EQ p_nrseqd

                              AND tipo  EQ 'I'.

  INSERT /pws/zycit476 FROM TABLE itab_zycit476.

 

ENDFORM.                    " create_excel_content_table

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

*&      Form  trata_procurador

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

*       text

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

*  -->  p1        text

*  <--  p2        text

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

FORM trata_procurador CHANGING p_proc.

 

  FREE v_tab.

 

  CLEAR: v_tab, f_tab.

  REFRESH: v_tab, f_tab.

 

  SELECT * FROM /pws/zycrt003

  INTO TABLE itab_zycrt003.

 

  LOOP AT itab_zycrt003.

    MOVE itab_zycrt003-name TO v_tab.

    APPEND v_tab.

  ENDLOOP.

 

  MOVE: '/PWS/ZYCRT003' TO f_tab-tabname,

        'NAME'    TO f_tab-fieldname,

        'X'        TO f_tab-selectflag.

  APPEND f_tab.

  CLEAR f_tab.

 

  CALL FUNCTION 'HELP_VALUES_GET_WITH_TABLE'

       EXPORTING

            display      = ' '

            fieldname    = 'NAME'

            tabname      = '/PWS/ZYCRT003'

       IMPORTING

            select_value = value

       TABLES

            valuetab     = v_tab

            fields       = f_tab.

 

  IF sy-subrc EQ 0.

    MOVE value TO p_proc.

  ENDIF.

 

 

ENDFORM.                    " trata_procurador

 

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

Modificações efetuadas em REPS /PWS/ZYCRR008

 

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

* 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

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

* 355730       18/01/07   Codificação inicial

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

REPORT /pws/zycrr008 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: /pws/zycrt003.

 

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

* Tipo da estrutura do cabeçalho

TYPES: BEGIN OF s_cabecalho.

TYPES: empresa      TYPE t001-bukrs,

       centro       TYPE t001w-werks,

       desc_emp     TYPE t001-butxt,

       local_neg    TYPE t001w-j_1bbranch,

       cnpjmask(18) TYPE c,

       sy_datlo(25) TYPE c,

       anexo        TYPE /pws/zycit476-anexo,

       pagina       TYPE i,

       p_proc1      TYPE /pws/zycrt003-name,

       p_proc2      TYPE /pws/zycrt003-name,

       endereco     TYPE t001w-stras.

INCLUDE TYPE /pws/zycit244 AS zycit244.

TYPES:  END OF s_cabecalho.

 

 

* Cabeçalho e itens

DATA: wa_cabecalho  TYPE s_cabecalho.

 

 

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

 

* Dados para o arquivo do excel

DATA: it_excel_content TYPE t_excel_content,

      it_sect_height   TYPE t_sect_height,

      it_generation_options TYPE t_generation_options.

 

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

SELECTION-SCREEN BEGIN OF BLOCK b1.

 

PARAMETERS: p_nrseqd TYPE /pws/zycit244-nrseqd  OBLIGATORY MODIF ID key.

 

SELECTION-SCREEN END OF BLOCK b1.

 

PARAMETERS: p_passwd(132) TYPE c LOWER CASE.

 

PARAMETERS: p_option TYPE xfeld NO-DISPLAY.

 

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

 

AT SELECTION-SCREEN OUTPUT.

 

* A chave não pode ser alterada quando a chamada for feita pela função.

  IF p_option = 'X'.

 

    LOOP AT SCREEN.

 

      IF screen-group1 = 'KEY'.

 

        screen-input = '0'.

 

        MODIFY SCREEN.

 

      ENDIF.

 

    ENDLOOP.

 

  ENDIF.

 

  LOOP AT SCREEN.

    CASE screen-name.

 

      WHEN 'P_PASSWD'.

        screen-invisible = '1'.

        MODIFY SCREEN.

    ENDCASE.

  ENDLOOP.

 

* INÍCIO DA SELEÇÃO ---------------------------------------------------*

 

START-OF-SELECTION.

 

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

  PERFORM select_data

          USING

             p_nrseqd

          CHANGING

             wa_cabecalho.

 

 

  IF wa_cabecalho IS INITIAL.

    MESSAGE i015 WITH text-002.

    EXIT.

  ENDIF.

 

 

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

  PERFORM select_parameters

          USING

             'D'

             'TERMO'

             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 = 'D'.

    msg_report = 'TERMO'.

    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

             wa_cabecalho

             wa_rep_param

             it_matrix[]

             it_report_fields[]

          CHANGING

             it_excel_content[]

             it_sect_height[].

 

* Determinação do nome do arquivo do report

  PERFORM generate_file_name

          USING

             wa_cabecalho-zycit244-nrseqd

             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'

             p_passwd

             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

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

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

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

FORM select_data

     USING

        p_nrseqd TYPE /pws/zycit244-nrseqd

     CHANGING

        p_cabecalho      TYPE s_cabecalho.

 

 

  DATA: v_tabix TYPE sy-tabix,

        v_line  TYPE sy-index.

 

  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 stras

      INTO p_cabecalho-endereco

      FROM t001w

      WHERE werks = p_cabecalho-zycit244-werks.

 

  SELECT SINGLE j_1bbranch

  FROM t001w

  INTO p_cabecalho-local_neg

  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.

 

 

  CALL FUNCTION '/PWS/ZYCR_DATA_EXTENSO'

       EXPORTING

            data         = sy-datlo

            spras        = 'P'

       IMPORTING

            data_extenso = p_cabecalho-sy_datlo.

 

 

ENDFORM.                    " select_data

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

* Form create_excel_content_table

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

* Objetivo: Montar o report ACE59

*           Cada página do ACE59 é composta da seguintes seções:

*

*            1 X seção "A"

*           11 X seção "B"

*            1 X seção "C"

*            6 X seção "D"

*            1 X seção "E"

*

*          O documento tem estrutura fixa e as seções que se repetem

*         ("B" e "D") devem ser inseridas mesmo que em branco.

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

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

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

* --> p_header           Dados do cabeçalho do report

*     p_t_items          Tabela de itens do report

*     p_t_sub_items      Tabela de sub-itens do report

*     p_rep_param        Parâmetros específicos por report

*     p_t_matrix         Matriz de campos do report

*     p_t_report_fields  Campos disponíveis no programa

* <-- p_t_excel_content  Conteúdo do report para o Excel

*     p_t_sect_height    Tabela de altura das seções do report

* <-> <nenhum>

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

* Chamado     Data            Descrição

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

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

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

FORM create_excel_content_table

     USING

        p_header          TYPE any

        p_rep_param       TYPE /pws/zycrt013

        p_t_matrix        TYPE t_matrix

        p_t_report_fields TYPE t_rep_fields

     CHANGING

        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: has_remaining_space TYPE abap_bool.

 

  DATA: current_item         TYPE i VALUE 1,

        total_items          TYPE i,

        remaining_item_space TYPE f.

 

  DATA: section_height        TYPE f,

        filled_section_height TYPE f.

 

  DATA: subrc TYPE sy-subrc.

 

  DATA: it_section_content LIKE p_t_excel_content[].

  DATA: it_iteanexo        LIKE p_t_excel_content[] WITH HEADER LINE.

 

  DATA: itab_exel_temp TYPE t_excel_content,

        wa_exel_temp   LIKE LINE OF itab_exel_temp[].

 

*Variáveis

  DATA: v_linetot   TYPE f,  "Linhas em pontos total da folha no Excel

        v_linecab   TYPE f,  "Linhas em pontos do cabeçalho

        v_linhacab  TYPE i,  "Linhas do cabeçalho

        v_linhacab2 TYPE i,  "Linhas do cabeçalho

        v_linhacab3 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_linharod  TYPE i,  "Linhas do rodapé

        v_linhancm  TYPE i.  "Linha do total de ncm

 

 

  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

             'CAPA (1)'

             p_t_sect_height[]

          CHANGING

             v_linhacab.

 

  PERFORM get_section_rows

          USING

             'CAPA (2)'

             p_t_sect_height[]

          CHANGING

             v_linhacab2.

 

  PERFORM get_section_rows

          USING

             'CAPA (3)'

             p_t_sect_height[]

          CHANGING

             v_linhacab3.

 

 

  PERFORM append_new_section

          USING

             'CAPA (1)'

             current_row

          CHANGING

             p_t_excel_content[].

 

  PERFORM fill_header_fields

          USING

             wa_cabecalho

             'CAPA (1)'

             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

             'CAPA (2)'

             current_row

          CHANGING

             p_t_excel_content[].

 

  PERFORM fill_header_fields

          USING

             wa_cabecalho

             'CAPA (2)'

             current_row

             p_t_matrix[]

             p_t_report_fields[]

          CHANGING

             p_t_excel_content[].

 

  ADD v_linhacab2 TO current_row.

 

  PERFORM append_new_section

          USING

             'CAPA (3)'

             current_row

          CHANGING

             p_t_excel_content[].

 

  PERFORM fill_header_fields

          USING

             wa_cabecalho

             'CAPA (3)'

             current_row

             p_t_matrix[]

             p_t_report_fields[]

          CHANGING

             p_t_excel_content[].

 

  ADD v_linhacab3 TO current_row.

 

 

  PERFORM add_page_break

          USING

             current_row

          CHANGING

             p_t_excel_content[].

 

 

ENDFORM.                    " create_excel_content_table

 

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

Modificações efetuadas em TABL /PWS/ZYCIT476

 

MODIFICAR TABELA TRANSPARENTE: /PWS/ZYCIT476

DESCRIÇÃO BREVE: CI - Controle de anexos do RUD

 

CARACTERÍSTICAS

 

CATEGORIA DA TABELA: Tabela transparente

CLASSE DE ENTREGA:  (A) Tabela de aplicação (dados mestre e de movimento)

(_) - AUTUALIZAÇÃO DE TABELAS PERMITIDA

 

CAMPOS NOVOS

 

CAMPOS:         TP. CAMPO      CH: INI: TAB.VERIF.:    TAB.REF.:     CPO.RE

MANDT           MANDT          X   X

NRSEQD          /PWS/ZYCIL436  X   X

TIPO            CHARX1         X   X

ANEXO           NUMC3

 

OPÇÕES TÉCNICAS

 

TIPO DE DADOS: APPL0

CATEGOR. TAMANHO: 4

 

(X) - AR. BUFFER NÃO PERMITIDO

(_) - AR. BUFFER PERMITIDO, MAS DESATIVADO

(_) - AR. BUFFER ATIVADO

(_) - RGSTS. IND ARMAZENADOS

(_) - ÁREA GEN ARMAZENADA EM BUFFER   Nº DE CPOS CHAVE: ______

(_) - TOTALMENTE ARMAZENADO

(_) - REGISTRAR MODIFICS. DDS. EM LOG.