Página 1 de 1

Como usar

Enviado: 24 Ago 2021 16:09
por JoséQuintas
Vamos dar uma atualizada na informação.

Utilizo Harbour 3.4, faço testes com Harbour 3.4.
Só tenho clientes em São Paulo, então só consigo fazer testes em São Paulo.
Mas tem usuário em AC, MG, RO, etc. usando normalmente.

Primeiro passo: compilar a sefazclass

Se a máquina está compilando normalmente com Harbour, é baixar e compilar.

hbmk2 sefazclass.hbp

Pra usar, até pode passar tudo numa linha só, mas acho mais interessante passar uma parte de cada vez.

Código: Selecionar todos

oSefaz := SefazClass():New()
Com isso acima, é criada a variável oSefaz, pode ser outro nome qualquer oNFE, oCTE, qualquer nome.

Vai usar num estado/UF que pode não ser São Paulo, ou ambiente homologação, e vai usar seu certificado.
Então isso aumenta um pouquinho.

Código: Selecionar todos

oSefaz := SefazClass():New()
oSefaz:cUF := "MG" // se não for SP
oSefaz:cAmbiente := "2" // se não for produção
oSefaz:cCertificado := "nome do certificado e não serial"
Agora, conforme o que for fazer, é um serviço diferente, tem lá os métodos com os nomes parecidos com os da Fazenda.
O programa de teste na pasta \tests tem muitas das opções, cada um é pra uma coisa diferente.
No caso do XML de NFE, CTE, MDFE, NFCE pra AUTORIZAÇÃO, seu aplicativo vai criar o XML.
Para outras coisas, a própria Sefaz já cria.

O mais fácil: consultar status do serviço, pode ser NFE, CTE, MDFE....

Código: Selecionar todos

oSefaz := SefazClass():New()
oSefaz:cUF := "MG" // se não for SP
oSefaz:cAmbiente := "2" // se não for produção
oSefaz:cCertificado := "nome do certificado e não serial"
cNFE := oSefaz:CTEStatusServico()
cMDFE := oSefaz:MDFeStatusServico()
cNFe := oSefaz:NfeStatusServico()
o retorno é exatamente o do governo.
Como auxílio, ou pra conferência/checagem, dá pra usar algumas variáveis da sefazclass

Código: Selecionar todos

? oSefaz:cMotivo
? oSefaz:cStatus
? oSefaz:cRecibo
? oSefaz:cXmlRecibo
? oSefaz:cXmlProtocolo
? oSefaz:cXmlAutorizado
? oSefaz:cXmlRetorno
Basicamente é isso.

Precisa:
Instalar e registrar capicom.dll da Microsoft
instalar e registrar msxml5.dll da Microsoft
instalar o certificado válido pra nfe/cte/mdfe

Como usar

Enviado: 24 Ago 2021 16:18
por JoséQuintas
Transmitir a nota:

Código: Selecionar todos

oSefaz := SefazClass():New()
oSefaz:cUF := "MG" // se não for SP
oSefaz:cAmbiente := "2" // se não for produção
oSefaz:cCertificado := "nome do certificado e não serial"
cXmlAutorizado := oSefaz:NfeLoteEnvia( cConteudoXML )
Se tudo correr as mil maravilhas, é isso acima.

NÃO é nome do XML, é conteúdo.
Se por acaso está gravando em arquivo, utilize MemoRead( "arquivo.xml" )
Senão, gera o XML em memória e transmite em memória.
É TUDO EM MEMÓRIA.
Se quiser gravar o autorizado acima, supondo que tudo deu certo:

Código: Selecionar todos

hb_MemoWrit( "NF125.xml", oSefaz:cXmlAutorizado )
ou

Código: Selecionar todos

IF oSefaz:cStatus == "110"
   hb_MemoWrit( "NF125.xml", oSefaz:cXmlAutorizado )
ELSE
   MsgStop( "Não autorizou. status:" + oSefaz:cStatus + " motivo:" + oSefaz:cMotivo )
   MsgStop( "Resposta da fazenda:" + oSefaz:cXmlRetorno )
ENDIF

Como usar

Enviado: 24 Ago 2021 16:23
por JoséQuintas
A sefazclass não faz mágica.
Ela apenas transmite as mensagens pra fazenda, e a fazenda responde (quando não dá erro de comunicação ou algo assim).
É fazer, conforme as coisas forem acontecendo, vai vendo o que mais pode facilitar no seu programa.

