Fórum Contador não esta passando indo para a variável 2 porque?? #455345

16/09/2013

0

Bom dia, Amigos!



Estou precisando mesmo de uma ajuda no codigo abaixo existe um contador que recebe e soma a varivável [canal] para saber em que passo está o microterminal

Por exemplo se recebo um dado esse dado virá com o valor 1 para enviado ou 0 para nenhum processo executado ou seja ninguem usou o microterminal


Esta acontecendo que quando envio um dado consigo envia rno caso só a parte d abertura de comanda ou pesquisa o passo 1

quando no display mostra para digitar o PRODUTO ou seja o passo 2 dai eu digito o codigo não acontece nada! não é enviado o dado para o bd e nem mesmo dá um erro

a parte aonde começa a não acontecer nada eu comentei abaixo se algum amigo puder me auxiliar serei grato por isso







procedure TForm1.Timer2Timer(Sender: TObject);
begin
for conjunto:= 0 to 0 do
begin
canal:=100;
if (getcnt (dado,canal,conjunto ))=1 then
begin
str (canal,scanal );
str (conjunto,sconjunto);
str (canal,stcan);
if ted[canal+1]=1 then
begin
If not datamodule1.QData.Locate('comanda',dado,[loPartialKey]) then
  datamodule1.QData.Append;
  datamodule1.QData.Edit;
  datamodule1.QDatatipodve.Text:=('1');
  datamodule1.QDatacomanda.Text:= dado;
  datamodule1.QDatadata.Text:=DateToStr(now);
  datamodule1.QDatahora.Text:=TimeToStr(now);
  datamodule1.QDataCliente.Text:=('ATENDIMENTO COMANDA');
  if datamodule1.QData.State in [dsedit,dsinsert] then
  datamodule1.QData.Post
  else
   begin
   envtmsg (conjunto,canal,'Nao cadastrado');
   envbeep (conjunto,canal,2);
   envcldisp (conjunto,canal);
   envtmsg (conjunto,canal,(mensagem[ted[canal+1]-1]));

if ted[canal+1]=2 then   // A PARTIR DAQUI NÃO ACONTECE NADA //
begin
If not datamodule1.QData.Locate('codigo_barras',dado,[loPartialKey]) then
envtmsg (conjunto,canal,'Nao cadastrado');
envbeep (conjunto,canal,2);
envcldisp (conjunto,canal);
envtmsg (conjunto,canal,(mensagem[ted[canal+1]-1]));
end
else
   begin
datamodule1.QVenda.Append;
datamodule1.QVenda.Edit;
if datamodule1.QVendaquant.IsNull then
datamodule1.QVendaquant.Text:=('1');
datamodule1.QVendacodigo_barras.Text :=(dado);
datamodule1.QVendadescricao.Text := datamodule1.QEstoquedescricao.AsString;
datamodule1.QVendarevisa2.Text:=datamodule1.QEstoquerevisar.Text;
datamodule1.QVendavalorunit.AsCurrency:= datamodule1.QEstoquevalor_venda.AsCurrency;
datamodule1.QVendaaliq.Text := datamodule1.QEstoquealiq.Text;
datamodule1.QVendaaliqnac.Text:=datamodule1.QEstoquealiqnacion.Text;
datamodule1.QVendavendedor.Text:=datamodule1.QLoginusuario.Text;
datamodule1.QVendadatav.Text:=DateToStr(now);
datamodule1.QVendaqtdvend.Text:=datamodule1.QEstoquetotal_vendido.Text;
datamodule1.QVendagrupo.Text:=datamodule1.QEstoquegrupo.Text;
datamodule1.QVendaunidade.Text:=datamodule1.QEstoqueunidade.Text;
datamodule1.QVendavalorTotal.AsCurrency :=
datamodule1.QVendaquant.AsCurrency *
datamodule1.QVendavalorUnit.AsCurrency;
if datamodule1.QVenda.State in [dsedit,dsinsert] then
datamodule1.QVenda.Post;
datamodule1.QSum.Close;
datamodule1.QSum.Open;
end;
end;
end;
envtmsg (conjunto,canal,(mensagem[ted[canal+1]]));


envbeep ( conjunto,canal,1);
ted[canal+1]:=ted[canal+1]+1;
 if ted[canal+1]=3 then ted [canal+1]:=1;


end;
end; {rel ao for }
end;
Fabio 2013

Fabio 2013

Responder

Posts

16/09/2013

Marcos Oliveira

Fábio, pelo que entendi, você teria que executar dois passos no seu processo.
Porém, pelo loop que você fez, vai executar só uma vez.

Veja:

// Está assim
for conjunto:= 0 to 0 do

// Por acaso não deveria estar assim?
for conjunto:= 0 to 1 do



Att,

Marcos
Responder

Gostei + 0

16/09/2013

Fabio 2013

Oi amigo!


Então eu fiz a mudança mas mesmo assim acontece a mesma coisa: Teclo e no microterminal ai aparece DIGITE COMANDA ai digito o numero da comanda tipo 82
ai essa informação aparece no BD e no sistema, ai APARECE NO DISPLAY: PRODUTO ai digito o codigo 162 por exemplo só que ai ja não acontece nada

Há uma váriavel chamada TED coloquei lá embaixo como eu a implementei será que o erro esta lá? nãoi tenho muita experiência ainda se puder dar mais uma olhada será de grande ajuda

[CODIGO]

procedure TForm1.Timer2Timer(Sender: TObject);
begin
for conjunto:= 0 to 2 do
begin
canal:=100;
if (getcnt (dado,canal,conjunto ))=1 then
begin
str (canal,scanal );
str (conjunto,sconjunto);
str (canal,stcan);
if ted[canal+1]=1 then
begin
If not datamodule1.QData.Locate('comanda',dado,[loPartialKey]) then
datamodule1.QData.Append;
datamodule1.QData.Edit;
datamodule1.QDatatipodve.Text:=('1');
datamodule1.QDatacomanda.Text:= dado;
datamodule1.QDatadata.Text:=DateToStr(now);
datamodule1.QDatahora.Text:=TimeToStr(now);
datamodule1.QDataCliente.Text:=('ATENDIMENTO COMANDA');
if datamodule1.QData.State in [dsedit,dsinsert] then
datamodule1.QData.Post
else
begin
envtmsg (conjunto,canal,'Nao cadastrado');
envbeep (conjunto,canal,2);
envcldisp (conjunto,canal);
envtmsg (conjunto,canal,(mensagem[ted[canal+1]-1]));

if ted[canal+1]=2 then // NÃO ACONTECE NADA A APARTIR DAQUI //
begin
If not datamodule1.QData.Locate('codigo_barras',dado,[loPartialKey]) then
envtmsg (conjunto,canal,'Nao cadastrado');
envbeep (conjunto,canal,2);
envcldisp (conjunto,canal);
envtmsg (conjunto,canal,(mensagem[ted[canal+1]-1]));
end
else
begin
datamodule1.QVenda.Append;
datamodule1.QVenda.Edit;
if datamodule1.QVendaquant.IsNull then
datamodule1.QVendaquant.Text:=('1');
datamodule1.QVendacodigo_barras.Text :=(dado);
datamodule1.QVendadescricao.Text := datamodule1.QEstoquedescricao.AsString;
datamodule1.QVendarevisa2.Text:=datamodule1.QEstoquerevisar.Text;
datamodule1.QVendavalorunit.AsCurrency:= datamodule1.QEstoquevalor_venda.AsCurrency;
datamodule1.QVendaaliq.Text := datamodule1.QEstoquealiq.Text;
datamodule1.QVendaaliqnac.Text:=datamodule1.QEstoquealiqnacion.Text;
datamodule1.QVendavendedor.Text:=datamodule1.QLoginusuario.Text;
datamodule1.QVendadatav.Text:=DateToStr(now);
datamodule1.QVendaqtdvend.Text:=datamodule1.QEstoquetotal_vendido.Text;
datamodule1.QVendagrupo.Text:=datamodule1.QEstoquegrupo.Text;
datamodule1.QVendaunidade.Text:=datamodule1.QEstoqueunidade.Text;
datamodule1.QVendavalorTotal.AsCurrency :=
datamodule1.QVendaquant.AsCurrency *
datamodule1.QVendavalorUnit.AsCurrency;
if datamodule1.QVenda.State in [dsedit,dsinsert] then
datamodule1.QVenda.Post;
datamodule1.QSum.Close;
datamodule1.QSum.Open;
end;
end;
end;
envtmsg (conjunto,canal,(mensagem[ted[canal+1]]));


envbeep ( conjunto,canal,1);
ted[canal+1]:=ted[canal+1]+1; //CONTADOR //
if ted[canal+1]=3 then ted [canal+1]:=1;


end;
end; {rel ao for }
end;


















procedure TForm1.FormCreate(Sender: TObject);
begin
mensagem[1]:='DIGITE A COMANDA';
mensagem[2]:='*** PRODUTO ****';
contador:=0;
for zzz:=1 to 3 do
begin
ted[zzz]:=1;
end;
end;

[/CODIGO]
Responder

Gostei + 0

16/09/2013

Fabio 2013

Oi amigo!


Então eu fiz a mudança mas mesmo assim acontece a mesma coisa: Teclo e no microterminal ai aparece DIGITE COMANDA ai digito o numero da comanda tipo 82
ai essa informação aparece no BD e no sistema, ai APARECE NO DISPLAY: PRODUTO ai digito o codigo 162 por exemplo só que ai ja não acontece nada

Há uma váriavel chamada TED coloquei lá embaixo como eu a implementei será que o erro esta lá? nãoi tenho muita experiência ainda se puder dar mais uma olhada será de grande ajuda

[CODIGO]

procedure TForm1.Timer2Timer(Sender: TObject);
begin
for conjunto:= 0 to 2 do
begin
canal:=100;
if (getcnt (dado,canal,conjunto ))=1 then
begin
str (canal,scanal );
str (conjunto,sconjunto);
str (canal,stcan);
if ted[canal+1]=1 then
begin
If not datamodule1.QData.Locate('comanda',dado,[loPartialKey]) then
datamodule1.QData.Append;
datamodule1.QData.Edit;
datamodule1.QDatatipodve.Text:=('1');
datamodule1.QDatacomanda.Text:= dado;
datamodule1.QDatadata.Text:=DateToStr(now);
datamodule1.QDatahora.Text:=TimeToStr(now);
datamodule1.QDataCliente.Text:=('ATENDIMENTO COMANDA');
if datamodule1.QData.State in [dsedit,dsinsert] then
datamodule1.QData.Post
else
begin
envtmsg (conjunto,canal,'Nao cadastrado');
envbeep (conjunto,canal,2);
envcldisp (conjunto,canal);
envtmsg (conjunto,canal,(mensagem[ted[canal+1]-1]));

if ted[canal+1]=2 then // NÃO ACONTECE NADA A APARTIR DAQUI //
begin
If not datamodule1.QData.Locate('codigo_barras',dado,[loPartialKey]) then
envtmsg (conjunto,canal,'Nao cadastrado');
envbeep (conjunto,canal,2);
envcldisp (conjunto,canal);
envtmsg (conjunto,canal,(mensagem[ted[canal+1]-1]));
end
else
begin
datamodule1.QVenda.Append;
datamodule1.QVenda.Edit;
if datamodule1.QVendaquant.IsNull then
datamodule1.QVendaquant.Text:=('1');
datamodule1.QVendacodigo_barras.Text :=(dado);
datamodule1.QVendadescricao.Text := datamodule1.QEstoquedescricao.AsString;
datamodule1.QVendarevisa2.Text:=datamodule1.QEstoquerevisar.Text;
datamodule1.QVendavalorunit.AsCurrency:= datamodule1.QEstoquevalor_venda.AsCurrency;
datamodule1.QVendaaliq.Text := datamodule1.QEstoquealiq.Text;
datamodule1.QVendaaliqnac.Text:=datamodule1.QEstoquealiqnacion.Text;
datamodule1.QVendavendedor.Text:=datamodule1.QLoginusuario.Text;
datamodule1.QVendadatav.Text:=DateToStr(now);
datamodule1.QVendaqtdvend.Text:=datamodule1.QEstoquetotal_vendido.Text;
datamodule1.QVendagrupo.Text:=datamodule1.QEstoquegrupo.Text;
datamodule1.QVendaunidade.Text:=datamodule1.QEstoqueunidade.Text;
datamodule1.QVendavalorTotal.AsCurrency :=
datamodule1.QVendaquant.AsCurrency *
datamodule1.QVendavalorUnit.AsCurrency;
if datamodule1.QVenda.State in [dsedit,dsinsert] then
datamodule1.QVenda.Post;
datamodule1.QSum.Close;
datamodule1.QSum.Open;
end;
end;
end;
envtmsg (conjunto,canal,(mensagem[ted[canal+1]]));


envbeep ( conjunto,canal,1);
ted[canal+1]:=ted[canal+1]+1; //CONTADOR //
if ted[canal+1]=3 then ted [canal+1]:=1;


end;
end; {rel ao for }
end;

[/CODIGO]
















procedure TForm1.FormCreate(Sender: TObject);
begin
mensagem[1]:='DIGITE A COMANDA';
mensagem[2]:='*** PRODUTO ****';
contador:=0;
for zzz:=1 to 3 do
begin
ted[zzz]:=1;
end;
end;

[/CODIGO]
Responder

Gostei + 0

16/09/2013

Fabio 2013

Oi amigo!


Então eu fiz a mudança mas mesmo assim acontece a mesma coisa: Teclo e no microterminal ai aparece DIGITE COMANDA ai digito o numero da comanda tipo 82
ai essa informação aparece no BD e no sistema, ai APARECE NO DISPLAY: PRODUTO ai digito o codigo 162 por exemplo só que ai ja não acontece nada

Há uma váriavel chamada TED coloquei lá embaixo como eu a implementei será que o erro esta lá? nãoi tenho muita experiência ainda se puder dar mais uma olhada será de grande ajuda


procedure TForm1.Timer2Timer(Sender: TObject);
begin
for conjunto:= 0 to 2 do
begin
canal:=100;
if (getcnt (dado,canal,conjunto ))=1 then
begin
str (canal,scanal );
str (conjunto,sconjunto);
str (canal,stcan);
if ted[canal+1]=1 then
begin
If not datamodule1.QData.Locate('comanda',dado,[loPartialKey]) then
  datamodule1.QData.Append;
  datamodule1.QData.Edit;
  datamodule1.QDatatipodve.Text:=('1');
  datamodule1.QDatacomanda.Text:= dado;
  datamodule1.QDatadata.Text:=DateToStr(now);
  datamodule1.QDatahora.Text:=TimeToStr(now);
  datamodule1.QDataCliente.Text:=('ATENDIMENTO COMANDA');
  if datamodule1.QData.State in [dsedit,dsinsert] then
  datamodule1.QData.Post
  else
   begin
   envtmsg (conjunto,canal,'Nao cadastrado');
   envbeep (conjunto,canal,2);
   envcldisp (conjunto,canal);
   envtmsg (conjunto,canal,(mensagem[ted[canal+1]-1]));

if ted[canal+1]=2 then  // NÃO ACONTECE NADA A APARTIR DAQUI //
begin
If not datamodule1.QData.Locate('codigo_barras',dado,[loPartialKey]) then
envtmsg (conjunto,canal,'Nao cadastrado');
envbeep (conjunto,canal,2);
envcldisp (conjunto,canal);
envtmsg (conjunto,canal,(mensagem[ted[canal+1]-1]));
end
else
   begin
datamodule1.QVenda.Append;
datamodule1.QVenda.Edit;
if datamodule1.QVendaquant.IsNull then
datamodule1.QVendaquant.Text:=('1');
datamodule1.QVendacodigo_barras.Text :=(dado);
datamodule1.QVendadescricao.Text := datamodule1.QEstoquedescricao.AsString;
datamodule1.QVendarevisa2.Text:=datamodule1.QEstoquerevisar.Text;
datamodule1.QVendavalorunit.AsCurrency:= datamodule1.QEstoquevalor_venda.AsCurrency;
datamodule1.QVendaaliq.Text := datamodule1.QEstoquealiq.Text;
datamodule1.QVendaaliqnac.Text:=datamodule1.QEstoquealiqnacion.Text;
datamodule1.QVendavendedor.Text:=datamodule1.QLoginusuario.Text;
datamodule1.QVendadatav.Text:=DateToStr(now);
datamodule1.QVendaqtdvend.Text:=datamodule1.QEstoquetotal_vendido.Text;
datamodule1.QVendagrupo.Text:=datamodule1.QEstoquegrupo.Text;
datamodule1.QVendaunidade.Text:=datamodule1.QEstoqueunidade.Text;
datamodule1.QVendavalorTotal.AsCurrency :=
datamodule1.QVendaquant.AsCurrency *
datamodule1.QVendavalorUnit.AsCurrency;
if datamodule1.QVenda.State in [dsedit,dsinsert] then
datamodule1.QVenda.Post;
datamodule1.QSum.Close;
datamodule1.QSum.Open;
end;
end;
end;
envtmsg (conjunto,canal,(mensagem[ted[canal+1]]));


envbeep ( conjunto,canal,1);
ted[canal+1]:=ted[canal+1]+1;   //CONTADOR //
 if ted[canal+1]=3 then ted [canal+1]:=1;


end;
end; {rel ao for }
end;


















procedure TForm1.FormCreate(Sender: TObject);
begin
mensagem[1]:='DIGITE A COMANDA';
mensagem[2]:='*** PRODUTO ****';
contador:=0;
for zzz:=1 to 3 do
begin
ted[zzz]:=1;
end;
end;

[/CODIGO]
Responder

Gostei + 0

16/09/2013

Marcos Oliveira

Fábio, analisei com mais calma seu fonte, e reparei algumas situações. O problema pode estar no fechamento do "end" no seu código.
Fiz uma indentação diferente para facilitar a visualização. Veja nos comentários que eu fiz, e faça um teste para ver se o problema é isso mesmo.

     for conjunto:= 0 to 2 do
     begin
          canal:=100;
          if (getcnt (dado,canal,conjunto ))=1 then
          begin
               str (canal,scanal );
               str (conjunto,sconjunto);
               str (canal,stcan);
               // Este IF está correto. Pelo jeito está passando por ele.
               if ted[canal+1]=1 then
               begin
                    If not datamodule1.QData.Locate('comanda',dado,[loPartialKey]) then
                       datamodule1.QData.Append;
                    datamodule1.QData.Edit;   
                    datamodule1.QDatatipodve.Text:=('1');
                    datamodule1.QDatacomanda.Text:= dado;
                    datamodule1.QDatadata.Text:=DateToStr(now);
                    datamodule1.QDatahora.Text:=TimeToStr(now);
                    datamodule1.QDataCliente.Text:=('ATENDIMENTO COMANDA');
                    if datamodule1.QData.State in [dsedit,dsinsert] then
                       datamodule1.QData.Post
                    else
                    begin
                         envtmsg (conjunto,canal,'Nao cadastrado');
                         envbeep (conjunto,canal,2);
                         envcldisp (conjunto,canal);
                         envtmsg (conjunto,canal,(mensagem[ted[canal+1]-1]));

                         // Este IF está dentro do outro IF. Você teria que colocar um "END" antes, para que após o primeiro IF, o segundo seja questionado.
                         if ted[canal+1]=2 then  // NÃO ACONTECE NADA A APARTIR DAQUI //
                         begin
                              If not datamodule1.QData.Locate('codigo_barras',dado,[loPartialKey]) then
                                 envtmsg (conjunto,canal,'Nao cadastrado');
                              envbeep (conjunto,canal,2);
                              envcldisp (conjunto,canal);
                              envtmsg (conjunto,canal,(mensagem[ted[canal+1]-1]));
                         end
                         else
                         begin
                              datamodule1.QVenda.Append;
                              datamodule1.QVenda.Edit;
                              if datamodule1.QVendaquant.IsNull then
                                 datamodule1.QVendaquant.Text:=('1');
                              datamodule1.QVendacodigo_barras.Text :=(dado);
                              datamodule1.QVendadescricao.Text := datamodule1.QEstoquedescricao.AsString;
                              datamodule1.QVendarevisa2.Text:=datamodule1.QEstoquerevisar.Text;
                              datamodule1.QVendavalorunit.AsCurrency:= datamodule1.QEstoquevalor_venda.AsCurrency;
                              datamodule1.QVendaaliq.Text := datamodule1.QEstoquealiq.Text;
                              datamodule1.QVendaaliqnac.Text:=datamodule1.QEstoquealiqnacion.Text;
                              datamodule1.QVendavendedor.Text:=datamodule1.QLoginusuario.Text;
                              datamodule1.QVendadatav.Text:=DateToStr(now);
                              datamodule1.QVendaqtdvend.Text:=datamodule1.QEstoquetotal_vendido.Text;
                              datamodule1.QVendagrupo.Text:=datamodule1.QEstoquegrupo.Text;
                              datamodule1.QVendaunidade.Text:=datamodule1.QEstoqueunidade.Text;
                              datamodule1.QVendavalorTotal.AsCurrency :=
                              datamodule1.QVendaquant.AsCurrency *
                              datamodule1.QVendavalorUnit.AsCurrency;
                              if datamodule1.QVenda.State in [dsedit,dsinsert] then
                                 datamodule1.QVenda.Post;
                              datamodule1.QSum.Close;
                              datamodule1.QSum.Open;
                         end;
                    end;
               end;
               envtmsg (conjunto,canal,(mensagem[ted[canal+1]]));


               envbeep ( conjunto,canal,1);
               ted[canal+1]:=ted[canal+1]+1;   //CONTADOR //
                if ted[canal+1]=3 then
                   ted [canal+1]:=1;
          end;
     end; {rel ao for }



Att,

Marcos
Responder

Gostei + 0

16/09/2013

Fabio 2013

Olá Marcos!


Então teve uma mudança sim só que olha que estranho antes quando aparecia comanda no display eu inseria um numero qualquer e este numero ia para p sistema e era gravado no bd normalmente

Agora esta invertendo quando aparece comanda no display eu insiro um numero e não aparece nada no sistema e nem no bd no entanto quando teclo E e aparece PRODUTO
insiro qualquer outro numero e ele aparece no BD mas na tabela de comandas! E não na de venda, que estranho poderia ver para mim por gentileza porque imagino que seja realmente alguma falha no meu entendimento do codigo desde já muito obrigado
Responder

Gostei + 0

16/09/2013

Fabio 2013

[CODE]
procedure TForm1.Timer2Timer(Sender: TObject);
begin
for conjunto:= 0 to 0 do
begin
canal:=100;
if (getcnt (dado,canal,conjunto ))=1 then
begin
str (canal,scanal );
str (conjunto,sconjunto);
str (canal,stcan);
// Este IF está correto. Pelo jeito está passando por ele.
if ted[canal+1]=1 then
begin
If not datamodule1.QData.Locate('comanda',dado,[loPartialKey]) then
datamodule1.QData.Append;
datamodule1.QData.Edit;
datamodule1.QDatatipodve.Text:=('1');
datamodule1.QDatacomanda.Text:= dado;
datamodule1.QDatadata.Text:=DateToStr(now);
datamodule1.QDatahora.Text:=TimeToStr(now);
datamodule1.QDataCliente.Text:=('ATENDIMENTO COMANDA');
if datamodule1.QData.State in [dsedit,dsinsert] then
datamodule1.QData.Post
else
begin
envtmsg (conjunto,canal,'Nao cadastrado');
envbeep (conjunto,canal,2);
envcldisp (conjunto,canal);
envtmsg (conjunto,canal,(mensagem[ted[canal+1]-1]));

// Este IF está dentro do outro IF. Você teria que colocar um "END" antes, para que após o primeiro IF, o segundo seja questionado.
if ted[canal+1]=2 then // NÃO ACONTECE NADA A APARTIR DAQUI //
begin
If datamodule1.QEstoque.Locate('codigo_barras',dado,[loPartialKey]) then
begin
datamodule1.QVenda.Append;
datamodule1.QVenda.Edit;
if datamodule1.QVendaquant.IsNull then
datamodule1.QVendaquant.Text:=('1');
datamodule1.QVendacodigo_barras.Text :=(dado);
datamodule1.QVendadescricao.Text := datamodule1.QEstoquedescricao.AsString;
datamodule1.QVendarevisa2.Text:=datamodule1.QEstoquerevisar.Text;
datamodule1.QVendavalorunit.AsCurrency:= datamodule1.QEstoquevalor_venda.AsCurrency;
datamodule1.QVendaaliq.Text := datamodule1.QEstoquealiq.Text;
datamodule1.QVendaaliqnac.Text:=datamodule1.QEstoquealiqnacion.Text;
datamodule1.QVendavendedor.Text:=datamodule1.QLoginusuario.Text;
datamodule1.QVendadatav.Text:=DateToStr(now);
datamodule1.QVendaqtdvend.Text:=datamodule1.QEstoquetotal_vendido.Text;
datamodule1.QVendagrupo.Text:=datamodule1.QEstoquegrupo.Text;
datamodule1.QVendaunidade.Text:=datamodule1.QEstoqueunidade.Text;
datamodule1.QVendavalorTotal.AsCurrency :=
datamodule1.QVendaquant.AsCurrency *
datamodule1.QVendavalorUnit.AsCurrency;
if datamodule1.QVenda.State in [dsedit,dsinsert] then
datamodule1.QVenda.Post;
datamodule1.QSum.Close;
datamodule1.QSum.Open;
end;
end;
end;
end;
envtmsg (conjunto,canal,(mensagem[ted[canal+1]]));


envbeep ( conjunto,canal,1);
ted[canal+1]:=ted[canal+1]+1; //CONTADOR //
if ted[canal+1]=3 then
ted [canal+1]:=1;
end;
end; {rel ao for }
end;
[/CODIGO]
Responder

Gostei + 0

16/09/2013

Fabio 2013

[CODE]
procedure TForm1.Timer2Timer(Sender: TObject);
begin
for conjunto:= 0 to 0 do
begin
canal:=100;
if (getcnt (dado,canal,conjunto ))=1 then
begin
str (canal,scanal );
str (conjunto,sconjunto);
str (canal,stcan);
// Este IF está correto. Pelo jeito está passando por ele.
if ted[canal+1]=1 then
begin
If not datamodule1.QData.Locate('comanda',dado,[loPartialKey]) then
datamodule1.QData.Append;
datamodule1.QData.Edit;
datamodule1.QDatatipodve.Text:=('1');
datamodule1.QDatacomanda.Text:= dado;
datamodule1.QDatadata.Text:=DateToStr(now);
datamodule1.QDatahora.Text:=TimeToStr(now);
datamodule1.QDataCliente.Text:=('ATENDIMENTO COMANDA');
if datamodule1.QData.State in [dsedit,dsinsert] then
datamodule1.QData.Post
else
begin
envtmsg (conjunto,canal,'Nao cadastrado');
envbeep (conjunto,canal,2);
envcldisp (conjunto,canal);
envtmsg (conjunto,canal,(mensagem[ted[canal+1]-1]));

// Este IF está dentro do outro IF. Você teria que colocar um "END" antes, para que após o primeiro IF, o segundo seja questionado.
if ted[canal+1]=2 then // NÃO ACONTECE NADA A APARTIR DAQUI //
begin
If datamodule1.QEstoque.Locate('codigo_barras',dado,[loPartialKey]) then
begin
datamodule1.QVenda.Append;
datamodule1.QVenda.Edit;
if datamodule1.QVendaquant.IsNull then
datamodule1.QVendaquant.Text:=('1');
datamodule1.QVendacodigo_barras.Text :=(dado);
datamodule1.QVendadescricao.Text := datamodule1.QEstoquedescricao.AsString;
datamodule1.QVendarevisa2.Text:=datamodule1.QEstoquerevisar.Text;
datamodule1.QVendavalorunit.AsCurrency:= datamodule1.QEstoquevalor_venda.AsCurrency;
datamodule1.QVendaaliq.Text := datamodule1.QEstoquealiq.Text;
datamodule1.QVendaaliqnac.Text:=datamodule1.QEstoquealiqnacion.Text;
datamodule1.QVendavendedor.Text:=datamodule1.QLoginusuario.Text;
datamodule1.QVendadatav.Text:=DateToStr(now);
datamodule1.QVendaqtdvend.Text:=datamodule1.QEstoquetotal_vendido.Text;
datamodule1.QVendagrupo.Text:=datamodule1.QEstoquegrupo.Text;
datamodule1.QVendaunidade.Text:=datamodule1.QEstoqueunidade.Text;
datamodule1.QVendavalorTotal.AsCurrency :=
datamodule1.QVendaquant.AsCurrency *
datamodule1.QVendavalorUnit.AsCurrency;
if datamodule1.QVenda.State in [dsedit,dsinsert] then
datamodule1.QVenda.Post;
datamodule1.QSum.Close;
datamodule1.QSum.Open;
end;
end;
end;
end;
envtmsg (conjunto,canal,(mensagem[ted[canal+1]]));


envbeep ( conjunto,canal,1);
ted[canal+1]:=ted[canal+1]+1; //CONTADOR //
if ted[canal+1]=3 then
ted [canal+1]:=1;
end;
end; {rel ao for }
end;
[/CODIGO]
Responder

Gostei + 0

16/09/2013

Fabio 2013

procedure TForm1.Timer2Timer(Sender: TObject);
begin
for conjunto:= 0 to 0 do
begin
     canal:=100;
     if (getcnt (dado,canal,conjunto ))=1 then
     begin
          str (canal,scanal );
          str (conjunto,sconjunto);
          str (canal,stcan);
          // Este IF está correto. Pelo jeito está passando por ele.
          if ted[canal+1]=1 then
          begin
               If not datamodule1.QData.Locate('comanda',dado,[loPartialKey]) then
                  datamodule1.QData.Append;
               datamodule1.QData.Edit;
               datamodule1.QDatatipodve.Text:=('1');
               datamodule1.QDatacomanda.Text:= dado;
               datamodule1.QDatadata.Text:=DateToStr(now);
               datamodule1.QDatahora.Text:=TimeToStr(now);
               datamodule1.QDataCliente.Text:=('ATENDIMENTO COMANDA');
               if datamodule1.QData.State in [dsedit,dsinsert] then
                  datamodule1.QData.Post
               else
               begin
                    envtmsg (conjunto,canal,'Nao cadastrado');
                    envbeep (conjunto,canal,2);
                    envcldisp (conjunto,canal);
                    envtmsg (conjunto,canal,(mensagem[ted[canal+1]-1]));

                    // Este IF está dentro do outro IF. Você teria que colocar um "END" antes, para que após o primeiro IF, o segundo seja questionado.
                    if ted[canal+1]=2 then  // NÃO ACONTECE NADA A APARTIR DAQUI //
                    begin
                         If datamodule1.QEstoque.Locate('codigo_barras',dado,[loPartialKey]) then
begin
                         datamodule1.QVenda.Append;
                         datamodule1.QVenda.Edit;
                         if datamodule1.QVendaquant.IsNull then
                         datamodule1.QVendaquant.Text:=('1');
                         datamodule1.QVendacodigo_barras.Text :=(dado);
                         datamodule1.QVendadescricao.Text := datamodule1.QEstoquedescricao.AsString;
                         datamodule1.QVendarevisa2.Text:=datamodule1.QEstoquerevisar.Text;
                         datamodule1.QVendavalorunit.AsCurrency:= datamodule1.QEstoquevalor_venda.AsCurrency;
                         datamodule1.QVendaaliq.Text := datamodule1.QEstoquealiq.Text;
                         datamodule1.QVendaaliqnac.Text:=datamodule1.QEstoquealiqnacion.Text;
                         datamodule1.QVendavendedor.Text:=datamodule1.QLoginusuario.Text;
                         datamodule1.QVendadatav.Text:=DateToStr(now);
                         datamodule1.QVendaqtdvend.Text:=datamodule1.QEstoquetotal_vendido.Text;
                         datamodule1.QVendagrupo.Text:=datamodule1.QEstoquegrupo.Text;
                         datamodule1.QVendaunidade.Text:=datamodule1.QEstoqueunidade.Text;
                         datamodule1.QVendavalorTotal.AsCurrency :=
                         datamodule1.QVendaquant.AsCurrency *
                         datamodule1.QVendavalorUnit.AsCurrency;
                         if datamodule1.QVenda.State in [dsedit,dsinsert] then
                            datamodule1.QVenda.Post;
                         datamodule1.QSum.Close;
                         datamodule1.QSum.Open;
                    end;
               end;
         end;
        end;
          envtmsg (conjunto,canal,(mensagem[ted[canal+1]]));


          envbeep ( conjunto,canal,1);
          ted[canal+1]:=ted[canal+1]+1;   //CONTADOR //
           if ted[canal+1]=3 then
              ted [canal+1]:=1;
     end;
end; {rel ao for }
end;
Responder

Gostei + 0

16/09/2013

Fabio 2013

Esta dando a seguinte mensagem no compilador:

For loop control varieable must be simple local variable



Responder

Gostei + 0

16/09/2013

Marcos Oliveira

É porque você deve declarar a variável do For, como local.

procedure TForm1.Timer2Timer(Sender: TObject);
var
   conjunto: Integer;
begin
     for conjunto:= 0 to 0 do
begin
     // (...)
end;
Responder

Gostei + 0

17/09/2013

Fabio 2013

Bom dia meu amigo!


Então tá osso aqui srsrs eu tentei colocar aquele END mas não compila com ele dá erro.



procedure TForm1.Timer2Timer(Sender: TObject);
Var
conjunto:integer;
begin
for conjunto:= 0 to 1 do
begin
canal:=100;
if (getcnt (dado,canal,conjunto ))=1 then
begin
str (canal,scanal );
str (conjunto,sconjunto);
str (canal,stcan);
if ted[canal+1]=1 then
begin
If not datamodule1.QData.Locate('comanda',dado,[loPartialKey]) then
  datamodule1.QData.Append;
  datamodule1.QData.Edit;
  datamodule1.QDatatipodve.Text:=('1');
  datamodule1.QDatacomanda.Text:= dado;
  datamodule1.QDatadata.Text:=DateToStr(now);
  datamodule1.QDatahora.Text:=TimeToStr(now);
  datamodule1.QDataCliente.Text:=('ATENDIMENTO COMANDA');
  if datamodule1.QData.State in [dsedit,dsinsert] then
  datamodule1.QData.Post;

// aqui não aceita o end //

begin
if ted[canal+1]=2 then
begin
If datamodule1.QEstoque.Locate('codigo_barras',dado,[loPartialKey]) then
begin
datamodule1.QVenda.Append;
datamodule1.QVenda.Edit;
if datamodule1.QVendaquant.IsNull then
datamodule1.QVendaquant.Text:=('1');
datamodule1.QVendacodigo_barras.Text :=(dado);
datamodule1.QVendadescricao.Text := datamodule1.QEstoquedescricao.AsString;
datamodule1.QVendarevisa2.Text:=datamodule1.QEstoquerevisar.Text;
datamodule1.QVendavalorunit.AsCurrency:= datamodule1.QEstoquevalor_venda.AsCurrency;
datamodule1.QVendaaliq.Text := datamodule1.QEstoquealiq.Text;
datamodule1.QVendaaliqnac.Text:=datamodule1.QEstoquealiqnacion.Text;
datamodule1.QVendavendedor.Text:=datamodule1.QLoginusuario.Text;
datamodule1.QVendadatav.Text:=DateToStr(now);
datamodule1.QVendaqtdvend.Text:=datamodule1.QEstoquetotal_vendido.Text;
datamodule1.QVendagrupo.Text:=datamodule1.QEstoquegrupo.Text;
datamodule1.QVendaunidade.Text:=datamodule1.QEstoqueunidade.Text;
datamodule1.QVendavalorTotal.AsCurrency :=
datamodule1.QVendaquant.AsCurrency *
datamodule1.QVendavalorUnit.AsCurrency;
if datamodule1.QVenda.State in [dsedit,dsinsert] then
datamodule1.QVenda.Post;
datamodule1.QSum.Close;
datamodule1.QSum.Open;
end;
end;
end;
end;
envtmsg (conjunto,canal,(mensagem[ted[canal+1]]));



envbeep ( conjunto,canal,1);
ted[canal+1]:=ted[canal+1]+1;
 if ted[canal+1]=3 then ted [canal+1]:=1;


end;
end; {rel ao for }
end;




Responder

Gostei + 0

18/09/2013

Marcos Oliveira

Fábio, fica complicado eu tentar corrigir seu fonte, porque pode ser que eu atrapalhe ainda mais.
Mas, tentei reorganizar os ifs, begins e ends. Não é garantia que vá funcionar, mas tenta aí.

procedure TForm1.Timer2Timer(Sender: TObject);
Var
   conjunto:integer;
begin
     for conjunto:= 0 to 1 do
     begin
          canal:=100;
          if (getcnt (dado,canal,conjunto ))=1 then
          begin
               str (canal,scanal );
               str (conjunto,sconjunto);
               str (canal,stcan);

               if ted[canal+1]=1 then
               begin
                    If not datamodule1.QData.Locate('comanda',dado,[loPartialKey]) then
                       datamodule1.QData.Append;
                    datamodule1.QData.Edit;
                    datamodule1.QDatatipodve.Text:=('1');
                    datamodule1.QDatacomanda.Text:= dado;
                    datamodule1.QDatadata.Text:=DateToStr(now);
                    datamodule1.QDatahora.Text:=TimeToStr(now);
                    datamodule1.QDataCliente.Text:=('ATENDIMENTO COMANDA');
                    if datamodule1.QData.State in [dsedit,dsinsert] then
                       datamodule1.QData.Post;

               end;

               if ted[canal+1]=2 then
               begin
                    If datamodule1.QEstoque.Locate('codigo_barras',dado,[loPartialKey]) then
                    begin
                         datamodule1.QVenda.Append;
                         datamodule1.QVenda.Edit;
                         if datamodule1.QVendaquant.IsNull then
                            datamodule1.QVendaquant.Text:=('1');
                         datamodule1.QVendacodigo_barras.Text :=(dado);
                         datamodule1.QVendadescricao.Text := datamodule1.QEstoquedescricao.AsString;
                         datamodule1.QVendarevisa2.Text:=datamodule1.QEstoquerevisar.Text;
                         datamodule1.QVendavalorunit.AsCurrency:= datamodule1.QEstoquevalor_venda.AsCurrency;
                         datamodule1.QVendaaliq.Text := datamodule1.QEstoquealiq.Text;
                         datamodule1.QVendaaliqnac.Text:=datamodule1.QEstoquealiqnacion.Text;
                         datamodule1.QVendavendedor.Text:=datamodule1.QLoginusuario.Text;
                         datamodule1.QVendadatav.Text:=DateToStr(now);
                         datamodule1.QVendaqtdvend.Text:=datamodule1.QEstoquetotal_vendido.Text;
                         datamodule1.QVendagrupo.Text:=datamodule1.QEstoquegrupo.Text;
                         datamodule1.QVendaunidade.Text:=datamodule1.QEstoqueunidade.Text;
                         datamodule1.QVendavalorTotal.AsCurrency :=
                         datamodule1.QVendaquant.AsCurrency *
                         datamodule1.QVendavalorUnit.AsCurrency;
                         if datamodule1.QVenda.State in [dsedit,dsinsert] then
                            datamodule1.QVenda.Post;
                         datamodule1.QSum.Close;
                         datamodule1.QSum.Open;
                    end;
               end;
          end;

          envtmsg (conjunto,canal,(mensagem[ted[canal+1]]));

          envbeep ( conjunto,canal,1);
          ted[canal+1]:=ted[canal+1]+1;
          if ted[canal+1]=3 then
             ted [canal+1]:=1;
     end;   {rel ao for }
end;



Att,

Marcos

Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar