Ir para conteúdo
  • Cadastre-se

dev botao

Duvida Operacional Resposta Nfemonitor Para Comando Consultanfedest


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

Recommended Posts

  • Moderadores

Ele vai mostrar oq receber do webservice. Se o webservice retornar uma lista, vai mostrar todas, se retornar apenas uma, mostra apenas oq retornou.

djsystem-logo.png
 youtube.png facebook.png instagram.png linkedin.png
André Ferreira de Moraes | Analista de Sistemas
www.djsystem.com.br | www.djpdv.com.br
www.tefhouse.com.br | www.lambretinha.com.br
Link para o comentário
Compartilhar em outros sites

Acabei abrindo os fontes hj para ver como é a resposta vi que tem um laço de repetição até AcbrNFe1.WebServices.ConsNFeDest.retConsNFeDest.ret.Count 

 

Não seria interessante colocar no topo do arquivo de resposta (junto com indCont, ultNSU, etc) a quantidade total de documentos retornados, que no caso é justamente esse count?? Assim quem está lendo o arquivo INI sabe até onde ler a resposta

 

 

Edição:
Acabei de olhar que na verdade o Monitor percorre o mesmo laço 3 vezes! Tem alguma razão importante para acontecer isso?
Que eu tenha notado é para o fato de colocar-se contadores diferentes para NFE, CANC e CCE. Ou seja, se o retorno contiver 1 documento de cada tipo ficaria:
[RESNFE001], [RESCANC001] e [RESCCE001], ao inves de [RESNFE001], [RESCANC002] e [RESCCE003]

 

é isso mesmo?

 

se for isso somente isso, não é melhor criar 3 variaveis de contador ao inves de percorrer o mesmo laço 3 vezes?

Editado por sossystem
Link para o comentário
Compartilhar em outros sites

Gostaria de saber a opinião e possibilidade de mudar a resposta para o seguinte:

Desse jeito quem lê a resposta sabe quantos documentos terão de ser lidos, e consegue percorrer 1 loop somente na hora de ler a resposta. 
Esse codigo tambem otimiza o Monitor pois ao invés de percorrer o mesmo loop 3 vezes, percorre 1 só, e economiza variaveis
 

	else if Cmd.Metodo = 'consultanfedest' then
         begin
           if not ValidarCNPJ(Cmd.Params(0)) then
              raise Exception.Create('CNPJ '+Cmd.Params(0)+' inválido.');

           try
              ACBrNFe1.ConsultaNFeDest(Cmd.Params(0),
                                       StrToIndicadorNFe(ok,Cmd.Params(1)),
                                       StrToIndicadorEmissor(ok,Cmd.Params(2)),
                                       Cmd.Params(3));

              Cmd.Resposta := Cmd.Resposta+sLineBreak+
                              'versao='   +ACBrNFe1.WebServices.ConsNFeDest.retConsNFeDest.versao+sLineBreak+
                              'tpAmb='    +TpAmbToStr(ACBrNFe1.WebServices.ConsNFeDest.retConsNFeDest.tpAmb)+sLineBreak+
                              'verAplic=' +ACBrNFe1.WebServices.ConsNFeDest.retConsNFeDest.verAplic+sLineBreak+
                              'cStat='    +IntToStr(ACBrNFe1.WebServices.ConsNFeDest.retConsNFeDest.cStat)+sLineBreak+
                              'xMotivo='  +ACBrNFe1.WebServices.ConsNFeDest.retConsNFeDest.xMotivo+sLineBreak+
                              'dhResp='   +DateTimeToStr(ACBrNFe1.WebServices.ConsNFeDest.retConsNFeDest.dhResp)+sLineBreak+
                              'indCont='  +IndicadorContinuacaoToStr(ACBrNFe1.WebServices.ConsNFeDest.retConsNFeDest.indCont)+sLineBreak+
                              'ultNSU='   +ACBrNFe1.WebServices.ConsNFeDest.retConsNFeDest.ultNSU+sLineBreak;
			      'totalDoc=' +AcbrNFe1.WebServices.ConsNFeDest.retConsNFeDest.ret.Count;

              
              for I:= 0 to AcbrNFe1.WebServices.ConsNFeDest.retConsNFeDest.ret.Count -1 do
               begin

                 if Trim(AcbrNFe1.WebServices.ConsNFeDest.retConsNFeDest.ret.Items[i].resNFe.chNFe) <> '' then
                  begin
                     Cmd.Resposta := Cmd.Resposta+sLineBreak+
                     '[RESDOC'+Trim(IntToStrZero((I+1),3))+']'+sLineBreak+
	             'NSU='     +AcbrNFe1.WebServices.ConsNFeDest.retConsNFeDest.ret.Items[i].resNFe.NSU+sLineBreak+
                     'chNFe='   +AcbrNFe1.WebServices.ConsNFeDest.retConsNFeDest.ret.Items[i].resNFe.chNFe+sLineBreak+
                     'CNPJ='    +AcbrNFe1.WebServices.ConsNFeDest.retConsNFeDest.ret.Items[i].resNFe.CNPJCPF+sLineBreak+
                     'xNome='   +AcbrNFe1.WebServices.ConsNFeDest.retConsNFeDest.ret.Items[i].resNFe.xNome+sLineBreak+
                     'IE='      +AcbrNFe1.WebServices.ConsNFeDest.retConsNFeDest.ret.Items[i].resNFe.IE+sLineBreak+
                     'dEmi='    +DateTimeToStr(AcbrNFe1.WebServices.ConsNFeDest.retConsNFeDest.ret.Items[i].resNFe.dEmi)+sLineBreak+
                     'tpNF='    +tpNFToStr(AcbrNFe1.WebServices.ConsNFeDest.retConsNFeDest.ret.Items[i].resNFe.tpNF)+sLineBreak+
                     'vNF='     +FloatToStr(AcbrNFe1.WebServices.ConsNFeDest.retConsNFeDest.ret.Items[i].resNFe.vNF)+sLineBreak+
                     'digVal='  +AcbrNFe1.WebServices.ConsNFeDest.retConsNFeDest.ret.Items[i].resNFe.digVal+sLineBreak+
                     'dhRecbto='+DateTimeToStr(AcbrNFe1.WebServices.ConsNFeDest.retConsNFeDest.ret.Items[i].resNFe.dhRecbto)+sLineBreak+
                     'cSitNFe=' +SituacaoNFeToStr(AcbrNFe1.WebServices.ConsNFeDest.retConsNFeDest.ret.Items[i].resNFe.cSitNFe)+sLineBreak+
                     'cSitConf='+SituacaoManifDestToStr(AcbrNFe1.WebServices.ConsNFeDest.retConsNFeDest.ret.Items[i].resNFe.cSitConf)+sLineBreak;
		     'TipoDoc=' +'RESNFE' +sLineBreak;
                     
                  end;
		  if Trim(AcbrNFe1.WebServices.ConsNFeDest.retConsNFeDest.ret.Items[i].resCanc.chNFe) <> '' then
		  begin
                     Cmd.Resposta := Cmd.Resposta+sLineBreak+
                     '[RESDOC'+Trim(IntToStrZero((I+1),3))+']'+sLineBreak+				  
	    	     'NSU='     +AcbrNFe1.WebServices.ConsNFeDest.retConsNFeDest.ret.Items[i].resCanc.NSU+sLineBreak+
                     'chNFe='   +AcbrNFe1.WebServices.ConsNFeDest.retConsNFeDest.ret.Items[i].resCanc.chNFe+sLineBreak+
                     'CNPJ='    +AcbrNFe1.WebServices.ConsNFeDest.retConsNFeDest.ret.Items[i].resCanc.CNPJCPF+sLineBreak+
                     'xNome='   +AcbrNFe1.WebServices.ConsNFeDest.retConsNFeDest.ret.Items[i].resCanc.xNome+sLineBreak+
                     'IE='      +AcbrNFe1.WebServices.ConsNFeDest.retConsNFeDest.ret.Items[i].resCanc.IE+sLineBreak+
                     'dEmi='    +DateTimeToStr(AcbrNFe1.WebServices.ConsNFeDest.retConsNFeDest.ret.Items[i].resCanc.dEmi)+sLineBreak+
                     'tpNF='    +tpNFToStr(AcbrNFe1.WebServices.ConsNFeDest.retConsNFeDest.ret.Items[i].resCanc.tpNF)+sLineBreak+
                     'vNF='     +FloatToStr(AcbrNFe1.WebServices.ConsNFeDest.retConsNFeDest.ret.Items[i].resCanc.vNF)+sLineBreak+
                     'digVal='  +AcbrNFe1.WebServices.ConsNFeDest.retConsNFeDest.ret.Items[i].resCanc.digVal+sLineBreak+
                     'dhRecbto='+DateTimeToStr(AcbrNFe1.WebServices.ConsNFeDest.retConsNFeDest.ret.Items[i].resCanc.dhRecbto)+sLineBreak+
                     'cSitNFe=' +SituacaoNFeToStr(AcbrNFe1.WebServices.ConsNFeDest.retConsNFeDest.ret.Items[i].resCanc.cSitNFe)+sLineBreak+
                     'cSitConf='+SituacaoManifDestToStr(AcbrNFe1.WebServices.ConsNFeDest.retConsNFeDest.ret.Items[i].resCanc.cSitConf)+sLineBreak;
		     'TipoDoc=' +'RESCANC' +sLineBreak;
		  end;
		  if Trim(AcbrNFe1.WebServices.ConsNFeDest.retConsNFeDest.ret.Items[i].resCCe.chNFe) <> '' then
		  begin 
                     Cmd.Resposta := Cmd.Resposta+sLineBreak+
                     '[RESDOC'+Trim(IntToStrZero((I+1),3))+']'+sLineBreak+				  
		     'NSU='       +AcbrNFe1.WebServices.ConsNFeDest.retConsNFeDest.ret.Items[i].resCCe.NSU+sLineBreak+
                     'chNFe='     +AcbrNFe1.WebServices.ConsNFeDest.retConsNFeDest.ret.Items[i].resCCe.chNFe+sLineBreak+
                     'dhEvento='  +DateTimeToStr(AcbrNFe1.WebServices.ConsNFeDest.retConsNFeDest.ret.Items[i].resCCe.dhEvento)+sLineBreak+
                     'tpEvento='  +TpEventoToStr(AcbrNFe1.WebServices.ConsNFeDest.retConsNFeDest.ret.Items[i].resCCe.tpEvento)+sLineBreak+
                     'nSeqEvento='+IntToStr(AcbrNFe1.WebServices.ConsNFeDest.retConsNFeDest.ret.Items[i].resCCe.nSeqEvento)+sLineBreak+
                     'descEvento='+AcbrNFe1.WebServices.ConsNFeDest.retConsNFeDest.ret.Items[i].resCCe.descEvento+sLineBreak+
                     'xCorrecao=' +AcbrNFe1.WebServices.ConsNFeDest.retConsNFeDest.ret.Items[i].resCCe.xCorrecao+sLineBreak+
                     'tpNF='      +tpNFToStr(AcbrNFe1.WebServices.ConsNFeDest.retConsNFeDest.ret.Items[i].resCCe.tpNF)+sLineBreak+
                     'dhRecbto='  +DateTimeToStr(AcbrNFe1.WebServices.ConsNFeDest.retConsNFeDest.ret.Items[i].resCCe.dhRecbto)+sLineBreak;
	 	     'TipoDoc='   +'RESCCE' +sLineBreak;
		  end;

               end;

             
           except
              raise Exception.Create(AcbrNFe1.WebServices.ConsNFeDest.Msg);
           end;
         end
Editado por sossystem
Link para o comentário
Compartilhar em outros sites

  • Moderadores

Não pretendo enviar esta alteração para o SVN por dois motivos.

- O ACBrNFeMonitor tenta responder usando a mesma estrutura do WebService.

- Vai quebrar a compatibilidade de todos que usam da forma atual.

djsystem-logo.png
 youtube.png facebook.png instagram.png linkedin.png
André Ferreira de Moraes | Analista de Sistemas
www.djsystem.com.br | www.djpdv.com.br
www.tefhouse.com.br | www.lambretinha.com.br
Link para o comentário
Compartilhar em outros sites

Mas acredito que pra quem utiliza alem de ganhar no desempenho, ganharia na simplicidade.

E se fosse feito um parametro no INI do monitor, com default para deixar como está agora, mas quem quiser aproveitar das vantagens pode mudar esse parametro?

Ontem fiz varias consultas e é um processo demorado por si só, qualquer ganho de desempenho por parte da aplicação já seria uma grande ajuda!

Link para o comentário
Compartilhar em outros sites

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

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • 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.