CE PLUS - Nota 003365

Módulo: DOC. EXPORTAÇÃO

Funcionalidade: CE Reports

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

Data/Hora Última Alteração: 03/03/2010 13:10:15

Descrição da Nota: REPORT EXCEL PARA A EMISSÃO DO DOCUMENTO SAQUE A PRAZO

Sintoma

 

Necessário desenvolver o novo Reports Excel para a emissão do documento FORM A.

 

Solução

 

Desenvolvido relatório CE Report FORM A

Versões Tratadas

6.0

Informações Complementares

 

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

Nota Número 03365 Data: 30/03/2007 Hora: 15:44:12

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

 

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

Nota Número              : 03365

Categoria                : Melhoria

Prioridade               : Alta

Versão PW.CE             : 6.0

Pacote                   : 00026

Agrupamento              : 00156

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

Referência às notas relacionadas:

Número - Ordem - Descrição Breve

 

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

REPORT EXCEL PARA A EMISSÃO DO DOCUMENTO SAQUE A PRAZO

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

Palavras Chave:

RELATÓRIO CE REPORT, SAQUE A PRAZO, EXCEL

 

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

Objetos da nota:

REPS /PWS/ZYCRR017

 

REPT /PWS/ZYCRR017

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

 

Modificações efetuadas em REPS /PWS/ZYCRR017

 

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

* PROCWORK Software

* Produto:   pw.CE

* Módulo:    CR - pw.CE Reports

* Descrição: Report gerador de Saque á Prazo

* Help Desk: (11) 5504-0270

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

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

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

* Chamado      Data         Descrição

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

* 370173       23/03/2007   Codificação inicial

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

 

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

 

* TABELAS TRANSPARENTES -----------------------------------------------*

 

TABLES: sscrfields.

 

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

 

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

         /pws/zycri003, " Interface com o Excel

         /pws/zycri002. " Rotinas comuns

 

 

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

 

* Tipo da estrutura do cabeçalho

TYPES: BEGIN OF s_cabecalho,

         zycet001      TYPE /pws/zycet001,      " Cabeçalho do Embarque

         zycet014      TYPE /pws/zycet014,      " Dados para Documentos

         zycet046      TYPE /pws/zycet046,      " Dados Adic. do Emb.

         zycet047      TYPE /pws/zycet047,      " Número do BL

         j_1bbranch    TYPE j_1bbranch-branch,  " Local negócio

         sy_datlo      TYPE d,                  " Data do dia

         sy_datlo_t(255) TYPE c,                " Dt. do dia por extenso

         dtb_venc      TYPE d,                  " Dt. base vencimento

         dtb_venc_t(255) TYPE c,                " Dt. base vencimento

         dtb_venc_parc TYPE d,                  " Dt. base venc. parcela

         dtb_venc_parc_t(255) TYPE c,           " Dt. base venc por ext.

         nome_paisdest TYPE t005t-landx,        " Descrição: país dest.

         meio_transp   TYPE dd07t-ddtext,       " Descr. tipo transporte

         waers         TYPE waers,              " Moeda

         perc_com(7)   TYPE c,                  " % de comissão

         com_total     TYPE /pws/zycet008-vlme, " Comissão de Agente

         frt_total     TYPE /pws/zycet008-vlme, " Frete

         seg_total     TYPE /pws/zycet008-vlme, " Seguro

         out_total     TYPE /pws/zycet008-vlme, " Outras desp.

         acr_total     TYPE /pws/zycet008-vlme, " Acréscimo

         des_total     TYPE /pws/zycet008-vlme, " Desconto

         fob_total     TYPE /pws/zycet008-vlme, " Preço FOB

         qua_total     TYPE /pws/zycre018-fkimg, "Qua. faturada

         descricao     TYPE /pws/zycre018-arktx, "Descrição

         volum         TYPE volum_15,           " Volume total

         voleh         TYPE voleh,              " Unidade de vol. total

         brgew         TYPE brgew_15,           " Peso bruto total

         gewei         TYPE gewei,              " Un. de Peso líq. total

         user_name_1(132) TYPE c,               " Nome do usuário 1

         user_function_1 TYPE adcp-function,    " Cargo do usuário 1

         user_name_2(132) TYPE c,               " Nome do usuário 2

         user_function_2 TYPE adcp-function,    " Cargo do usuário 2

         cp_zterm      TYPE T052S-zterm,        " Cond. de Pagamento

      vl_tot_vend      TYPE /pws/ZYCET002-VLME_R, "Valor Total Cond.Vend

  vl_tot_vend_txt(255) TYPE c,                  " Valor Total Vend. TXT

         adrc_ag       TYPE adrc,               " End. de Agente

         adrc_rm       TYPE adrc,               " End. de Cli. Reserva

         adrc_cf       TYPE adrc,               " End. de Cliente Final

         adrc_co       TYPE adrc,               " End. de Consignatário

         adrc_pi       TYPE adrc,               " End. de Emiss. Fatura

         adrc_ex       TYPE adrc,               " End. de Exportador

         adrc_im       TYPE adrc,               " End. de Importador

         adrc_i2       TYPE adrc,               " End. de Importador 2

         adrc_i3       TYPE adrc,               " End. de Importador 3

         adrc_no       TYPE adrc,               " End. de Notificador

         adrc_n2       TYPE adrc,               " End. de Notificador 2

         adrc_mr       TYPE adrc,               " End. de Receb. Mercad.

         adrc_rp       TYPE adrc,               " End. de Repres. Pedido

     END OF s_cabecalho.

 

* Tipo da estrutura e tabela dos itens

