Versão 3.10

Projeto hbNFe (Nota Fiscal Eletronica/Danfe) para [x]Harbour

Moderador: Moderadores

ciacpd
Usuário Nível 1
Usuário Nível 1
Mensagens: 37
Registrado em: 24 Set 2007 11:23
Localização: Mairinque - SP

Versão 3.10

Mensagem por ciacpd »

Desde o inicio do Mês fazendo adaptações na hbnfe baixei a ultima versão e compreendi o que o amigo José Quintas queria dizer quando falou que ninguém deveria estar usando esta classe.
O primeiro teste Status do Servidor, a versão antiga tudo ok na que está no site
cSOAPAction := 'http://www.portalfiscal.inf.br/nfe/wsdl ... onsultaNF2' o correto seria
cSOAPAction := 'http://www.portalfiscal.inf.br/nfe/wsdl ... ServicoNF2'

Na primeira versão 2 dias de testes e tudo OK
Agora se faz necessário maior cuidado.

Daniel Segura
Daniel Segura
ciacpd@hotmail.com
clipper/FW - xharbour/hwgui
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Versão 3.10

Mensagem por JoséQuintas »

Não entendi o que seria a antiga, e a do site.
Ou se é a hbnfe ou a classe SpedSefazClass.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
ciacpd
Usuário Nível 1
Usuário Nível 1
Mensagens: 37
Registrado em: 24 Set 2007 11:23
Localização: Mairinque - SP

Versão 3.10

Mensagem por ciacpd »

José a Antiga é a primeira verão disponibilizada, e a do site é a versão atual da hbnfe via svn.
Daniel Segura
ciacpd@hotmail.com
clipper/FW - xharbour/hwgui
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Versão 3.10

Mensagem por JoséQuintas »

Mas se está ajudando a antiga, chegou a olhar a classe? Não é mais fácil?

Sobre ninguém usando é só verificar aqui, que não houve nenhuma pergunta sobre ela.
Se ninguém pergunta, é porque ninguém usa e nem vai usar.

Semana passada eu fiz uma cirurgia, e como o corte foi perto da barriga, não dava pra ficar posicionado na frente do computador.

Agora melhorei, mas estou aproveitando a troca pra NFE 3.10 pra instalar MySql nos clientes.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Versão 3.10

Mensagem por Itamar M. Lins Jr. »

Melhoras ai. SAÚDE!
Eu tenho interesse em usar esta classe. Eu não tenho tempo livre para testar, com um passo a passo se tem, ajudaria.

Alias é tanta coisa boa que estão criando e estou aprendendo e falta tempo p/ reescrever os código velhos.

Agora mudei algumas coisas p/ usar os DBF´s temporários tudo na memoria RAM "mem:" ficou muito bom.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Versão 3.10

Mensagem por JoséQuintas »

Como disse sempre, no final equivale a "matar" a hbnfe, porque modifica tudo.
Perdem-se algumas mordomias existentes na hbnfe, mas ganha-se facilidade e controle total.

Não é LIB, não é DLL, é apenas linqueditar com os fontes.

Infelizmente perdemos duas vantagens que existiam antes:
- A 2.0 está pronta pra uso, mas já deixou de ser interessante porque só funciona por mais 2 dias
- A 3.10 já vira obrigatória em dois dias, o que torna arriscado a considerar como única opção pra 01/04

Então só resta testar.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
ciacpd
Usuário Nível 1
Usuário Nível 1
Mensagens: 37
Registrado em: 24 Set 2007 11:23
Localização: Mairinque - SP

Versão 3.10

Mensagem por ciacpd »

José,
Tenha uma boa recuperação.

Aproveitei a classe exatamente como está no site, fiz os testes e onde não passava alterei mas não usei ainda a sua classe por falta de tempo.

Abaixo o que o usuário final vai usar para consultar uma nf-e.

Código: Selecionar todos

function nfe_consulta_hbnfe(f_cFileXmlName)
         private oNfe, oDanfe, aRetorno , oFuncoes

         oNfe                := hbNfe()
         Seta_Schemas_Nfe(oNfe) ; Seta_Pastas_Nfe(oNfe) ; Seta_Email_Nfe(oNfe)

         mensagem("Consultando NF-e: "+f_cFileXmlName)
         
         oConsulta           := hbNFeConsulta()
         oConsulta:ohbNFe    := oNfe // Objeto hbNFe
         oConsulta:cNFeFile  := f_cFileXmlName // Chave ou pode ser um arquivo xml com o parametro cNFeFile
         aRetorno            := oConsulta:execute()
         
         cChNFe              := oConsulta:cChaveNFe
         
         oConsulta           := Nil
         
         mensagem("")

         IF aRetorno['OK'] == .F.
            msginfo( aRetorno['MsgErro'] , "Falha na consulta da NFe.")
            return .f.
         ELSE
            msginfo( "Retorno: "         + HB_OEMTOANSI( aRetorno['xMotivo'] ) + CRLF +;
                     "Chave da Nota: "   + cChNFe                              + CRLF +;
                     "Nota recebida em:" + aRetorno['dhRecbto']                + CRLF +;
                     "Nº do Protocolo:"  + aRetorno['nProt']                   + CRLF +;
                     "Digito da Nota:"   + aRetorno['digVal'], "Resultado da Consulta.")
         ENDIF
        
return .t.
// -------------------------------------------------------------------------- //
Daniel Segura
ciacpd@hotmail.com
clipper/FW - xharbour/hwgui
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Versão 3.10

Mensagem por JoséQuintas »

Serve como exemplo pra mostrar mudança:

Código: Selecionar todos

         Scroll( 8, 0, MaxRow(), MaxCol(), 0 )
         @ 8, 1 GET cChave PICTURE "@R 99-99/99-99.999.999/9999-99.99.999.999999999.9.99999999.9"
         READ
         IF LastKey() == K_ESC
            EXIT
         ENDIF
         oSefaz := SefazClass():New()
         oSefaz:NfeConsulta( cChave )
         ? oSefaz:cXmlSoap
         ? oSefaz:cXmlRetorno
Não precisou mais pastas temporárias, nem arquivo temporário, é comunicação direta com a Fazenda.
Essa a é parte que mencionei que ganha-se controle total.

A parte que falei que perde-se mordomias, é até relativo.
Uma vez com o XML de retorno, verifica a informação direto no XML.

Considero vantagem o fato de estar mexendo diretamente com arquivos do projeto.
Não vai estar aprendendo detalhes de uma classe, e sim do projeto.

Uma opção pra analisar o retorno, usando função que está na classe, seria esta:

Código: Selecionar todos

IF XmlNode( oSefaz:cXmlRetorno, "status" ) != "101"
   ? "Nota não foi autorizada"
ENDIF
oSefaz:cXmlSoap é o XML que foi enviado pra Fazenda, serve pra verificar bugs, controle total
oSefaz:cRetorno é exatamente o XML retornado pela Sefaz, controle total

No projeto original da Sefaz não existe arquivo temporário, não existe arquivo "não temporário", o único arquivo é o XML final de distribuição.
Pra brincar com o cérebro, e é sério: pra validar o XML também não precisa de um arquivo XML.

Código: Selecionar todos

cXml := "<xml></xml>"
Isso acima é um XML. Não precisa existir "arquivo.xml".
Se for validar, valida-se o texto. (eu mesmo não uso validação, já que gerando pelo aplicativo, considera-se correto).

Acho que o pessoal ficou tão acostumado em usar arquivos temporários, XMLs em disco, configurar pastas e outras coisas mais, que a simplicidade desta classe confundiu.

Não é assim, é apenas pra efeito didático.
Imagine a comunicação com a Fazenda como algo assim:

Código: Selecionar todos

cUrl := "http://www.fazenda.sp.gov.br/" + "emissaonfe/" + "entregaxml/" + cXml
cResposta := RepostaEndereco( cUrl )
O que altera entre cada coisa são os parâmetros e o xml.
Alterar de uma versão pra outra, é questão de atualizar esses parâmetros.

Por isso sempre insisti na classe, e por isso disse que não tem nada a ver com o projeto original.
Passaremos a conversar sobre quais os parâmetros corretos, e não sobre mudar fontes da classe.
O que cada método da classe faz é apenas colocar os parâmetros corretos no endereço.
Então é controle total, sem as complicações da hbnfe.
E se faltar alguma mordomia/facilidade, é só criar função, como fiz usando XmlNode().
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder