Ir para conteúdo
  • Cadastre-se

dev botao

Acbrnfemonitor Tcp/ip - Xharbour


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

Recommended Posts

Pessoal

 

 

Boa noite

 

 

Antes de tudo já quero me defender que garimpei minha dúvida no fórum e não a encontrei. Como minha questão é específica para uma ferramenta fora do contexto de desenvolvimento dos aplicativos Acbr: DELPHI e LAZARUS, talvez tenha sido essa a dificuldade de não encontrar tal ajuda no fórum, contudo, estou tentado alterar minha maneira de consumir o NFEMONITOR de comandos TXT para TCP/IP, para tanto segue abaixo as condições e a dúvida:

 

1 - Estabeleci uma máquina com windows server

2 - Instalei nfemonitor

3 - Configurei como Tcp/Ip, usando a porta padrão 3436

4 - Liberei na rede a referida porta

5 - Fiz os testes com o TELNET tanto no servidor quanto na estação cliente com sucesso

6 - Desenvolvi uma pequena rotina de comunicação entre uma estação (Cliente) e o servidor

7 - Envio comando da estação, os quais são recebidos com sucesso

8 - Aí que a porca torceu o rabo. O problema é, na recepção sempre vem o lixo da condição de status do nfemonitor antes de minhas resposta, conforme abaixo:

 

(a) - Condição de status do nfemonitor:

 

ACBrNFeMonitor2 Ver. 0.8.3.2 - CAPICOM

Conectado em: 22/05/14 19:44:00
Máquina: 192.168.0.52
Esperando por comandos.

(B) - Resposta do comando:

 

OK: Servico em Operação
[sTATUS]
Versao=4.00
TpAmb=2
VerAplic=4.00
CStat=107
XMotivo=Servico em Operacao
CUF=29
DhRecbto=22/5/2014 19:44:08
TMed=1
DhRetorno=30/12/1899
XObs=

Alguém saberia me dizer como fazer pra não receber o status do nfemonitor e somente resposta do comando?

 

 

[]s,

 

Jorge Andrade

 

"Quem tem medo de perguntar, está fadado a eternizar-se na dúvida - [Jorge Andrade]";
 

"A soberba,  é o sentimento caracterizado pela pretensão de superioridade sobre as demais pessoas, levando a manifestações ostensivas de arrogância, por vezes sem fundamento algum em fatos ou variáveis reais - [Desconhecido";
 

"Aquele  que pesquisa antes de indagar, tem a grande chance de dirimir as suas dúvidas, fixar o aprendizado da pesquisa e evoluir para outros conhecimentos inesperados - [Jorge Andrade]";
 

"Os políticos e as fraldas devem ser trocados frequentemente e pela mesma razão - [Éça de Queiroz]".

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Boa noite

Jorge chegou a conferir se as suas variáveis são limpas após enviar ou receber um comando?

e o mesmo comando acima, chegou a fazer no telnet e verificar se por acaso ele faz 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

  • Moderadores

Tenho a seguinte rotina de inicialização da comunicação com o ACBrNFeMonitor. Nela descarto a mensagem de boas vindas.
 

************************************************************************
Function NFE_INIT()   // Abre a comunicação com o ACBrNFeMonitor
************************************************************************
Local P, RET := .T., TFIM, IP, PORTA, RESP, WARQ, TEMP
 
WARQ := 'nfe'+strzero(P_TERMINAL,2)+'.rel'
 
if ! file(WARQ)
   WARQ := 'nfe.rel'
 
   if ! file(WARQ) // terminal nao precisa acessar o ACBr.
      return .t.
   endif
endif
 
if ! empty(sENDER)  // Já  está  aberto...
   return .t.
endif
     
if file(WARQ)
   if CREL_CABEC(WARQ)
      sENDER := CREL_LE('ENDERECO')
   endif
   CREL_END()
else
  ALERTA('Arquivo NFE.REL ou NFE'+strzero(P_TERMINAL,2)+'.REL|nao encontrado.',,,COR_ERRO)
 
  return .F.
endif
 
IP       := ''
PORTA    := 0
 
