Ir para conteúdo
  • Cadastre-se

dev botao

Enviar arquivo via TCP/IP para o ACBRNFeMonitor


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

Recommended Posts

Boa tarde amigos,

Utilizo o monitor centralizado na matriz da empresa utilizando apenas um certificado A3 para todas as operações. Simultaneamente todos os usuários geram, validam, assinam e transmitem as notas normalmente, inclusive as filiais remotas que logam numa VPN e participam da movimentação de notas com o monitor através de arquivos TXT.

Um novo projeto de rede irá acabar com a VPN e as filiais remotas só se comunicarão com o servidor através de um nome fixo (ddns). O acesso ao banco de dados já está implementado, o e-mail da intranet também. Agora chegou a vez do monitor e já comecei a fazer as alterações nos sistemas para enviar solicitações via TCP/IP, o único problema é que cada usuário cria o XML na própria máquina, num segundo momento ele copia o XML para o servidor realizar as operações que exigem certificado. Os usuários internos não terão dificuldades, continuarão copiando seus arquivos para a pasta compartilhada no servidor, o problema será com as filiais que não terão mais uma pasta mapeada para enviar seus arquivos.

Existe alguma maneira de enviar via TCP/IP o xml para o monitor assinar e submeter à SEFAZ ?

Depois de processar e receber a autorização da SEFAZ, tem alguma forma ou comando que permita ao monitor devolver esse XML via TCP/IP também?

Obrigado,

 

Editado por Paulo Tenório
Link para o comentário
Compartilhar em outros sites

Sim Daniel, já testei a comunicação TCP/IP e sei que funciona. Já caí na pegadinha do  #13 + #10 + '.' + #13 + #10  e agora está redondinho na troca de solicitações/respostas.

Existem várias maneiras diferentes de trocar arquivos via TCP/IP mas todas que achei envolvem deixar rodando uma outra aplicação servidora e o que eu quero é deixar apenas o ACBRMonitor.

Minha esperança é que exista alguma forma de enviar o XML não assinado de uma nota para o monitor em TCP/IP. Em seguida enviarei os comandos de validar, assinar e enviar esse XML à SEFAZ. Quando o XML estiver devidamente autorizado com protocolo, recibo, etc, preciso que o monitor o devolva para atualizar o original que ficou lá na filial solicitante.

 

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Bom dia Paulo!
Eu não uso pela opção TCP/IP e no momento estou com o tempo curto para montar a estrutura e testar.
Mas vc já deu uma olhada nos comandos NFe.LoadFromFile()  e SaveToFile()?
Não posso te afirmar, mas pode ter uma saída com um destes comandos.

 

  • Curtir 1


logoacbr.pngConheça o Portal do Projeto ACBr

Ajude o Projeto ACBr crescer - Assine o SAC ACBr
Assine um dos planos de longa duração do SAC ACBr, obtenha Descontos Especiais, Parcele no Cartão e ainda ganhe Brindes Exclusivos. Saiba mais aqui

Conheça o ACBrLib, o ACBr de forma nativa para qualquer linguagem de programação. Saiba mais aqui

 

 

 

 

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Todos os comandos que estão disponíveis via TXT, estão disponíveis via TCP.

Se vc deseja salvar um arquivo na máquina que o ACBrMonitor está rodando, use o comando NFe.SavetoFile(cNomeArq,cConteudoArq) e para ler um arquivo que está na máquina que o ACBrMonitor está rodando, use o comando NFe.LoadfromFile(cNomeArq,nSegundos) 

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

Bom dia , Paulo

Eu tenho a comunicação TCP, consigo conectar , você poderia me ajudar na parte do recebimento desta resposta como por exemplo :
NFe.LoadfromFile("C:\RW MONITOR\EMPRESA 1\PASTA XML\201510\NFe\35151004592149000168570010000089221000046373-NFe.XML",3)

Teria como você me envia sua rotina de como captar o arquivo ? quando eu sei que o arquivo já esta na minha maquina ? esta são minha duvidas.

Obrigado

Link para o comentário
Compartilhar em outros sites

Walter,

 

