CE PLUS - Nota 008764

Módulo: DRAWBACK

Funcionalidade: Relatórios

Data/Hora da Publicação: 30/07/2009 00:00:00

Data/Hora Última Alteração: 17/02/2011 15:37:55

Descrição da Nota: DESENVOLVIMENTO DO ADITIVO AO ATO CONCESSÓRIO (EXCEL).

Sintoma

Desenvolvimento do aditivo ao ato concessório (Excel).

 

 

Solução

Desenvolvimento do aditivo ao ato concessório (Excel).

Ajustado programa do ato concessório para gravar corretamente os registros de vencimento vigente na

tabela /pws/zycit277.

 

Versões Tratadas

7.0


Pré-Requisitos

Produto:

Nota

Descrição

AJUSTE INSUMO ALTERNATIVO, CENTROS DA COMPOSIÇÃO E DATAS DO ATO

IMPRESSÃO LADO A LADO DOS FORMULÁRIOS DO DRAWBACK (EXCEL)

ANEXO PEDIDO DE DRAWBACK(IMPORTAÇÃO) NÃO ESTA EXIBINDO TODOS OS ITENS

Informações Complementares

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

Nota Número 08764 Data: 30/07/2009 Hora: 15:42:56

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

 

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

Nota Número              : 08764

Categoria                : Melhoria

Prioridade               : Média

Versão PW.CE             : 7.0

Pacote                   : 00010

Agrupamento              : 00107

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

Referência às notas relacionadas:

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

 

02619  - 00001 - 6.0    - 00025  - AJUSTE INSUMO ALTERNATIVO, CENTROS DA COMPOSIÇÃO E DATAS DO ATO

08625  - 00002 - 7.0    - 00010  - ANEXO PEDIDO DE DRAWBACK(IMPORTAÇÃO) NÃO ESTA EXIBINDO TODOS OS I

08738  - 00003 - 7.0    - 00010  - IMPRESSÃO LADO A LADO DOS FORMULÁRIOS DO DRAWBACK (EXCEL)

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

DESENVOLVIMENTO DO ADITIVO AO ATO CONCESSÓRIO (EXCEL).

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

Palavras Chave:

ADITIVO - ATO - CONCESSÓRIO - REPORT - EXCEL

/PWS/SAPMZYCI040 - /PWS/ZYCRR038

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

Objetos da nota:

REPS /PWS/MZYCI040F02

REPS /PWS/MZYCI040I01

REPS /PWS/MZYCI040O01

REPS /PWS/ZYCRR038

REPT /PWS/SAPMZYCI040

TABD /PWS/ZYCIT277

TRAN /PWS/ZYCRR038

 

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

Modificações efetuadas em REPS /PWS/MZYCI040F02

 

...

    /pws/zycie244-aditivo = v_aditivo.

  ENDIF.

  IF v_tcode2 EQ '/PWS/ZYCI040_A'.

    DELETE FROM /pws/zycit279

         WHERE nrseqd = /pws/zycie244-nrseqd.           "#EC CI_NOFIRST

  ENDIF.

  MODIFY /pws/zycit279 FROM TABLE itab_zycit279_ap.

  IF NOT itab_zycit279_ap_s[] IS INITIAL.

    MODIFY /pws/zycit279 FROM TABLE itab_zycit279_ap_s.

  ENDIF.

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

  REFRESH itab_vencto2_save.

  SELECT * FROM /pws/zycit277 INTO TABLE itab_vencto2_save

      WHERE nrseqd EQ /pws/zycie244-nrseqd.

  LOOP AT itab_vencto2_save INTO itab_vencto2

                  WHERE aditivo EQ 'X'.

    MODIFY itab_vencto2 TRANSPORTING aditivo

                        WHERE vencto EQ itab_vencto2-vencto.

  ENDLOOP.

* << Fim da inclusão

  MODIFY /pws/zycit277 FROM TABLE itab_vencto2.

  IF NOT /pws/zycie244-nrforecast IS INITIAL.

    UPDATE /pws/zycit238 SET atocon   = /pws/zycie244-nrseqd

                        data_ac  = /pws/zycie244-dtato

                    WHERE nrseqd = /pws/zycie244-nrforecast.

  ENDIF.

  IF NOT /pws/zycie244-nrcompos IS INITIAL.

    UPDATE /pws/zycit258 SET atocon   = /pws/zycie244-nrseqd

                        data_ac  = /pws/zycie244-dtato

                    WHERE nrseqd = /pws/zycie244-nrcompos.

...

 

...

      DELETE FROM /pws/zycit244 WHERE nrseqd = /pws/zycie244-nrseqd.

      DELETE FROM /pws/zycit245 WHERE nrseqd = /pws/zycie244-nrseqd.

      DELETE FROM /pws/zycit246 WHERE nrseqd = /pws/zycie244-nrseqd.

      DELETE FROM /pws/zycit247 WHERE nrseqd = /pws/zycie244-nrseqd.

      DELETE FROM /pws/zycit248 WHERE nrseqd = /pws/zycie244-nrseqd.

      DELETE FROM /pws/zycit243 WHERE nrseqd = /pws/zycie244-nrseqd.

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

      DELETE FROM /pws/zycit277 WHERE nrseqd = /pws/zycie244-nrseqd.

* << Fim da inclusão

      IF NOT /pws/zycie244-nrforecast IS INITIAL.

        UPDATE /pws/zycit238 SET atocon   = space

                            data_ac  = v_dtato

                        WHERE nrseqd = /pws/zycie244-nrforecast.

      ENDIF.

      IF NOT /pws/zycie244-nrcompos IS INITIAL.

        UPDATE /pws/zycit258 SET atocon   = space

                            data_ac  = v_dtato

                        WHERE nrseqd = /pws/zycie244-nrcompos.

      ENDIF.

...

 

...

FORM trata_button_btn3.

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

  DESCRIBE TABLE itab_vencto2 LINES v_ilinhas.

* << Fim da inclusão

  CALL SCREEN '0221' STARTING AT 33 5.

  DESCRIBE TABLE itab_vencto2 LINES v_ilinhas.

  READ TABLE itab_vencto2 INDEX v_ilinhas.

  IF sy-subrc EQ 0.

    MOVE itab_vencto2-vencto TO /pws/zycie244-vcto_vg.

  ELSE.

    CLEAR /pws/zycie244-vcto_vg.

  ENDIF.

ENDFORM.

...

 

 

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

Modificações efetuadas em REPS /PWS/MZYCI040I01

 

...

MODULE modify_itab_vencto2 INPUT.

* >> Início da inclusão: MODULE MODIFY_ITAB_VENCTO2

  IF /pws/zycie277-vencto < /pws/zycie244-vcto_vg AND

     NOT /pws/zycie244-vcto_vg IS INITIAL.

    MESSAGE e015 WITH text-357 text-358.

  ENDIF.

* << Fim da inclusão

  READ TABLE itab_vencto2 INDEX tc_venctos2-current_line.

  IF sy-subrc EQ 0.

    IF NOT itab_vencto2-vencto IS INITIAL AND

       NOT /pws/zycie277-vencto     IS INITIAL.

      itab_vencto2-nrseqd = /pws/zycie244-nrseqd.

      itab_vencto2-vencto = /pws/zycie277-vencto.

      MODIFY itab_vencto2 INDEX tc_venctos2-current_line.

    ELSE.

      DELETE itab_vencto2 INDEX tc_venctos2-current_line.

    ENDIF.

...

 

 

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

Modificações efetuadas em REPS /PWS/MZYCI040O01

 

...

      IF wa_zycbt007 IS INITIAL.

        SELECT SINGLE * FROM /pws/zycbt007 INTO wa_zycbt007

        WHERE bukrs = /pws/zycie244-bukrs .

      ENDIF.

    ENDIF.

  ENDIF.

  IF /pws/zycie244-vcto_vg    IS INITIAL AND

     NOT /pws/zycie244-dtatoc IS INITIAL AND

     /pws/zycie244-status NE 'A'         AND

     /pws/zycie244-status NE 'I'.

* >> Início da exclusão: MODULE STATUS_0200

    /pws/zycie244-vcto_vg = /pws/zycie244-dtatoc + 365.

    itab_vencto2-vencto = /pws/zycie244-vcto_fn.

* << Fim da exclusão

* >> Início da inclusão: MODULE STATUS_0200

    /pws/zycie244-vcto_vg = /pws/zycie244-dtatoc.

    ADD 1 TO /pws/zycie244-vcto_vg(4).

    itab_vencto2-vencto = /pws/zycie244-vcto_vg.

    itab_vencto2-nrseqd = /pws/zycie244-nrseqd.

* << Fim da inclusão

    APPEND itab_vencto2.

  ENDIF.

  PERFORM status_custom.

  PERFORM move_dados_iniciais2.

  PERFORM gera_numero_seq2.

  PERFORM set_page2.

  PERFORM trata_botoes2.

  PERFORM carrega_icone2.

  PERFORM carrega_tree_edit2.

  SET PF-STATUS 'ST0200' EXCLUDING itab_botoes2.

...

 

...

MODULE refresh_itab_vencto2 OUTPUT.

* >> Início da inclusão: MODULE REFRESH_ITAB_VENCTO2

  IF tc_venctos2-current_line <= v_ilinhas.

    LOOP AT SCREEN.

      screen-input = 0.

      MODIFY SCREEN.

    ENDLOOP.

  ENDIF.

