Ir para conteúdo
  • Cadastre-se

dev botao

  • Este tópico foi criado há 211 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Consultores
Postado (editado)

Olá Pessoal,

Muitos DF-e (Documentos Fiscais Eletrônicos) foram implementados para o seu envio ser em Lotes contendo de 1 até 50 documentos.

Esse modo de envio em lote funciona no modo assíncrono.

Outros DF-e já foram implementados com o modo de envio unitário, ou seja, só podemos enviar um documento por vez, consequentemente esse modo de envio funciona no modo síncrono.

 

A primeira diferença que podemos notar é:

No envio assíncrono podemos enviar um lote contendo de 1 até 50 documentos, já no envio síncrono podemos enviar somente um documento por vez.

A segunda diferença diz respeito ao retorno:

No envio assíncrono temos como retorno do webservice um numero chamado de Recibo que atesta que o webservice recebeu o lote enviado, por outro lado no envio síncrono não temos o numero do Recibo como retorno.

A terceira diferença se refere ao resultado do processamento:

No envio assíncrono devemos realizar uma consulta se utilizando do numero do Recibo.

É o retorno dessa consulta que nos vai dizer se o(s) documento(s) enviado(s) para o webservice foi ou foram processado(s) com sucesso.

Já no envio síncrono não temos no retorno o numero do Recibo, logo não temos como realizar a consulta pelo numero do Recibo, alias não se faz necessário uma vez que no retorno do envio síncrono o que temos de retorno já é o resultado do processamento, portanto já temos na resposta se o documento foi processado com sucesso ou não.

 

DF-e que já nasceram com o modo de envio Síncrono:

BP-e = Bilhete de Passagem Eletrônico

BP-e TM = Bilhete de Passagem Eletrônico Transporte Metropolitano

GTV-e = Guia de Transporte de Valores Eletrônico

DC-e = Declaração de Conteúdo Eletrônica

NFCom = Nota Fiscal de Comunicação Eletrônica

 

DF-e que nasceram com o modo de envio Assíncrono e que mudaram ou vão mudar para Síncrono:

CT-e = Conhecimento de Transporte Eletrônico (desde 06/2023 só funciona o modo Síncrono)

CT-e OS = Conhecimento de Transporte Eletrônico Outros Serviços (desde 06/2023 só funciona o modo Síncrono)

MDF-e = Manifesto de Documentos Fiscais Eletrônicos (Modo Assíncrono será desativado em 30/06/2024)

NFC-e = Nota Fiscal ao Consumidor Eletrônica (desde 04/09/2023 só funciona o modo Síncrono)

 

DF-e que possui os dois modos de envio Assíncrono e Síncrono:

NF3-e = Nota Fiscal de Energia Elétrica Eletrônica

 

Observação:

Notem que nas listas acima não aparece a NF-e = Nota Fiscal Eletrônica, o motivo é que a NF-e nasceu somente com o modo Assíncrono de envio, depois passou a ter o modo de envio Síncrono, mas este modo não se encontra disponível na SEFAZ de São Paulo e Bahia.

O Fisco já sinalizou que pretende acabar com o modo de envio Assíncrono da NF-e, deixando somente o modo Síncrono.

A motivação para essa mudança é que por volta de 90% dos lotes recepcionados por todas as SEFAZ de todas as UF possuem somente um documento.

Sendo assim não faz muito sentido consumir dois serviços (Recepção e Consulta) para apenas um documento, lembrando que no modo Assíncrono se faz necessário a Consulta pelo numero do Recibo para obter o resultado do processamento.

Já que 90% dos contribuintes enviam as suas notas de forma unitária, ou seja, uma nota por vez, tanto a SEFAZ quanto o desenvolvedor do Software sairiam ganhando com essa mudança, pois a SEFAZ eliminaria o serviço de Consulta pelo numero do Recibo e o Software ficaria mais rápido pois não precisaria executar essa consulta.

Quando vai ocorrer essa mudança não sei, o Fisco não disse quando, mas vai ocorrer.

 

Codificação para quem utiliza os componentes:

A titulo de exemplo será utilizado o componente ACBrMDFe, mas podemos replicar para os demais.

O método Enviar possui 3 parâmetros:

    function Enviar(const ALote: String; Imprimir: Boolean = True;  ASincrono:  Boolean = False): Boolean; overload;
 

ALote = Numero do Lote que contem os documentos a serem enviados para o webservice da SEFAZ.

Imprimir = Se True (valor padrão) diz que o Documento Auxiliar vai ser impresso no final do processo, se False diz que não vai ser impresso.

ASincrono = Se False (valor padrão) diz que o modo de envio é Assíncrono, se True diz que o modo de envio é Síncrono.

 

Exemplo de Envio no modo Assíncrono (só deve ser utilizado pelos DF-e que ainda possuem esse modo de envio):

  ACBrMDFe1.Enviar(NumLote);
ou
  ACBrMDFe1.Enviar(NumLote, False);

Exemplo de leitura do retorno do envio no modo Assíncrono:

  with MemoDados do
  begin
    Lines.Add('');
    Lines.Add('Envio MDFe');
    Lines.Add('tpAmb: '     + TpAmbToStr(ACBrMDFe1.WebServices.Retorno.tpAmb));
    Lines.Add('verAplic: '  + ACBrMDFe1.WebServices.Retorno.verAplic);
    Lines.Add('cStat: '     + IntToStr(ACBrMDFe1.WebServices.Retorno.cStat));
    Lines.Add('xMotivo: '   + ACBrMDFe1.WebServices.Retorno.xMotivo);
    Lines.Add('cUF: '       + IntToStr(ACBrMDFe1.WebServices.Retorno.cUF));
    Lines.Add('xMsg: '      + ACBrMDFe1.WebServices.Retorno.Msg);
    Lines.Add('Recibo: '    + ACBrMDFe1.WebServices.Retorno.Recibo);
    Lines.Add('Protocolo: ' + ACBrMDFe1.WebServices.Retorno.Protocolo);
  end;

Exemplo de Envio no modo Síncrono (utilizado pelos DF-e que só possuem ou também tem este modo de envio):

  ACBrMDFe1.Enviar(NumLote, True, True);
ou
  ACBrMDFe1.Enviar(NumLote, False, True);

Exemplo de leitura do retorno do envio no modo Síncrono:

  with MemoDados do
  begin
    Lines.Add('');
    Lines.Add('Envio MDFe');
    Lines.Add('Chave: '    + ACBrMDFe1.Manifestos[0].MDFe.procMDFe.chMDFe);
    Lines.Add('');
    Lines.Add('tpAmb: '     + TpAmbToStr(ACBrMDFe1.WebServices.Enviar.tpAmb));
    Lines.Add('verAplic: '  + ACBrMDFe1.WebServices.Enviar.verAplic);
    Lines.Add('cStat: '     + IntToStr(ACBrMDFe1.WebServices.Enviar.cStat));
    Lines.Add('xMotivo: '   + ACBrMDFe1.WebServices.Enviar.xMotivo);
    Lines.Add('cUF: '       + IntToStr(ACBrMDFe1.WebServices.Enviar.cUF));
    Lines.Add('xMsg: '      + ACBrMDFe1.WebServices.Enviar.Msg);
    Lines.Add('Recibo: '    + ACBrMDFe1.WebServices.Enviar.Recibo);
  end;

 

E para quem usa ACBrLib ou ACBrMonitorPLUS?

Os diferentes modos de envio também são considerados e estão disponíveis em ambas as soluções.

No que diz respeito ao envio, os comandos também possuem um parâmetro que define se o envio será síncrono ou assíncrono.

Vamos ver o exemplo do MDFe:

Para a ACBrLib:

MDFE_Enviar(ALote, AImprimir, ASincrono, sResposta, esTamanho);

ALote: Número do Lote a ser enviado.
AImprimir: Se True, imprime DAMFDe caso o MDFe seja autorizado.
ASincrono
Se True envia o MDFe em modo sincrono.
sResposta: Usado pelo retorno, contem as informações retornadas pela consulta.
esTamanho: Usado pelo retorno, contem o tamanho da string (sResposta).

Então o comando ficaria:

MDFe_Enviar(ALote, AImprimir, False, sResposta, esTamanho)
ou
MDFe_Enviar(ALote, AImprimir, True, sResposta, esTamanho)

Para o ACBrMonitorPLUS:

MDFE.ENVIARMDFe(nXMLMDFe, [nLote], [nAssinar],[nImprimi],[nImpressora], [bAssincrono], [bEncerrado] )
 

nXMLMDFe: Caminho do XML do MDF-e 
nLote: Número do Lote  (opcional)
nAssinar: Assinar o XML (opcional - informe 0 para não assinar)
nImprimi: Imprimir MDF-e (opcional - informe 1 para imprimir)
nImpressora: Nome da Impressora (opcional)
bAssincrono: Por padrão o envio é Assíncrono, informa "False" para envio Sincrono
bEncerrado: Imprimir Mensagem de "MDFe Encerrado", (opcional - informe 1 para imprimir)

Ficando:

MDFe.EnviarMDFe(nXMLMDFe, nLote, nAssinar, nImprimi, nImpressora, True, bEncerrado)
ou
MDFe.EnviarMDFe(nXMLMDFe, nLote, nAssinar, nImprimi, nImpressora, False, bEncerrado)

A hora de ler a resposta também muda um pouco.

No envio assíncrono, temos uma seção [Envio], [Retorno] e [MDFe + Numero do Documento].

Já no envio síncrono, não existe mais a seção [Retorno] e a seção MDFe é concatenada com a chave de acesso.

Resposta Assíncrona:

[Envio]
CStat=
CUF=
DhRecbto=
Msg=
NProt=
NRec=
TMed=
TpAmb=
VerAplic=
Versao=
XMotivo=
Xml=

[Retorno]
CStat=
CUF=
ChaveDFe=
DhRecbto=
Msg=
Protocolo=
VerAplic=
Versao=
XMotivo=
cMsg=
nRec=
tpAmb=
xMsg=

[MDFe1]
Id=
XML=
cStat=
chDFe=
dhRecbto=
digVal=
nProt=
tpAmb=
verAplic=
xMotivo=

Resposta Síncrona:

[Envio]
CStat=
CUF=
DhRecbto=
Msg=
NProt=
NRec=
TMed=
TpAmb=
VerAplic=
Versao=
XMotivo=
Xml=

[MDFe12345678901234567890123456789012345678901234]
Id=
XML=
cStat=
chDFe=
dhRecbto=
digVal=
nProt=
tpAmb=
verAplic=
xMotivo=

 

Editado por Diego Foliene
Adiciona trecho sobre falando sobre a Lib e o Monitor
  • Curtir 5
  • Obrigado 2
Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

  • Consultores
Postado

A edição abaixo do Papo PRO trás informações relacionadas:

 

  • Curtir 2
Consultor SAC ACBr

Diego Folieni
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.