TYPES: BEGIN OF s_itens,

         tabix        TYPE sy-tabix,            " Ìndice do item

         zycet002     TYPE /pws/zycre018,       " Itens do Embarque

         vl_emb_unit  TYPE /pws/zycet002-vlfob, " Valor Emb. Unitário

         vl_cond_unit TYPE /pws/zycet002-vlfob, " Valor Cond. Unitário

         perc_com(7) TYPE c,

       END OF s_itens,

       t_itens TYPE STANDARD TABLE OF s_itens.

 

*

TYPES: BEGIN OF s_zterm,

        chave         TYPE t052s-zterm, "Chave Cond. de pagamento

        sequencial    TYPE t052s-ratnr, "N. sequecial quota a pagar

        percentagem   TYPE t052s-ratpz, "Percentagem de quota

        condicao      TYPE t052s-ratzt, "Chave Cond. de pagamento

      END OF s_zterm,

       t_zterm TYPE STANDARD TABLE OF s_zterm.

 

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

 

* Cabeçalho e itens

DATA: wa_cabecalho TYPE s_cabecalho,

      it_zterm     TYPE t_zterm,

      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.

 

DATA: it_generation_options TYPE t_generation_options,

      wa_generation_options LIKE LINE OF it_generation_options.

 

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

 

* Critérios de seleção

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

 

PARAMETERS: p_nrseq  TYPE /pws/zycet001-nrseq         OBLIGATORY

                                                      MODIF ID key,

            p_repmod TYPE /pws/zycrt010-report_module OBLIGATORY

                                                      MODIF ID key

                                                      VALUE CHECK,

            p_report TYPE /pws/zycrt010-report_id     OBLIGATORY

                                                      MODIF ID key.

 

SELECTION-SCREEN END OF BLOCK b1.

 

 

* Assinatura 1

SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-001.

 

* Assinatura 1: Usuário SAP

SELECTION-SCREEN BEGIN OF LINE.

 

PARAMETERS r_s1_db RADIOBUTTON GROUP s1 USER-COMMAND radio DEFAULT 'X'.

 

SELECTION-SCREEN COMMENT 4(15) text-003.

 

PARAMETERS p_s1_db TYPE usr02-bname MATCHCODE OBJECT user_comp

                                    MODIF ID s1d

                                    DEFAULT sy-uname.

 

SELECTION-SCREEN END OF LINE.

 

* Assinatura 1: Texto livre

SELECTION-SCREEN BEGIN OF LINE.

 

PARAMETERS r_s1_ft RADIOBUTTON GROUP s1.

 

SELECTION-SCREEN COMMENT 4(15) text-004.

 

PARAMETERS p_s1_ft(132) TYPE c MODIF ID s1f LOWER CASE

                                            VISIBLE LENGTH 35.

PARAMETERS p_f1_ft(132) TYPE c MODIF ID s1f LOWER CASE

                                            VISIBLE LENGTH 15.

 

SELECTION-SCREEN END OF LINE.

 

SELECTION-SCREEN END OF BLOCK b2.

 

 

* Assinatura 2

SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-002.

 

* Assinatura 2: Usuário SAP

SELECTION-SCREEN BEGIN OF LINE.

 

PARAMETERS r_s2_db RADIOBUTTON GROUP s2 DEFAULT 'X' USER-COMMAND radio.

 

SELECTION-SCREEN COMMENT 4(15) text-003.

 

PARAMETERS p_s2_db TYPE usr02-bname MATCHCODE OBJECT user_comp

                                    MODIF ID s2d

                                    DEFAULT sy-uname.

 

SELECTION-SCREEN END OF LINE.

 

* Assinatura 2: Texto livre

SELECTION-SCREEN BEGIN OF LINE.

 

PARAMETERS r_s2_ft RADIOBUTTON GROUP s2.

 

SELECTION-SCREEN COMMENT 4(15) text-004.

 

PARAMETERS p_s2_ft(132) TYPE c MODIF ID s2f LOWER CASE

                                            VISIBLE LENGTH 35.

PARAMETERS p_f2_ft(132) TYPE c MODIF ID s2f LOWER CASE

                                            VISIBLE LENGTH 15.

 

SELECTION-SCREEN END OF LINE.

 

SELECTION-SCREEN END OF BLOCK b3.

 

 

* Padrão de unidades

SELECTION-SCREEN BEGIN OF BLOCK b4 WITH FRAME TITLE text-005.

 

PARAMETERS: p_un_vol TYPE t006-msehi OBLIGATORY DEFAULT 'M3'

                                     MATCHCODE OBJECT h_unit_volume.

 

SELECTION-SCREEN END OF BLOCK b4.

 

* Opções padrão de geração

SELECTION-SCREEN BEGIN OF BLOCK b5 WITH FRAME TITLE text-006.

 

PARAMETERS: p_print       TYPE /pws/zycrl017 AS CHECKBOX,

            p_prev        TYPE /pws/zycrl018 AS CHECKBOX,

            p_email       TYPE /pws/zycrl019 AS CHECKBOX,

            p_noshow      TYPE /pws/zycrl020 AS CHECKBOX,

            p_passwd(132) TYPE c LOWER CASE.

 

SELECTION-SCREEN END OF BLOCK b5.

 

PARAMETERS: p_option TYPE xfeld NO-DISPLAY.

 

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

AT SELECTION-SCREEN.

 

* Ao executar o relatório, alertar opções de assinatura em branco

  IF sscrfields-ucomm = 'ONLI' OR sscrfields-ucomm = 'PRIN'.

 

    IF ( r_s1_ft = 'X' AND p_s1_ft IS INITIAL )

      OR ( r_s1_db = 'X' AND p_s1_db IS INITIAL ).

 

      MESSAGE w030 WITH 'Assinatura/Cargo 1'(001).

 

    ENDIF.

 

    IF ( r_s2_ft = 'X' AND p_s2_ft IS INITIAL )

      OR ( r_s2_db = 'X' AND p_s2_db IS INITIAL ).

 

      MESSAGE w030 WITH 'Assinatura/Cargo 2'(002).

 

    ENDIF.

 

  ENDIF.

 

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

AT SELECTION-SCREEN OUTPUT.

 

  LOOP AT SCREEN.

 

    IF screen-name = 'P_PASSWD'.

 

      screen-invisible = '1'.

 

      MODIFY SCREEN.

 

      EXIT.

 

    ENDIF.

 

  ENDLOOP.

 

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

 

* Fechar os campos não usados no bloco Assinatura 1

  IF r_s1_db = 'X'.

 

    LOOP AT SCREEN.

 

      IF screen-group1 = 'S1F'.

 

        screen-input = '0'.

 

        MODIFY SCREEN.

 

      ENDIF.

 

    ENDLOOP.

 

  ELSE. " r_s1_ft = "X'

 

    LOOP AT SCREEN.

 

      IF screen-group1 = 'S1D'.

 

        screen-input = '0'.

 

        MODIFY SCREEN.

 

      ENDIF.

 

    ENDLOOP.

 

  ENDIF.

 

* Fechar os campos não usados no bloco Assinatura 2

  IF r_s2_db = 'X'.

 

    LOOP AT SCREEN.

 

      IF screen-group1 = 'S2F'.

 

        screen-input = '0'.

 

        MODIFY SCREEN.

 

      ENDIF.

 

    ENDLOOP.

 

  ELSE. " r_s2_ft = "X'

 

    LOOP AT SCREEN.

 

      IF screen-group1 = 'S2D'.

 

        screen-input = '0'.

 

        MODIFY SCREEN.

 

      ENDIF.

 

    ENDLOOP.

 

  ENDIF.

 

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

          CHANGING

             wa_cabecalho

             it_zterm

             it_itens[].

 

  IF wa_cabecalho IS INITIAL

    OR it_itens[] IS INITIAL.

 

    MESSAGE e031. " Dados para o report não encontrados

 

  ENDIF.

 

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

  PERFORM select_parameters

          USING

             p_repmod

             p_report

             sy-langu

             wa_cabecalho-zycet001-bukrs

             wa_cabecalho-zycet001-werks

             wa_cabecalho-j_1bbranch

             wa_cabecalho-zycet001-inco1

             wa_cabecalho-zycet046-zterm

             ''

             ''

             ''

             ''

             ''

             ''

          CHANGING

             wa_gen_param

             wa_rep_param

             it_matrix[]

             it_report_fields[].

 

  IF wa_gen_param IS INITIAL

      OR wa_rep_param IS INITIAL

      OR it_matrix[] IS INITIAL.

 

    msg_module = p_repmod.

    msg_report = p_report.

    msg_langu  = sy-langu.

    msg_bukrs  = wa_cabecalho-zycet001-bukrs.

    msg_werks  = wa_cabecalho-zycet001-werks.

    msg_branch = wa_cabecalho-j_1bbranch.

    msg_inco1  = wa_cabecalho-zycet001-inco1.

    msg_zterm  = wa_cabecalho-zycet046-zterm.

 

    MESSAGE e000. " Não foi encontrada parametrização adequada

 

  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

             wa_cabecalho

             it_zterm

             it_excel_content[]

             it_sect_height[].

 

* Determinação do nome do arquivo do report

  PERFORM generate_file_name

          USING

             wa_cabecalho-zycet001-nrseq

             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.

 

* Trata opções de geração de report: Envio de e-mail

  IF p_email = 'X'.

 

    wa_generation_options-option = xl_email_file_after_generate.

 

    APPEND wa_generation_options TO it_generation_options[].

 

  ENDIF.

 

* Trata opções de geração de report: Pré-visualização de e-mail

  IF p_prev = 'X'.

 

    wa_generation_options-option = xl_prn_prev_after_generate.

 

    APPEND wa_generation_options TO it_generation_options[].

 

  ENDIF.

 

* Trata opções de geração de report: Impressão direta

  IF p_print = 'X'.

 

    wa_generation_options-option = xl_print_after_generate.

 

    APPEND wa_generation_options TO it_generation_options[].

 

  ENDIF.

 

* Trata opções de geração de report: Geração sem exibição

  IF p_noshow = 'X'.

 

    wa_generation_options-option = xl_dont_show_after_generate.

 

    APPEND wa_generation_options TO it_generation_options[].

 

  ENDIF.

 

* Cria o report

  PERFORM create_report

          USING

             wa_gen_param-report_generator

             v_file_name

             c_report_sheet

             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_nrseq       TYPE /pws/zycet001-nrseq

     CHANGING

        p_cabecalho   TYPE s_cabecalho

        p_zterm       TYPE t_zterm

        p_t_itens     TYPE t_itens.

 

  DATA: l_subrc   TYPE sy-subrc,

        l_ntgew   TYPE ntgew_15,

        l_brgew   TYPE brgew_15,

        l_volum   TYPE volum_15,

        it_vtopis TYPE STANDARD TABLE OF vtopis, "# EC NEEDED

        vl_fob    TYPE /pws/zycet002-vlfob,

        vl_des    type /pws/zycet002-vldesconto,

        vl_fre    type /pws/zycet002-vlfrete,

        vl_seg    type /pws/zycet002-vlseguro,

        vl_acr    type /pws/zycet002-vlacrescimo,

        vl_out    type /pws/zycet002-vlod.

 

 

* Preenchimento do cabeçalho.

 