* << Fim da inclusão

  /pws/zycie277-vencto = itab_vencto2-vencto.

  tc_venctos2-lines = tc_venctos2-lines + 10.

ENDMODULE.

...

 

 

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

Modificações efetuadas em REPS /PWS/ZYCRR038

 

* >> Início da inclusão:

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

INCLUDE: /pws/zycri004,

         /pws/zycri003,

         /pws/zycri002.

TABLES: tcurx.

TYPES: BEGIN OF s_relat.

INCLUDE TYPE /pws/zycit244 AS zycit244.

TYPES: empresa      TYPE t001-bukrs,

       desc_emp     TYPE t001-butxt,

       local_neg    TYPE t001w-j_1bbranch,

       ender(110)   TYPE c,

       cgc(19)      TYPE c               ,

       ntgew        TYPE /pws/zycit245-ntgew,

       gewei        TYPE /pws/zycit245-gewei,

       peso(30)     TYPE c,

       peso_e(30)   TYPE c,

       qtd(50)      TYPE c,

       qtd_e(50)    TYPE c,

       txvlimp(130) TYPE c,

       txvlexp(130) TYPE c,

       vltot        TYPE /pws/zycit245-netpr_t,

       vltot_e      TYPE /pws/zycit245-netpr_t,

       moeda        TYPE /pws/zycit245-waers  ,

       qtdncm(50)   TYPE c,

       qtdncm_e(50) TYPE c,

       anexo        TYPE /pws/zycit474-anexo,

       qtd_tot(50)  TYPE c,

       peso_tot     TYPE /pws/zycit245-ntgewt,

       um_ncm       TYPE /pws/zycit245-um_ncm,

       qtd_totncm(50) TYPE c,

       adl1(60)     TYPE c,

       adl2(60)     TYPE c.

TYPES:  END OF s_relat.

TYPES: BEGIN OF s_itens.

        INCLUDE STRUCTURE /pws/zycit245.

TYPES: valor(30) TYPE c,

       qtd(30) TYPE c,

       qtdncm(30) TYPE c,

       descricao(300) TYPE c,

       END OF s_itens,

       t_itens TYPE STANDARD TABLE OF s_itens.

DATA: itab_itens_i TYPE s_itens OCCURS 0 WITH HEADER LINE.

DATA: BEGIN OF itab_vl_tot OCCURS 0.

DATA: valor TYPE /pws/zycit474-netpr_t,

      moeda TYPE /pws/zycit474-waers.

DATA: END OF itab_vl_tot.

DATA: BEGIN OF itab_pesot OCCURS 0.

DATA: ntgew TYPE /pws/zycit474-ntgew,

      gewei TYPE /pws/zycit474-gewei.

DATA: END OF itab_pesot.

DATA: BEGIN OF itab_qtdt OCCURS 0.

DATA: qtd TYPE /pws/zycit474-qtd,

      meins TYPE /pws/zycit474-meins,

      qtdncm TYPE /pws/zycit474-qtd,

      um_ncm TYPE /pws/zycit474-meins.

DATA: END OF itab_qtdt.

DATA: BEGIN OF itab_qtdt_ncm OCCURS 0.

DATA: qtdncm TYPE /pws/zycit474-qtd,

      um_ncm TYPE /pws/zycit474-meins.

DATA: END OF itab_qtdt_ncm.

DATA: BEGIN OF itab_qtdt_umb OCCURS 0.

DATA: qtd TYPE /pws/zycit474-qtd,

      meins TYPE /pws/zycit474-meins.

DATA: END OF itab_qtdt_umb.

DATA: itab_versao  TYPE /pws/zycit474 OCCURS 0 WITH HEADER LINE,

      itab_versaon TYPE /pws/zycit474 OCCURS 0 WITH HEADER LINE,

      itab_zycit277 TYPE /pws/zycit277 OCCURS 0 WITH HEADER LINE,

      wa_zycit277  TYPE /pws/zycit277,

      itab_totais  TYPE /pws/zycit474 OCCURS 0 WITH HEADER LINE,

      itab_t604n   TYPE t604n         OCCURS 0 WITH HEADER LINE,

      v_aditivo    TYPE /pws/zycit474-aditivo                  .

DATA: BEGIN OF itab_impress OCCURS 0.

        INCLUDE STRUCTURE /pws/zycit474.

DATA: linha_ncm TYPE /pws/zycit474-linha,

      END OF itab_impress.

DATA: BEGIN OF itab_impress2 OCCURS 0.

        INCLUDE STRUCTURE /pws/zycit474.

DATA: linha_ncm TYPE /pws/zycit474-linha,

      END OF itab_impress2.

DATA: BEGIN OF itab_itens OCCURS 3.

DATA: c1(20) TYPE c,

      c2(20) TYPE c,

      c3(20) TYPE c,

      c4(50) TYPE c,

      c5(20) TYPE c,

      c6(20) TYPE c,

      c7(20) TYPE c,

      c8(50) TYPE c,

      vlimp(20) TYPE c,

      vlexp(20) TYPE c,

      l      TYPE i.

DATA: END OF itab_itens .

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

DATA: wa_relat    TYPE s_relat,

      wa_relatp   TYPE s_relat,

      v_filename(20) TYPE c.

DATA: current_row  TYPE i VALUE 1,

      section_rows TYPE i.

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 'ADITIVO'.

DATA: it_generation_options TYPE t_generation_options.

DATA: it_excel_content TYPE t_excel_content,

      it_sect_height   TYPE t_sect_height.

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.

AT SELECTION-SCREEN OUTPUT.

START-OF-SELECTION.

  PERFORM select_data

          USING

             p_nrseqd

          CHANGING

             wa_relat.

  wa_relatp = wa_relat.

  IF wa_relat IS INITIAL.

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

  ENDIF.

  IF itab_impress[] IS INITIAL.

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

    LEAVE PROGRAM.

  ENDIF.

  p_report = 'ANEXOD_I'.

  PERFORM select_parameters

          USING

             p_repmod

             p_report

             'P'

             wa_relat-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  = 'P'.

    msg_bukrs  = wa_relat-bukrs.

    MESSAGE e000.

  ENDIF.

  PERFORM imprim_imp

          USING

             itab_itens_i[]

             wa_rep_param

             it_matrix[]

             it_report_fields[]

          CHANGING

             wa_relat

             it_excel_content[]

             it_sect_height[].

  CLEAR: v_filename.

  CONCATENATE 'AD_A' wa_relat-nrseqd INTO v_filename.

  PERFORM generate_file_name

          USING

             v_filename

             wa_gen_param

             wa_rep_param

          CHANGING

             v_file_name.

  PERFORM download_file

          USING

             wa_rep_param

             v_file_name.

  PERFORM create_report

          USING

             wa_gen_param-report_generator

             v_file_name

             'REPORT'

              ''

             it_excel_content[]

             it_sect_height[]

             it_generation_options[].

  REFRESH: it_excel_content     ,

           it_sect_height       ,

           it_generation_options.

  p_report = 'PEDIDO_D'.

  PERFORM select_parameters

          USING

             p_repmod

             p_report

             'P'

             wa_relat-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  = 'P'.

    msg_bukrs  = wa_relat-bukrs.

    MESSAGE e000.

  ENDIF.

  PERFORM pedido_db

          USING

             wa_rep_param

             it_matrix[]

             it_report_fields[]

          CHANGING

             wa_relatp

             it_excel_content[]

             it_sect_height[].

  CLEAR: v_filename.

  CONCATENATE 'AD_P' wa_relat-nrseqd INTO v_filename.

  PERFORM generate_file_name

          USING

             v_filename

             wa_gen_param

             wa_rep_param

          CHANGING

             v_file_name.

  PERFORM download_file

          USING

             wa_rep_param

             v_file_name.

  PERFORM create_report

          USING

             wa_gen_param-report_generator

             v_file_name

             'REPORT'

              ''

             it_excel_content[]

             it_sect_height[]

             it_generation_options[].

  PERFORM gera_aditivo.

  LEAVE PROGRAM.

END-OF-SELECTION.

