Muitas pessoas já se perguntaram se é possível pelo produto NF-e gerar o DANFE em formato PDF para enviar por e-mail. Já vi várias vezes no fórum do SCN questionamentos deste tipo e respostas dizendo que o SMARTFORMS permite esta função.
Vou demonstrar como fazer isto de forma simples.
O report standard que faz a impressão da NF-e é o J_1BNFPR, porém creio que a maioria das empresas fez uma cópia do mesmo para customização e o parametrizou no caminho abaixo, de acordo com o tipo de formulário utilizado e formulário smartforms usado.
Pode-se verificar na configuração abaixo de acordo com o formulário qual o formulário e programa de processamento. Será necessário saber o mesmo para gerarmos a versão do DANFE em PDF.
Primeiramente iremos criar um novo report ABAP em branco para carregar algumas variáveis em memória, simulando a impressão pela J1B3N:
tables: nast , tnapr.
data: begin of ti_doc occurs 0,
docnum like j_1bnfdoc-docnum,
form like j_1bnfdoc-form,
end of ti_doc.
data: v_parametro type i value 0.
* Verificar se encontrou o documento
select single docnum form from j_1bnfdoc into ti_doc
where docnum eq in_docnum.
if sy-subrc ne 0.
"Mensagem de erro aqui
endif.
* Buscar qual o programa de impressão
select single * from tnapr into tnapr where kschl = ti_doc-form.
Em seguida podemos forçar os parâmetros da mensagem, enviando o documento para uma impressora local, isto não é relevante, mas evita erros de permissão de acesso. bem como impressoras inválidas.
nast-kappl = tnapr-kappl.
nast-OBJKY = ti_doc-docnum.
nast-kschl = tnapr-kschl.
nast-spras = 'P'.
nast-erdat = sy-datum.
nast-eruhr = sy-uzeit.
nast-nacha = 1.
nast-anzal = 1.
nast-vsztp = 1.
nast-ldest = 'LOCL'.
nast-nauto = 'X'.
O próximo passo agora é chamar o subprograma standard que irá gerar nosso smartforms:
perform entry in program zmet_prg_sd0054 using v_parametro v_parametro.
Neste momento os dados binários foram carregados em uma tabela interna chamada TI_JOB_INFO-OTFDATA[], que podemos obter por meio de field-symbols:
data: wa_spool type RSPOID.
data: ti_pdf type table of ITCOO.
FIELD-SYMBOLS: <fs_otf> type TSFOTF.
ASSIGN ('(ZMET_PRG_SD0054)TI_JOB_INFO-OTFDATA[]') TO <fs_otf>.
ti_pdf[] = <fs_otf>[].
A partir deste momento já temos os dados em mãos para a finalidade desejada, seja o envio em um anexo via e-mail, seja a impressão ou mesmo downloads em lote.
Estes dados ainda não estão em formato PDF, mas em OTF, mas a SAP já disponibilzou um módulo de função para fazer esta conversão:
DATA: v_bin_file type xstring.
DATA: T_pdf_tab type table of tline.
data: W_bin_filesize TYPE i. " Binary File Size
CALL FUNCTION 'CONVERT_OTF'
EXPORTING
FORMAT = 'PDF'
MAX_LINEWIDTH = 132
IMPORTING
BIN_FILESIZE = W_bin_filesize
* BIN_FILE = l_pdf_xstring
TABLES
otf = TI_PDF
lines = T_pdf_tab
EXCEPTIONS
ERR_MAX_LINEWIDTH = 1
ERR_FORMAT = 2
ERR_CONV_NOT_POSSIBLE = 3
ERR_BAD_OTF = 4
OTHERS = 5.
Após esta chamada podemos usar a função GUI_DOWNLOAD para salvar o arquivo na máquina local:
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
BIN_FILESIZE = w_bin_filesize
FILENAME = 'c:\DANFE.pdf'
FILETYPE = 'BIN'
TABLES
DATA_TAB = t_pdf_tab.
Caso seu PDF venha em branco certifique-se que no subprograma CALL_SMARTFORM do include J_1BNFPR_SF está com a variável CONTROL_PARAMETERS-GETOTF contém o valor 'X' e se o parâmetro TI_JOB_INFO está sendo retornado na chamada do módulo de função indicado:
Este programa foi testado nos releases ECC 5.0 e ECC 6.06;
Espero ter ajudado a todos que desejam ter a geração dos DANFES em formato PDF de alta qualidade.
Até mais,
Fabio Purcino Aragão
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
3 | |
1 | |
1 | |
1 | |
1 | |
1 |