CE PLUS - Nota 008871

Módulo: DOC. EXPORTAÇÃO

Funcionalidade: Relatórios

Data/Hora da Publicação: 24/08/2009 00:00:00

Data/Hora Última Alteração: 08/03/2010 09:26:38

Descrição da Nota: FUNÇÃO PARA EXPORTAÇÃO DE DRAFT DE DOCUMENTOS DO SISCOMEX EM PDF

Sintoma

 

Não é possível exportar diretamente a lista dos drafts dos documentos do SISCOMEX (RE, DSE, DDE, RC

e RV) em PDF.

 

Solução

 

Foi criado o módulo de função /PWS/ZYCE_DRAFT_TO_PDF para a essa finalidade.

Versões Tratadas

7.0

Informações Complementares

 

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

Nota Número 08871 Data: 24/08/2009 Hora: 09:40:50

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

 

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

Nota Número              : 08871

Categoria                : Melhoria

Prioridade               : Baixa

Versão PW.CE             : 7.0

Pacote                   : 00010

Agrupamento              : 00111

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

Referência às notas relacionadas:

Número - Ordem - Descrição Breve

 

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

FUNÇÃO PARA EXPORTAÇÃO DE DRAFT DE DOCUMENTOS DO SISCOMEX EM PDF

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

Palavras Chave:

DRAFT PDF SISCOMEX RE DSE DDE RV RC

 

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

Objetos da nota:

FUGR /PWS/ZYCEGF11

REPS /PWS/LZYCEGF11F01

FUNC /PWS/ZYCE_DRAFT_TO_PDF

MESS /PWS/ZYCEM356

 

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

Modificações efetuadas em FUGR /PWS/ZYCEGF11

 

Criar o grupo de funções /PWS/ZYCEGF11 com as seguintes características:

-Classe de desenvolvimento: /PWS/ZYCE

 

-Texto breve: CE - Funções p/ exportar Draft para PDF

 

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

Modificações efetuadas em REPS /PWS/LZYCEGF11F01

 

Criar, no grupo de funções /PWS/ZYCEGF11, o include /PWS/LZYCEGF11F01, com o seguinte código fonte

(usar a criação de includes pela árvore de objetos, para que seja automaticamente incluído no

INCLUDE /PWS/LZYCEGF11TOP):

 

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

* INCLUDE /PWS/LZYCEGF11F01

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

 

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

* Form GET_PRINT_PARAMETERS

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

* Objetivo: Retornar as opções para impressão do report

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

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

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

* --> line_size   Largura da lista do report

* <-- parameters  Parâmetros de impressão

* <-> <nenhum>

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

* Chamado  Data      Descrição

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

* 1538875  19/08/09  Codificação inicial

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

FORM get_print_parameters

     USING

       line_size  TYPE pri_params-linsz

     CHANGING

       parameters TYPE pri_params.

 

  DATA: _valid(1) TYPE c,

        _layout   TYPE pri_params-paart.

 

 

* Tentar forçar layout retrato

  IF line_size <= 80.

 

    _layout = 'X_65_80'.

 

  ELSEIF line_size <= 120.

 

    _layout = 'X_90_120'.

 

  ELSE.

 

    _layout = '_'.  " C_CHAR_UNKNOWN de GET_PRINT_PARAMETERS

 

  ENDIF.

 

 

  CALL FUNCTION 'GET_PRINT_PARAMETERS'

       EXPORTING

            destination            = 'LOCL'

            immediately            = ' '

            layout                 = _layout

            line_size              = line_size

            new_list_id            = 'X'

            no_dialog              = 'X'

       IMPORTING

            out_parameters         = parameters

            valid                  = _valid

       EXCEPTIONS

            archive_info_not_found = 1

            invalid_print_params   = 2

            invalid_archive_params = 3

            OTHERS                 = 4.

 

  IF sy-subrc <> 0 OR _valid = space.

 

    CLEAR parameters.

 

  ENDIF.

 