FORM select_data

     USING

        p_nrseqd TYPE /pws/zycit244-nrseqd

     CHANGING

        p_cabecalho        TYPE s_relat.

  DATA: v_vltot TYPE /pws/zycit474-netpr_t,

        v_qtd_txt(30) TYPE c,

        v_usado TYPE i,

        v_dec TYPE p DECIMALS 2,

        v_c1 TYPE i,

        v_c2 TYPE i,

        wa_ender TYPE addr1_val,

        v_c3 TYPE i,

        v_c4 TYPE i,

        v_anexo TYPE /pws/zycit474-anexo,

        v_um_ncm TYPE /pws/zycit245-meins,

        v_um_umb TYPE /pws/zycit245-meins.

  DATA: wa_valor_ext TYPE spell.

  SELECT SINGLE bukrs werks nrseqd nratoc dtatoc

      INTO (p_cabecalho-bukrs, p_cabecalho-werks, p_cabecalho-nrseqd,

            p_cabecalho-nratoc, p_cabecalho-dtatoc)

      FROM /pws/zycit244

      WHERE nrseqd = p_nrseqd.

  CHECK sy-subrc = 0.

  SELECT * FROM /pws/zycit474

      INTO TABLE itab_zycit474

      WHERE nrseqd EQ p_nrseqd.

  IF sy-subrc NE 0.

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

    LEAVE PROGRAM.

  ENDIF.

  SORT itab_zycit474 ASCENDING BY anexo pasta linha ncm nritem aditivo

                       DESCENDING aditivo.

  DELETE ADJACENT DUPLICATES FROM itab_zycit474

                      COMPARING anexo pasta linha ncm nritem waers.

  SELECT * FROM /pws/zycit277

      INTO TABLE itab_zycit277

      WHERE nrseqd EQ p_nrseqd.

  IF sy-subrc EQ 0.

    SORT itab_zycit277 DESCENDING BY vencto.

    READ TABLE itab_zycit277 INDEX 1 INTO wa_zycit277.

    IF wa_zycit277-aditivo EQ 'X'.

      REFRESH itab_zycit277.

    ELSE.

      DELETE itab_zycit277 INDEX 1.

      LOOP AT itab_zycit277.

        IF itab_zycit277-aditivo EQ 'X'.

          EXIT.

        ENDIF.

      ENDLOOP.

      REFRESH itab_zycit277.

      APPEND itab_zycit277.

      APPEND wa_zycit277 TO itab_zycit277.

    ENDIF.

  ENDIF.

  itab_versaon[] = itab_versao[] = itab_zycit474[].

  DELETE itab_versaon WHERE pasta EQ 'I'.

  PERFORM monta_ad_i.

  SORT itab_versaon BY anexo pasta linha ncm nritem waers.

  REFRESH itab_zycit474.

  itab_zycit474[] = itab_versao[].

  SORT itab_zycit474 DESCENDING BY aditivo.

  READ TABLE itab_zycit474 INDEX 1.

  v_aditivo = itab_zycit474-aditivo .

  CLEAR itab_versao.

  MODIFY itab_versao TRANSPORTING mandt aditivo

      WHERE mandt NE space.

  IF itab_versao[] NE itab_versaon[].

    PERFORM comapara.

  ELSE.

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

    LEAVE PROGRAM.

  ENDIF.

  SELECT SINGLE bukrs butxt

      INTO (p_cabecalho-empresa, p_cabecalho-desc_emp)

      FROM t001

      WHERE bukrs = p_cabecalho-bukrs.

  SELECT SINGLE j_1bbranch

  FROM t001w

  INTO p_cabecalho-local_neg

  WHERE werks = p_cabecalho-werks.

  CALL FUNCTION 'J_1BREAD_BRANCH_DATA'

       EXPORTING

            branch     = p_cabecalho-local_neg

            bukrs      = p_cabecalho-empresa

       IMPORTING

            address1   = wa_ender

            cgc_number = p_cabecalho-cnpj.

  CONCATENATE wa_ender-street wa_ender-house_num1 wa_ender-house_num2

           wa_ender-house_num3  wa_ender-city2 '-' wa_ender-city1 '-'

             wa_ender-region '%%%%%%%%%' text-007 wa_ender-post_code1

              INTO p_cabecalho-ender SEPARATED BY space.

  TRANSLATE p_cabecalho-ender USING '% '.

  WRITE p_cabecalho-cnpj TO p_cabecalho-cgc

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

  IF NOT itab_zycit277[] IS INITIAL AND

     itab_impress[] IS INITIAL.

    PERFORM gera_aditivo.

    LEAVE PROGRAM.

  ENDIF.

  IF sy-subrc NE 0.

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

    LEAVE PROGRAM.

  ENDIF.

  READ TABLE itab_zycit474 WITH KEY pasta = 'I'.

  IF sy-subrc NE 0.

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

    LEAVE PROGRAM.

  ENDIF.

  READ TABLE itab_zycit474 WITH KEY pasta = 'E'.

  IF sy-subrc NE 0.

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

    LEAVE PROGRAM.

  ENDIF.

  itab_itens-l = v_c1 = v_c2 = v_c3 = v_c4 = 1.

  DO 3 TIMES.

    APPEND itab_itens.

    ADD 1 TO itab_itens-l.

  ENDDO.

  SORT itab_zycit474 BY anexo.

  LOOP AT itab_zycit474 WHERE pasta EQ 'I'.

    IF v_anexo <> itab_zycit474-anexo.

      v_anexo = itab_zycit474-anexo.

      SHIFT itab_zycit474-anexo LEFT DELETING LEADING '0'.

      v_usado = strlen( itab_itens-c1 ).

      IF v_usado <= 20.

        IF v_usado EQ 0.

          itab_itens-c1 = itab_zycit474-anexo.

        ELSE.

          CONCATENATE itab_itens-c1 ',' itab_zycit474-anexo INTO

                      itab_itens-c1.

        ENDIF.

        MODIFY itab_itens TRANSPORTING c1

                WHERE l EQ v_c1.

      ELSE.

        ADD 1 TO v_c1.

        CLEAR: v_usado, itab_itens-c1.

      ENDIF.

      v_usado = strlen( itab_itens-c2 ).

      IF v_usado <= 20.

        IF v_usado EQ 0.

          itab_itens-c2 = itab_zycit474-anexo.

        ELSE.

          CONCATENATE itab_itens-c2 ',' itab_zycit474-anexo INTO

                      itab_itens-c2.

        ENDIF.

        MODIFY itab_itens TRANSPORTING c2

                WHERE l EQ v_c2.

      ELSE.

        ADD 1 TO v_c2.

        CLEAR: v_usado, itab_itens-c2.

      ENDIF.

      v_usado = strlen( itab_itens-c3 ).

      IF v_usado <= 20.

        IF v_usado EQ 0.

          itab_itens-c3 = itab_zycit474-anexo.

        ELSE.

          CONCATENATE itab_itens-c3 ',' itab_zycit474-anexo INTO

                      itab_itens-c3.

        ENDIF.

        MODIFY itab_itens TRANSPORTING c3

                WHERE l EQ v_c3.

      ELSE.

        ADD 1 TO v_c3.

        CLEAR: v_usado, itab_itens-c3.

      ENDIF.

      v_usado = strlen( itab_itens-c4 ).

      IF v_usado <= 48.

        IF v_usado EQ 0.

          itab_itens-c4 = itab_zycit474-anexo.

        ELSE.

          CONCATENATE itab_itens-c4 ',' itab_zycit474-anexo INTO

                      itab_itens-c4.

        ENDIF.

        MODIFY itab_itens TRANSPORTING c4

                WHERE l EQ v_c4.

      ELSE.

        ADD 1 TO v_c4.

        CLEAR: v_usado, itab_itens-c4.

      ENDIF.

    ENDIF.

    itab_vl_tot-valor =  itab_zycit474-netpr_t.

    itab_vl_tot-moeda = itab_zycit474-waers.

    COLLECT itab_vl_tot.

    itab_pesot-ntgew = itab_zycit474-ntgew.

    itab_pesot-gewei = itab_zycit474-gewei.

    COLLECT itab_pesot.

    itab_qtdt-qtdncm = itab_zycit474-qtd.

    itab_qtdt-um_ncm = itab_zycit474-meins.

    itab_qtdt-qtd = itab_zycit474-qtd_umb.

    itab_qtdt-meins = itab_zycit474-um_umb.

    COLLECT itab_qtdt.

    CLEAR: v_vltot.

    PERFORM retorna_decimais USING itab_zycit474-waers

                        CHANGING itab_zycit474-netpr_t.

    PERFORM converter_moeda USING itab_zycit474-netpr_t

                               itab_zycit474-waers

                               'USD'

                               sy-datlo

                      CHANGING v_vltot.

    p_cabecalho-vltot =  p_cabecalho-vltot + v_vltot.

  ENDLOOP.

  READ TABLE itab_pesot INDEX 1.

  WRITE itab_pesot-ntgew TO p_cabecalho-peso

                UNIT itab_pesot-gewei.

  SHIFT p_cabecalho-peso LEFT DELETING LEADING space.

  v_c1 = 1.

  CLEAR: itab_itens.

  APPEND itab_itens.

  DO 4 TIMES.

    READ TABLE itab_vl_tot INDEX v_c1.

    IF sy-subrc NE 0 .

      EXIT.

    ENDIF.

    READ TABLE itab_itens INDEX v_c1.

    WRITE itab_vl_tot-valor TO itab_itens-vlimp

                    CURRENCY itab_vl_tot-moeda.

    SHIFT itab_itens-vlimp BY 3 PLACES.

    CONCATENATE itab_vl_tot-moeda itab_itens-vlimp INTO

                       itab_itens-vlimp SEPARATED BY space.

    MODIFY itab_itens INDEX v_c1.

    ADD 1 TO v_c1.

  ENDDO.

  p_cabecalho-moeda = 'USD'.

  WRITE p_cabecalho-vltot TO p_cabecalho-txvlimp

  CURRENCY p_cabecalho-moeda.

  SHIFT p_cabecalho-txvlimp LEFT DELETING LEADING space.

  TRANSLATE p_cabecalho-txvlimp USING '. '.

  CONDENSE p_cabecalho-txvlimp NO-GAPS.

  CALL FUNCTION 'SPELL_AMOUNT'

   EXPORTING

     amount          = p_cabecalho-txvlimp

     currency        = 'USD'

     language        = 'P'

 IMPORTING

     in_words        = wa_valor_ext

            .

  IF sy-subrc <> 0.

  ENDIF.

  v_dec = frac( p_cabecalho-vltot ).

  IF v_dec IS INITIAL.

    CONCATENATE wa_valor_ext-word text-004

                      INTO p_cabecalho-txvlimp SEPARATED BY space.

  ELSE.

   CONCATENATE wa_valor_ext-word text-004 text-006 wa_valor_ext-decword

                                                               text-005

                            INTO p_cabecalho-txvlimp SEPARATED BY space.

  ENDIF.

  LOOP AT itab_qtdt.

    itab_qtdt_umb-qtd   =  itab_qtdt-qtd   .

    itab_qtdt_umb-meins =  itab_qtdt-meins .

    COLLECT itab_qtdt_umb.

    itab_qtdt_ncm-qtdncm = itab_qtdt-qtdncm.

    itab_qtdt_ncm-um_ncm = itab_qtdt-um_ncm.

    COLLECT itab_qtdt_ncm.

  ENDLOOP.

  LOOP AT itab_qtdt_umb.

    CLEAR: v_qtd_txt, v_um_umb.

    CALL FUNCTION 'CONVERSION_EXIT_CUNIT_OUTPUT'

         EXPORTING

              input    = itab_qtdt_umb-meins

              language = 'P'

         IMPORTING

              output   = v_um_umb.

    WRITE itab_qtdt_umb-qtd TO v_qtd_txt UNIT itab_qtdt_umb-meins.

    SHIFT v_qtd_txt LEFT DELETING LEADING space.

    CONCATENATE p_cabecalho-qtd v_qtd_txt v_um_umb '||' INTO

                p_cabecalho-qtd.

  ENDLOOP.

  LOOP AT itab_qtdt_ncm.

    CLEAR: v_qtd_txt, v_um_ncm.

    CALL FUNCTION 'CONVERSION_EXIT_CUNIT_OUTPUT'

         EXPORTING

              input    = itab_qtdt_ncm-um_ncm

              language = 'P'

         IMPORTING

              output   = v_um_ncm.

    WRITE itab_qtdt_ncm-qtdncm TO v_qtd_txt UNIT itab_qtdt_ncm-um_ncm.

    SHIFT v_qtd_txt LEFT DELETING LEADING space.

    CONCATENATE p_cabecalho-qtdncm v_qtd_txt v_um_ncm '||'

    INTO p_cabecalho-qtdncm.

  ENDLOOP.

  TRANSLATE p_cabecalho-qtd USING '| '.

  TRANSLATE p_cabecalho-qtdncm USING '| '.

  v_c1 = v_c2 = v_c3 = v_c4 = 1.

  CLEAR: p_cabecalho-vltot_e, itab_itens.

  REFRESH: itab_vl_tot, itab_qtdt, itab_qtdt_ncm, itab_qtdt_umb,

           itab_pesot.

  LOOP AT itab_zycit474 WHERE pasta EQ 'E'.

    IF v_anexo <> itab_zycit474-anexo.

      v_anexo = itab_zycit474-anexo.

      SHIFT itab_zycit474-anexo LEFT DELETING LEADING '0'.

      v_usado = strlen( itab_itens-c5 ).

      IF v_usado <= 20.

        IF v_usado EQ 0.

          itab_itens-c5 = itab_zycit474-anexo.

        ELSE.

          CONCATENATE itab_itens-c5 ',' itab_zycit474-anexo INTO

                      itab_itens-c5.

        ENDIF.

        MODIFY itab_itens TRANSPORTING c5

                WHERE l EQ v_c1.

      ELSE.

        ADD 1 TO v_c1.

        CLEAR: v_usado, itab_itens-c5.

      ENDIF.

      v_usado = strlen( itab_itens-c6 ).

      IF v_usado <= 20.

        IF v_usado EQ 0.

          itab_itens-c6 = itab_zycit474-anexo.

        ELSE.

          CONCATENATE itab_itens-c6 ',' itab_zycit474-anexo INTO

                      itab_itens-c6.

        ENDIF.

        MODIFY itab_itens TRANSPORTING c6

                WHERE l EQ v_c2.

      ELSE.

        ADD 1 TO v_c2.

        CLEAR: v_usado, itab_itens-c6.

      ENDIF.

      v_usado = strlen( itab_itens-c7 ).

      IF v_usado <= 20.

        IF v_usado EQ 0.

          itab_itens-c7 = itab_zycit474-anexo.

        ELSE.

          CONCATENATE itab_itens-c7 ',' itab_zycit474-anexo INTO

                      itab_itens-c7.

        ENDIF.

        MODIFY itab_itens TRANSPORTING c7

                WHERE l EQ v_c3.

      ELSE.

        ADD 1 TO v_c3.

        CLEAR: v_usado, itab_itens-c7.

      ENDIF.

      v_usado = strlen( itab_itens-c8 ).

      IF v_usado <= 48.

        IF v_usado EQ 0.

          itab_itens-c8 = itab_zycit474-anexo.

        ELSE.

          CONCATENATE itab_itens-c8 ',' itab_zycit474-anexo INTO

                      itab_itens-c8.

        ENDIF.

        MODIFY itab_itens TRANSPORTING c8

                WHERE l EQ v_c4.

      ELSE.

        ADD 1 TO v_c4.

        CLEAR: v_usado, itab_itens-c8.

      ENDIF.

    ENDIF.

    itab_vl_tot-valor =  itab_zycit474-netpr_t.

    itab_vl_tot-moeda = itab_zycit474-waers.

    COLLECT itab_vl_tot.

    itab_pesot-ntgew = itab_zycit474-ntgew.

    itab_pesot-gewei = itab_zycit474-gewei.

    COLLECT itab_pesot.

    itab_qtdt-qtd = itab_zycit474-qtd_umb.

    itab_qtdt-meins = itab_zycit474-um_umb.

    itab_qtdt-qtdncm = itab_zycit474-qtd.

    itab_qtdt-um_ncm = itab_zycit474-meins.

    COLLECT itab_qtdt.

    CLEAR: v_vltot.

    PERFORM retorna_decimais USING itab_zycit474-waers

                       CHANGING itab_zycit474-netpr_t.

    PERFORM converter_moeda USING itab_zycit474-netpr_t

                               itab_zycit474-waers

                               'USD'

                               sy-datlo

                      CHANGING v_vltot.

    p_cabecalho-vltot_e =  p_cabecalho-vltot_e + v_vltot.

  ENDLOOP.

  READ TABLE itab_pesot INDEX 1.

  WRITE itab_pesot-ntgew TO p_cabecalho-peso_e

                UNIT itab_pesot-gewei.

  SHIFT p_cabecalho-peso_e LEFT DELETING LEADING space.

  v_c1 = 1.

  DO 4 TIMES.

    READ TABLE itab_vl_tot INDEX v_c1.

    IF sy-subrc NE 0 .

      EXIT.

    ENDIF.

    READ TABLE itab_itens INDEX v_c1.

    WRITE itab_vl_tot-valor TO itab_itens-vlexp

                    CURRENCY itab_vl_tot-moeda.

    SHIFT itab_itens-vlexp BY 3 PLACES.

    CONCATENATE itab_vl_tot-moeda itab_itens-vlexp INTO

                     itab_itens-vlexp SEPARATED BY space.

    MODIFY itab_itens INDEX v_c1.

    ADD 1 TO v_c1.

  ENDDO.

  p_cabecalho-moeda = 'USD'.

  WRITE p_cabecalho-vltot_e TO p_cabecalho-txvlexp

  CURRENCY p_cabecalho-moeda.

  SHIFT p_cabecalho-txvlexp LEFT DELETING LEADING space.

  TRANSLATE p_cabecalho-txvlexp USING '. '.

  CONDENSE p_cabecalho-txvlexp NO-GAPS.

  CALL FUNCTION 'SPELL_AMOUNT'

   EXPORTING

     amount          = p_cabecalho-txvlexp

     currency        = 'USD'

     language        = 'P'

   IMPORTING

     in_words        = wa_valor_ext

            .

  IF sy-subrc <> 0.

  ENDIF.

  v_dec = frac( p_cabecalho-vltot_e ).

  IF v_dec IS INITIAL.

    CONCATENATE wa_valor_ext-word text-004

                      INTO p_cabecalho-txvlexp SEPARATED BY space.

  ELSE.

   CONCATENATE wa_valor_ext-word text-004 text-006 wa_valor_ext-decword

                                                               text-005

                            INTO p_cabecalho-txvlexp SEPARATED BY space.

  ENDIF.

  LOOP AT itab_qtdt.

    itab_qtdt_umb-qtd   =  itab_qtdt-qtd   .

    itab_qtdt_umb-meins =  itab_qtdt-meins .

    COLLECT itab_qtdt_umb.

    itab_qtdt_ncm-qtdncm = itab_qtdt-qtdncm.

    itab_qtdt_ncm-um_ncm = itab_qtdt-um_ncm.

    COLLECT itab_qtdt_ncm.

  ENDLOOP.

  LOOP AT itab_qtdt_umb.

    CLEAR: v_qtd_txt.

    WRITE itab_qtdt_umb-qtd TO v_qtd_txt UNIT itab_qtdt_umb-meins.

    SHIFT v_qtd_txt LEFT DELETING LEADING space.

    CONCATENATE p_cabecalho-qtd_e v_qtd_txt itab_qtdt_umb-meins '||'

    INTO p_cabecalho-qtd_e.

  ENDLOOP.

  LOOP AT itab_qtdt_ncm.

    WRITE itab_qtdt_ncm-qtdncm TO v_qtd_txt UNIT itab_qtdt_ncm-um_ncm.

    SHIFT v_qtd_txt LEFT DELETING LEADING space.

   CONCATENATE p_cabecalho-qtdncm_e v_qtd_txt itab_qtdt_ncm-um_ncm '||'

                                             INTO  p_cabecalho-qtdncm_e.

  ENDLOOP.

  TRANSLATE p_cabecalho-qtd_e USING '| '.

  TRANSLATE p_cabecalho-qtdncm_e USING '| '.