Ela também não converte INI ou TXT ou outro.
É gerar o XML de NFE/CTE/MDFE via programa.

Pra carta de correção, cancelamento, etc. é só passar os parâmetros, que ela cria o XML e transmite.

É olhar os nomes, pra ver qual usar.

Teria que fazer isso com ACBR, uninfe, etc.
A diferença é que vai olhar direto o fonte em Harbour, nos métodos da Sefazclass.
CADA método transmite um tipo de documento diferente, para um endereço diferente.
Olhe o método do documento que quer transmitir, e faça uso dele, usando os parâmetros que ele mostra.

Como usar

Enviado: 24 Ago 2021 16:29
por JoséQuintas

Código: Selecionar todos

   METHOD NFeEventoCarta( cChave, nSequencia, cTexto, cCertificado, cAmbiente )
Pra que serve esse?
é pra mandar a carta de correção de NFE - NFeEventoCarta()

Código: Selecionar todos

oSefaz:cCertificado := "nome do certificado"
oSefaz:NfeEventoCarta( "352108.....", 1, "esta e uma carta de correcao" )
Se fizer igual mostrei antes, já colocando UF, certificado, ambiente, só precisa disso acima, não precisa dos demais parâmetros.
A classe detecta a UF, já que faz parte da chave de acesso. Iniciar com "35" significa que é São Paulo.
Quando dá.... a classe dá uma mãozinha...
Evento: é sempre sequencial, a classe não sabe se já mandou o evento 1,2,3 antes, então o controle dessa numeração é por sua conta.
O mesmo acontece com ACBR, uninfe, etc.

Como usar

Enviado: 25 Ago 2021 09:43
por hudson
Bom Dia, José Quintas.

está dando esse erro quando compilo.

Como usar

Enviado: 25 Ago 2021 10:01
por JoséQuintas
Está usando XHarbour.
Tem um arquivo aí pra ajudar, nos demais pode criar função intermediária pra equivalente do XHarbour.

Código: Selecionar todos

FUNCTION hb_Eol(); RETURN Chr(13)+Chr(10)
FUNCTION hb_ASCan(a,b,c,d); RETURN ASCan( a, b, c, d )
FUNCTION hb_Adel(a, b, c ); ADel( a, b ); ASize( a, Len( a ) - 1 ); RETURN a
FUNCTION hb_Default( a, b )
   IF ValType( a ) != ValType( b )
      a := b
   ENDIF
   RETURN Nil
FUNCTION hb_At(a,b,c,d)
?????? At() com opção de usar parcial
FUNCTION hb_Sha1(a,b,c)
?????? calcular sha1
FUNCTION hb_Hash()
???? retorna variável hash vazia
FUNCTION StrToHex(a)
????? converte pra hexadecimal
_CLSLockDef() - não faço idéia de onde apareceu isso
Utilize:

hbmk2 -xhb sefazclass.hbp
Se o ambiente está configurado direito, vai funcionar.
Vai precisar copiar o utilitário hbmk2.exe de algum harbour.
E o -xhb é obrigatório, senão vai usar o harbour

Código: Selecionar todos

FUNCTION hb_WinOleCreateObject(a,b,c,d)
RETURN .... sei lá cada xharbour é de um jeito.... CreateObject( a, b, c, d ) ou tOleAuto():new() ou outro

Como usar

Enviado: 25 Ago 2021 10:09
por JoséQuintas
Faltou dizer:

A impressão que deu é que está gerando um EXE, e não uma LIB.
Ao gerar LIB, ainda vão faltar essas funções, mas não vai mostrar erro, somente quando for gerar o EXE é que as funções não existentes vão ser mostradas.

hb_Sha1() é pra nota fiscal consumidor, se não for usar NFC, e não encontrar equivalente, crie uma retornando Nil.

NÃO USO Xharbour, só quem usa XHarbour pode ajudar, pra dizer sobre função equivalente.

Como usar

Enviado: 26 Ago 2021 09:22
por hudson
Eu já compilei a LIB pelo Harbour.

Agora estou compilando o programa que está no xHarbour.

Foi quando deu esses erros.

Obrigado

Como usar

Enviado: 26 Ago 2021 14:44
por JoséQuintas
São funções que tem no Harbour com um nome, mas no Xharbour é outro nome.
De um modo geral os nomes são parecidos.