* CABEÇALHO: Cabeçalho do embarque

  SELECT SINGLE *

      INTO p_cabecalho-zycet001

      FROM /pws/zycet001

      WHERE nrseq = p_nrseq.

 

* O seqüencial do embarque será usado até o fim.

  CHECK sy-subrc = 0.

 

* CABEÇALHO: Dados para Documentos

  SELECT SINGLE *

      INTO p_cabecalho-zycet014

      FROM /pws/zycet014

      WHERE nrseq = p_nrseq.

 

* CABEÇALHO: Dados Adicionais do Emb.

  SELECT SINGLE *

      INTO p_cabecalho-zycet046

      FROM /pws/zycet046

      WHERE nrseq = p_nrseq.

 

* CABEÇALHO: Dados Adicionais do Emb.

* Só traz a 1ª linha do seq. de embarque.

  SELECT SINGLE *

      INTO p_cabecalho-zycet047

      FROM /pws/zycet047

      WHERE nrseq = p_nrseq.

 

*CABEÇALHO: Condição de pagamento

*  SELECT COUNT( * )

*      INTO p_cabecalho-cp_zterm

*      FROM T052S

*     WHERE zterm = p_cabecalho-zycet046-zterm.

*

*  IF SY-SUBRC <> 0.

*       p_cabecalho-cp_zterm     = 1.

*  ENDIF.

 

  SELECT zterm ratnr ratpz ratzt

      INTO table p_zterm

      FROM T052S

     WHERE zterm = p_cabecalho-zycet046-zterm.

 

  IF SY-SUBRC <> 0.

       p_cabecalho-cp_zterm     = 1.

  ENDIF.

 

* CABEÇALHO: Local de negócio

  CALL FUNCTION 'J_1B_BRANCH_DETERMINE'

       EXPORTING

            company                  = p_cabecalho-zycet001-bukrs

            plant                    = p_cabecalho-zycet001-werks

       IMPORTING

            branch                   = p_cabecalho-j_1bbranch

*            COMPANY                  =

*            LAND1                    =

*            REGIO                    =

       EXCEPTIONS

            branch_not_found         = 0

            plant_not_found          = 0

            valuation_area_not_found = 0

            company_not_found        = 0

            OTHERS                   = 0.

 

* CABEÇALHO: Data local do usuário

  p_cabecalho-sy_datlo = sy-datlo.

 

  CALL FUNCTION '/PWS/ZYCR_DATA_EXTENSO'

       EXPORTING

            data         = p_cabecalho-sy_datlo

            spras        = sy-langu

       IMPORTING

            data_extenso = p_cabecalho-sy_datlo_t.

 

* CABEÇALHO: Data base de vencimento

*  CASE p_cabecalho-zycet001-modo_venc.

*

*    WHEN 'E'.

*

      p_cabecalho-dtb_venc = p_cabecalho-zycet001-dtemb.

*

*    WHEN 'B'.

*

*      p_cabecalho-dtb_venc = p_cabecalho-zycet047-dtbl.

*

*    WHEN 'V'.

*

*      p_cabecalho-dtb_venc = p_cabecalho-zycet001-dtaverb.

*

*    WHEN 'S'.

*

*      p_cabecalho-dtb_venc = p_cabecalho-zycet001-dtcruze.

*

*  ENDCASE.

 

  IF NOT p_cabecalho-dtb_venc IS INITIAL.

 

    CALL FUNCTION '/PWS/ZYCR_DATA_EXTENSO'

         EXPORTING

              data         = p_cabecalho-dtb_venc

              spras        = sy-langu

         IMPORTING

              data_extenso = p_cabecalho-dtb_venc_t.

 

  ENDIF.

 

* CABEÇALHO: Data base de vencimento da parcela

  CALL FUNCTION 'SD_PRINT_TERMS_OF_PAYMENT'

       EXPORTING

            bldat                        = p_cabecalho-dtb_venc

            terms_of_payment             = p_cabecalho-zycet046-zterm

       IMPORTING

            zfbdt                        = p_cabecalho-dtb_venc_parc

       TABLES

            top_text                     = it_vtopis

       EXCEPTIONS

            terms_of_payment_not_in_t052 = 1

            OTHERS                       = 2.

 

  IF sy-subrc = 0 AND NOT p_cabecalho-dtb_venc_parc IS INITIAL.

 

    CALL FUNCTION '/PWS/ZYCR_DATA_EXTENSO'

         EXPORTING

              data         = p_cabecalho-dtb_venc_parc

              spras        = sy-langu

         IMPORTING

              data_extenso = p_cabecalho-dtb_venc_parc_t.

 

  ENDIF.

 

* CABEÇALHO: Descrição do nome do país destino

  PERFORM get_country_name

          USING

             sy-langu

             p_cabecalho-zycet001-paisdest

          CHANGING

             p_cabecalho-nome_paisdest.

 

* Descrição do Meio de transporte

  PERFORM get_domain_description

          USING

            '/PWS/ZYCID081'

            p_cabecalho-zycet001-viatrans

            sy-langu

          CHANGING

            p_cabecalho-meio_transp

            l_subrc.

 

* Moeda

  SELECT SINGLE waers

        INTO p_cabecalho-waers

        FROM /pws/zycet008

        WHERE nrseq = p_cabecalho-zycet001-nrseq.

 

 

*CABEÇALHO: Gera Valor total de condição de venda por extenso.

PERFORM spell_currency_amount

            USING

               p_cabecalho-vl_tot_vend

               p_cabecalho-waers

            CHANGING

               p_cabecalho-vl_tot_vend_txt.

 

 

* Nomes de usuários

  PERFORM fill_users_names_info

          USING

            r_s1_db

            p_s1_db

            p_s1_ft

            p_f1_ft

            r_s2_db

            p_s2_db

            p_s2_ft

            p_f2_ft

          CHANGING

            p_cabecalho-user_name_1

            p_cabecalho-user_function_1

            p_cabecalho-user_name_2

            p_cabecalho-user_function_2.

 

* Preenchimento dos itens

  DATA: wa_itens LIKE LINE OF p_t_itens[].

 

  FIELD-SYMBOLS: <fs_itens> LIKE LINE OF p_t_itens[].

 

* ITENS: Itens do embarque

  DATA: it_zycet002 TYPE STANDARD TABLE OF /pws/zycre018.

 

  CALL FUNCTION '/PWS/ZYCR_ITENS_EMBARQUE_EXP'

       EXPORTING

            nrseq                 = p_cabecalho-zycet001-nrseq

            inco1                 = p_cabecalho-zycet001-inco1

            tpcalc                = p_cabecalho-zycet001-tpcalc

            inclui_nao_faturados  = 'X'

            inclui_dados_t604     = space

       TABLES

            e_t_itens             = it_zycet002[]

       EXCEPTIONS

            itens_nao_encontrados = 1

            OTHERS                = 2.

 

  IF sy-subrc = 0.

 

    CLEAR wa_itens.

 

    LOOP AT it_zycet002 INTO wa_itens-zycet002.

 

      ADD wa_itens-zycet002-vl_loc_emb        TO p_cabecalho-fob_total.

      ADD wa_itens-zycet002-vlfrete_final     TO p_cabecalho-frt_total.

      ADD wa_itens-zycet002-vlseguro_final    TO p_cabecalho-seg_total.

      ADD wa_itens-zycet002-vlod_final        TO p_cabecalho-out_total.

      ADD wa_itens-zycet002-vldesconto_final  TO p_cabecalho-des_total.

      ADD wa_itens-zycet002-vlacrescimo_final TO p_cabecalho-acr_total.

      ADD wa_itens-zycet002-vlagente_final    TO p_cabecalho-com_total.

      ADD wa_itens-zycet002-fkimg_r           TO p_cabecalho-qua_total.

     ADD wa_itens-zycet002-vlme_r            TO p_cabecalho-vl_tot_vend.

      MOVE wa_itens-zycet002-arktx            TO p_cabecalho-descricao.

 

       APPEND wa_itens TO p_t_itens[].

 

    ENDLOOP.

 

  ENDIF.

 

* Percentual de comissão total

  DATA: l_perc_comissao(3) TYPE p DECIMALS 2.

 

  CATCH SYSTEM-EXCEPTIONS arithmetic_errors = 5.

 

    l_perc_comissao = p_cabecalho-com_total

                    / p_cabecalho-fob_total

                    * 100.

 

  ENDCATCH.

 

  IF sy-subrc = 0.

 

    WRITE l_perc_comissao TO p_cabecalho-perc_com DECIMALS 2

                                                  NO-SIGN

                                                  LEFT-JUSTIFIED.

 

    CONCATENATE p_cabecalho-perc_com '%' INTO p_cabecalho-perc_com.

 

  ELSE.

 

    p_cabecalho-perc_com = '999.99'.

 

  ENDIF.

 

* Endereços

  READ TABLE it_zycet002[] INTO wa_itens-zycet002 INDEX 1.

 

  IF sy-subrc = 0.

 

    PERFORM fill_header_adrc_fields

            USING

               wa_itens-zycet002-vbeln_va

            CHANGING

               p_cabecalho.

 

  ENDIF.

 

* Inicializa dados para totalização de pesos.

  CLEAR p_cabecalho-volum.

  p_cabecalho-voleh = p_un_vol.

 

* ITENS: Índice do item e totais

  LOOP AT p_t_itens[] ASSIGNING <fs_itens>.

 

*   Índice do item

    <fs_itens>-tabix = sy-tabix.

 

*   Valor unitário

    <fs_itens>-vl_emb_unit = <fs_itens>-zycet002-vl_loc_emb

                           / <fs_itens>-zycet002-fkimg_r.

 

    <fs_itens>-vl_cond_unit = <fs_itens>-zycet002-vl_cond_venda

                            / <fs_itens>-zycet002-fkimg_r.

 

*   Volume total

    IF <fs_itens>-zycet002-voleh <> p_cabecalho-voleh.

 

      PERFORM convert_units

              USING

                <fs_itens>-zycet002-volum

                <fs_itens>-zycet002-voleh

                p_cabecalho-voleh

              CHANGING

                l_volum

                l_subrc.

 

      IF l_subrc = 0.

 

        CATCH SYSTEM-EXCEPTIONS arithmetic_errors = 5.

 

          ADD l_volum TO p_cabecalho-volum.

 

        ENDCATCH.

 

      ENDIF.

 

    ELSE.

 

      CATCH SYSTEM-EXCEPTIONS arithmetic_errors = 5.

 

        ADD <fs_itens>-zycet002-volum TO p_cabecalho-volum.

 

      ENDCATCH.

 

    ENDIF.

 

*   Peso bruto total

    IF NOT p_cabecalho-zycet001-gewei IS INITIAL.

 

      p_cabecalho-gewei = p_cabecalho-zycet001-gewei.

 

    ELSE.

 

      p_cabecalho-gewei = 'KG'.

 

    ENDIF.

 

    IF <fs_itens>-zycet002-gewei <> p_cabecalho-gewei.

 

      PERFORM convert_units

              USING

                <fs_itens>-zycet002-brgew_r

                <fs_itens>-zycet002-gewei

                p_cabecalho-gewei

              CHANGING

                l_brgew

                l_subrc.

 

      IF l_subrc = 0.

 

        CATCH SYSTEM-EXCEPTIONS arithmetic_errors = 5.

 

          ADD l_brgew TO p_cabecalho-brgew.

 

        ENDCATCH.

 

      ENDIF.

 

    ELSE.

 

      CATCH SYSTEM-EXCEPTIONS arithmetic_errors = 5.

 

        ADD <fs_itens>-zycet002-brgew_r TO p_cabecalho-brgew.

 

      ENDCATCH.

 

    ENDIF.

 

  ENDLOOP.

 

  UNASSIGN <fs_itens>.

 

ENDFORM.                    " select_data

 

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

* Form create_excel_content_table

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

* Objetivo: Montar o report de fatura

*

*            1ª página:      1 X seção "A"

*            1ª página:      n X seção "B"

*            1ª página:      1 X seção "C"

*            demais páginas: 1 X seção "A"

*            demais páginas: n X seção "B"

*            demais páginas: n X seção "D"

*

*            n = itens

*

*          O documento tem estrutura fixa e a seção "B" deve ser

*          inserida 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_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 INDEX TABLE

        p_rep_param       TYPE /pws/zycrt013

        p_t_matrix        TYPE t_matrix

        p_t_report_fields TYPE t_rep_fields

     CHANGING

        p_header          TYPE s_cabecalho

        p_zterm           LIKE it_zterm

        p_t_excel_content TYPE t_excel_content

        p_t_sect_height   TYPE t_sect_height.

 

  DATA: current_row     TYPE i VALUE 1,

        CURRENT_LINE    TYPE i VALUE 1,

        section_rows_a  TYPE i,

        total_zterm     TYPE i.

 

  DATA: cover_created   TYPE abap_bool VALUE abap_false,

        need_footer     TYPE abap_bool VALUE abap_true.

 

  DATA: has_remaining_space TYPE abap_bool.

 

  DATA: remaining_item_space TYPE f.

 

  DATA: section_height_a      TYPE f,

        section_height_report TYPE f,

        filled_section_height TYPE f.

 

  DATA: subrc TYPE sy-subrc.

 

  DATA: it_section_content LIKE p_t_excel_content[].

 

  DATA: it_vtopis TYPE STANDARD TABLE OF vtopis. "# EC NEEDED

 

* Seleciona as informações sobre as linhas do report

  PERFORM select_row_height_cache

          USING

             p_rep_param-spras

             p_rep_param-file_id

          CHANGING

             p_t_sect_height[].

 

* Obtém a altura da página do report, em pontos

  PERFORM get_section_height

          USING

            c_report_sheet

            p_t_sect_height[]

          CHANGING

            section_height_report.

 

* Obtém a altura da seção "A" do report, em pontos

  PERFORM get_section_height

          USING

            'A'

            p_t_sect_height[]

          CHANGING

            section_height_a.

 

* Obtém a altura da seção "A" do report, em número de linhas

  PERFORM get_section_rows

          USING

            'A'

            p_t_sect_height[]

          CHANGING

            section_rows_a.

 

 DATA: wa_it_vtopis LIKE LINE OF it_vtopis[].

 

 DATA: wa_zterm LIKE LINE OF it_zterm[].

 

* Obtém o total de zterm¿s a processar

 DESCRIBE TABLE p_zterm[] LINES total_zterm.

 IF total_zterm IS INITIAL.

    total_zterm = 1.

 ENDIF.

 

 DIVIDE p_header-vl_tot_vend BY total_zterm.

 

 WHILE CURRENT_LINE <= total_zterm.

 

  READ TABLE it_zterm[] INTO wa_zterm INDEX SY-INDEX.

 

  CALL FUNCTION 'SD_PRINT_TERMS_OF_PAYMENT'

       EXPORTING

            bldat                        = p_header-dtb_venc

            budat                        = p_header-dtb_venc

            cpudt                        = p_header-dtb_venc

            terms_of_payment             = wa_zterm-condicao

       IMPORTING

            zfbdt                        = p_header-dtb_venc_parc

       TABLES

            top_text                     = it_vtopis

       EXCEPTIONS

            terms_of_payment_not_in_t052 = 1

            OTHERS                       = 2.

 

  IF sy-subrc = 0 AND NOT p_header-dtb_venc_parc IS INITIAL.

 

     READ TABLE it_vtopis[] INTO wa_it_vtopis INDEX 1.

 

     IF sy-subrc eq 0.

       MOVE wa_it_vtopis-hdatum TO p_header-dtb_venc_parc.

     ENDIF.

 

    CALL FUNCTION '/PWS/ZYCR_DATA_EXTENSO'

         EXPORTING

              data         = p_header-dtb_venc_parc

              spras        = sy-langu

         IMPORTING

              data_extenso = p_header-dtb_venc_parc_t.

 

  ENDIF.

 

*CABEÇALHO: Gera Valor total de condição de venda por extenso.

PERFORM spell_currency_amount

            USING

               p_header-vl_tot_vend

               p_header-waers

            CHANGING

               p_header-vl_tot_vend_txt.

 

*   Inclui uma seção 'A': Cabeçalho

    PERFORM append_new_section

            USING

               'A'

               current_row

            CHANGING

               p_t_excel_content[].

 

    PERFORM fill_header_fields

            USING

               p_header

               'A'

               current_row

               p_t_matrix[]

               p_t_report_fields[]

            CHANGING

               p_t_excel_content[].

 

    ADD section_rows_a TO current_row.

 

    ADD 1 TO CURRENT_LINE.

 

 ENDWHILE.

 