Tente algo do tipo:

   fSocket.SendString('NFe.FileExists(C:\ACBrNFeMonitor\nfe\32151027550193001344550010000037591000037591-nfe.xml)' + #13 + #10 + '.' + #13 + #10);
   IF (Trim(fSocket.RecvTerminated(5000, #3)) = 'OK:') THEN
   BEGIN
      IF SaveDialog1.Execute THEN
      BEGIN
         fSocket.SendString('NFe.LoadfromFile(C:\ACBrNFeMonitor\nfe\32151027550193001344550010000037591000037591-nfe.xml,3) + #13 + #10 + '.' + #13 + #10);
         richedit1.Text := fSocket.RecvTerminated(5000, #3);
         richedit1.Lines.SaveToFile(SaveDialog1.FileName);
      END;
   END
   ELSE
   BEGIN
      ShowMessage('ARQUIVO NÃO LOCALIZADO');
   END;

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Existe um projeto de exemplo de comunicação TCP com o Monitor, em Pascal (Lazarus), na pasta de Exemplos do ACBrMonitor

Amigos,

Funcionou tudo certinho no envio e no recebimento de arquivos de texto. Agora preciso tentar enviar ou receber executáveis, pdfs, etc. Nos testes que fiz os arquivos chegaram mas estavam corrompidos.

Alguém conhece alguma forma de contornar isso ?

 

Muito obrigado.

Dependerá muito de como você trata os dados recebidos... usar um TStringList para salvar o arquivo, não funcionará... você pode usar uma classe derivada de TStream por exemplo...

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

Boa tarde

Montei o exemplo conforme com fSocket, porem não recebo os dados loadfromfile com o conteúdo do XML recebo somente o conteúdo abaixo , como que vocês fazer para receber as informações loadfromfile por exemplo. estou usando desta forma :

no evento do botão coloquei

//inicio

Var
 Retorno: String;
 fSocket: TTCPBlockSocket;
begin
 fSocket:= TTCPBlockSocket.Create;
 fSocket.ConnectionTimeout:= 15000;
 fSocket.Connect(FrmPrincipal.idTCP.Host, IntToStr(FrmPrincipal.idTCP.Port));

 fSocket.SendString('CTe.LoadfromFile("C:\RW MONITOR\EMPRESA 1\PASTA XML\201510\CTe\35151004592149000168570010000089221000046373-CTe.XML", 3)'+sLineBreak+'.'+sLineBreak);

 Memo1.Lines.Clear;
 Retorno:= fSocket.RecvTerminated(10000, #3);
 Memo1.Lines.Add(Retorno);

 if COPY(trim(Retorno),1,2) <> 'OK' then
  Raise Exception.Create('Erro na Validação dos Dados, Veja o LOG !!!');

 richedit1.Lines.SaveToFile(SaveDialog1.FileName);

//fim da rotina

ComoACBrNFeMonitor2 Ver. 0.8.11.1 - CAPICOM
Conectado em: 24/10/15 12:32:19
Máquina: 191.182.169.1
Esperando por comandos.

 

Link para o comentário
Compartilhar em outros sites

Bom dia, a Todos

Consegui resolver o caso acima !!!
Gostaria que os colegas pudessem me ajudar de qual forma poderia ler o retorno por exemplo Consulta de Cadastro , como estão fazendo ?

Hoje eu salvo o retorno como um arquivo TXT, abro ele , e percorro , linha a linha e pegando as informações , fazendo as comparações  .
Mas gostaria de saber se há alguma outro forma , mais fácil e rápida de capturar os dados deste retorno .

Uma parte do trecho do código !!!

  While not eof(A) do
  begin
   Readln(A,linha); //le do arquivo e desce uma linha. O conteúdo lido é transferido para a variável linha

    PosBarra:=Pos('NProt=', linha);
    if Posbarra > 0 then
    begin
     Delete(linha,1,6);
     ProtocoloCTE:= linha;
    end;
end;


Obrigado

Link para o comentário
Compartilhar em outros sites

  • Fundadores

O Monitor retorna arquivos no formato .INI...

Acredito que (quase) todas as linguagens suporte a manipulação de arquivos nesse formato...

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

  • Este tópico foi criado há 3073 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.