cancel
Showing results for 
Search instead for 
Did you mean: 

Geração do DANFE em pdf

Former Member
0 Kudos

Bom dia,

Eu gostaria de gerar o DANFE em pdf e vi que existem algumas parametrizações standard.

No entanto eu gostaria de tirar algumas duvidas em relação à parametrização do Output Type de Nota fiscal:

1) No campo "Layout module", o que deverá ser preenchido ???

2) Na parte de "Processing 1",acredito que deva se manter o programa "J_1BNFPR",

3) No campo "Form routine", deveremos colocar  ENTRY   ???

4) No campo  "Form", deveremos preencher com /XNFE/DANFE_PORTRAIT_FO   ???

5) Se devemos gerar em PDF, acredito que o campo " PDF/Smartform form" deva ser preenchido. Em caso positivo, com que valor ?

6) O campo "Form Type", deve ser preenchido com a opção "2 - PDF", correto ?

Desde já agradeço,

Claudio Igarashi

Accepted Solutions (1)

Accepted Solutions (1)

Former Member
0 Kudos

Oi Claudio

Como o Marcelo Macedo comentou você pode usar a função CONVERT_OTF. Mas pode tratar ela direto no programa de impressão. No caso abaixo... Z_NFE_PRINT_DANFE.

Abraço

Eduardo Chagas

Former Member
0 Kudos

Ola Eduardo,

Quando vc diz tratar direto no programa de impressão, é colocar direto no programa Z_NFE_PRINT_DANFE. a função CONVERT_OTF ?    Ou seria alguma outra alternativa ?

Att.

Claudio Igarashi

Former Member
0 Kudos

Sim.


*&--------------------------------------------------------------------*

*&      Form  call_smartform

*&--------------------------------------------------------------------*

*       text

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

FORM call_smartform.

   DATA: lv_subject TYPE tdtitle.

   output_options-tdimmed       = nast-dimme.

   output_options-tddest        = '29ZK'.

   control_parameters-no_dialog = 'X'.

   DATA: cparam TYPE ssfctrlop,

         outop TYPE ssfcompop,

         file_size TYPE i,

         bin_filesize TYPE i,

         pdf_tab LIKE tline OCCURS 0 WITH HEADER LINE,

         tab_otf_data TYPE ssfcrescl.

   control_parameters-getotf = 'X'.

   CALL FUNCTION fm_name

     EXPORTING

       control_parameters = control_parameters

       output_options     = output_options

       user_settings      = ''

       nota_fiscal        = w_danfe

     IMPORTING

       job_output_info    = tab_otf_data

     EXCEPTIONS

       formatting_error   = 1

       internal_error     = 2

       send_error         = 3

       user_canceled      = 4

       OTHERS             = 5.

   IF sy-subrc <> 0.

   ENDIF.

* Convert OTF data to PDF

   CALL FUNCTION 'CONVERT_OTF'

     EXPORTING

       format                = 'PDF'

       max_linewidth         = 132

     IMPORTING

       bin_filesize          = bin_filesize

     TABLES

       otf                   = tab_otf_data-otfdata[]

       lines                 = pdf_tab

     EXCEPTIONS

       err_max_linewidth     = 1

       err_format            = 2

       err_conv_not_possible = 3

       err_bad_otf           = 4

       OTHERS                = 5.

   IF sy-subrc NE 0.

   ENDIF.

   CALL FUNCTION 'SSFCOMP_PDF_PREVIEW'

     EXPORTING

       i_otf                    = tab_otf_data-otfdata

     EXCEPTIONS

       convert_otf_to_pdf_error = 1

       cntl_error               = 2

       OTHERS                   = 3.

   IF sy-subrc <> 0.

   ENDIF.

ENDFORM.                    "call_smartform

Former Member
0 Kudos

Observação... No caso acima... ao fazer a impressão o sistema gera o preview do pdf na tela; ai o usuário define se quer imprimir, salvar ou enviar por email. veja que as configurações como a J1BG por exemplo você precisa configurar uma impressora mesmo que no seu programa diga que você irá gerar um pdf.

Abraço

Eduardo Chagas

former_member182503
Active Contributor
0 Kudos

Claudio,

Depende da maneira que você quer implementar. No cliente que estou atualmente eu implementei uma transação de consulta de NF-e e que extrai os DANFE's em PDF.

Ao selecionar a NF-e que deseja e clicar em um botão, eu aciono o programa de impressão:

PERFORM entry IN PROGRAM znfe_print_danfe USING lv_subrc lv_screen.


Internamente, o programa znfe_print_danfe sabe que o que está sendo solicitado é a versão OTF da impressão e não uma impressão normal (Quando se chama a função do smartform, no parâmetro control_parameters o campo getotf deve ter valor = X). Com isso, jogo o output em OTF p/ a memória e recupero o mesmo na transação de extração do PDF.


Com essa tabela contendo o OTF eu chamo a função CONVERT_OTF. Com o resultado dessa função você pode gravar um file local na máquina do usuário usando aclasse cl_gui_frontend_services metodo gui_download.


Procurando rapidamente no SCN encontrei esse blog que é mais ou menos igual a forma como eu implementei:



[]'s

JN

Former Member
0 Kudos

Bem lembrado @jose_nunes ! Nem eu lembrava que tinha esse doc do Fabio!

Uma observação... agora é possível fazer a impressão ou no caso a geração de vários documentos direto na J1BNFE.

Former Member
0 Kudos

Muito obrigado pela ajuda Eduardo !!

Vou solicitar ao abap do offshore para adicionar esta parte do programa para podermos testar !

Tks

Claudio Igarashi

Answers (1)

Answers (1)

Former Member
0 Kudos

Boa tarde Claudio,

Montamos um porta em PHP para download de todos os documentos do SAP ECC utilizando o SAP PI. Utilizamos as seguintes funções utilizando a linguagem ABAP:

1. Chamamos o formulário SmartForm utilizando a função SSF_FUNCTION_MODULE_NAME

2. Utilizando a função CONVERT_OTF para gerar o arquivo PDF

3. A função SSFC_BASE64_ENCODE converte o arquivo PDF para binário

Existe uma função em PHP para converter a string binária do ABAP em PDF para que seja realizado o download, no Java existe a mesma função para realizar esta tarefa.

Espero ter ajudado.

Atenciosamente

Marcelo Macedo