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