ENDFORM.

FORM pedido_db

     USING

        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_relat

        p_t_excel_content TYPE t_excel_content

        p_t_sect_height   TYPE t_sect_height.

  DATA: current_row  TYPE i VALUE 1.

  DATA: itab_exel_temp TYPE t_excel_content,

        wa_exel_temp   LIKE LINE OF itab_exel_temp[].

  DATA: current_item         TYPE i VALUE 1.

  DATA: filled_section_height TYPE f.

  DATA: subrc TYPE sy-subrc.

  DATA: v_linhav1  TYPE i,

        v_linhav2  TYPE i,

        v_linhav3  TYPE i,

        v_linhav4  TYPE i,

        v_linhav5  TYPE i,

        v_linhapt TYPE i.

  PERFORM select_row_height_cache

      USING

        p_rep_param-spras

        p_rep_param-file_id

      CHANGING

        p_t_sect_height[].

  DELETE itab_itens WHERE c1 EQ space

                      AND c5 EQ space

                      AND vlimp EQ space

                      AND vlexp EQ space.

  PERFORM get_section_rows

          USING

             'VIA 1'

             p_t_sect_height[]

          CHANGING

             v_linhav1.

  CLEAR: current_item.

  PERFORM append_new_section

          USING

             'VIA 1'

             current_row

          CHANGING

             p_t_excel_content[].

  PERFORM fill_header_fields

          USING

             p_header

             'VIA 1'

             current_row

             p_t_matrix[]

             p_t_report_fields[]

          CHANGING

             p_t_excel_content[].

  CLEAR: current_item.

  DO 3 TIMES.

    ADD 1 TO current_item.

    PERFORM fill_items_fields

            USING

              itab_itens[]

               'VIA 1'

               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.

  ENDDO.

  current_row = v_linhav1 + 1.

  PERFORM add_page_break

          USING

             current_row

          CHANGING

             p_t_excel_content[].