#ifdef __XHARBOUR__
if ! (PATH_DEL $ sENDER)   /// Abrir comunicacao TCP/IP
   P := at(':',sENDER)
   if P = 0
      P := len(sENDER)+1
   endif
 
   IP    := substr(sENDER,1,P-1)
   if empty(IP)
      RET := .F.
   else
      PORTA := val(substr(sENDER,P+1))
      if PORTA = 0
         PORTA := 3436
      endif
 
      inetinit()
 
      RET := .F.
 
      TFIM := Seconds() + 5             /// Tenta conectar durante 5 segundos ///
      do while Seconds() < TFIM .and. ! RET
         sSOCKET := inetconnect(IP,PORTA)
         RET     := (ineterrorcode(sSOCKET) = 0)
 
         MySleep(500)
      enddo
   endif
 
   if RET
      InetSetTimeout( sSOCKET, 3000 )   // Timeout de Recepção 3 seg //
      RESP := InetRecvEndBlock( sSOCKET, ETX )
      RET  := ('ACBrNFeMonitor' $ RESP )   // Recebeu as boas vindas ?
   endif
endif
#endif
 
if PATH_DEL $ sENDER   /// Abrir comunicacao TXT
   if right(sENDER,1) <> PATH_DEL
      sENDER := sENDER + PATH_DEL
   endif
endif
 
if ! RET
   sENDER := ''
endif
 
return RET
  • 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

  • Moderadores

Antes de enviar o comando que vc deseja, faça uma leitura da resposta, com isto ele limpa a informação.


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

Antes de tudo, obrigado a todos pela resposta, farei os testes conforme as mesmas, mas antecipando algumas respostas.

Juliomar,  no TELNET isso não ocorre, ou seja a resposta que o telnet recebe não é interpretativa, comando com sucesso vem somente a resposta do comando correto, mas qdo dá erro por algum comando indevido ele recebe apenas o CHR(3).

Com relação ao trecho da rotina do André, vou analisar calmamente e ver onde estou errando  e sobre a do Kiko, farei inicialmente isso, ao abrir a conexão, farei uma recepção para limpar o BUFFER e em seguida o ENVIO e depois uma nova RECEPÇÃO pera ver se recebo o comando limpo.

 

[]s,

Jorge Andrade

 

"Quem tem medo de perguntar, está fadado a eternizar-se na dúvida - [Jorge Andrade]";
 

"A soberba,  é o sentimento caracterizado pela pretensão de superioridade sobre as demais pessoas, levando a manifestações ostensivas de arrogância, por vezes sem fundamento algum em fatos ou variáveis reais - [Desconhecido";
 

"Aquele  que pesquisa antes de indagar, tem a grande chance de dirimir as suas dúvidas, fixar o aprendizado da pesquisa e evoluir para outros conhecimentos inesperados - [Jorge Andrade]";
 

"Os políticos e as fraldas devem ser trocados frequentemente e pela mesma razão - [Éça de Queiroz]".

Link para o comentário
Compartilhar em outros sites

  • 2 meses depois ...

Boa Noite, Amigos !

 

Pegando carona aqui da duvida do amigo Jorge Andrade,

 

Também estou com a mesma dificuldade de eliminar a Msg de boas vindas do ACBrNFeMonitor

Ainda tenho um outro problema mais grave: Quando envio comandos de dois terminais ao mesmo tempo, a resposta em algumas vezes volta para o terminal errado.

Exemplo: Comando NFe.ConsultaCadastro() 

Terminal1, Consulta Cadastro1

Terminal2, Consulta Cadastro2

 

Resposta: Cadastro1 -> Terminal2

                 Cadastro2 -> Terminal1

 

A vezes repete a mesma consulta nos dois terminais e ainda não consegui descobrir o problema !!!

 

Forte abraço a todos.

Toninho Silva ( SysTux )

 

Link para o comentário
Compartilhar em outros sites

Boa Noite, Amigos !

 

Pegando carona aqui da duvida do amigo Jorge Andrade,

 

Também estou com a mesma dificuldade de eliminar a Msg de boas vindas do ACBrNFeMonitor

