Nascimento escreveu:converso com alguns amigos aqui , que até tentaram usar a classe do amigo quintas, até chegaram a usar, mais devido a algumas coisas que ou faltavam , ou não achavam voltaram pra o acbr monitor , que tem horas que da uma dor de cabeça , mais como se diz, "quando não tem tu, vai tu mesmo" , en fim , tudo que citei é meu ponto de vista
Com certeza, o ACBR tem usuários do Brasil inteiro, que pegam todo tipo de variação que pode existir, principalmente com fiscalização entre UFs.
E também deve ter nota de serviço, que muitos devem precisar.
Na sefazclass:
O problema maior é quando usa XHarbour, para usar o CreateObject().
Eu não uso XHarbour, não tenho que aprender a fazer isso no XHarbour.
O usuário é que precisa saber qual o equivalente pra isso.
Mas de um modo geral, tá simples.
Considerei auto-explicativo, e sem necessidade de manual.
E o teste.prg tem tudo.
Quem tá acostumado com ACBR acha complicado... porque tá simples demais.
autorizar uma nota, considerando que não há problema nenhum:
oSefaz := SefazClass():New()
hb_MemoWrit( "autorizado.xml", oSefaz:NfeLoteEnvia( cXml, cLote, cUF, cCertificado, cAmbiente ) )
pronto, tá feito.
Manual: enviar lote é no método NfeLoteEnvia(), enviar carta é no NfeEventoCarta(), etc. etc.
É só associar o nome do que se quer, ao nome que já existe.
Os parâmetros... estão lá junto ao nome.
Sobre o log de alterações: Estamos falando de GITHUB
Tem lá o link commits
que mostra as alterações
e podemos ver até o detalhe de cada alteração
exemplos:
No exemplo, procurei simplificar pra não ficar fonte extenso, tem esta parte padrão pra tudo, definindo o "ambiente" ao invés de passar por parâmetro:
oSefaz := SefazClass():New()
oSefaz:cUF := aVarList[ VAR_UF ]
oSefaz:cVersao := aVarList[ VAR_VERSAO ]
oSefaz:cCertificado := aVarList[ VAR_CERTIFICADO ]
oSefaz:cAmbiente := aVarList[ VAR_AMBIENTE ]
oSefaz:cNFCE := aVarList[ VAR_NFCE ]
e esta parte de envio, com um XML fake - apenas o XML menor possível que pode ser transmitido
CASE nOpc == OPC_ENVIO_TESTE
oSefaz:NfeLoteEnvia( [<NFe><infNFe Id="Nfe0001"></infNFe></NFe>] )
? oSefaz:cXmlRetorno
Inkey(0)
ou outra escolhendo do disco, pra transmitir NFE, CTE ou MDFE.
CASE nOpc == OPC_ENVIO_USUARIO
cXml := MemoRead( win_GetOpenFileName(, "Arquivo a transmitir", ".\", "XML", "*.XML", 1 ) )
DO CASE
CASE "<infMDFe" $ cXml ; ? "autorizando CTE"; oSefaz:cVersao := "3.00"; oSefaz:CteLoteEnvia( cXml )
CASE "<infCTe" $ cXml ; ? "autorizando MDFE"; oSefaz:cVersao := "3.00"; oSefaz:MDFeLoteEnvia( cXml )
CASE "<infNFe" $ cXml ; ? "autorizando NFE"; oSefaz:NfeLoteEnvia( cXml )
OTHERWISE ; ? "Documento não reconhecido"
ENDCASE
? oSefaz:cXmlRetorno
hb_MemoWrit( "testeassinado.xml", oSefaz:cXmlDocumento )
hb_MemoWrit( "testeautorizado.xml", oSefaz:cXmlAutorizado )
Inkey(0)
Como já repeti várias vezes, o problema maior não é a parte da Fazenda, é criar o XML com todos os detalhes.
Pra isso, é o manual da Fazenda, ou até mesmo uma nota já autorizada como modelo.