ENDFORM.

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.

    IF sy-subrc NE 0.

      CLEAR v_paravlme.

    ENDIF.

    p_paravlme = v_paravlme.

  ENDIF.

ENDFORM.

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.

FORM monta_ad_i.

  DATA: itab_zycit245 TYPE /pws/zycit245 OCCURS 0 WITH HEADER LINE,

        v_ntgew TYPE /pws/zycit474-ntgew,

        v_subrc TYPE sy-subrc.

  DATA: wa_itens TYPE s_itens.

  DATA: v_um_ncm TYPE /pws/zycit245-meins,

        v_um_umb TYPE /pws/zycit245-meins.

  DATA: wa_itens2 TYPE s_itens.

  SELECT * FROM /pws/zycit245 INTO TABLE itab_zycit245

        WHERE nrseqd EQ p_nrseqd.

  IF NOT itab_zycit245[] IS INITIAL.

    SELECT * FROM t604n INTO TABLE itab_t604n

    FOR ALL ENTRIES IN itab_zycit245

                 WHERE spras = 'P'

                   AND land1 = 'BR'

                   AND steuc = itab_zycit245-j_1bnbm.

  ENDIF.

  SORT itab_zycit245 BY j_1bnbm nritem.

  REFRESH itab_zycit474.

  LOOP AT itab_zycit245.

    wa_itens = itab_zycit245.

    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 wa_itens-netpr_t.

    wa_itens-waers = 'USD'.

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

    IF NOT wa_itens-gewei EQ 'KG'.

      v_ntgew = wa_itens-ntgew.

      PERFORM convert_units USING v_ntgew

                                  wa_itens-gewei

                                  'KG'

                         CHANGING wa_itens-ntgew

                                  v_subrc.

      wa_itens-gewei =

      itab_zycit474-gewei = 'KG'.

    ENDIF.

    itab_zycit474-ntgew = wa_itens-ntgew.

    MOVE: wa_itens-nrseqd  TO itab_zycit474-nrseqd  ,

          wa_itens-grupo   TO itab_zycit474-grupo   ,

          wa_itens-codcomp TO itab_zycit474-matnr   ,

          wa_itens-j_1bnbm TO itab_zycit474-ncm     ,

          wa_itens-nritem  TO itab_zycit474-nritem  ,

          wa_itens-um_ncm  TO itab_zycit474-meins   ,

          wa_itens-qtd_ncm TO itab_zycit474-qtd     ,

          wa_itens-meins   TO itab_zycit474-um_umb  ,

          wa_itens-qtd_tot TO itab_zycit474-qtd_umb ,

          wa_itens-waers   TO itab_zycit474-waers   ,

          wa_itens-netpr_t TO itab_zycit474-netpr_t ,

          wa_itens-gewei   TO itab_zycit474-gewei   .

    READ TABLE itab_versao

            WITH KEY nritem = itab_zycit474-nritem.

    itab_zycit474-linha = itab_versao-linha.

    itab_zycit474-pasta = 'I'.

    itab_zycit474-anexo = itab_versao-anexo.

    itab_zycit474-tipo = 'I'.

    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.

    CLEAR: v_um_ncm, v_um_umb.

    CALL FUNCTION 'CONVERSION_EXIT_CUNIT_OUTPUT'

         EXPORTING

              input    = wa_itens-um_ncm

              language = 'P'

         IMPORTING

              output   = v_um_ncm.

    CALL FUNCTION 'CONVERSION_EXIT_CUNIT_OUTPUT'

         EXPORTING

              input    = wa_itens-meins

              language = 'P'

         IMPORTING

              output   = v_um_umb.

    WRITE wa_itens-qtd_ncm TO wa_itens-qtdncm

          UNIT wa_itens-um_ncm.

    SHIFT wa_itens-qtdncm BY 3 PLACES.

    CONCATENATE v_um_ncm wa_itens-qtdncm INTO wa_itens-qtdncm.

    WRITE wa_itens-qtd_tot TO wa_itens-qtd

          UNIT wa_itens-meins.

    SHIFT wa_itens-qtd BY 3 PLACES.

    CONCATENATE v_um_umb wa_itens-qtd INTO wa_itens-qtd.

    READ TABLE itab_t604n WITH KEY steuc = wa_itens-j_1bnbm.

    wa_itens-maktx = itab_t604n-text1.

    CONCATENATE itab_t604n-text1 itab_t604n-text2 itab_t604n-text3

    itab_t604n-text4 itab_t604n-text5 INTO wa_itens-descricao.

    IF wa_itens-j_1bnbm EQ wa_itens2-j_1bnbm .

      wa_itens2-netpr_t = wa_itens-netpr_t + wa_itens2-netpr_t.

      wa_itens2-qtd_tot = wa_itens-qtd_tot + wa_itens2-qtd_tot.

      wa_itens2-ntgew = wa_itens-ntgew + wa_itens2-ntgew.

      wa_itens2-ntgewt = wa_itens-ntgewt + wa_itens2-ntgewt.

    ELSE.

      CLEAR: v_um_ncm, v_um_umb.

      CALL FUNCTION 'CONVERSION_EXIT_CUNIT_OUTPUT'

           EXPORTING

                input    = wa_itens2-meins

                language = 'P'

           IMPORTING

                output   = v_um_umb.

      CALL FUNCTION 'CONVERSION_EXIT_CUNIT_OUTPUT'

           EXPORTING

                input    = wa_itens2-um_ncm

                language = 'P'

           IMPORTING

                output   = v_um_ncm.

      IF NOT wa_itens2-qtd_ncm IS INITIAL.

        WRITE wa_itens2-netpr_t TO wa_itens2-valor

              CURRENCY wa_itens2-waers.

        SHIFT wa_itens2-valor BY 3 PLACES.

        CONCATENATE wa_itens2-waers wa_itens2-valor

                                  INTO wa_itens2-valor.

        WRITE wa_itens2-qtd_tot TO wa_itens2-qtd

              UNIT wa_itens2-meins.

        SHIFT wa_itens2-qtd BY 3 PLACES.

        CONCATENATE v_um_umb wa_itens2-qtd

                                  INTO wa_itens2-qtd.

        CONCATENATE text-008 wa_itens2-j_1bnbm

                              INTO wa_itens2-maktx.

        CONCATENATE text-008 wa_itens2-j_1bnbm

                              INTO wa_itens2-descricao.

        wa_itens2-desc_g = wa_itens2-maktx.

        CLEAR: wa_itens2-j_1bnbm.

        APPEND wa_itens2 TO itab_itens_i.

      ENDIF.

      wa_itens2-j_1bnbm = wa_itens-j_1bnbm.

      wa_itens2-waers   = wa_itens-waers  .

      wa_itens2-um_ncm  = wa_itens-um_ncm .

      wa_itens2-netpr_t = wa_itens-netpr_t.

      wa_itens2-qtd_ncm = wa_itens-qtd_ncm.

      wa_itens2-ntgew   = wa_itens-ntgew  .

      wa_itens2-ntgewt  = wa_itens-ntgewt .

      wa_itens2-meins   = wa_itens-meins  .

      wa_itens2-qtd_tot   = wa_itens-qtd_tot  .

    ENDIF.

    APPEND wa_itens TO itab_itens_i.

    APPEND itab_zycit474 TO itab_versaon.

  ENDLOOP.

  IF NOT wa_itens2-qtd_ncm IS INITIAL.

    CLEAR: v_um_ncm, v_um_umb.

    CALL FUNCTION 'CONVERSION_EXIT_CUNIT_OUTPUT'

         EXPORTING

              input    = wa_itens2-meins

              language = 'P'

         IMPORTING

              output   = v_um_umb.

    CALL FUNCTION 'CONVERSION_EXIT_CUNIT_OUTPUT'

         EXPORTING

              input    = wa_itens2-um_ncm

              language = 'P'

         IMPORTING

              output   = v_um_ncm.

    WRITE wa_itens2-netpr_t TO wa_itens2-valor

          CURRENCY wa_itens2-waers.

    SHIFT wa_itens2-valor BY 3 PLACES.

    CONCATENATE wa_itens2-waers wa_itens2-valor

                              INTO wa_itens2-valor.

    WRITE wa_itens2-qtd_tot TO wa_itens2-qtd

          UNIT wa_itens2-meins.

    SHIFT wa_itens2-qtd BY 3 PLACES.

    CONCATENATE v_um_umb wa_itens2-qtd

                          INTO wa_itens2-qtd.

    CONCATENATE text-008 wa_itens2-j_1bnbm

                          INTO wa_itens2-maktx.

    CONCATENATE text-008 wa_itens2-j_1bnbm

                          INTO wa_itens2-descricao.

    wa_itens2-desc_g = wa_itens2-maktx.

    wa_itens2-gewei = wa_itens-gewei.

    CLEAR: wa_itens2-j_1bnbm.

    APPEND wa_itens2 TO itab_itens_i.

  ENDIF.

