Página 1 de 2

Manual da SefazClass

Enviado: 08 Dez 2017 12:18
por JoséQuintas
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.

Manual da SefazClass

Enviado: 08 Dez 2017 23:08
por Nascimento
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

Manual da SefazClass

Enviado: 11 Dez 2017 09:33
por malcarli
Bom dia Mestre, fiz nfese para foz de iguaçu, se precisar dos fontes te envio. Obrigado

Manual da SefazClass

Enviado: 22 Dez 2017 10:49
por depaula.jau
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

Manual da SefazClass

Enviado: 22 Dez 2017 11:38
por JoséQuintas
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.

Código: Selecionar todos

   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.

Manual da SefazClass

Enviado: 22 Dez 2017 12:15
por rubens
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

Manual da SefazClass

Enviado: 22 Dez 2017 13:34
por depaula.jau

Código: Selecionar todos

 IF oSefaz:cStatus $ "105" // em processamento
Nossa! Não imaginei que o SEFAZ tivesse um Status para Processamento . . .

Manual da SefazClass

Enviado: 22 Dez 2017 14:06
por JoséQuintas
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

Manual da SefazClass

Enviado: 22 Dez 2017 14:07
por JoséQuintas
tem mais alguns....

Código: Selecionar todos

#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" }, ;

Manual da SefazClass

Enviado: 22 Dez 2017 14:42
por depaula.jau
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

Manual da SefazClass

Enviado: 22 Dez 2017 17:37
por JoséQuintas
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.

Manual da SefazClass

Enviado: 19 Jan 2018 17:10
por Nascimento
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

Manual da SefazClass

Enviado: 19 Jan 2018 18:24
por JoséQuintas
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.

Manual da SefazClass

Enviado: 19 Jan 2018 18:48
por Nascimento
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!!

Manual da SefazClass

Enviado: 06 Mar 2018 15:09
por Fernando queiroz
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

:)) :)) :))