ENDFORM.                    " GET_PRINT_PARAMETERS

 

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

* Form GET_SELECTION_SCREEN_VALUES

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

* Objetivo: Retorna os valores usados na tela de seleção em execução

*           corrente do report

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

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

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

* --> report_name      Nome do report

* <-- selection_table  Tabela de valores da tela de seleção

* <-> <nenhum>

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

* Chamado  Data      Descrição

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

* 1538875  19/08/09  Codificação inicial

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

FORM get_selection_screen_values

     USING

       report_name     TYPE rsvar-report

     CHANGING

       selection_table TYPE rsti_t_par.

 

 

  CALL FUNCTION 'RS_REFRESH_FROM_SELECTOPTIONS'

       EXPORTING

            curr_report     = report_name

       TABLES

            selection_table = selection_table[]

       EXCEPTIONS

            not_found       = 1

            no_report       = 2.

 

  IF sy-subrc <> 0.

 

    CLEAR selection_table[].

 

  ENDIF.

 

ENDFORM.                    " GET_SELECTION_SCREEN_VALUES

 

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

* Form SUBMIT_REPORT_TO_SPOOL

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

* Objetivo: Imprimir um report e retornar o número de spool job usado

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

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

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

* --> report                   Report a imprimir

*     selection_screen_values  Valores da tela de seleção a usar

*     spool_parameters         Opções de impressão

* <-- spool_job_number         Número do spool job usado

* <-> <nenhum>

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

* Chamado  Data      Descrição

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

* 1538875  19/08/09  Codificação inicial

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

FORM submit_report_to_spool

     USING

       report                  TYPE sy-repid

       selection_screen_values TYPE rsti_t_par

       spool_parameters        TYPE pri_params

     CHANGING

       spool_job_number        TYPE tsp01-rqident.

 

 

  SUBMIT (report)

      WITH SELECTION-TABLE selection_screen_values

      TO SAP-SPOOL

        SPOOL PARAMETERS spool_parameters

        WITHOUT SPOOL DYNPRO

      AND RETURN.

 

  IF sy-subrc = 0.

 

    SELECT MAX( rqident )

        FROM tsp01

        INTO spool_job_number

        WHERE rqfinal  = '.'

          AND rqclient = sy-mandt

          AND rqowner  = sy-uname.

 

    IF sy-subrc <> 0.

 

      CLEAR spool_job_number.

 

    ENDIF.

 

  ELSE.

 

    CLEAR spool_job_number.

 

  ENDIF.

 

ENDFORM.                    " SUBMIT_REPORT_TO_SPOOL

 

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

* Form DELETE_SPOOL_REQUEST

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

* Objetivo: Excluir um spool job

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

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

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

* --> spool_job_number  Número do tabralho de impressão a excluir

* <-- <nenhum>

* <-> <nenhum>

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

* Chamado  Data      Descrição

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

* 1538875  19/08/09  Codificação inicial

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

FORM delete_spool_request

     USING

       spool_job_number TYPE tsp01-rqident.

 

  DATA: _tsp01sys TYPE tsp01sys.

 

 

  _tsp01sys-rqident = spool_job_number.

 

  CALL FUNCTION 'RSPO_IDELETE_SPOOLREQ'

       EXPORTING

            spoolreq = _tsp01sys

       EXCEPTIONS

            OTHERS   = 0.

 

ENDFORM.                    " DELETE_SPOOL_REQUEST

 

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

* Form CONVERT_SPOOL_TO_PDF

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

* Objetivo: Converter a saída de um spool job em PDF

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

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

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

* --> spool_job_number  Número do trabalho de impressão a usar

* <-- pdf_contents      Tabela com o conteúdo do arquivo PDF criado

*     pdf_size          Tamanaho do arquivo PDF criado

* <-> <nenhum>

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

* Chamado  Data      Descrição

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

* 1538875  19/08/09  Codificação inicial

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