ENDFORM.

FORM comapara.

  DATA: wa_zycit474  TYPE /pws/zycit474.

  DATA BEGIN OF wa_zycit474n.

          INCLUDE STRUCTURE /pws/zycit474 .

  DATA: linha_ncm TYPE /pws/zycit474-linha,

  END OF wa_zycit474n.

  DATA: v_tanexo  TYPE /pws/zycit474-netpr_t,

        v_tanexo2 TYPE /pws/zycit474-netpr_t,

        v_anexo  TYPE /pws/zycit474-anexo.

  .

  REFRESH itab_zycit474.

  itab_zycit474[] = itab_versaon[].

  ADD 1 TO v_aditivo .

  READ TABLE itab_versao INDEX 1.

  v_anexo =  itab_versao-anexo.

  LOOP AT itab_versao WHERE pasta EQ 'I'.

    READ TABLE itab_versaon INDEX sy-tabix.

    IF v_anexo NE itab_versao-anexo.

      IF v_tanexo NE v_tanexo2.

        CLEAR: itab_impress, itab_impress2.

        itab_impress-anexo = itab_impress2-anexo = v_anexo.

        itab_impress-netpr_t = v_tanexo.

        itab_impress2-netpr_t = v_tanexo2.

        APPEND: itab_impress, itab_impress2.

      ENDIF.

      v_anexo = itab_versao-anexo.

      CLEAR: v_tanexo, v_tanexo2.

    ENDIF.

    ADD itab_versaon-netpr_t TO v_tanexo.

    ADD itab_versao-netpr_t TO v_tanexo2.

    ADD 1 TO wa_zycit474n-linha_ncm.

    IF itab_versaon-ncm NE wa_zycit474-ncm.

      CLEAR: wa_zycit474n-nritem, wa_zycit474-nritem.

      APPEND wa_zycit474n TO itab_totais.

      IF wa_zycit474-netpr_t NE wa_zycit474n-netpr_t.

        APPEND wa_zycit474n TO itab_impress.

        APPEND wa_zycit474  TO itab_impress2.

      ENDIF.

      CLEAR: wa_zycit474n.

      wa_zycit474 = itab_versao.

      wa_zycit474n = itab_versaon.

      ADD 1 TO wa_zycit474n-linha_ncm.

    ELSE.

      wa_zycit474-netpr_t =

                    wa_zycit474-netpr_t + itab_versao-netpr_t.

      wa_zycit474n-netpr_t =

                    wa_zycit474n-netpr_t + itab_versaon-netpr_t.

    ENDIF.

    IF itab_versao-netpr_t NE itab_versaon-netpr_t.

      itab_impress = itab_versaon.

      itab_impress-linha_ncm = wa_zycit474n-linha_ncm.

      itab_impress-aditivo = v_aditivo.

      APPEND itab_impress.

      itab_impress2 = itab_versao.

      itab_impress2-linha_ncm = wa_zycit474n-linha_ncm.

      APPEND itab_impress2.

    ENDIF.

    wa_zycit474-anexo = wa_zycit474n-anexo = itab_versaon-anexo.

    itab_totais = itab_versaon.

    APPEND itab_totais.

  ENDLOOP.

  CLEAR: wa_zycit474n-nritem, wa_zycit474-nritem.

  APPEND wa_zycit474n TO itab_totais.

  IF wa_zycit474-netpr_t NE wa_zycit474n-netpr_t.

    APPEND wa_zycit474n TO itab_impress.

    APPEND wa_zycit474  TO itab_impress2.

  ENDIF.

  IF v_tanexo NE v_tanexo2.

    CLEAR: itab_impress, itab_impress2.

    itab_impress-anexo = itab_impress2-anexo = v_anexo.

    itab_impress-netpr_t = v_tanexo.

    itab_impress2-netpr_t = v_tanexo2.

    APPEND: itab_impress, itab_impress2.

  ENDIF.

ENDFORM.

FORM imprim_imp

     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_relat

        p_t_excel_content TYPE t_excel_content

        p_t_sect_height   TYPE t_sect_height.

  DATA: v_barra TYPE c.

  DATA: BEGIN OF itab_qtd OCCURS 0.

  DATA: qtd  TYPE /pws/zycit245-qtd_ncm,

        unit TYPE /pws/zycit245-um_ncm ,

        qtdncm TYPE /pws/zycit245-qtd_ncm,

        unncm  TYPE /pws/zycit245-um_ncm.

  DATA: END OF itab_qtd.

  DATA: BEGIN OF itab_qtd_umb OCCURS 0.

  DATA: qtd    TYPE /pws/zycit245-qtd_ncm,

        unit   TYPE /pws/zycit245-um_ncm .

  DATA: END OF itab_qtd_umb.

  DATA: BEGIN OF itab_qtd_ncm OCCURS 0.

  DATA: qtdncm TYPE /pws/zycit245-qtd_ncm,

        unncm  TYPE /pws/zycit245-um_ncm.

  DATA: END OF itab_qtd_ncm.

  DATA: current_item         TYPE i VALUE 1,

        v_linha              TYPE i.

  DATA: filled_section_height TYPE f.

  DATA: subrc TYPE sy-subrc.

  DATA: v_linhacab  TYPE i,

        v_linhaite  TYPE i,

        v_linhasub  TYPE i,

        v_completo  TYPE c.

  DATA: wa_itens TYPE s_itens.

  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.

  CLEAR: current_item, v_completo, p_header-anexo.

  LOOP AT  itab_impress.

    CHECK p_header-anexo NE itab_impress-anexo.

    p_header-anexo = itab_impress-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.

    REFRESH: itab_qtd, itab_qtd_umb, itab_qtd_ncm.

    LOOP AT itab_totais WHERE anexo EQ itab_impress-anexo.

      IF itab_totais-nritem IS INITIAL.

        ADD 1 TO current_item.

      ELSE.

        READ TABLE itab_itens_i WITH KEY nritem = itab_totais-nritem.

        current_item = sy-tabix.

      ENDIF.

      CLEAR wa_itens.

      READ TABLE p_t_items INTO wa_itens INDEX current_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.

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

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

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

      IF NOT wa_itens-j_1bnbm IS INITIAL.

        itab_qtd-qtd = wa_itens-qtd_tot   .

        itab_qtd-unit = wa_itens-meins    .

        itab_qtd-qtdncm = wa_itens-qtd_ncm.

        itab_qtd-unncm = wa_itens-um_ncm  .

        COLLECT itab_qtd.

        ADD wa_itens-ntgewt TO p_header-peso_tot.

        ADD wa_itens-netpr_t TO p_header-vltot.

      ENDIF.

      CLEAR: p_header-qtd_tot, v_barra.

    ENDLOOP.

    LOOP AT itab_qtd.

      itab_qtd_umb-qtd  = itab_qtd-qtd.

      itab_qtd_umb-unit = itab_qtd-unit.

      COLLECT itab_qtd_umb.

      itab_qtd_ncm-qtdncm = itab_qtd-qtdncm.

      itab_qtd_ncm-unncm  = itab_qtd-unncm.

      COLLECT itab_qtd_ncm.

    ENDLOOP.

    LOOP AT itab_qtd_umb.

      CLEAR: wa_itens.

      WRITE itab_qtd_umb-qtd TO wa_itens-qtd

            UNIT itab_qtd_umb-unit LEFT-JUSTIFIED.

      CALL FUNCTION 'CONVERSION_EXIT_CUNIT_OUTPUT'

           EXPORTING

                input    = itab_qtd_umb-unit

                language = 'P'

           IMPORTING

                output   = itab_qtd_umb-unit.

      CONCATENATE p_header-qtd_tot v_barra wa_itens-qtd

            '|' itab_qtd_umb-unit INTO p_header-qtd_tot .

      v_barra = '/'.

    ENDLOOP.

    CLEAR: p_header-qtd_totncm, v_barra.

    LOOP AT itab_qtd_ncm.

      CLEAR: wa_itens.

      WRITE itab_qtd_ncm-qtdncm TO wa_itens-qtdncm

            UNIT itab_qtd_ncm-unncm LEFT-JUSTIFIED.

      CALL FUNCTION 'CONVERSION_EXIT_CUNIT_OUTPUT'

           EXPORTING

                input    = itab_qtd_ncm-unncm

                language = 'P'

           IMPORTING

                output   = itab_qtd_ncm-unncm.

      CONCATENATE p_header-qtd_totncm v_barra wa_itens-qtdncm

            '|' itab_qtd_ncm-unncm INTO p_header-qtd_totncm .

      v_barra = '/'.

    ENDLOOP.

    TRANSLATE p_header-qtd_totncm USING '| '.

    TRANSLATE p_header-qtd_tot    USING '| '.

    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[].

  ENDLOOP.