Ainda tenho um outro problema mais grave: Quando envio comandos de dois terminais ao mesmo tempo, a resposta em algumas vezes volta para o terminal errado.

Exemplo: Comando NFe.ConsultaCadastro() 

Terminal1, Consulta Cadastro1

Terminal2, Consulta Cadastro2

 

Resposta: Cadastro1 -> Terminal2

                 Cadastro2 -> Terminal1

 

A vezes repete a mesma consulta nos dois terminais e ainda não consegui descobrir o problema !!!

 

Forte abraço a todos.

Systux

 

Boa tarde

 

Eu resolvi o problema com a rotina acima que o André disponibilizou. Sobre usar várias estações simultânea eu ainda não fiz, mas fiquei satisfeito com a solução apresentada pod ele e até me arriscaria a dizer que meu proberma está resolvido para esta questão, embora tive que parar os testes, em virtude da grande quantidade de obrigações  surgidas.

Fiquei curioso com sobre.a sua questão "Quando envio comandos de dois terminais ao mesmo tempo, a resposta em algumas vezes volta para o terminal errado", achei que isso fosse impossível, visto que, pela própria caracteristica (engenharia) da comunicação TCP/IP (Camadas), os pacotes enviados por um determinando aplicativo, reriam as suas respostas somente retornadas apenas para a origem ou para o seu controlador., diante disso, até continuarei os testes utilizandos mais que uma estação, inclusive submentendo as mesmas tarefas.

 

 

 

[]s,

Jorge Andrade

 

"Quem tem medo de perguntar, está fadado a eternizar-se na dúvida - [Jorge Andrade]";
 

"A soberba,  é o sentimento caracterizado pela pretensão de superioridade sobre as demais pessoas, levando a manifestações ostensivas de arrogância, por vezes sem fundamento algum em fatos ou variáveis reais - [Desconhecido";
 

"Aquele  que pesquisa antes de indagar, tem a grande chance de dirimir as suas dúvidas, fixar o aprendizado da pesquisa e evoluir para outros conhecimentos inesperados - [Jorge Andrade]";
 

"Os políticos e as fraldas devem ser trocados frequentemente e pela mesma razão - [Éça de Queiroz]".

Link para o comentário
Compartilhar em outros sites

Jorge, Boa Tarde !

 

Obrigado por responder.

 

Vou tentar implementar a rotina do André, um dos grandes mentores do ACBrNfeMonitor.

 

Quando possível, teste enviando os comandos de mais terminais ao mesmo tempo, veja se retorna ao terminal correto:

Vou deixar aqui a FUNC quei criei e estou testando, talvez consigo encontrar o erro com a ajuda de vocês.

#DEFINE LINE Chr(13) + Chr(10) + chr(46) + Chr(13) + Chr(10) // ACBr TCP/IP
#DEFINE CRLF Chr(13) + Chr(10)
#DEFINE ETX  Chr(3)


*---------------------*
* Consulta WebService *
*---------------------*
Func WebService( xRet )

   Cabec("Consulta Disponibilidade do WebService")
   Fundo()
   Rodape()       

   cWeb := 'NFE.StatusServico()' + LINE
   cWeb += 'NFE.Fim'             + LINE

   vRet := ACBr( cWeb )

   If AT("ERRO", Upper( vRet ) ) > 0
      Mostra_Retorno( vRet, .f. )
   Else
      Mostra_Retorno( vRet, .t. )
   Endif

Return Menu_NFe( xRet )

*----------------------------------------------*
* Enviar Comandos e Retornar Resposta Via ACBr *
*----------------------------------------------*
Func ACBr( cComando, cRetorno )
      
   cHost := "192.168.1.20"
   nPort := 3436

   If !File( "nfe.ini" )
      cRetorno := "ERRO: Arquivo <nfe.ini> Inexistente."
   Else

      // Initialize Sockets System And Connect to Server
      INetInit()
           
      Alerta(":Testando a Internet:",,,.T.)
      pSocket := INetConnect( "www.google.com.br", 80 )   
   
      If INetErrorCode( pSocket ) <> 0
         cRetorno := "ERRO: Falha ao Conectar-se a Internet."

      Else

         Alerta(":Aguardando Monitor: ",,,.T.)
         pSocket := INetConnectIP( cHost, nPort )

         If INetErrorCode( pSocket ) <> 0
            cRetorno := "ERRO: Monitor NFe Falhou, IP: " + cHost + ":" + LTRIM( Str( nPort ) )            

         Else

            Alerta(":Enviando Solicita‡„o:",,,.T.)

            nBytes   := INetSend( pSocket, cComando  )
            cBuffer  := Space(4096)
            cRetorno := ""

            Do While ( nBytes > 0 )
               cBuffer  := Space(4096)
               nBytes   := INetRecv( pSocket, @cBuffer )
               cRetorno += Left( cBuffer, nBytes )
            Enddo

         Endif

      Endif
            
      INetClose( pSocket )
      INetCleanUp()

   Endif
   
   cRetorno := StrTran( cRetorno, chr(3), "" )
   cRetorno := ConvToOemCP( cRetorno )
      
Return ( cRetorno )
** xx **

*-----------------------------*
* Mostra Retorno              *
* lCor_ = .t. OK   (Azul)     *
*       = .f. ERRO (Vermelho) *
*-----------------------------*
Proc Mostra_Retorno( cRet_, lCor_ )

    vCor  := SetColor()
    lCor_ := If( lCor_ == NIL, .t., lCor_ )

    If lCor_
       SetColor("w+/b, w+/b, , , w+/b")
    Else
       SetColor("w+/r, w+/r, , , w+/r")
    Endif

    SvBx := SaveScreen( 9, 0, 22, 77 )
    SBox( 10, 1, 21, 75 )

    Rodape()

    SetCursor(2)
    MemoEdit( cRet_, 11, 2, 20, 74, .F.) // .F. NÆo Editar MemoEdit
    SetCursor(0)
    
    SetColor ( vCor )

    RestScreen( 9, 0, 22, 77, SvBx )

** End Proc**



Editado por systux

Toninho Silva ( SysTux )

 

Link para o comentário
Compartilhar em outros sites

Boa Noite a Todos !

 

Fiz vários testes inclusive adaptei minha rotina seguindo a rotina do André.

Consegui eliminar as Boas Vindas do ACBr.

Mas a questão de retornar o a resposta para o terminal errado, ainda continua..., esta me tirando o sono!

 

Obrigado a Todos.

Toninho Silva ( SysTux )

 

Link para o comentário
Compartilhar em outros sites

Boa Noite a Todos !

 

Fiz vários testes inclusive adaptei minha rotina seguindo a rotina do André.

Consegui eliminar as Boas Vindas do ACBr.

Mas a questão de retornar o a resposta para o terminal errado, ainda continua..., esta me tirando o sono!

 

Obrigado a Todos.

Systux

 

Amanhã farei testes utilizando mais de ua estação simultaneamente pra ver se tenho este problema.

 

[]s,

Jorge Andrade

 

"Quem tem medo de perguntar, está fadado a eternizar-se na dúvida - [Jorge Andrade]";
 

"A soberba,  é o sentimento caracterizado pela pretensão de superioridade sobre as demais pessoas, levando a manifestações ostensivas de arrogância, por vezes sem fundamento algum em fatos ou variáveis reais - [Desconhecido";
 

"Aquele  que pesquisa antes de indagar, tem a grande chance de dirimir as suas dúvidas, fixar o aprendizado da pesquisa e evoluir para outros conhecimentos inesperados - [Jorge Andrade]";
 

"Os políticos e as fraldas devem ser trocados frequentemente e pela mesma razão - [Éça de Queiroz]".

Link para o comentário
Compartilhar em outros sites

Muito obrigado, Jorge Andrade.

 

Se você puder postar aqui seu trecho de código, envio e retorno via tcp/ip fico agradecido.

 

Talvez estou errando em algum lugar da minha func().

 

Forte abraço;

E mais uma vez, obrigado a todos!

Toninho Silva ( SysTux )

 

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Jorge, Boa Tarde !

 

Obrigado por responder.

 

Vou tentar implementar a rotina do André, um dos grandes mentores do ACBrNfeMonitor.

 

Quando possível, teste enviando os comandos de mais terminais ao mesmo tempo, veja se retorna ao terminal correto:

Vou deixar aqui a FUNC quei criei e estou testando, talvez consigo encontrar o erro com a ajuda de vocês.

#DEFINE LINE Chr(13) + Chr(10) + chr(46) + Chr(13) + Chr(10) // ACBr TCP/IP
#DEFINE CRLF Chr(13) + Chr(10)
#DEFINE ETX  Chr(3)


*---------------------*
* Consulta WebService *
*---------------------*
Func WebService( xRet )

   Cabec("Consulta Disponibilidade do WebService")
   Fundo()
   Rodape()       

   cWeb := 'NFE.StatusServico()' + LINE
   cWeb += 'NFE.Fim'             + LINE

   vRet := ACBr( cWeb )

   If AT("ERRO", Upper( vRet ) ) > 0
      Mostra_Retorno( vRet, .f. )
   Else
      Mostra_Retorno( vRet, .t. )
   Endif

Return Menu_NFe( xRet )

*----------------------------------------------*
* Enviar Comandos e Retornar Resposta Via ACBr *
*----------------------------------------------*
Func ACBr( cComando, cRetorno )
      
   cHost := "192.168.1.20"
   nPort := 3436

   If !File( "nfe.ini" )
      cRetorno := "ERRO: Arquivo <nfe.ini> Inexistente."
   Else

      // Initialize Sockets System And Connect to Server
      INetInit()
           
      Alerta(":Testando a Internet:",,,.T.)
      pSocket := INetConnect( "www.google.com.br", 80 )   
   
      If INetErrorCode( pSocket ) <> 0
         cRetorno := "ERRO: Falha ao Conectar-se a Internet."

      Else

         Alerta(":Aguardando Monitor: ",,,.T.)
         pSocket := INetConnectIP( cHost, nPort )

         If INetErrorCode( pSocket ) <> 0
            cRetorno := "ERRO: Monitor NFe Falhou, IP: " + cHost + ":" + LTRIM( Str( nPort ) )            

         Else

            Alerta(":Enviando Solicita‡„o:",,,.T.)

            nBytes   := INetSend( pSocket, cComando  )
            cBuffer  := Space(4096)
            cRetorno := ""

            Do While ( nBytes > 0 )
               cBuffer  := Space(4096)
               nBytes   := INetRecv( pSocket, @cBuffer )
               cRetorno += Left( cBuffer, nBytes )
            Enddo

         Endif

      Endif
            
      INetClose( pSocket )
      INetCleanUp()

   Endif
   
   cRetorno := StrTran( cRetorno, chr(3), "" )
   cRetorno := ConvToOemCP( cRetorno )
      
Return ( cRetorno )
** xx **

*-----------------------------*
* Mostra Retorno              *
* lCor_ = .t. OK   (Azul)     *
*       = .f. ERRO (Vermelho) *
*-----------------------------*
Proc Mostra_Retorno( cRet_, lCor_ )

    vCor  := SetColor()
    lCor_ := If( lCor_ == NIL, .t., lCor_ )

    If lCor_
       SetColor("w+/b, w+/b, , , w+/b")
    Else
       SetColor("w+/r, w+/r, , , w+/r")
    Endif

    SvBx := SaveScreen( 9, 0, 22, 77 )
    SBox( 10, 1, 21, 75 )

    Rodape()

    SetCursor(2)
    MemoEdit( cRet_, 11, 2, 20, 74, .F.) // .F. NÆo Editar MemoEdit
    SetCursor(0)
    
    SetColor ( vCor )

    RestScreen( 9, 0, 22, 77, SvBx )

** End Proc**



Não sei se entendi direito seu código, mas aparentemente vc abre a conexão para cada comando e ae está o problema.

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, André !

 

Muito obrigado por responder !

 

INetInit() // Uma unica vez no começo da função, depois vou testando com INETConnect()

 

//Testo a Internet

pSocket := INetConnect( "www.google.com.br", 80 )

If INetErrorCode( pSocket ) <> 0

 

// Testo o Monitor

pSocket := INetConnectIP( cHost, nPort )
If INetErrorCode( pSocket ) <> 0

 

Se tudo passar no teste, ai sim eu envio o comando

INetSend( pSocket, cComando )

 

Não funciona assim ?

Nunca trabelhei com Sockets de Internet

 

Forte abraço;

Toninho Silva ( SysTux )

 

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Mas depois vc chama INetClose e acaba fechando a conexão. Então a cada comando vc abre novamente e dae pode receber alguma resposta q ficou perdida.

Eu tenho basicamente 3 funções:

NFE_INIT - Postei acima e abre uma conexão TCP e chamo apenas qdo inicializo o sistema.

NFE_COMANDO - Uso para enviar os comandos e ler as respostas do ACBrNFeMonitor.

NFE_END - Fecha a conexão qdo vou sair do sistema.

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, André !

 

Muito obrigado por responder !

 

INetInit() // Uma unica vez no começo da função, depois vou testando com INETConnect()

 

//Testo a Internet

pSocket := INetConnect( "www.google.com.br", 80 )

If INetErrorCode( pSocket ) <> 0

 

// Testo o Monitor

pSocket := INetConnectIP( cHost, nPort )

If INetErrorCode( pSocket ) <> 0

 

Se tudo passar no teste, ai sim eu envio o comando

INetSend( pSocket, cComando )

 

Não funciona assim ?

Nunca trabelhei com Sockets de Internet

 

Forte abraço;

Systux, deixei uma MP pra vc, leia.

 

[]s,

Jorge Andrade

 

"Quem tem medo de perguntar, está fadado a eternizar-se na dúvida - [Jorge Andrade]";
 

"A soberba,  é o sentimento caracterizado pela pretensão de superioridade sobre as demais pessoas, levando a manifestações ostensivas de arrogância, por vezes sem fundamento algum em fatos ou variáveis reais - [Desconhecido";
 

"Aquele  que pesquisa antes de indagar, tem a grande chance de dirimir as suas dúvidas, fixar o aprendizado da pesquisa e evoluir para outros conhecimentos inesperados - [Jorge Andrade]";
 

"Os políticos e as fraldas devem ser trocados frequentemente e pela mesma razão - [Éça de Queiroz]".

Link para o comentário
Compartilhar em outros sites

André!

Jorge !

 

Boa Noite, 

 

Consegui, com ajuda de vocês, muito obrigado.

 

Ainda estou gatinhando, mas vou chegar lá.

Pretendo somente trabalhar com TCP/IP, muito mais pratico.

 

Basicamente, segui 100% orientações de vocês e já estou enviando meus comando e pegando o retorno.

Agora preciso arrumar um jeito de testar sempre a conexão com o ACBrNFeMonitor, pq estou inicializando na chamada do meu programa, se por alguma problema o Monitor cair ou for fechado, vou enviar comando e ficar travado...

 

MUITO OBRIGADO MESMO.

Conte comigo Sempre!!!

Toninho Silva ( SysTux )

 

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Todo comando que vou enviar verifico se obtive sucesso ou não.

 

   InetSetTimeout( sSOCKET, 3000 )   // Timeout de Envio 3 seg //
   if inetsendall( sSocket, CMD +'.'+ CR+LF) <= 0
      RET_IMP := 'ERRO: Nao foi possivel transmitir dados para o ACBrNFeMonitor|'+;
                 '('+AllTrim(Str(InetErrorCode( sSOCKET )))+') '+;
                 InetErrorDesc( sSOCKET ) + ETX
   endif
E fico aguardando a resposta com a opção do usuário cancelar a espera(alguns comandos podem demorar mais do que outros)

 

   //////// Lendo a resposta ////////
   InetSetTimeout( sSOCKET, 500 )
   TINI   := Seconds()
   do while (right(RET_IMP,1) <> ETX)

      MSG('Aguardando a resposta do ACBrNFeMonitor. Pressione <ESC> para cancelar.')
      do while ! CANCELOU .and. (right(RET_IMP,1) <> ETX)
         CANCELOU := ! VER_ESC()

         BLOCO := space(64)
         BYTES := inetrecv(sSOCKET, @BLOCO, 64)
         RET_IMP += left(BLOCO,BYTES)
      enddo

      if CANCELOU
         RET_IMP := 'ERRO: O ACBrNFeMonitor nao esta respondendo.' + ETX
      endif

   enddo
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 depois vc chama INetClose e acaba fechando a conexão. Então a cada comando vc abre novamente e dae pode receber alguma resposta q ficou perdida.

Eu tenho basicamente 3 funções:

NFE_INIT - Postei acima e abre uma conexão TCP e chamo apenas qdo inicializo o sistema.

NFE_COMANDO - Uso para enviar os comandos e ler as respostas do ACBrNFeMonitor.

NFE_END - Fecha a conexão qdo vou sair do sistema.

 

olá anfm, você teria essas funções acima citadas em pascal? estou desenvolvendo em delphi e estou com dificuldades, poderia me passar?

Link para o comentário
Compartilhar em outros sites

  • Moderadores

olá anfm, você teria essas funções acima citadas em pascal? estou desenvolvendo em delphi e estou com dificuldades, poderia me passar?

Veja
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

André!

Jorge !

 

Boa Noite, 

 

Consegui, com ajuda de vocês, muito obrigado.

 

Ainda estou gatinhando, mas vou chegar lá.

Pretendo somente trabalhar com TCP/IP, muito mais pratico.

 

Basicamente, segui 100% orientações de vocês e já estou enviando meus comando e pegando o retorno.

Agora preciso arrumar um jeito de testar sempre a conexão com o ACBrNFeMonitor, pq estou inicializando na chamada do meu programa, se por alguma problema o Monitor cair ou for fechado, vou enviar comando e ficar travado...

 

MUITO OBRIGADO MESMO.

Conte comigo Sempre!!!

Estamos aqui pra isso meu amigo pra ajudar e aprender. Feliz daquele que sabe e pode ajudar e se felicita pelo seu ato.

Jorge Andrade

 

"Quem tem medo de perguntar, está fadado a eternizar-se na dúvida - [Jorge Andrade]";
 

"A soberba,  é o sentimento caracterizado pela pretensão de superioridade sobre as demais pessoas, levando a manifestações ostensivas de arrogância, por vezes sem fundamento algum em fatos ou variáveis reais - [Desconhecido";
 

"Aquele  que pesquisa antes de indagar, tem a grande chance de dirimir as suas dúvidas, fixar o aprendizado da pesquisa e evoluir para outros conhecimentos inesperados - [Jorge Andrade]";
 

"Os políticos e as fraldas devem ser trocados frequentemente e pela mesma razão - [Éça de Queiroz]".

Link para o comentário
Compartilhar em outros sites

André, Bom Dia !

 

Seguindo o código abaixo:

do while (right(RET_IMP,1) <> ETX)

      MSG('Aguardando a resposta do ACBrNFeMonitor. Pressione <ESC> para cancelar.')
      do while ! CANCELOU .and. (right(RET_IMP,1) <> ETX)
         CANCELOU := ! VER_ESC()

         BLOCO := space(64)
         BYTES := inetrecv(sSOCKET, @BLOCO, 64)
         RET_IMP += left(BLOCO,BYTES)
      enddo

      if CANCELOU
         RET_IMP := 'ERRO: O ACBrNFeMonitor nao esta respondendo.' + ETX
      endif

   enddo

Quando enviamos de dois terminais ao mesmo tempo, o segundo fica em loop infinito ( zero bytes ) na variavel BYTES.

 

Segui sua orientações:

Sart_ACBr() --> Na inicialização do meu sistema, com os comando de inicialização e conexão TCP/IP e retirando a tela de boas vindas

ACBr( cComando, cRetorno )

Stop_ACBr() Na finalização do meu sistema.

 

Já adaptei todo o meu sistema, Estou enviando NFe, Cancelando, Pegando os retorno tudo certinho, enviando CCe e tudo mas via TCP/IP, com este modo eliminei varias linhas do sistema em modo TXT.

 

Forte abraço,

Editado por systux

Toninho Silva ( SysTux )

 

Link para o comentário
Compartilhar em outros sites

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

The popup will be closed in 10 segundos...