Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

Postado

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.

Postado

Olá Paulo, o comando processou. Sem querer abusar mas será que vc tem algum exemplo para emissão da NFE pelo Delphi? Sou novo com desenvolvimento e não estou compreendendo muito bem como farei para criar, assinar, enviar e receber a NFE na maquina cliente.

Muito obrigado pela ajuda.

Postado

Oi Juliomar,

Os exemplos que tem na pasta do projeto são em outras linguagens (php, java e etc). Não tem nenhum exemplo de uso do ACNRMONITORPLUS para Delphi com socket. Se você conseguiu identificar algum exemplo que eu não tenha vista poderia por favor indicar qual foi.

Postado

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.

Postado

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?

  • Moderadores
Postado
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_Transparent-02.png
 

 

Postado
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

  • Fundadores
Postado

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.

Postado

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

Postado

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
Postado

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

  • Moderadores
Postado
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_Transparent-02.png
 

 

Postado

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;

 

 

 

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