ENDFORM.

FORM aditivo_db

     USING

        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_relat

        p_t_excel_content TYPE t_excel_content

        p_t_sect_height   TYPE t_sect_height.

  DATA: current_item         TYPE i VALUE 1,

        v_linha              TYPE i,

        current_rowm         TYPE i VALUE 1,

        v_lines              TYPE i.

  DATA: filled_section_height TYPE f.

  DATA: subrc TYPE sy-subrc.

  DATA: v_aditivo  TYPE i,

        v_protocolo  TYPE i,

        v_posicao  TYPE i.

  DATA: BEGIN OF itab_aditivo OCCURS 0,

      de(100)   TYPE c,

      para(100) TYPE c,

      dev(30)   TYPE c,

      parav(30) TYPE c,

      linha(2)  TYPE c,

      item(2)   TYPE c,

      anexo(3)  TYPE c,

      END OF itab_aditivo.

  DATA: v_anexos(20) TYPE c,

        v_anexo(3) TYPE c,

        v_virgula(2) TYPE c,

        v_it10 TYPE c,

        v_it13 TYPE c,

        v_laditivo  TYPE i,

        v_amount(300) TYPE c,

        v_amount2(300) TYPE c,

        v_dec TYPE p DECIMALS 2,

        v_vltot TYPE /pws/zycit474-netpr_t,

        v_vltot2 TYPE /pws/zycit474-netpr_t,

        wa_valor_ext TYPE spell,

        wa_valor_ext2 TYPE spell,

        itab_tline TYPE tline OCCURS 0 WITH HEADER LINE,

        itab_tline2 TYPE tline OCCURS 0 WITH HEADER LINE.

  REFRESH itab_zycit474.

  LOOP AT itab_impress.

    CLEAR: itab_aditivo.

    WRITE itab_impress-anexo TO itab_aditivo-anexo NO-ZERO.

    CONDENSE itab_aditivo-anexo NO-GAPS.

    WRITE itab_impress-linha_ncm TO itab_aditivo-linha NO-ZERO.

    CONDENSE itab_aditivo-linha NO-GAPS.

    READ TABLE itab_impress2 INDEX sy-tabix.

    IF itab_impress-ncm IS INITIAL.

      itab_aditivo-item = '13'.

      CONCATENATE text-013

                  '_'

                  itab_aditivo-anexo

                  ':'

             INTO itab_aditivo-de.

      TRANSLATE itab_aditivo-de USING '_ '.

      itab_aditivo-para = itab_aditivo-de.

      WRITE itab_impress2-netpr_t TO itab_aditivo-dev

            CURRENCY itab_impress2-waers

                LEFT-JUSTIFIED.

      WRITE itab_impress-netpr_t TO itab_aditivo-parav

            CURRENCY itab_impress-waers

                LEFT-JUSTIFIED.

    ELSE.

      itab_aditivo-item = '10'.

      CONCATENATE text-010

                  '_'

                  itab_aditivo-anexo

                  ':'

             INTO itab_aditivo-de.

      IF itab_impress-nritem IS INITIAL.

        CONCATENATE itab_aditivo-de

                    text-017

                    itab_impress2-ncm

               INTO itab_aditivo-de SEPARATED BY space.

        WRITE itab_impress2-netpr_t TO itab_aditivo-dev

              CURRENCY itab_impress2-waers

                  LEFT-JUSTIFIED.

        WRITE itab_impress-netpr_t TO itab_aditivo-parav

              CURRENCY itab_impress-waers

                  LEFT-JUSTIFIED.

      ELSE.

        itab_zycit474 = itab_impress.

        APPEND itab_zycit474.

        CONCATENATE itab_aditivo-de

                    text-011

                    itab_aditivo-linha

                    text-012

                    itab_impress2-ncm

               INTO itab_aditivo-de SEPARATED BY space.

      ENDIF.

      TRANSLATE itab_aditivo-de USING '_ '.

      itab_aditivo-para = itab_aditivo-de.

      WRITE itab_impress2-netpr_t TO itab_aditivo-dev

            CURRENCY itab_impress2-waers

                LEFT-JUSTIFIED.

      CONCATENATE itab_impress2-waers itab_aditivo-dev

                 INTO itab_aditivo-dev SEPARATED BY space.

      WRITE itab_impress-netpr_t TO itab_aditivo-parav

            CURRENCY itab_impress-waers

                LEFT-JUSTIFIED.

      CONCATENATE itab_impress-waers itab_aditivo-parav

               INTO itab_aditivo-parav SEPARATED BY space.

    ENDIF.

    APPEND itab_aditivo.

  ENDLOOP.

  IF NOT itab_impress[] IS INITIAL.

    CLEAR: v_vltot, itab_aditivo.

    LOOP AT itab_versao WHERE pasta EQ 'I'.

      ADD itab_versao-netpr_t TO v_vltot.

    ENDLOOP.

    CALL FUNCTION 'SPELL_AMOUNT'

     EXPORTING

       amount          = v_vltot

       currency        = 'USD'

       language        = 'P'

   IMPORTING

       in_words        = wa_valor_ext

   EXCEPTIONS

     not_found       = 1

     too_large       = 2

     OTHERS          = 3

              .

    IF sy-subrc <> 0.

      CLEAR: wa_valor_ext, v_vltot.

    ENDIF.

    v_dec = frac( v_vltot ).

    IF v_dec IS INITIAL.

      CONCATENATE text-016 wa_valor_ext-word text-004

                        INTO v_amount SEPARATED BY space.

    ELSE.

      CONCATENATE text-016 wa_valor_ext-word text-004 text-006

                                 wa_valor_ext-decword text-005

                                  INTO v_amount SEPARATED BY space.

    ENDIF.

    CLEAR v_vltot2.

    LOOP AT itab_versaon WHERE pasta EQ 'I'.

      ADD itab_versaon-netpr_t TO v_vltot2.

    ENDLOOP.

    CALL FUNCTION 'SPELL_AMOUNT'

     EXPORTING

       amount          = v_vltot2

       currency        = 'USD'

       language        = 'P'

   IMPORTING

       in_words        = wa_valor_ext2

   EXCEPTIONS

     not_found       = 1

     too_large       = 2

     OTHERS          = 3

              .

    IF sy-subrc <> 0.

      CLEAR: wa_valor_ext2, v_vltot2.

    ENDIF.

    CLEAR itab_aditivo.

    itab_aditivo-item = '12'.

    WRITE v_vltot TO itab_aditivo-dev

          CURRENCY itab_impress-waers

              LEFT-JUSTIFIED.

    CONCATENATE itab_impress-waers itab_aditivo-dev

               INTO itab_aditivo-dev SEPARATED BY space.

    WRITE v_vltot2 TO itab_aditivo-parav

          CURRENCY itab_impress2-waers

              LEFT-JUSTIFIED.

    CONCATENATE itab_impress2-waers itab_aditivo-parav

             INTO itab_aditivo-parav SEPARATED BY space.

    itab_aditivo-de = itab_aditivo-para = text-014.

    APPEND itab_aditivo.

    CLEAR itab_aditivo.

    itab_aditivo-item = '15'.

    itab_aditivo-de = itab_aditivo-para = text-015.

    WRITE v_vltot TO itab_aditivo-dev

          CURRENCY itab_impress-waers

              LEFT-JUSTIFIED.

    WRITE v_vltot2 TO itab_aditivo-parav

          CURRENCY itab_impress2-waers

              LEFT-JUSTIFIED.

    APPEND itab_aditivo.

    CLEAR itab_aditivo.

    itab_aditivo-item = '16'.

    v_dec = frac( v_vltot ).

    IF v_dec IS INITIAL.

      CONCATENATE text-016 wa_valor_ext2-word text-004

                        INTO v_amount2 SEPARATED BY space.

    ELSE.

      CONCATENATE text-016 wa_valor_ext2-word text-004 text-006

                                 wa_valor_ext2-decword text-005

                                INTO v_amount2 SEPARATED BY space.

    ENDIF.

    CALL FUNCTION 'C14W_STRING_TO_TLINE'

         EXPORTING

              i_string    = v_amount

         TABLES

              e_tline_tab = itab_tline.

    CALL FUNCTION 'C14W_STRING_TO_TLINE'

         EXPORTING

              i_string    = v_amount2

         TABLES

              e_tline_tab = itab_tline2.

    CLEAR v_posicao.

    v_linha = 2.

    DO.

      CLEAR: itab_tline, itab_tline2.

      ADD 1 TO v_posicao.

      READ TABLE itab_tline INDEX v_posicao.

      READ TABLE itab_tline2 INDEX v_posicao.

      IF itab_tline-tdline IS INITIAL AND

      itab_tline2-tdline IS INITIAL.

        EXIT.

      ENDIF.

      itab_aditivo-de = itab_tline-tdline.

      itab_aditivo-para = itab_tline2-tdline.

      APPEND itab_aditivo.

      ADD 1 TO v_linha.

    ENDDO.

  ENDIF.

  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

             'ADITIVO'

             p_t_sect_height[]

          CHANGING

             v_aditivo.

  PERFORM get_section_rows

          USING

             'PROTOCOLO'

             p_t_sect_height[]

          CHANGING

             v_protocolo.

  CLEAR: current_item.

  current_row = 1.

  IF NOT itab_aditivo[] IS INITIAL.

    DESCRIBE TABLE itab_aditivo LINES v_lines.

    DO.

      PERFORM append_new_section

              USING

                 'ADITIVO'

                 current_row

              CHANGING

                 p_t_excel_content[].

      CLEAR: v_anexo, v_anexos, v_it10, v_it13, v_virgula,

             p_header-adl1, p_header-adl2.

      v_laditivo = 12.

      current_rowm = current_row.

      DO 12 TIMES.

        ADD 1 TO current_item.

        READ TABLE itab_aditivo INDEX current_item.

        IF NOT itab_aditivo-anexo IS INITIAL.

          SUBTRACT 1 FROM v_laditivo.

          IF itab_aditivo-item EQ '10'.

            v_it10 = 'X'.

          ELSEIF itab_aditivo-item EQ '13'.

            v_it13 = 'X'.

          ENDIF.

          IF v_anexo NE itab_aditivo-anexo.

            v_anexo = itab_aditivo-anexo.

            CONCATENATE v_anexos v_virgula v_anexo INTO v_anexos.

            v_virgula = ',_'.

          ENDIF.

        ELSEIF v_linha > v_laditivo.

          SUBTRACT 1 FROM current_item.

          EXIT.

        ENDIF.

        PERFORM fill_items_fields

                USING

                  itab_aditivo[]

                   'ADITIVO'

                   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.

        IF  current_item EQ v_lines.

          EXIT.

        ENDIF.

      ENDDO.

      IF NOT v_anexos IS INITIAL.

        CLEAR: v_amount, v_virgula.

        IF v_it10 EQ 'X'.

          v_amount = '10'.

          v_virgula = ',_'.

        ENDIF.

        IF v_it13 EQ 'X'.

          CONCATENATE v_amount v_virgula '13' INTO v_amount.

        ENDIF.

        CONCATENATE text-018 v_amount text-019 v_anexos

                  INTO p_header-adl1 SEPARATED BY space.

        TRANSLATE p_header-adl1 USING '_ '.

        IF  current_item EQ v_lines .

          CONCATENATE text-020 text-021

                    INTO p_header-adl2 SEPARATED BY space.

        ENDIF.

      ELSE.

        CONCATENATE text-018 text-021

                  INTO p_header-adl1 SEPARATED BY space.

      ENDIF.

      current_row = current_rowm.

      PERFORM fill_header_fields

              USING

                 p_header

                 'ADITIVO'

                 current_row

                 p_t_matrix[]

                 p_t_report_fields[]

              CHANGING

                 p_t_excel_content[].

      ADD v_aditivo TO current_row.

      IF  current_item EQ v_lines.

        EXIT.

      ENDIF.

    ENDDO.

  ENDIF.

  IF NOT itab_zycit277[] IS INITIAL.

    PERFORM append_new_section

            USING

               'ADITIVO'

               current_row

            CHANGING

               p_t_excel_content[].

    CLEAR: p_header-adl1, p_header-adl2.

    REFRESH itab_aditivo.

    current_item = 1.

    SORT itab_zycit277 BY vencto.

    READ TABLE itab_zycit277 INDEX 1.

    WRITE itab_zycit277-vencto TO itab_aditivo-de DD/MM/YYYY.

    CONCATENATE text-022 itab_aditivo-de

            INTO itab_aditivo-de SEPARATED BY space.

    READ TABLE itab_zycit277 INDEX 2.

    WRITE itab_zycit277-vencto TO itab_aditivo-para DD/MM/YYYY.

    CONCATENATE text-022 itab_aditivo-para

            INTO itab_aditivo-para SEPARATED BY space.

    APPEND itab_aditivo.

    PERFORM fill_items_fields

            USING

              itab_aditivo[]

               'ADITIVO'

               current_row

               p_t_matrix[]

               p_t_report_fields[]

               p_t_sect_height[]

               current_item

            CHANGING

               filled_section_height

               p_t_excel_content[]

               subrc.

    PERFORM fill_header_fields

            USING

               p_header

               'ADITIVO'

               current_row

               p_t_matrix[]

               p_t_report_fields[]

            CHANGING

               p_t_excel_content[].

    ADD v_aditivo TO current_row.

    UPDATE /pws/zycit277 SET aditivo = 'X'

        WHERE nrseqd EQ p_nrseqd.

  ENDIF.

  PERFORM append_new_section

          USING

             'PROTOCOLO'

             current_row

          CHANGING

             p_t_excel_content[].

  PERFORM fill_header_fields

          USING

             p_header

             'PROTOCOLO'

             current_row

             p_t_matrix[]

             p_t_report_fields[]

          CHANGING

             p_t_excel_content[].

  MODIFY /pws/zycit474 FROM TABLE itab_zycit474.

