Financial Management Blogs by Members
Dive into a treasure trove of SAP financial management wisdom shared by a vibrant community of bloggers. Submit a blog post of your own to share knowledge.
cancel
Showing results for 
Search instead for 
Did you mean: 
Former Member

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

5 Comments