Clipper On Line • Ver Tópico - Manual da SefazClass

Manual da SefazClass

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

Moderador: Moderadores

 

Manual da SefazClass

Mensagempor JoséQuintas » 08 Dez 2017 11:18

Eu não tinha pensado por este lado, mas....

O governo tem um webservice para cada tipo de serviço.
A classe tem um método para cada webservice.

Cada webservice do governo precisa certas informações.
Na classe, cada método recebe essas informações por parâmetro.

Então, a princípio, o manual do governo é praticamente o manual da SefazClass.

O que a SefazClass tem a mais é que certas informações ela consegue obter dos parâmetros, então pode reduzir a quantidade de informação que precisa preencher.
Além disso, ela pode fazer um algo mais....

- Cada processo vai pra um endereço diferente, webservice diferente
- Cada processo/webservice tem um método na SefazClass
- A SefazClass cria um XML baseado nas informações, envia pro governo, e recebe a resposta
- Depois junta esse XML enviado ao XML recebido, e gera um autorizado.

A diferença fica no documento autorizado em si: a NFE, NFCE, CTE ou MDFE
- O aplicativo deve gerar o XML
- A Sefaz assina, envia, e recebe um número de recibo
Pra facilitar, a própria Sefaz já faz a parte seguinte:
- Ela gera um XML de consultar recibo, e consulta o recibo pra ter a resposta, pra ver o que aconteceu com a nota
- Se tudo ok, ela junta o XML enviado, com o XML de resposta, e gera um autorizado.

Então, de um modo geral, a SefazClass é igual o governo, o manual do governo acaba explicando cada método da classe.
Ela apenas já faz mais de uma etapa de uma vez, pra facilitar pra quem usa.

Quer entender a classe?
Primeiro entenda o governo, como funciona a parte do governo.
Ao entender como funciona o governo, já entendeu a classe.

O mesmo acima de outra forma, sobre o que a classe faz:

ela monta um XML, envia o XML pro governo, recebe um XML como resposta.
Na autorização de nota/etc. quem cria o XML é o aplicativo, ela apenas complementa, e faz a mesma coisa.

E porque precisa tanto fonte?

pra autorizar nota é um XML de autorizar nota, é um endereço de autorizar nota, é uma resposta de autorizar nota.
pra enviar carta de correção, é um XML de carta de correção, é um endereço de carta de correção, é uma resposta de carta de correção.
O autorizado é um XML contendo os dois XMLs: enviado e recebido, mas devidamente formatado, o que torna diferente em cada processo, por ter detalhes diferentes.

E pra cada UF é um endereço diferente, que pode ter alguma particularidade diferente.

Então as possibilidades seriam uns 20 webservices diferentes, pra 26 UFs diferentes, resultando em 520 combinações diferentes.

Se considerar ambiente de homologação e produção, que usam webservices diferentes, as possibilidades vão pra 1040.

Se considerar ambiente de contingência, que é pra quando os outros não funcionam, multiplica isso por 2 ou mais.

Toda complicação é pra escolher dentro dessas 520 possibilidades, qual delas será usada.
Teoricamente são mais de 1.000 endereços de internet diferente.

Algumas UFs não tem serviço próprio, e usam o serviço de outras, isso reduz a quantidade.

Pra não ter milhares de rotinas diferentes, uma pra cada situação, é onde entram os arrays e os IFs dentro da SefazClass.
É escolher entre milhares de endereços de internet, e algum detalhe específico de alguma UF.

Tem lá, por exemplo, o serviço RecebeLoteDaNota.... mas uma UF decidiu chamar de RecebeNota, ou RecebeNota2 pra identificar que é nota 2.0.
É só uma palavra, mas se mandar a palavra errada não funciona.
Então a SefazClass também precisa identificar qual a palavra correta pra cada UF.

Todo o mecanismo de escolher endereço, e escolher detalhes diferentes está pronto desde o começo.
Mas eu só trabalho com São Paulo, só tenho certificado digital de São Paulo, então só testei São Paulo.

Conforme vai aparecendo alguma diferença, em alguma UF não testada, então é só acrescentar a diferença na SefazClass.

E nota de serviço......
nota de serviço não tem pequena diferença, só tem GRANDES diferenças.
É o contrário de NFE, enquanto em NFE é difícil ter uma UF diferente, na NFSe é difícil ter uma igual.

