A rotina atualizada:
#include "jpa.ch"
FUNCTION P0600NFE()
LOCAL nSelect, cNfeTxt, cNfeXml, oSefaz := SefazClass():New(), cStatusAssinatura, cComando
MEMVAR m_Prog
PRIVATE m_Prog := "P0600NFE"
DirMake( "NFE\TMP" )
nSelect := Select()
IF .NOT. Encontra( jppedi->pdPedido, "jpnota", "pedido" )
MsgStop( "Inválido! Não tem nota emitida para esse pedido" )
RETURN .F.
ENDIF
IF jpnota->nfDatEmi != Date()
MsgStop( "Inválido! Nota fiscal não foi emitida hoje" )
RETURN .F.
ENDIF
IF jpnota->nfStatus == "C"
MsgStop( "Inválido! Nota fiscal cancelada, não há o que fazer" )
RETURN .F.
ENDIF
IF jpnota->nfPedido != jppedi->pdPedido
MsgStop( "Erro interno! Posicionado em NF diferente do pedido atual" )
RETURN .F.
ENDIF
Mensagem( "Autorizando nota" )
NFDbfToXml( @cNfeTxt, @cNfeXml, "1", Date(), Time(), , "1" )
cStatusAssinatura := AssinaXml( @cNfeXml, AppEmpresaApelido() )
IF cStatusAssinatura != "OK"
hb_MemoWrit( hb_cwd() + "NFE\TMP\" + jpnota->nfNotFis + "-01-SemAssinatura.xml", cNfeXml )
hb_MemoWrit( hb_cwd() + "NFE\TMP\" + jpnota->nfNotFis + "-02-Assinado.xml", cNfeXml )
MsgExclamation( "Problema na assinatura " + cStatusAssinatura )
RETURN .F.
ENDIF
oSefaz:cCertificado := NomeCertificado( AppEmpresaApelido() )
oSefaz:cAmbiente := "1"
oSefaz:NfeLoteEnvia( cNfeXml )
IF oSefaz:cStatus $ "100,101,202,302"
hb_MemoWrit( hb_cwd() + "IMPORTA\" + jpnota->nfNotFis + "-" + oSefaz:cStatus + "-Autorizado.xml", oSefaz:cXmlAutorizado )
hb_MemoWrit( hb_cwd() + "NFE\TMP\" + jpnota->nfNotFis + "-" + oSefaz:cStatus + "-Autorizado.xml", oSefaz:cXmlAutorizado )
cComando := [arquivo="] + hb_cwd() + [NFE\TMP\] + jpnota->nfNotFis + [-] + oSefaz:cStatus + [-Autorizado.xml"]
IF File( "d:\unidanfe\" + SoNumeros( jpempre->emCnpj ) + ".jpg" )
cComando += [ logotipo="d:\unidanfe\] + SoNumeros( jpempre->emCnpj ) + [.jpg"]
ENDIF
cComando += [ visualizar=1]
wapi_ShellExecute( NIL, NIL, "d:\unidanfe\unidanfe.exe", cComando, SW_SHOWNORMAL )
MsgExclamation( iif( oSefaz:cStatus == "100", "Nota autorizada", "Nota Denegada" ) )
ELSE
hb_MemoWrit( hb_cwd() + "NFE\" + jpnota->nfNotFis + ".txt", cNfeTxt )
hb_MemoWrit( hb_cwd() + "NFE\TMP\" + jpnota->nfNotFis + "-01-SemAssinatura.xml", cNfeXml )
hb_MemoWrit( hb_cwd() + "NFE\TMP\" + jpnota->nfNotFis + "-02-Assinado.xml", cNfeXml )
hb_MemoWrit( hb_cwd() + "NFE\TMP\" + jpnota->nfNotFis + "-03-Envelope.xml", oSefaz:cXmlSoap )
hb_MemoWrit( hb_cwd() + "NFE\TMP\" + jpnota->nfNotFis + "-04-Recibo.xml", oSefaz:cXmlRecibo )
hb_MemoWrit( hb_cwd() + "NFE\TMP\" + jpnota->nfNotFis + "-05-Protocolo.xml", oSefaz:cXmlProtocolo )
hb_MemoWrit( hb_cwd() + "NFE\TMP\" + jpnota->nfNotFis + "-06-Erro.xml", oSefaz:cXmlRetorno )
hb_MemoWrit( hb_cwd() + "NFE\TMP\" + jpnota->nfNotFis + "-07-Autorizado.xml", oSefaz:cXmlAutorizado )
MsgExclamation( "Erro desconhecido " + Pad( oSefaz:cXmlProtocolo, 1000 ) )
ENDIF
SELECT ( nSelect )
RETURN NIL
Por enquanto acertando a impressora padrão pro Unidanfe (não havia nenhuma instalada e o unidanfe reclamou)
E surgiu outra necessidade:
Pelo emissor da Fazenda, eram gerados XMLs e PDFs pra envio ao armazém externo, pra separação e posterior retirada de mercadoria.
Com o detalhe de que o emissor gera um PDF único contendo todas as notas.
Por enquanto ainda resolvendo a impressora padrão.