Skip to Content

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

To report this post you need to login first.

5 Comments

You must be Logged on to comment or reply to a post.

  1. Rafael Vieira

    Fabio, ótimo material !

    Porém, no trecho:

    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

    fica a sensação de que isso seria feito dentro do GRC NF-e (que é mais famosamente referenciado como SAP NF-e). Neste caso, realmente, escuta-se bastante o questionamento “o GRC NF-e vai enviar o PDF do Danfe e o XML por email?”, e a resposta é Não, pois a exigência legal é de que deve-se enviar o XML somente.

     

    Por isso, acredito, que o Smartform seja definido no ECC, no final do processo e que a geração do Danfe para envio junto do XML para os clientes, utilizando as mesmas interfaces *B2B, não deve ser possível. Só através de um desenvolvimento, creio eu.

     

    Obrigado,

    Rafael.

    (0) 
    1. Former Member

      Rafael, é possível sim, as interfaces novas do B2B, podem permitir que o processo vá buscar no ERP o email do destinatario BUYER ou CARRIER e também que seja colocado o binario do pdf em um payload attachment, com esse dado, vc pode enviar o XML da NFe, o DANFE em pdf tudo junto pelo PI usando a solucao GRC NFe.

      (0) 
      1. Former Member

        Boa tarde Carlos/Rafael

         

        Eu estava vendo esta solução de anexar a DANFE ao XML. Nesse caso o disparo do B2B (etapa 8) teria algum tipo de atraso, até o ERP gerar o PDF da DANFE?

        E neste caso, quando voce se refere ao binário do pdf, isso significa que eu teria que regerar o PDF dentro do GRC?

         

        Obrigado.

        (0) 
    2. Former Member Post author

      Rafael,

       

      Obrigado pelo retorno e você tem razão, o que o Carlos disse também é válido, uma vez que você pode gerar o DANFE em PDF do ERP da forma que citei e anexar ao e-mail pela interface B2B, uma vez que o resultado final é justamente o binário do PDF

      (0) 
  2. Former Member

    Bom dia,

     

    estou tentando implementar essa rotina na empresa onde trabalho, mas na linha  ti_pdf[] <fs_otf>[]. está dando erro  ” Field symbol has not yet been assigned.”

     

    No programa J_1BNFPR_SF declarei as variáveis assim:

    datati_job_info type SSFCRESCL,
    ti_doc_output_info TYPE SSFCRESPD,
    ti_job_opt TYPE SSFCRESOP.

    (0) 

Leave a Reply