on 10-21-2011 8:21 PM
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
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
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
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
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
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ó
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
6 | |
5 | |
2 | |
1 | |
1 | |
1 | |
1 | |
1 | |
1 | |
1 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.