ENDFORM.

FORM gera_aditivo.

  REFRESH: it_excel_content     ,

           it_sect_height       ,

           it_generation_options.

  p_report = 'ADITIVO'.

  PERFORM select_parameters

          USING

             p_repmod

             p_report

             'P'

             wa_relat-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  = 'P'.

    msg_bukrs  = wa_relat-bukrs.

    MESSAGE e000.

  ENDIF.

  PERFORM aditivo_db

          USING

             wa_rep_param

             it_matrix[]

             it_report_fields[]

          CHANGING

             wa_relat

             it_excel_content[]

             it_sect_height[].

  CLEAR: v_filename.

  CONCATENATE 'AD_' wa_relat-nrseqd INTO v_filename.

  PERFORM generate_file_name

          USING

             v_filename

             wa_gen_param

             wa_rep_param

          CHANGING

             v_file_name.

  PERFORM download_file

          USING

             wa_rep_param

             v_file_name.

  PERFORM create_report

          USING

             wa_gen_param-report_generator

             v_file_name

             'REPORT'

              ''

             it_excel_content[]

             it_sect_height[]

             it_generation_options[].

ENDFORM.

* << Fim da inclusão

 

 

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

Textos de seleção:

 

Nome          Texto

 

P_NRSEQD      Nº Seq. Ato Concessório

 

 

Simbolos de Textos:

 

Simbolo    Texto

 

000

001

002        É necessario gerar todos os anexos!

003        Ato Concessório não existe.

004        DÓLARES DOS ESTADOS UNIDOS

005        CENTAVOS

006        E

007        CEP:

008        Total do NCM:

009        Não há necessidade de gerar novo aditivo.

010        Item 10 anexo

011        linha

012        da NCM

013        Item 13 anexo

014        Item 12 do Pedido de Drawback:

015        Item 15 do Pedido de Drawback:

016        Item 16 do Pedido de Drawback:

017        TOTAL da NCM

018        Alteração dos itens

019        do(s) anexos(s)

020        e itens

021        12, 15 e 16 do Ato Concessório

022        Data de validade do ato concessório:

 

 

 

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

Modificações efetuadas em REPT /PWS/SAPMZYCI040

 

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

Incluído símbolo de texto:

 

Idioma: PT

 

Símbolo: 357

 

Texto: (29 caracteres)

"Data não pode ser inferior ao"

 

Comprimento máximo: 50

 

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

Incluído símbolo de texto:

 

Idioma: PT

 

Símbolo: 358

 

Texto: (20 caracteres)

"Vencimento vingente!"

 

Comprimento máximo: 50

 

 

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

Modificações efetuadas em TABD /PWS/ZYCIT277

 

Nome campo Chv Elem.dados    Tab.verif. N CtDt Comp.

 

MANDT          MANDT                      CLNT     3

NRSEQD         /PWS/ZYCIL435              CHAR    10

VENCTO         DATUM                      DATS     8

* >> Início da inclusão:

ADITIVO        CHAR01                     CHAR     1

* << Fim da inclusão

 

 

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

Modificações efetuadas em TABD /PWS/ZYCIE277

 

Nome campo Elem.dados    Tab.verif. N CtDt Comp.

 

MANDT      MANDT                      CLNT     3

NRSEQD     /PWS/ZYCIL435              CHAR    10

VENCTO     DATUM                      DATS     8

* >> Início da inclusão:

ADITIVO    CHAR01                     CHAR     1

* << Fim da inclusão

 

 

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

Modificações efetuadas em TRAN /PWS/ZYCRR038

 

 

Criar transação:

 

Código de transação:    /PWS/ZYCRR038

Cl.desenvolvimento:     /PWS/ZYCI

Tipo de Transação:      Programa e tela de seleção (transação de report)

Texto da transação:     Formular. aditivo ao Ato Concessório

Programa:               /PWS/ZYCRR038

Tela de seleção:        1000