FORM convert_spool_to_pdf

     USING

       spool_job_number TYPE tsp01-rqident

     CHANGING

       pdf_contents     TYPE tlinetab

       pdf_size         TYPE i.

 

 

  CALL FUNCTION 'CONVERT_ABAPSPOOLJOB_2_PDF'

       EXPORTING

            src_spoolid              = spool_job_number

            no_dialog                = 'X'

       IMPORTING

            pdf_bytecount            = pdf_size

       TABLES

            pdf                      = pdf_contents[]

       EXCEPTIONS

            err_no_abap_spooljob     = 1

            err_no_spooljob          = 2

            err_no_permission        = 3

            err_conv_not_possible    = 4

            err_bad_destdevice       = 5

            user_cancelled           = 6

            err_spoolerror           = 7

            err_temseerror           = 8

            err_btcjob_open_failed   = 9

            err_btcjob_submit_failed = 10

            err_btcjob_close_failed  = 11

            OTHERS                   = 12.

 

  IF sy-subrc <> 0.

 

    CLEAR: pdf_contents[],

           pdf_size.

 

  ENDIF.

 

ENDFORM.                    " CONVERT_SPOOL_TO_PDF

 

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

* Form DOWNLOAD_PDF

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

* Objetivo: Gravar um arquivo PDF no servidor de apresentação

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

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

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

* --> pdf_file_name  Nome proposto para gravação do arquivo PDF

*     pdf_contents   Conteúdo do arquivo PDF

*     pdf_size       Tamanho do arquivo PDF

* <-- <nenhum>

* <-> <nenhum>

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

* Chamado  Data      Descrição

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

* 1538875  19/08/09  Codificação inicial

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

FORM download_pdf

     USING

       pdf_file_name TYPE rlgrap-filename

       pdf_contents  TYPE tlinetab

       pdf_size      TYPE i.

 

 

  CALL FUNCTION 'DOWNLOAD'

       EXPORTING

            bin_filesize            = pdf_size

            filename                = pdf_file_name

            filetype                = 'BIN'

            mode                    = ' '

            filemask_mask           = '*.pdf'

            filemask_text           = 'PDF(*.pdf)'

            filetype_no_show        = 'X'

       TABLES

            data_tab                = pdf_contents[]

       EXCEPTIONS

            invalid_filesize        = 1

            invalid_table_width     = 2

            invalid_type            = 3

            no_batch                = 4

            unknown_error           = 5

            gui_refuse_filetransfer = 6

            customer_error          = 7

            OTHERS                  = 8.                    "#EC NOTEXT

 

  IF sy-subrc <> 0.

 

    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

 

  ENDIF.

 

ENDFORM.                    " DOWNLOAD_PDF

 

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

Modificações efetuadas em FUNC /PWS/ZYCE_DRAFT_TO_PDF

 

Criar o módulo de função /PWS/ZYCE_DRAFT_TO_PDF no grupo de funções /PWS/ZYCEGF11 com as seguintes

características:

-Texto breve: CE - Converte um Draft de doc. do SISCOMEX em PDF

 

-Interface (parâmetros): segue abaixo

IMPORTING

  VALUE(DRAFT_REPORT) TYPE  SY-CPROG DEFAULT SY-CPROG

  REFERENCE(DOC_PREFIX) TYPE  C OPTIONAL

  REFERENCE(DOC_SEQUENTIAL) TYPE  C OPTIONAL

EXCEPTIONS

  PRINT_PARAMETERS_ERROR

  SELECTION_SCREEN_ERROR

  SUBMIT_TO_SPOOL_ERROR

  PDF_CONVERSION_ERROR

 

-Símbolos de texto (PT):

Nr.  Texto                                         Tam. máx.

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

001  Parâmetros de impressão não encontrados        50

002  Argumentos da tela de seleção não encontrados  50

003  Erro na impressão do report                    50

004  Erro na conversão de spool job para PDF        50

 

-Símbolos de texto (EN):

Nr.  Texto                                         Tam. máx.

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

001  Print parameters not found                     50

002  Selection screen arguments not found           50

003  Print report error                             50

004  Spool job to PDF conversion error              50

 

 

-Código fonte: segue abaixo

FUNCTION /pws/zyce_draft_to_pdf.

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

*"*"Interface local:

*"  IMPORTING

*"     VALUE(DRAFT_REPORT) TYPE  SY-CPROG DEFAULT SY-CPROG

*"     REFERENCE(DOC_PREFIX) TYPE  C OPTIONAL

*"     REFERENCE(DOC_SEQUENTIAL) TYPE  C OPTIONAL

*"  EXCEPTIONS

*"      PRINT_PARAMETERS_ERROR

*"      SELECTION_SCREEN_ERROR

*"      SUBMIT_TO_SPOOL_ERROR

*"      PDF_CONVERSION_ERROR

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

 

  DATA: _print_parameters        TYPE pri_params,

        _selection_screen_values TYPE rsti_t_par,

        _spool_job_number        TYPE tsp01-rqident,

        _pdf_file_name           TYPE rlgrap-filename,

        _pdf_contents            TYPE tlinetab,

        _pdf_size                TYPE i.

 

 

  PERFORM get_print_parameters

          USING

            sy-linsz

          CHANGING

            _print_parameters.

 

  IF _print_parameters IS INITIAL.

 

    MESSAGE e356(/pws/zycem)

        WITH 'Parâmetros de impressão não encontrados'(001)

        RAISING print_parameters_error.

 

  ENDIF.

 

 

  PERFORM get_selection_screen_values

          USING

            draft_report

          CHANGING

            _selection_screen_values[].

 

  IF _selection_screen_values[] IS INITIAL.

 

    MESSAGE e356(/pws/zycem)

        WITH 'Argumentos da tela de seleção não encontrados'(002)

        RAISING selection_screen_error.

 

  ENDIF.

 

 

  PERFORM submit_report_to_spool

          USING

            draft_report

            _selection_screen_values[]

            _print_parameters

          CHANGING

            _spool_job_number.

 

  IF _spool_job_number IS INITIAL.

 

    MESSAGE e356(/pws/zycem)

        WITH 'Erro na impressão do report'(003)

        RAISING submit_to_spool_error.

 

  ENDIF.

 

 

  PERFORM convert_spool_to_pdf

          USING

            _spool_job_number

          CHANGING

            _pdf_contents[]

            _pdf_size.

 

  IF _pdf_size IS INITIAL.

 

    MESSAGE e356(/pws/zycem)

        WITH 'Erro na conversão de spool job para PDF'(004)

        RAISING pdf_conversion_error.

 

  ENDIF.

 

 

  PERFORM delete_spool_request

          USING

            _spool_job_number.

 

 

* Pasta Meus Documentos

  CALL FUNCTION 'GUI_GET_REGVALUE'

       EXPORTING

            root       = '1' " HKEY_CURRENT_USER

            key        = 'SOFTWARE\MICROSOFT\WINDOWS\' &

                         'CURRENTVERSION\EXPLORER\SHELL FOLDERS'

            value_name = 'PERSONAL'

       CHANGING

            string     = _pdf_file_name

       EXCEPTIONS

            OTHERS     = 0.

 

  CONCATENATE _pdf_file_name

              '\'

              doc_prefix

              doc_sequential

              '.PDF'

      INTO _pdf_file_name.

 

 

  PERFORM download_pdf

       USING

         _pdf_file_name

         _pdf_contents[]

         _pdf_size.

 

 

ENDFUNCTION.

 

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

Modificações efetuadas em MESS /PWS/ZYCEM356

 

Criar a mensagem número 356, na classe de mensagens /PWS/ZYCEM, com as seguintes características:

-Texto (PT): Erro ao exportar para PDF: &1 &2 &3 &4

-Texto (EN): Export to PDF error: &1 &2 &3 &4

-Auto-explicativa?: SIM