Ir para conteúdo
  • Cadastre-se

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

Recommended Posts

Bom dia, estou tentando usar o ACBRNFEPLUS + Socket no Delphi. Consigo estabelecer a conexão mas todos os comandos enviados não são interpretados ou reconhecidos pelo Monitor. Será que alguém tem algum exemplo em Delphi para que eu possa entender o funcionamento no Delphi? Segue abaixo o trecho do código que eu utilizo para estabelecer a conexão e testar o envio dos comandos.

procedure TForm1.Button1Click(Sender: TObject);
begin
   ConexaoNFE := TClientSocket.Create(Self);
   ConexaoNFE.Host := '192.168.0.123';
   ConexaoNFE.Port := 3434;
   ConexaoNFE.Active := True;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  ConexaoNFE.Socket.SendText(NFe.StatusServico + #13#10);
  Memo1.Lines.Add(ConexaoNFE.Socket.ReceiveText);
end;

Já testei com:

  ConexaoNFE.Socket.SendText(NFe.StatusServico + #13);    ConexaoNFE.Socket.SendText(NFe.StatusServico + #13 + #13);  e   ConexaoNFE.Socket.SendText(NFe.StatusServico + #13#10 + #13#10);

Nenhum dos exemplos acima funciona, necessito de qualquer auxilio.

Link para o comentário
Compartilhar em outros sites

Oi Paulo,

Os exemplos que estão na pasta são para COBOL, CLIPPER, JAVA, ORACLE e PHP e o mais curioso em tudo isso é que, apesar de ter sido escrito em Pascal, nos modelos que acompanham os fontes não existe NENHUM exemplo de comunicação feito em PASCAL fato que dificulta bastante o uso.

Estou tentando me virar aqui, pescando de todos os lados e contando com a ajuda de todos do forum.

Grato pela atenção.

Link para o comentário
Compartilhar em outros sites

  • Moderadores
1 hora atrás, Antonio Bacelar disse:

TRUNK2.jpg.97b07909cc7f5af0ea02e9cf2b2d3Oi Juliomar, como falei não existe nenhum exemplo em Delphi, veja a imagem

Grato pela atenção.

 

Então não sei de onde tu tirou o Git pois o ACBr é SVN e no sourceforge !

então meu amigo tu tem algo bem errado e desatualizado!

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
 

 

Link para o comentário
Compartilhar em outros sites

2 horas atrás, Paulo Tenório disse:

Eu estou migrando de TXT para TCP. Como o processamento de comandos você já entendeu, acho que a sua dúvida agora é: como enviar os dados que alimentarão a nota e depois, como receber o XML de volta para a máquina solicitante, é isso?

É exatamente isso João, já consegui usar o componente NFE normalmente, estou com dificuldade para entender a implementação com o Monitor

Link para o comentário
Compartilhar em outros sites

3 horas atrás, Juliomar Marchetti disse:

Então não sei de onde tu tirou o Git pois o ACBr é SVN e no sourceforge !

então meu amigo tu tem algo bem errado e desatualizado!

É um espelho que está neste endereço https://github.com/GabrielF7/ACBrTrunk2/tree/master/Projetos/ACBrMonitorPLUS/Lazarus/Exemplos

Link para o comentário
Compartilhar em outros sites

  • Fundadores

O Gabriel costuma fazer um mirror do ACBr, no GIT dele... mas para isso, dependerá dele fazer o sincronismo... Veja na imagem que a última atualização ocorreu a mais de 6 meses

Use o SVN:

https://svn.code.sf.net/p/acbr/code/trunk2/Projetos/ACBrMonitorPLUS/Lazarus/Exemplos/

  • Curtir 2
Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

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

Link para o comentário
Compartilhar em outros sites

1 hora atrás, Daniel Simoes disse:

ObO Gabriel costuma fazer um mirror do ACBr, no GIT dele... mas para isso, dependerá dele fazer o sincronismo... Veja na imagem que a última atualização ocorreu a mais de 6 meses

Use o SVN:

https://svn.code.sf.net/p/acbr/code/trunk2/Projetos/ACBrMonitorPLUS/Lazarus/Exemplos/

Obrigado pela dica Daniel.

Link para o comentário
Compartilhar em outros sites

Bom dia senhores,

Prosseguindo com minha migração de TXT para TCP/IP, travei na etapa de enviar um arquivo .XML gerado na máquina precisando ser enviado para o servidor onde lo ACBrNFeMonitorPlus sendo executado. Seleciono o arquivo, carrego num componente richedit e monto a string de transmissão num TEdit para acompanhar:

EdComando.Text 'NFe.SaveToFile(' + OpenDialog1.FileName + ',' + RichEdit1.text + ')' 

Em seguida envio:   

fSocket.SendString(Trim(EdComando.Text) + ' ' +#13 + #10 + '.' + #13 + #10);

Monitorando a transmissão não consegui encontrar o problema, a string de comando é montada corretamente, a recepção no servidor exibe o conteúdo correto na tela do ACBrNFeMonitorPlus mas, o arquivo gravado perde alguns caracteres iniciais, retornando a mensagem de arquivo corrompido ao ser aberto no destino.

Nas etapas anteriores não tive este problema porque estava apenas enviando a string de comandos e recebendo as respostas em texto puro. em anexo os dois arquivos .XML, o original perfeito e o gravado no servidor sem os primeiros caracteres:

Alguém já passou por isso ou pode me ajudar com outra forma?

teste-nfe(gravado no servidor).xml

teste-nfe(original, antes de ser enviado).xml

Link para o comentário
Compartilhar em outros sites

Encontrei a solução para o meu problema. Bastou enviar aspas duplas antes e depois do conteúdo a ser gravado no arquivo destino:

EdComando.Text := 'ACBR.SaveToFile(' + OpenDialog1.FileName + ',"' + RichEdit1.text + '")';

fSocket.SendString(Trim(EdComando.Text) + ' ' +#13 + #10 + '.' + #13 + #10);

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Moderadores
18 horas atrás, Antonio Bacelar disse:

Oi Paulo,

Não entendi muito bem sua implementação, fiquei confuso com os tipos de componentes você utilizou, será que pode enviar uma parte maior do código? Também estou tentando implementar mais estou tendo muitas dificuldades para emitir a NFE no terminal

Tu já tentou olhar no svn em especifico na pasta do projeto do ACBrMonitorPLUS?

bom lá tem um exemplo em lazarus que por incrível que pareça é pascal, abras as units nem que seja no bloco de notas e veja o mesmo!

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
 

 

Link para o comentário
Compartilhar em outros sites

Antonio,

As poucas linhas que apresentei são de um projeto de testes, onde estudo os comportamentos e etapas antes de realizar a migração de .txt para TCP/IP. Me baseei no exemplo, em Lazarus, que o Juliomar sugere e nos resultados de longas tentativas e erros. Cheguei ao projeto final e já finalizei a comunicação com todas as situações funcionando: Envio comandos para o servidor, trato as respostas vindas do servidor, envio arquivos XML para o servidor, recebo arquivos XML do servidor, copio e apago arquivos existentes dentro do servidor.

 

Componentes envolvidos:

TBlockSocket da unit blcksock; para conexão;

TStringList para armazenar as respostas com vários itens do servidor e depois salvar num arquivo .ini para tratar os dados;

Variável String para armazenar as respostas simples do servidor;

TXMLDocument para armazenar XML envolvido no envio ou recepção;

 

Fragmentos de código com exemplos, acho que é mais do que suficiente para você estudar e adaptar ao seu trabalho. Boa sorte:

   Conexão:

   fSocket := TBlockSocket.Create;
   fSocket.Connect(Modulo.Nfe_MonitorServidor, Modulo.Nfe_MonitorTCP_Porta);
   RetornoACBr := UpperCase(Trim(fSocket.RecvTerminated(5000, #3)));

 

Verificar NFe no Servidor e imprimir:
   fSocket.SendString('NFe.FileExists(' + Modulo.sPathNFE + '\' + Trim(Dsadnotasai.Dataset.Fieldbyname('Nfe_Arqxml').Asstring) + ')' + #13#10 + '.' + #13#10);
   RetornoACBr := UpperCase(Trim(fSocket.RecvTerminated(5000, #3)));
   IF (RetornoACBr = 'OK:') THEN
   BEGIN
      hLog.Add(DateTimeToStr(now) + ' - Carregar o arquivo XML...');
      fSocket.SendString('NFe.LoadfromFile(' + Modulo.sPathNFE + '\' + Trim(Dsadnotasai.Dataset.Fieldbyname('Nfe_Arqxml').Asstring) + ', 3)' + #13#10 + '.' + #13#10);
      ACBrNFe1.NotasFiscais.LoadFromString(fSocket.RecvTerminated(5000, #3));
      ACBrNFe1.Notasfiscais.Imprimir;
   END
   ELSE
   BEGIN
      hLog.Add(DateTimeToStr(now) + ' - Não encontrado o arquivo XML:  ' + Modulo.sPathNFE + '\' + Trim(Dsadnotasai.Dataset.Fieldbyname('Nfe_Arqxml').Asstring));
      ShowMessage('ATENÇÃO!!! ' + #10#13 + 'O arquivo XML deste documento não foi localizado no servidor.' + #10#13 + RetornoACBr);
   END;
 
 
PROCEDURE Tmodulo.VerificaStatusWS;
VAR
   RespostaMonitor :TStringList;
   OK :Boolean;
   Ini :TIniFile;
BEGIN
   hLog.Add(DateTimeToStr(now) + ' - VerificaStatusWS (INÍCIO).');
   RespostaMonitor := TStringList.Create;
   hLog.Add(DateTimeToStr(now) + ' - Envio de Status...');
   TRY
      RespostaMonitor := SolicitaMonitor('NFe.StatusServico');
   EXCEPT
      ON E :Exception DO
      BEGIN
         Mensagem := 'Falha ao consultar o Status do WebServer SEFAZ.' + sLineBreak + E.Message;
         hLog.Add(DateTimeToStr(now) + ' - ' + Mensagem);
         RAISE Exception.Create(Mensagem);
      END;
   END;
   hLog.Add(DateTimeToStr(now) + ' - Resposta de Status recebida.');
   WHILE FileExists(ExtractFilePath(Application.ExeName) + 'VerificaStatusWS.ini') DO
   BEGIN
      DeleteFile(PChar(ExtractFilePath(Application.ExeName) + 'VerificaStatusWS.ini'));
   END;
   RespostaMonitor.SaveToFile(ExtractFilePath(Application.ExeName) + 'VerificaStatusWS.ini');
   WHILE NOT FileExists(ExtractFilePath(Application.ExeName) + 'VerificaStatusWS.ini') DO
   BEGIN
      sleep(100);
   END;
   Ini := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'VerificaStatusWS.ini');
   DataHoraSEFAZ := Trim(Ini.ReadString('STATUS', 'DhRecbto', ''));
   WHILE FileExists(ExtractFilePath(Application.ExeName) + 'VerificaStatusWS.ini') DO
   BEGIN
      DeleteFile(PChar(ExtractFilePath(Application.ExeName) + 'VerificaStatusWS.ini'));
   END;
   hLog.Add(DateTimeToStr(now) + ' - VerificaStatusWS (FIM).');
END;
 
 
Enviar arquivo para o servidor:
      // ler para uma variável
      XMLDocument1.LoadFromFile(Modulo.Nfe_Local + '\' + ExtractFileName(Modulo.AdNotaSai.Fieldbyname('Nfe_ArqXML').Asstring));
      //enviar conteúdo salvando pelo TCP 
      Modulo.SolicitaMonitor('ACBR.SaveToFile(' + Modulo.sPath + '\' + ExtractFileName(Modulo.AdNotaSai.Fieldbyname('Nfe_ArqXML').Asstring) + ',"' + XMLDocument1.XML.Text + '")');
 
 
FUNCTION Tmodulo.SolicitaMonitor(Comando :STRING) :TStringList;
VAR
   RetornoACBr :TStringList;
   RespostaACBrMonitor :STRING;
   OK :Boolean;
BEGIN
   hLog.Add(DateTimeToStr(now) + ' - SolicitaMonitor (Ínício).');
   // *******************************************************************************
   hLog.Add(DateTimeToStr(now) + ' - Conectar no Servidor de Documentos Fiscais...');
   fSocket := TBlockSocket.Create;
   fSocket.Connect(Modulo.Nfe_MonitorServidor, Modulo.Nfe_MonitorTCP_Porta);
   RespostaACBrMonitor := fSocket.RecvTerminated(5000, #3);
   OK := (Copy(RespostaACBrMonitor, 1, 11) = 'ACBrMonitor');
   IF OK THEN
   BEGIN
      hLog.Add(DateTimeToStr(now) + ' - Conectado ao Servidor de Documentos Fiscais.');
   END
   ELSE
   BEGIN
      hLog.Add(DateTimeToStr(now) + ' - Não Conectado ao Servidor de Documentos Fiscais.');
      RAISE Exception.Create(User + ', Não foi possível conectar ao Servidor de Documentos Fiscais.' + #10#13 + 'Provavelmente nossa conexão internet ou o próprio Servidor estejam sobrecarregados ou inativos.' + #10#13 +
         'Espere alguns instantes e tente novamente.');
   END;
   // *******************************************************************************
 
   // *******************************************************************************
   hLog.Add(DateTimeToStr(now) + ' - Enviar comando: ' + Comando);
   fSocket.SendString(Comando + #13#10 + '.' + #13#10);
   RespostaACBrMonitor := fSocket.RecvTerminated(5000, #3);
   OK := (Trim(RespostaACBrMonitor) <> '');
   IF OK THEN
   BEGIN
      RetornoACBr := TStringList.Create;
      hLog.Add(DateTimeToStr(now) + ' - Recebida resposta do WebServer da SEFAZ.');
   END
   ELSE
   BEGIN
      hLog.Add(DateTimeToStr(now) + ' - Recebida resposta inválida do Servidor de Documentos Fiscais.');
      RAISE Exception.Create(User + ', Não foi possível receber uma resposta válida do WebServer da SEFAZ.' + #10#13 + 'Provavelmente ele esteja sobrecarregado ou enfrentando período de instabilidade' + #10#13 +
         'Espere alguns instantes e tente novamente.');
   END;
   RetornoACBr.Add('[Resposta]' + #13#10 + RespostaACBrMonitor);
   hLog.Add(DateTimeToStr(now) + ' - Resposta do comando: ' + Comando + ' recebida.');
   // *******************************************************************************
 
   fSocket.CloseSocket;
   hLog.Add(DateTimeToStr(now) + ' - Servidor de Documentos Fiscais desconectado.');
   Result := RetornoACBR;
   hLog.Add(DateTimeToStr(now) + ' - SolicitaMonitor (Fim)');
END;

 

 

 

Link para o comentário
Compartilhar em outros sites

  • 2 meses depois ...
  • Este tópico foi criado há 2988 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.