Ir para conteúdo
  • Cadastre-se

dev botao

acbrmter dando problemas com 2 microterminais


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

Recommended Posts

  • Membros Pro

Bom Dia Amigos...

estou com um problema serio e nao sei como resolver...

espero que possam me ajudar...

 

Eu fiz um projeto para uso do microterminal que tem funcionado muito bem ate o momento, porem ate agora so usei com 1 microterminal agora senti a necessidade de colocar 2... ai comecou o problema...

 

quando os dois microterminais estao em uso simultaneamente, comeca dar pau em tudo e travar tudo...

sera que alguem consegue me ajudar ?

vou postar a baixo o meu codigo pra ver se existe algo errado..

 

att

Tiago Passarella

 

procedure TFrmPrincipal.ACBrMTer1RecebeDados(const IP: AnsiString;
  var Recebido: AnsiString; var EchoMode: TACBrMTerEchoMode);
begin
   Memo1.Lines.Add('IP: ' + IP + ' - Recebido :' + Recebido);
   if Recebido = #13 then
   begin
          if Passou=False then
          begin
                AvaliarRespostaTerminal(IP, Recebido);
          end;
   end else if Recebido = #$12 then
   begin
           AtualizaConexoes;
           _RespostaMicroterminal := '';
           Passou   := False;
           Operador := 0;
           Comanda  := 0;
           AlterarEstadoTerminal(IP,1);
   end else if Recebido = #$1B then
   begin
           AtualizaConexoes;
           _RespostaMicroterminal := '';
           Passou   := False;
           Operador := 0;
           Comanda  := 0;
           AlterarEstadoTerminal(IP,1);
   end else if Recebido = #8 then
   begin
           AtualizaConexoes;
           _RespostaMicroterminal := '';
           Passou   := False;
           Operador := 0;
           Comanda  := 0;
           AlterarEstadoTerminal(IP,1);
   end else begin
          _RespostaMicroterminal := _RespostaMicroterminal +  Recebido;
          if (_EstadoMicroterminal=2) and (Pos(#$D,_RespostaMicroterminal)>0) then // LE COMANDA E CONFERE
          begin
                _RespostaMicroterminal := StringReplace(_RespostaMicroterminal, #$D#$A, '', [rfReplaceAll]);
                AvaliarRespostaTerminal(IP, Recebido);
          end else if (_EstadoMicroterminal=3) and (Pos(#$D,_RespostaMicroterminal)>0) then // LE PRODUTO
          begin
                _RespostaMicroterminal := StringReplace(_RespostaMicroterminal, #$D#$A, '', [rfReplaceAll]);
                AvaliarRespostaTerminal(IP, Recebido);
          end;
   end;
end;


procedure TFrmPrincipal.AtualizaConexoes;
var
I: Integer;
Vl:integer;
JaExiste:Boolean;
IpMicroterminalX:string;
IpMicroterminalY:string;
begin
  IpMicroterminalX := '';
  IpMicroterminalY := '';

  with ACBrMTer1.TCPServer.ThreadList.LockList do
  try
    for I := 0 to Count - 1 do
    begin
        JaExiste := false;
        IpMicroterminalX := '';
        IpMicroterminalY := '';
        with TACBrTCPServerThread(Items[I]) do
        if Active then
        begin
              for vl := 0 to clbConectados.Items.Count -1 do
              begin
                   IpMicroterminalX := StringReplace(clbConectados.Items[Vl], #$D#$A, '', [rfReplaceAll]);
                   IpMicroterminalX := StringReplace(IpMicroterminalX, #13#10, '', [rfReplaceAll]);
                   if Trim(IpMicroterminalX) = Trim(TCPBlockSocket.GetRemoteSinIP) then
                   begin
                         JaExiste := true;
                   end;
              end;
              if JaExiste=false then
              begin
                   clbConectados.Items.Add(TCPBlockSocket.GetRemoteSinIP);
                   AlterarEstadoTerminal(TCPBlockSocket.GetRemoteSinIP,1);
              end;
        end;
    end;
  finally
    ACBrMTer1.TCPServer.ThreadList.UnlockList;
  end;
  Application.ProcessMessages;
end;

procedure TFrmPrincipal.AvaliarRespostaTerminal(aIP: AnsiString;
  var aString: AnsiString);
var
Qry:TSQLQuery;
Quantidade:Extended;
VL:Integer;
begin
     case _EstadoMicroterminal of
          1: // PEDE OPERADOR
          begin
               try
                 Qry := TSQLQuery.Create(nil);
                 Qry.SQLConnection := DataModule1.Conexao;

                 Qry.SQL.Text := 'SELECT ID,NOME FROM TBVENDEDORES WHERE ID=:p1';
                 QRY.ParamByName('p1').AsInteger := StrToInt(_RespostaMicroterminal);
                 QRY.Open;
                 if not QRY.IsEmpty then
                 begin
                       ACBrMTer1.EnviarTexto(aIP,' - ' + QRY.FieldByName('NOME').AsString);
                       Operador := qry.FieldByName('ID').AsInteger;
                       Sleep(500);
                 END ELSE begin
                       Qry.SQL.Clear;
                       Qry.Close;
                       Qry.Free;
                       Operador := 0;
                       _RespostaMicroterminal := '';
                       ACBrMTer1.LimparDisplay(aIP);
                       ACBrMTer1.EnviarTexto(aIP, 'OPERADOR NAO CADASTRADO');
                       Sleep(1000);
                       Passou := false;
                       ACBrMTer1.LimparDisplay(aIP);
                       AlterarEstadoTerminal(aIP,1);
                 end;
                 Qry.SQL.Clear;
                 Qry.Close;
                 Qry.Free;
                 AtualizaConexoes;
                 aString := '';
                 _RespostaMicroterminal := '';
                 Passou := False;
                 AlterarEstadoTerminal(aIP,2);
            except
                 Qry.SQL.Clear;
                       Qry.Close;
                       Qry.Free;
                       Operador := 0;
                       _RespostaMicroterminal := '';
                       ACBrMTer1.LimparDisplay(aIP);
                       ACBrMTer1.EnviarTexto(aIP, 'OPERADOR NAO CADASTRADO');
                       Sleep(1000);
                       Passou := false;
                       ACBrMTer1.LimparDisplay(aIP);
                       AlterarEstadoTerminal(aIP,1);
            end;

          end;



          2: // PEDE COMANDA
          begin
                try
                    Comanda := StrToInt(_RespostaMicroterminal);
                    aString := '';
                    _RespostaMicroterminal := '';
                    Passou := False;
                    AlterarEstadoTerminal(aIP,3);
                except
                    Comanda := 0;
                    _RespostaMicroterminal := '';
                    ACBrMTer1.LimparDisplay(aIP);
                    ACBrMTer1.EnviarTexto(aIP, 'COMANDA INVALIDA');
                    Sleep(1000);
                    aString := '';
                    Passou := True;
                    ACBrMTer1.LimparDisplay(aIP);
                    AlterarEstadoTerminal(aIP,2);
                end;
          end;

          3: // PEDE ITEM
          begin
                 P := ConsultaProduto(_RespostaMicroterminal);
                 if P.CODIGO='' then
                 begin
                     _RespostaMicroterminal := '';
                     ACBrMTer1.LimparDisplay(aIP);
                     ACBrMTer1.EnviarTexto(aIP, 'PRODUTO NAO CADASTRADO');
                     Sleep(1000);
                     aString := '';
                     Passou := False;
                     ACBrMTer1.LimparDisplay(aIP);
                     AlterarEstadoTerminal(aIP,3);
                 end else begin
                     Passou := False;
                     aString := '';
                     _RespostaMicroterminal := '';
                     Passou := False;
                     ACBrMTer1.LimparDisplay(aIP);
                     AlterarEstadoTerminal(aIP,4);
                 end;
          end;
          4: //LANCA QUANTIDADE
          begin
                if _RespostaMicroterminal='' then
                AlterarEstadoTerminal(aIP,4);
                Quantidade := 0;
                try
                      Quantidade := StrToFloat(_RespostaMicroterminal.Replace('.',''));
                except
                      AlterarEstadoTerminal(aIP,4);
                end;
                if Quantidade=0 then
                BEGIN
                     _RespostaMicroterminal := '';
                     ACBrMTer1.LimparDisplay(aIP);
                     ACBrMTer1.EnviarTexto(aIP, 'QUANTIDADE INVALIDA');
                     Sleep(1000);
                     aString := '';
                     Passou := False;
                     ACBrMTer1.LimparDisplay(aIP);
                     AlterarEstadoTerminal(aIP,3);
                end ELSE BEGIN
                      try
                              Qry := TSQLQuery.Create(nil);
                              Qry.SQLConnection := DataModule1.Conexao;

                              Qry.SQL.Text :='Insert Into TBCOMANDA_DETALHE(MESA,DATA,ITEM,ID_COMANDA,ID_VENDEDOR,CODIGO_INTERNO,QTDE,VALOR,TOTAL,'+
                              'TIPO_COMANDA,UNIDADE,PRODUTO,GTIN,ECF_ICMS_ST,STATUS,SEL,CANCELADO,CODGRUPO,HORA,MEIAPIZZA,IDPIZZA)VALUES(:pMESA,:pDATA,:pITEM,:pID_COMANDA,:pID_VENDEDOR,:pCODIGO_INTERNO,'+
                              ':pQTDE,:pVALOR,:pTOTAL,:pTIPO_COMANDA,:pUNIDADE,:pPRODUTO,:pGTIN,:pECF_ICMS_ST,:pSTATUS,:pSEL,:pCANCELADO,:pCODGRUPO,:pHORA,:pMEIAPIZZA,:pIDPIZZA)';
                              Qry.ParamByName('pMESA').AsInteger           := Comanda;
                              Qry.ParamByName('pDATA').AsDate              := Date ;
                              Qry.ParamByName('pITEM').AsInteger           := 0;
                              Qry.ParamByName('pID_COMANDA').AsInteger     := 0;
                              Qry.ParamByName('pID_VENDEDOR').AsInteger    := Operador;
                              Qry.ParamByName('pCODIGO_INTERNO').AsString  := P.CODIGO;
                              Qry.ParamByName('pQTDE').AsFloat             := Quantidade;
                              Qry.ParamByName('pVALOR').AsFloat            := P.VENDA;
                              Qry.ParamByName('pTOTAL').AsFloat            := Quantidade * P.VENDA ;
                              Qry.ParamByName('pTIPO_COMANDA').AsString    := 'MESA';
                              Qry.ParamByName('pUNIDADE').AsString         := P.UNIDADE;
                              Qry.ParamByName('pPRODUTO').AsString         := P.DESCRICAO;
                              Qry.ParamByName('pGTIN').AsString            := P.CODIGO;
                              Qry.ParamByName('pECF_ICMS_ST').AsString     := P.TECF;
                              Qry.ParamByName('pSTATUS').AsString          := 'A';
                              Qry.ParamByName('pSEL').AsString             := 'S';
                              Qry.ParamByName('pCANCELADO').AsString       := 'N';
                              Qry.ParamByName('pCODGRUPO').AsInteger       := StrToInt(P.GRUPO);
                              Qry.ParamByName('pHORA').AsString            := TimeToStr(NOW);
                              Qry.ParamByName('pMEIAPIZZA').AsString       := 'NAO';
                              Qry.ParamByName('pIDPIZZA').AsInteger        := 0;
                              Qry.ExecSQL();
                              Qry.SQL.Clear ;
                      finally
                         Qry.Close;
                         Qry.Free;
                         GravaComandaPDV(Comanda);
                      end;
                      aString := '';
                      Passou  := False;
                      _RespostaMicroterminal := '';
                      ACBrMTer1.LimparDisplay(aIP);
                      AlterarEstadoTerminal(aIP,3);
                END;
          end;
     end;
end;

 

Link para o comentário
Compartilhar em outros sites

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