O processo é o mesmo: criar XML, enviar pra um endereço de internet, pegar resposta.
Mas os tipos de webservices são outros, a informação que vai é outra, a informação que volta é outra.
E não são 26 UFs, são milhares de cidades.... o que multiplicaria tudo.

Se alguém tiver feito pra alguma cidade, e quiser enviar, pra tentarmos fazer uma classe mais universal, tudo bem, podemos tentar pra ver o que dá...
De repente só a parte de webservice/endereços... e cada um que veja em manuais sobre os XMLs.

Também ao contrário de NFE, não existe data pra mudar layout de cada cidade, cada uma pode alterar o modelo em data diferente.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18011
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Manual da SefazClass

Mensagempor Nascimento » 08 Dez 2017 22:08

Muito obrigado amigo quintas , venho estudando muito para entender , tanto a NFCE quanto a NFSE pois vou precisar dos 2 tipos
obrigado por sua ajuda e a dos demais componentes deste fórum

att: Nascimento
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina :) clipper 5.3 /harbour/minigui
Avatar de usuário

Nascimento
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 711
Data de registro: 19 Jul 2008 12:11
Cidade/Estado: OLINDA-PE
Curtiu: 110 vezes
Mens.Curtidas: 76 vezes

Manual da SefazClass

Mensagempor malcarli » 11 Dez 2017 08:33

Bom dia Mestre, fiz nfese para foz de iguaçu, se precisar dos fontes te envio. Obrigado
malcarli
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 181
Data de registro: 20 Ago 2015 18:14
Cidade/Estado: marilia/sp
Curtiu: 81 vezes
Mens.Curtidas: 4 vezes

Manual da SefazClass

Mensagempor depaula.jau » 22 Dez 2017 09:49

Quintas!

Quando uso a SEFAZCLASS para transmitir funciona perfeitamente, mas algumas poucas vezes acontece de não receber o protocolo do WebServices SEFAZ.
Não sei por qual motivo ele não retorna o protocolo, apesar de já ter sido transmitido.

Então numa segunda tentativa ele retorna dizendo que é duplicidade. Não sei se é a internet ou outra coisa, mas ele se perde em algumas raros momentos.

Vc Sabe se existe uma forma mais segura verificar o recebimento do protocolo ?

Abs;

Marcelo de Paula
Avatar de usuário

depaula.jau
Usuário Nível 2

Usuário Nível 2
 
Mensagens: 98
Data de registro: 15 Mai 2007 17:07
Cidade/Estado: JAU
Curtiu: 9 vezes
Mens.Curtidas: 14 vezes

Manual da SefazClass

Mensagempor JoséQuintas » 22 Dez 2017 10:38

São Paulo está tendo problemas, e não está dando conta de responder rápido.

Criei um quebra-galho, usando o tempo de 3 minutos recomendado pela Sefaz...

Simplificando, se retornar "lote em processamento", fica tentando mais vezes.

   DO WHILE .T.
      IF oSefaz:cStatus $ "100,101,202,302"
         // o que fazer quando ok
         MsgExclamation( iif( oSefaz:cStatus == "100", "MDFE Autorizado", "MDFE Denegado" ) )
         EXIT
      ENDIF
      IF oSefaz:cStatus $ "105" // em processamento
         Mensagem( "Problemas na SEFAZ. Nova tentativa de obter retorno em 3 minutos, ESC abandona" )
         IF Inkey(180) != K_ESC
            Mensagem( "Tentando novamente" )
            oSefaz:MDFeConsultaRecibo()
            LOOP
         ENDIF
      ENDIF
     // o que fazer quando erro
    EXIT
ENDDO


Tratar essas coisas envolve uso de tela para avisos, e uso de pastas pra salvar/recuperar.
Essa parte complica, porque cada LIB gráfica precisa de um jeito diferente, e salvar/recuperar pode depender de DBF/MYSQL/disco/etc.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18011
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Manual da SefazClass

Mensagempor rubens » 22 Dez 2017 11:15

José Quintas,

Não sei aí qual o prazo, mas aqui no Mato Grosso tá alertando quanto ao consumo do WebService... Deram um tempo de 15 segundos para consultar uma nfce depois de enviada... sob penalidade bloquear o emissor por até meia hora...
De repente já tem esse controle aí... desconsidere...

Rubens
"Eu e minha casa servimos ao Senhor e você ???"
Avatar de usuário

rubens
Colaborador

Colaborador
 