*   Inclui a quebra de página

    PERFORM add_page_break

            USING

               current_row

            CHANGING

               p_t_excel_content[].

 

ENDFORM.                    " create_excel_content_table

 

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

*       FORM FILL_HEADER_ADRC_FIELDS                                  *

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

*       ........                                                      *

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

*  -->  ENDFORM                                                       *

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

FORM fill_header_adrc_fields

     USING

       p_vbeln  TYPE vbeln

     CHANGING

       p_header TYPE s_cabecalho.

 

  DATA: v_subrc     TYPE sy-subrc,

        v_codigo_r3 TYPE parvw,

        v_adrnr     TYPE adrnr.

 

* Agente

  PERFORM translate_partner_code

          USING

             'AG'

          CHANGING

             v_codigo_r3

             v_subrc.

 

  IF v_subrc = 0.

 

    PERFORM get_partner_address_number

            USING

               p_vbeln

               '000000'

               v_codigo_r3

            CHANGING

               v_adrnr

               v_subrc.

 

    IF v_subrc = 0.

 

      PERFORM get_adrc

              USING

                 v_adrnr

              CHANGING

                 p_header-adrc_ag

                 v_subrc.

 

    ENDIF.

 

  ENDIF.

 

* Cliente da reserva

  PERFORM translate_partner_code

          USING

             'RM'

          CHANGING

             v_codigo_r3

             v_subrc.

 

  IF v_subrc = 0.

 

    PERFORM get_partner_address_number

            USING

               p_vbeln

               '000000'

               v_codigo_r3

            CHANGING

               v_adrnr

               v_subrc.

 

    IF v_subrc = 0.

 

      PERFORM get_adrc

              USING

                 v_adrnr

              CHANGING

                 p_header-adrc_rm

                 v_subrc.

 

    ENDIF.

 

  ENDIF.

 

* Cliente final

  PERFORM translate_partner_code

          USING

             'CF'

          CHANGING

             v_codigo_r3

             v_subrc.

 

  IF v_subrc = 0.

 

    PERFORM get_partner_address_number

            USING

               p_vbeln

               '000000'

               v_codigo_r3

            CHANGING

               v_adrnr

               v_subrc.

 

    IF v_subrc = 0.

 

      PERFORM get_adrc

              USING

                 v_adrnr

              CHANGING

                 p_header-adrc_cf

                 v_subrc.

 

    ENDIF.

 

  ENDIF.

 

* Consignatário

  PERFORM translate_partner_code

          USING

             'CO'

          CHANGING

             v_codigo_r3

             v_subrc.

 

  IF v_subrc = 0.

 

    PERFORM get_partner_address_number

            USING

               p_vbeln

               '000000'

               v_codigo_r3

            CHANGING

               v_adrnr

               v_subrc.

 

    IF v_subrc = 0.

 

      PERFORM get_adrc

              USING

                 v_adrnr

              CHANGING

                 p_header-adrc_co

                 v_subrc.

 

    ENDIF.

 

  ENDIF.

 

* Emissor da Fatura

  PERFORM translate_partner_code

          USING

             'PI'

          CHANGING

             v_codigo_r3

             v_subrc.

 

  IF v_subrc = 0.

 

    PERFORM get_partner_address_number

            USING

               p_vbeln

               '000000'

               v_codigo_r3

            CHANGING

               v_adrnr

               v_subrc.

 

    IF v_subrc = 0.

 

      PERFORM get_adrc

              USING

                 v_adrnr

              CHANGING

                 p_header-adrc_pi

                 v_subrc.

 

    ENDIF.

 

  ENDIF.

 

* Exportador

  CLEAR v_adrnr.

 

  IF NOT p_header-zycet001-werks IS INITIAL.

 

    SELECT SINGLE adrnr

        INTO v_adrnr

        FROM t001w

        WHERE werks = p_header-zycet001-werks.

 

  ELSE.

 

    SELECT SINGLE adrnr

        INTO v_adrnr

        FROM t001

        WHERE bukrs = p_header-zycet001-bukrs.

 

  ENDIF.

 

  IF NOT v_adrnr IS INITIAL.

 

    PERFORM get_adrc

            USING

               v_adrnr

            CHANGING

               p_header-adrc_ex

               v_subrc.

 

  ENDIF.

 

 

* Importador

  PERFORM translate_partner_code

          USING

             'IM'

          CHANGING

             v_codigo_r3

             v_subrc.

 

  IF v_subrc = 0.

 

    PERFORM get_partner_address_number

            USING

               p_vbeln

               '000000'

               v_codigo_r3

            CHANGING

               v_adrnr

               v_subrc.

 

    IF v_subrc = 0.

 

      PERFORM get_adrc

              USING

                 v_adrnr

              CHANGING

                 p_header-adrc_im

                 v_subrc.

 

    ENDIF.

 

  ENDIF.

 

* Importador 2

  PERFORM translate_partner_code

          USING

             'I2'

          CHANGING

             v_codigo_r3

             v_subrc.

 

  IF v_subrc = 0.

 

    PERFORM get_partner_address_number

            USING

               p_vbeln

               '000000'

               v_codigo_r3

            CHANGING

               v_adrnr

               v_subrc.

 

    IF v_subrc = 0.

 

      PERFORM get_adrc

              USING

                 v_adrnr

              CHANGING

                 p_header-adrc_i2

                 v_subrc.

 

    ENDIF.

 

  ENDIF.

 

* Importador 3

  PERFORM translate_partner_code

          USING

             'I3'

          CHANGING

             v_codigo_r3

             v_subrc.

 

  IF v_subrc = 0.

 

    PERFORM get_partner_address_number

            USING

               p_vbeln

               '000000'

               v_codigo_r3

            CHANGING

               v_adrnr

               v_subrc.

 

    IF v_subrc = 0.

 

      PERFORM get_adrc

              USING

                 v_adrnr

              CHANGING

                 p_header-adrc_i3

                 v_subrc.

 

    ENDIF.

 

  ENDIF.

 

* Notificador

  PERFORM translate_partner_code

          USING

             'NO'

          CHANGING

             v_codigo_r3

             v_subrc.

 

  IF v_subrc = 0.

 

    PERFORM get_partner_address_number

            USING

               p_vbeln

               '000000'

               v_codigo_r3

            CHANGING

               v_adrnr

               v_subrc.

 

    IF v_subrc = 0.

 

      PERFORM get_adrc

              USING

                 v_adrnr

              CHANGING

                 p_header-adrc_no

                 v_subrc.

 

    ENDIF.

 

  ENDIF.

 

* Notificador 2

  PERFORM translate_partner_code

          USING

             'N2'

          CHANGING

             v_codigo_r3

             v_subrc.

 

  IF v_subrc = 0.

 

    PERFORM get_partner_address_number

            USING

               p_vbeln

               '000000'

               v_codigo_r3

            CHANGING

               v_adrnr

               v_subrc.

 

    IF v_subrc = 0.

 

      PERFORM get_adrc

              USING

                 v_adrnr

              CHANGING

                 p_header-adrc_n2

                 v_subrc.

 

    ENDIF.

 

  ENDIF.

 

* Recebedor da Mercadoria

  PERFORM translate_partner_code

          USING

             'MR'

          CHANGING

             v_codigo_r3

             v_subrc.

 

  IF v_subrc = 0.

 

    PERFORM get_partner_address_number

            USING

               p_vbeln

               '000000'

               v_codigo_r3

            CHANGING

               v_adrnr

               v_subrc.

 

    IF v_subrc = 0.

 

      PERFORM get_adrc

              USING

                 v_adrnr

              CHANGING

                 p_header-adrc_mr

                 v_subrc.

 

    ENDIF.

 

  ENDIF.

 

* Representante do Pedido

  PERFORM translate_partner_code

          USING

             'RP'

          CHANGING

             v_codigo_r3

             v_subrc.

 

  IF v_subrc = 0.

 

    PERFORM get_partner_address_number

            USING

               p_vbeln

               '000000'

               v_codigo_r3

            CHANGING

               v_adrnr

               v_subrc.

 

    IF v_subrc = 0.

 

      PERFORM get_adrc

              USING

                 v_adrnr

              CHANGING

                 p_header-adrc_rp

                 v_subrc.

 

    ENDIF.

 

  ENDIF.

 

ENDFORM.                    " fill_header_adrc_fields

 

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

*&      Form  fill_users_names_info

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

*       text

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

*      -->P_R_S1_DB  text

*      -->P_P_S1_DB  text

*      -->P_R_S1_FT  text

*      -->P_P_S1_FT  text

*      -->P_R_S2_DB  text

*      -->P_P_S2_DB  text

*      -->P_R_S2_FT  text

*      -->P_P_S2_FT  text

*      <--P_WA_USERS_NAMES  text

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

FORM fill_users_names_info

     USING

       p_flag_user1_sap  TYPE flag

       p_sap_user1       TYPE sy-uname

       p_text_user_name1 TYPE c

       p_text_user_func1 TYPE c

       p_flag_user2_sap  TYPE flag

       p_sap_user2       TYPE sy-uname

       p_text_user_name2 TYPE c

       p_text_user_func2 TYPE c

     CHANGING

       p_name1           TYPE c

       p_function1       TYPE adcp-function

       p_name2           TYPE c

       p_function2       TYPE adcp-function.

 

  DATA: l_first_name TYPE adrp-name_first,

        l_last_name  TYPE adrp-name_last,

        l_function   TYPE adcp-function.

 

* Usuário 1

  IF p_flag_user1_sap = 'X'.

 

    PERFORM get_sap_user_info

            USING

               p_sap_user1

            CHANGING

               l_first_name

               l_last_name

               l_function.

 

    CONCATENATE l_first_name l_last_name

        INTO p_name1 SEPARATED BY space.

 

    p_function1 = l_function.

 

  ELSE.

 

    p_name1     = p_text_user_name1.

    p_function1 = p_text_user_func1.

 

 

  ENDIF.

 

* Usuário 2

  IF p_flag_user2_sap = 'X'.

 

    PERFORM get_sap_user_info

            USING

               p_sap_user2

            CHANGING

               l_first_name

               l_last_name

               l_function.

 

    CONCATENATE l_first_name l_last_name

        INTO p_name2 SEPARATED BY space.

 

    p_function2 = l_function.

 

  ELSE.

 

    p_name2     = p_text_user_name2.

    p_function2 = p_text_user_func2.

 

  ENDIF.

 

ENDFORM.                    " fill_users_names_info

 

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

Modificações efetuadas em REPT /PWS/ZYCRR017

 

Criados os símbolos de texto, idioma PT

 

Nº  Texto                         Comp. máximo

 

000 Critérios de seleção          30

001 Assinatura/Cargo 1            30

002 Assinatura/Cargo 2            30

003 Usuário SAP                   15

004 Texto livre                   15

005 Unidades                      15

006 Opções de geração do arquivo  30

 

Definidos os textos de seleção

 

Nome      Texto                       Ref. DDIC

 

P_EMAIL                               X

P_NOSHOW                              X

P_NRSEQ                               X

P_PASSWD  Proteger com senha

P_PREV                                X

P_PRINT                               X

P_REPMOD                              X

P_REPORT                              X

P_UN_VOL  Volume total