Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

Postado

Estou tentando fazer o envio do MDFe de forma síncrona, entretanto está gerando algumas dúvidas.
Na função de enviar o MDFe, são 3 parâmetros que podem ser passados, ALote, Imprimir, ASincrono respectivamente. Sendo que o parâmetro ASincrono tem como valor default FALSE, ou seja entende-se que a forma de envio é Síncrona correto?

Pois bem, ao debugar o código na função Envia da classe ACBrMDFeWebServices, tem se o código:

  FEnviar.Lote := ALote;
  FEnviar.Sincrono := ASincrono;

Então neste caso assumindo o valor default de Asincrono, o valor de Sincrono também é FALSE. Essa propriedade implica na função TratarResposta da parte de RECEPÇÃO nesta mesma classe.
Primeira pergunta:
1º Porque a propriedade FEnviar.Sincrono recebe ASincrono? Sendo que no TratarResposta na recepção, existe condição que Sincrono tem de ser verdadeiro para poder ser executado.

if Sincrono then
  begin
    if pos('retMDFe', FPRetWS) > 0 then
      AXML := StringReplace(FPRetWS, 'retMDFe', 'retConsSitMDFe',
                                     [rfReplaceAll, rfIgnoreCase])
    else
      AXML := FPRetWS;
...
Código continua para baixo


E a segunda pergunta ainda na função Envia da classe ACBrMDFeWebServices.

  if not ASincrono or ((FEnviar.Recibo <> '') and (FEnviar.cStat = 103)) then
  begin
    FRetorno.Recibo := FEnviar.Recibo;
    if not FRetorno.Executar then
      FRetorno.GerarException( FRetorno.Msg );
  end;

Sendo neste caso a condição verdadeira, irá ser executado uma consulta dentro do FRetorno.Executar.

2º Porque tem de ser feita uma consulta?. Sendo que, segundo o parâmetro ASincrono está com valor FALSE, ou seja teria de ser Síncrono, e uma vez sendo Síncrono não necessita de consulta.
 

Se não me fiz entender, tento explicar de outra maneira.

Desde já, agradeço a compreensão.

  • Consultores
Postado

Boa tarde Norton,

Talvez o nome do parâmetro no método Enviar esteja fazendo confusão.

ASincrono -> a letra "A" vem de auxiliar, logo esse parâmetro se refere ao modo Síncrono, como o seu valor padrão é Falso o modo de envio é Assíncrono

  • Curtir 1
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

Postado

Bom dia Italo,

Certo, entendi a questão da letra Auxiliar, quanto a isso tudo Ok.

Mas agora está surgiu uma outra questão, o envio agora sendo Síncrono, dentro da função Envia da classe ACBrMDFeWebServices, tem a parte do código:

  if not Enviar.Executar then
    Enviar.GerarException( Enviar.Msg );

E dentro deste Executar, a função TratarResposta da Recepção que fica na mesma classe, que tem o código:

if Sincrono then
  begin
    if pos('retMDFe', FPRetWS) > 0 then
      AXML := StringReplace(FPRetWS, 'retMDFe', 'retConsSitMDFe',
                                     [rfReplaceAll, rfIgnoreCase])
    else
      AXML := FPRetWS;
...
Código continua para baixo

Bem, isto eu já havia citado acima, mas como antes eu estava fazendo confusão com a questão da implementação do envio, não estava caindo nesta condição "If Sincrono", porém agora com o ajuste está entrando, e mais abaixo então, temos:

    // Verificar se a MDF-e foi autorizado com sucesso
    Result := (FMDFeRetornoSincrono.cStat = 104) and
      (TACBrMDFe(FPDFeOwner).CstatProcessado(FMDFeRetornoSincrono.protMDFe.cStat));

    if Result then
    begin
      for I := 0 to TACBrMDFe(FPDFeOwner).Manifestos.Count - 1 do
      begin
        with TACBrMDFe(FPDFeOwner).Manifestos.Items[I] do
        
...
Código continua para baixo

Ai que está o problema, o valor de cStat que está retornando é 100, portanto torna a condição falsa, e o valor de Result por sua vez também falso. E ocorre que então voltando ao primeiro código citado, ele gera um Exception com a seguinte mensagem: "Autorizado o uso do Mdf-e".
Seguindo o manual o cStat
104 = "Arquivo processado"
100 = "Autorizado o uso do MDF-e"
Está correto ser gerado uma Exception? Se sim, porque isso ocorre? Pois não compreendi ainda, se o MDF-e foi autorizado porque é tratado como se fosse um erro.

  • Este tópico foi criado há 1949 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • 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.

The popup will be closed in 10 segundos...