Mensagens: 1518
Data de registro: 16 Ago 2003 09:05
Cidade/Estado: Nova Xavantina - MT
Curtiu: 77 vezes
Mens.Curtidas: 104 vezes

Manual da SefazClass

Mensagempor depaula.jau » 22 Dez 2017 12:34

 IF oSefaz:cStatus $ "105" // em processamento


Nossa! Não imaginei que o SEFAZ tivesse um Status para Processamento . . .
Avatar de usuário

depaula.jau
Usuário Nível 2

Usuário Nível 2
 
Mensagens: 98
Data de registro: 15 Mai 2007 17:07
Cidade/Estado: JAU
Curtiu: 9 vezes
Mens.Curtidas: 14 vezes

Manual da SefazClass

Mensagempor JoséQuintas » 22 Dez 2017 13:06

O status "em processamento" é só quando está com problema.
Neste ano de 2017, em poucas datas ele apareceu.

Na Sefaz o default está em 7 segundos.
Pode ser alterado em ::nTempoEspera
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18011
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Manual da SefazClass

Mensagempor JoséQuintas » 22 Dez 2017 13:07

tem mais alguns....

#define SEFAZ_STATUSLIST { ;
      { "100", "Autorizado o uso da NF-e" }, ;
      { "101", "Cancelamento de NF-e homologado" }, ;
      { "102", "Inutilização de número homologado" }, ;
      { "103", "Lote recebido com sucesso" }, ;
      { "104", "Lote processado" }, ;
      { "105", "Lote em processamento" }, ;
      { "106", "Lote não localizado" }, ;
      { "107", "Serviço em Operação" }, ;
      { "108", "Serviço Paralisado Momentaneamente (curto prazo)" }, ;
      { "109", "Serviço Paralisado sem Previsão" }, ;
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18011
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Manual da SefazClass

Mensagempor depaula.jau » 22 Dez 2017 13:42

Eu estou com a versão antiga ainda da SEFAZCLASS , seria essa a Linha ?

oServer:Open( "POST", ::cWebService, .F. )
oServer:SetRequestHeader( "SOAPAction", cSoapAction )
oServer:SetRequestHeader( "Content-Type", "application/soap+xml; charset=utf-8" )
oServer:Send( ::cXmlSoap )
oServer:WaitForResponse( 500 ) ----->>>>> Tempo de espera
cRetorno := oServer:ResponseBody
Avatar de usuário

depaula.jau
Usuário Nível 2

Usuário Nível 2
 
Mensagens: 98
Data de registro: 15 Mai 2007 17:07
Cidade/Estado: JAU
Curtiu: 9 vezes
Mens.Curtidas: 14 vezes

Manual da SefazClass

Mensagempor JoséQuintas » 22 Dez 2017 16:37

Não, esse daí é normal, é esperar a resposta da conexão atual.

É que a Sefaz faz o NfeLoteEnvia(), e recebe essa resposta.
Depois, com esse retorno, ela faz o NfeConsultaRecibo() pra pegar o retorno.
E, se nesse não tiver resposta, teria que ficar repetindo esse até conseguir.
O intervalo é entre um e outro.

Acabei deixando na variável ::nIntervaloTempo, se não me engano desde o começo.

E agora que percebi..... não sei se o Inkey() vai ter o mesmo resultado em LIBs que não sejam GTWVG.

inkey.png


Tem algo parecido em CTE, MDFE e NFE que também atende NFCE.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18011
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Manual da SefazClass

Mensagempor Nascimento » 19 Jan 2018 16:10

Na minha humilde opinião , sei que o quintas faz com altruísmo e carinho a sefazclass
mais eu acho que seria ótimo ate para o projeto que juntassem as mãos as pessoas que detém mais conhecimento
tanto da linguagem quando da parte tributária

o que no meu ponto de vista enrriqueceria mais a Sefazclass , com Exemplos com Changelog
porque sabemos que um projeto dessa magnitude que sempre esta em constante mudanças "por conta do nosso governo"
ficar só a cargo de uma pessoa é muito pesado

não seria um caso ao amigo quintas de pensar nessa possibilidade?, de abrir o projeto a pessoas seletas para ajudar no git??

porque a que se saber que nem todos aqui deste fórum detém o conhecimento de alguns aqui

e como diz o velho deitado " a União faz a força!!"

analizando entre o acbr e a sefazclass

