cancel
Showing results for 
Search instead for 
Did you mean: 

Impressão automática de DANFE

Former Member
0 Kudos

Prezados,

Estamos tentando implementar a funcionalidade de impressão automática de DANFE mas infelizmente não estamos obtendo sucesso.

Após implementação dos métodos CALL_RSNAST00(com chamada da função Z criada para ser chamada remotamente) e SET_COMMIT não é chamada a impressão das NFe autorizadas.

Verifiquei que não temos nenhum log da transação RSRFCTRC do GRC e na SM58 do ERP.

Se executarmos a função J_1BNFE_CALL_RSNAST00 via SE37 ou solicitar a impressão na J1B3N o processo é executado normalmente.

Verificamos que após a autorização das NFe o campo "imprimida" fica marcado com o flag mas nada é impresso.

Destaco que a configuração realizada foi para envio da impressão para a impressora DEFAULT. Como DEFAULT estamos utilizando o PDF Creator.

Abaixo envio os códigos implementados pela equipe Abap:

METHOD if_ex_cl_nfe_print~set_commit.

e_commitcall = 'X'.

ENDMETHOD.

-

-


x----

METHOD if_ex_cl_nfe_print~call_rsnast00.

IF i_active-code EQ '100' "NF-e autorizada

AND i_active-printd IS INITIAL "só imprimir automaticamente se ainda não foi impressa

AND i_active-cancel IS INITIAL "não faz sentido imprimir autom. se ela foi cancelada

AND i_active-conting_s IS INITIAL. "não faz sentido imprimir autom. se ela foi alternada

"p/conting. pois deverá ser cancelada

                    • Outros tratamentos, preparações e chama função J_1BNFE_CALL_RSNAST00

  • CALL FUNCTION 'J_1BNFE_CALL_RSNAST00'

  • IN BACKGROUND TASK

  • EXPORTING

  • i_active = i_active

  • EXCEPTIONS

  • no_printer = 1

  • OTHERS = 2.

  • DATA: aux(1) TYPE c.

  • WHILE 1 = 1.

  • aux = 1.

  • ENDWHILE.

CALL FUNCTION 'ZMMF_NFE_CALL_RSNAST00' IN BACKGROUND TASK

EXPORTING

i_active = i_active

i_kappl = 'NF'

i_nacha = '1'

i_dimme = 'X'

i_printer = 'DEFAULT'

EXCEPTIONS

print_error = 1

OTHERS = 2.

COMMIT WORK.

  • IF sy-subrc <> 0.

  • CALL FUNCTION 'J_1B_NFE_ERROR_PROTOKOLL'

  • EXPORTING

  • i_docnum = i_active-docnum.

  • ELSE.

*

  • ENDIF.

ENDIF.

-

-


x----.

FUNCTION ZMMF_NFE_CALL_RSNAST00.

*"----

-


""Interface local:

*" IMPORTING

*" VALUE(I_ACTIVE) TYPE J_1BNFE_ACTIVE

*" VALUE(I_KAPPL) TYPE NAST-KAPPL DEFAULT 'NF'

*" VALUE(I_NACHA) TYPE NAST-NACHA DEFAULT '1'

*" VALUE(I_DIMME) TYPE NAST-DIMME DEFAULT 'X'

*" VALUE(I_PRINTER) TYPE RSPONAME OPTIONAL

*" EXCEPTIONS

*" PRINT_ERROR

*"----

-


  • Cópia da função standard J_1BNFE_CALL_RSNAST00 pois a mesma deve ser chamada remotamente.

  • Módulo de acesso remoto habilitado.

TABLES: nast.

*

DATA ls_nast TYPE nast. "1365293

  • Get full key of already existing NAST entry "1365293

SELECT SINGLE * FROM nast INTO ls_nast "1365293

WHERE kappl = i_kappl "1365293

AND objky = i_active-docnum "1365293

AND kschl = i_active-form. "1365293

IF sy-subrc IS INITIAL. "1365293

  • nast-spras = ls_nast-spras. "1365293 "1425684

  • nast-parnr = ls_nast-parnr. "1365293 "1425684

  • nast-parvw = ls_nast-parvw. "1365293 "1425684

  • nast-erdat = ls_nast-erdat. "1365293 "1425684

  • nast-eruhr = ls_nast-eruhr. "1365293 "1425684

  • 1425684 keep the complete entry, otherwise parameters get lost

nast = ls_nast. "1425684

ENDIF. "1365293

  • start printing

nast-kappl = i_kappl.

nast-objky = i_active-docnum.

nast-kschl = i_active-form.

nast-nacha = i_nacha. "1 = print output

IF i_printer IS NOT INITIAL. "1425684

nast-ldest = i_printer.

ENDIF. "1425684

nast-dimme = i_dimme. "X = print immidiately

PERFORM einzelnachricht IN PROGRAM rsnast00 USING sy-subrc.

*

IF NOT sy-subrc IS INITIAL.

MESSAGE i230(8b) WITH i_active-docnum RAISING print_error. "#EC *

ENDIF.

*

ENDFUNCTION.

Desde já agradeço qualquer ajuda.

Att.,

Marcelo Lisboa

Accepted Solutions (1)

Accepted Solutions (1)

Former Member
0 Kudos

Fernando,

Obrigado pela sua resposta.

Alteramos as chamadas das funções conforme destacado por você. Agora foi implementado pela nossa equipe Abap da seguinte forma:

METHOD if_ex_cl_nfe_print~call_rsnast00.

CALL FUNCTION 'ZMMF_NFE_CALL_RSNAST00' IN BACKGROUND TASK

EXPORTING

i_active = i_active.

ENDMETHOD.

-

-


X----

-


FUNCTION zmmf_nfe_call_rsnast00.

*"----

-


""Interface local:

*" IMPORTING

*" VALUE(I_ACTIVE) TYPE J_1BNFE_ACTIVE

*" VALUE(I_PRINTER) TYPE RSPONAME OPTIONAL

*" EXCEPTIONS

*" PRINT_ERROR

*"----

-


      • Execução dentro do método CALL_RSNAST00 chamada remotamente.

      • Módulo de acesso remoto habilitado.

IF i_active-code EQ '100' "NF-e autorizada

AND i_active-printd IS INITIAL "só imprimir automaticamente se ainda não foi impressa

AND i_active-cancel IS INITIAL "não faz sentido imprimir autom. se ela foi cancelada

AND i_active-conting_s IS INITIAL. "não faz sentido imprimir autom. se ela foi alternada

"p/conting. pois deverá ser cancelada

CALL FUNCTION 'J_1BNFE_CALL_RSNAST00' IN BACKGROUND TASK

EXPORTING

i_active = i_active

i_kappl = 'NF'

i_nacha = '1'

i_dimme = 'X'

i_printer = 'DEFAULT'

EXCEPTIONS

no_printer = 1

OTHERS = 2.

COMMIT WORK.

IF sy-subrc <> 0.

CALL FUNCTION 'J_1B_NFE_ERROR_PROTOKOLL'

EXPORTING

i_docnum = i_active-docnum.

ENDIF.

ENDIF.

*

ENDFUNCTION.

-

-


x----

-


FUNCTION J_1BNFE_CALL_RSNAST00.

*"----

-


""Local Interface:

*" IMPORTING

*" REFERENCE(I_ACTIVE) TYPE J_1BNFE_ACTIVE

*" REFERENCE(I_KAPPL) TYPE NAST-KAPPL DEFAULT 'NF'

*" REFERENCE(I_NACHA) TYPE NAST-NACHA DEFAULT '1'

*" REFERENCE(I_DIMME) TYPE NAST-DIMME DEFAULT 'X'

*" REFERENCE(I_PRINTER) TYPE RSPONAME OPTIONAL

*" EXCEPTIONS

*" PRINT_ERROR

*"----

-


TABLES: nast.

*

DATA ls_nast TYPE nast. "1365293

  • Get full key of already existing NAST entry "1365293

SELECT SINGLE * FROM nast INTO ls_nast "1365293

WHERE kappl = i_kappl "1365293

AND objky = i_active-docnum "1365293

AND kschl = i_active-form. "1365293

IF sy-subrc IS INITIAL. "1365293

  • nast-spras = ls_nast-spras. "1365293 "1425684

  • nast-parnr = ls_nast-parnr. "1365293 "1425684

  • nast-parvw = ls_nast-parvw. "1365293 "1425684

  • nast-erdat = ls_nast-erdat. "1365293 "1425684

  • nast-eruhr = ls_nast-eruhr. "1365293 "1425684

  • 1425684 keep the complete entry, otherwise parameters get lost

nast = ls_nast. "1425684

ENDIF. "1365293

  • start printing

nast-kappl = i_kappl.

nast-objky = i_active-docnum.

nast-kschl = i_active-form.

nast-nacha = i_nacha. "1 = print output

IF i_printer IS NOT INITIAL. "1425684

nast-ldest = i_printer.

ENDIF. "1425684

nast-dimme = i_dimme. "X = print immidiately

PERFORM einzelnachricht IN PROGRAM rsnast00 USING sy-subrc.

*

IF NOT sy-subrc IS INITIAL.

MESSAGE i230(8b) with i_active-docnum RAISING print_error. "#EC *

ENDIF.

*

ENDFUNCTION.

Já com relação a impressora, não ficou claro para a minha equipe de Basis qual o parâmetro na transação

SPAD deve ser alterado para que fique definido que a impressão pode ocorrer em background. Você poderia detalhar um pouco mais ?

Outro ponto que destaco é que após as alterações promovidas no código ABAP o flag de "IMPRIMIDA" não está ficando mais marcado após a aprovação da NFe.

Desde já agradeço a ajuda.

Att.,

Marcelo Lisboa

former_member182114
Active Contributor
0 Kudos

Bom dia Marcelo,

Após o call você previsa de um COMMIT WORK, se não ela não é gravada e nem executada.

METHOD if_ex_cl_nfe_print~call_rsnast00.

CALL FUNCTION 'ZMMF_NFE_CALL_RSNAST00' IN BACKGROUND TASK

EXPORTING

i_active = i_active.

COMMIT WORK. <----

-


ENDMETHOD.

-

-


Outros 3 pontos:

1) O IF abaixo pode ficar na BAdI mesmo daí evita enfileirar uma chamada desnecessária:

IF i_active-code EQ '100' "NF-e autorizada

AND i_active-printd IS INITIAL "só imprimir automaticamente se ainda não foi impressa

AND i_active-cancel IS INITIAL "não faz sentido imprimir autom. se ela foi cancelada

AND i_active-conting_s IS INITIAL. "não faz sentido imprimir autom. se ela foi alternada

"p/conting. pois deverá ser cancelada

2) Esta função standard não é remotamente chamável, tire o IN BACKGROUND TASK

CALL FUNCTION 'J_1BNFE_CALL_RSNAST00' IN BACKGROUND TASK

EXPORTING

i_active = i_active

i_kappl = 'NF'

i_nacha = '1'

i_dimme = 'X'

i_printer = 'DEFAULT'

EXCEPTIONS

no_printer = 1

OTHERS = 2.

3) E tire este commit:

COMMIT WORK.

-

-


Quando à configuração de Basis, pelo que entendi você está pedindo ao servidor imprimir na estação local usando um driver que pede o nome do arquivo e gera PDF não é isso? Ao que sei isso não dá pra fazer de forma automática.

Separe os problemas, aponte a impressão automática inicialmente para uma impressora padrão configurado no servidor, depois você tenta ir para outras frentes.

Atenciosamente, Fernando Da Rós

Edited by: Fernando Ros on Oct 28, 2011 12:06 AM

Former Member
0 Kudos

Fernando,

Realizamos as alterações destacadas por você e configuramos uma impressora direta e a impressão automática ocorreu normalmente.

Desta forma, estarei informando ao cliente que a impressão através de PDF creator deverá ser realizada através da J1B3N.

Agradeço a ajuda.

Att.,

Marcelo Lisboa

Answers (1)

Answers (1)

former_member182114
Active Contributor
0 Kudos

Bom dia Marcelo,

Não ter nada na RSRFCTRC ok, pois "migramos" para a chamada assincrona, então os problemas se acontecerem irão ser vistos na SM58... Se a função foi chamada e executada corretamente nenhum log ficará na SM58

Sua função ZMMF_NFE_CALL_RSNAST00 é uma cópia da J_1BNFE_CALL_RSNAST00, isto não está correto. O conteúdo da Z deve ser o mesmo que você teria na implementação da BAdI, ou seja, apenas o CALL FUNCTION J_1BNFE_CALL_RSNAST00. Os parâmetros da sua função podem ser até os mesmos.

O problema para estar mesmo nesta DEFAULT chamando o PDF Creator que provavelmente está instalado na sua estação, e a impressão automática acontece no servidor, ou seja, você precisa fazer uma configuração em que a impressora esteja disponível em background também.

Atenciosamente, Fernando Da Ró