a ideia da Sefazclass é maravilhosa!! , sim nosso proprio aplicativo estar pronto pra emissão sem precisar de soft´s de terceiros

mais o que analiso é a falta de exemplos , pra uns parece ser simples pra outros nem tanto, em fim falei o que penso que seria positivo pra todas pessoas do fórum
já o Acbr tem varias pessoas que usam e ate dentro do acbr quando vc instala tem os passos de como proceder para usar no harbour , é isso que na minha opinião falta na Sefazclass , sabendo que pro quintas que mantém essa maravilhosa ferramenta seria muito trabalhoso, por isso a ideia de compartilhar o trabalho, acredito eu que muitos tirariam um tempo para dedicação e para manutenção da ferramenta

e reforçando o que citei acima é so meu ponto de vista!!!

abraços a todos
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina :) clipper 5.3 /harbour/minigui
Avatar de usuário

Nascimento
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 711
Data de registro: 19 Jul 2008 12:11
Cidade/Estado: OLINDA-PE
Curtiu: 110 vezes
Mens.Curtidas: 76 vezes

Manual da SefazClass

Mensagempor JoséQuintas » 19 Jan 2018 17:24

Sobre a colaboração:
Estar no GITHUB já significa pronto pra receber ajuda.
Bastar criar um Fork, fazer as alterações, e clicar em "enviar alterações" (não exatamente esse nome).

Sobre o manual, parece nem precisar.... vai na base de escolher o que melhor define a operação, ou excluir as que não definem.
Como funciona: enviar XML e pegar resposta....

Enviar documento: NfeLoteEnvia(), CteLoteEnvia(), MDFeLoteEnvia()
Enviar carta de correção: NfeEventoCarta(), CteEventoCarta()
Cancelar: NfeEventoCancela(), CteEventoCancela(), MDfeEventoCancela()
Encerramento de MDFe: MDfeEventoEncerramento()
Inutilizar: NfeInutiliza(), CteInutiliza()

Status do serviço: NfeStatusServico(), CteStatusServico(), MDfeStatusServico()
E por aí vai.

Quais são os parâmetros: olhar na classe, e pegar detalhes no manual do governo.

Exemplo de manual rápido:

METHOD NFeLoteEnvia( cXml, cLote, cUF, cCertificado, cAmbiente, cIndSinc )

cXml -> XML
cLote -> lote
cUF -> UF
cCertificado -> Certificado
cAmbiente -> Ambiente
cIndSinc -> Indicação de Sincronismo

Disso tudo, a única coisa que o manual do governo não diz, é que número de lote pode ser sempre 1.
Mas é praticamente auto-explicativo, ou fácil de alguém dar a dica que falta, por exemplo de onde tirar o nome do certificado, ou que cXML não é o nome do arquivo e sim o texto dentro do XML.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18011
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Manual da SefazClass

Mensagempor Nascimento » 19 Jan 2018 17:48

Quintas disse:
Sobre a colaboração:
Estar no GITHUB já significa pronto pra receber ajuda.
Bastar criar um Fork, fazer as alterações, e clicar em "enviar alterações" (não exatamente esse nome).


então solicito aos Amigos que detenham conhecimento em ambas a juntar forças!!
estou estudando também para em um futuro próximo contribuir no que puder

sempre pensei talvez um pouco grande em fazer o harbour tomar o seu lugar de direito que foi tirado!
e só nós e nossa união fará isso acontecer!!
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina :) clipper 5.3 /harbour/minigui
Avatar de usuário

Nascimento
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 711
Data de registro: 19 Jul 2008 12:11
Cidade/Estado: OLINDA-PE
Curtiu: 110 vezes
Mens.Curtidas: 76 vezes

Manual da SefazClass

Mensagempor Fernando queiroz » 06 Mar 2018 15:09

Tô inteiramente disponivel para ajudar , tenho desenvolvido tudo pela sefazclass , ja estou com nota NF-e e NFC-e funcionando
falta algumas coisas ainda como cancelamento de NFC-e contingencia , mas posso disponibilizar os fonte para que possam ter uma ideia de como funciona

:)) :)) :))
HARBOUR 3.2, HWGUI 2.23 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
Fernando queiroz
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 737
Data de registro: 12 Nov 2014 23:41
Cidade/Estado: Porto Alegre/RS
Curtiu: 12 vezes
Mens.Curtidas: 58 vezes

Próximo



Retornar para Projeto hbNFe

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 4 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro