Série da semana: Primeiros passos no React

Veja mais

Alerta Pop up com Query

29/01/2016

1

Tenho uma aplicação que trás valores com essa query quando é definido no botão
begin
With dmmonitora.querypedidos do
  begin
  SQL.Clear;
  SQL.Add('with CTE_Sum as (SELECT CODIGO, sum(QUANTIDADE * CUSTO_LIQUIDO) as total_liquido ');
  SQL.Add('from ITENS_PED1 group by CODIGO ) ');
  SQL.Add(' SELECT i.CODIGO, i.VENDEDOR_NOME, i.CLI_NOME,i.TOTAL,i.DATA, e.total_liquido');
  SQL.Add(' from PEDIDOS_ORCAMENTOS i INNER JOIN CTE_Sum e ON i.codigo = e.CODIGO ');
  SQL.Add(' where i.Data >= ');
  SQL.Add(QuotedStr(FormatDateTime('yyyy/mm/dd', DateTimePicker1.Date)) + ' and i.DATA <= ');
  SQL.Add(QuotedStr(FormatDateTime('yyyy/mm/dd', DateTimePicker2.Date)));
  //ShowMessage(SQL.Text);
  Open;
end;
end;



e gostaria de que fosse exibido um alerta nesse formulário que tá com esse codigo,
var

  I: Integer;

  fAlertaMsn: TForm;

  BarraIniciar: HWND; {Barra Iniciar}

  tmAltura: Integer;

  tmRect: TRect;

  xTop : Integer;

  xIniTop : Integer;

begin

  //localiza o Handle da janela iniciar

  BarraIniciar := FindWindow('Shell_TrayWnd', nil);

  //Pega o "retângulo" que envolve a barra e sua altura

  GetWindowRect(BarraIniciar, tmRect);

  tmAltura := tmRect.Bottom - tmRect.Top;

  fAlertaMsn := TFormAlerta.Create(Self);

  with fAlertaMsn do

  begin

    Left := Screen.Width - ClientWidth;

    if tmRect.Top = -2 then

      tmAltura := 3000;

    //Pega o top final

    xTop := Screen.Height - ClientHeight - tmAltura;

    //Pega o top inicial

    xIniTop := Screen.Height + ClientHeight + tmAltura;

    Top := xIniTop;

    for I := xIniTop downto xTop do

    begin

      Top := Top - 1;

      Show;

      Update;

      Application.ProcessMessages;

      Sleep(10);

    end;

    Sleep(4000);  //tempo de exibição na tela

    Close;

    FreeAndNil(fAlertaMsn);

  end;

end;


quando houvesse um novo lançamento na query , que nesse caso ficaria rodando com algum intervalo para monitorar um novo registro que não estivesse carregado no grid

tem como ?/

[img]http://i66.tinypic.com/2m64fuw.jpg[/img]
Responder

Posts

Não sei quase nada de Delphi com dev web, mas olhe: [url]http://www.ferramentasblog.com/2009/01/mensagem-alerta-pop-up.html[/url]
Responder

31/01/2016

Valmir Inacio

Rodrigo agradeço mas não é isso que procuro, eu ja tenho a janela pop rodando, a questão é fazer uma rotina que faça com que toda vez que haja um lançamento no banco de dados o operador saiba com as informações aparecendo na janela pop up com os valores conforme mostrei que na imagem de um form que tem os DBedits.
Responder

01/02/2016

P2

Bom dia, você pode por um timer ou triger.

De x em x tempo que pode ser definido em uma tabela de parâmetros ou arquivo ini.
Dá um refresh na tabela e verificando uma flag tipo "Pedido_Finalizado=N".
Se os registros forem >0 avisa tem x pedidos pedentes,
o ideal seria ter um grid para escolher qual pedido acessar.


É só uma ideia.
Responder

01/02/2016

Valmir Inacio

P2 quando voce fala ter um grid pra acessar , não entendi bem pois eu ja tenho um ue lista os pedidos
Responder

01/02/2016

P2

Como funciona sua logística.
Quais os procedimentos ?

Setor [Vendas] - Realizando pedidos.
Setor [Financeiro]- Realizando Vendas dos pedidos.
Setor [Estoque]- Aguardando finalização da venda, realiza expedição dos produtos e entrega para o cliente.?

Preciso de mais detalhes do funcionamento da logística utilizada para então sugerir algo mais preciso.
Responder

01/02/2016

Valmir Inacio

o Setor de Vendas emite um novo pedido que é armazenado no banco na tabela PEDIDOS_ORCAMENTOS, eu melhorei o select do código depois da sua ajuda , pois pensei que já que vai disparar atras de algum novo evento tem a tabela o campo "i.hora" que pode fazer esse filtro , já que vc havia sugerido "Pedido_Finalizado=N".

o codigo ficou assim:
begin
With dmmonitora.querypedidos do
  begin
  SQL.Clear;
  SQL.Add(' with CTE_Sum as (SELECT CODIGO, sum(QUANTIDADE * CUSTO_LIQUIDO) as total_liquido ');
  SQL.Add(' from ITENS_PED1 group by CODIGO ) ');
  SQL.Add(' SELECT i.CODIGO, i.VENDEDOR_NOME,i.hora, i.CLI_NOME,i.TOTAL,i.DATA,i.cliente,i.vendedor,j.nome,l.nome, e.total_liquido');
  SQL.Add(' from PEDIDOS_ORCAMENTOS i INNER JOIN CTE_Sum e ON i.codigo = e.CODIGO ');
  SQL.Add(' LEFT JOIN clientes j ON (i.cliente= j.cliente_id) LEFT JOIN vendedores l ON (i.vendedor =l.codigo) ');
  SQL.Add(' where i.Data >= ');
  SQL.Add(QuotedStr(FormatDateTime('yyyy/mm/dd', DateTimePicker1.Date)) + ' and i.DATA <= ');
  SQL.Add(QuotedStr(FormatDateTime('yyyy/mm/dd', DateTimePicker2.Date)));
Responder

03/02/2016

Valmir Inacio

alguem poderia me ajudar??
Responder
Saudações... Bom se eu entendi bem.... você cria um botão e testa a chamado do form que vai aparecer como popup...

No botão você implementa no envento OnClik este código que vc postou acima.... se funcionar exibindo o seu form é só você adaptar ao que deseja....

Se observar o procedimento do botão é implementado como do tipo "Sender" ou seja você poderia chamar o seu popup atraves de uma procedure que implementasse um Sender também...

Vou postar um exemplo do botão e depois como uma procedure

O Evento OnClik do Botão: (nao esqueça de dar uses no form que será o PoPup)

procedure TFormPrincipal.Button1Click(Sender: TObject);
var
   I: Integer;
   MeuForm: TForm;  //Cria a variavel do tipo TForm para ser instanciado na criação do Form
   BarraIniciar: HWND; {Barra Iniciar}
   tmAltura: Integer;
   tmRect: TRect;
   xTop: Integer;
   xIniTop: Integer;
begin
//localiza o Handle da janela iniciar
   BarraIniciar := FindWindow('Shell_TrayWnd', nil);
//Pega o "retângulo" que envolve a barra e sua altura
   GetWindowRect(BarraIniciar, tmRect);
   tmAltura := tmRect.Bottom - tmRect.Top;
   MeuForm := TfrmPopUp.Create(Self); // Observe que o metodo create recebeu um form que eu ja havia preparado
   with FAPopup do
   begin
      Left := Screen.Width - ClientWidth;
      if tmRect.Top = -2 then
         tmAltura := 30;
//Pega o top final
      xTop := Screen.Height - ClientHeight - tmAltura;
//Pega o top inicial
      xIniTop := Screen.Height + ClientHeight + tmAltura;
      Top := xIniTop;
      for I := xIniTop downto xTop do
      begin
         Top := Top - 1;
         Show;
         Update;
         Application.ProcessMessages;
         Sleep(1);
      end;
      Sleep(100000);
      for I := xTop to xIniTop do
      begin
         Top := Top + 1;
         Show;
         Update;
         Application.ProcessMessages;
         Sleep(1);
      end;
      Close;
      FreeAndNil(MeuForm);
   end;

end;/code]

Então seguindo o exemplo do procedimento do botão, criei a procedure "ExibirPoPup" conforme este exemplo:

[code]
  public
    { Public declarations } criei em public para poder ser chamado de qualquer outro local

    procedure ExibirPoPup(Sender: TObject);


Esta procedure segue o mesmo modelo do botão que é do tipo TObject e usa o método Sender.

na implementação da procedure ExibirPoPup vc coloca o mesmo código do botão conforme o exemplo:


  procedure ExibirPoPup(Sender: TObject);
   var
   I: Integer;
   MeuForm: TForm;  //Cria a variavel do tipo TForm para ser instanciado na criação do Form
   BarraIniciar: HWND; {Barra Iniciar}
   tmAltura: Integer;
   tmRect: TRect;
   xTop: Integer;
   xIniTop: Integer;
begin
//localiza o Handle da janela iniciar
   BarraIniciar := FindWindow('Shell_TrayWnd', nil);
//Pega o "retângulo" que envolve a barra e sua altura
   GetWindowRect(BarraIniciar, tmRect);
   tmAltura := tmRect.Bottom - tmRect.Top;
   MeuForm := TfrmPopUp.Create(Self); // Observe que o metodo create recebeu um form que eu ja havia preparado
   with FAPopup do
   begin
      Left := Screen.Width - ClientWidth;
      if tmRect.Top = -2 then
         tmAltura := 30;
//Pega o top final
      xTop := Screen.Height - ClientHeight - tmAltura;
//Pega o top inicial
      xIniTop := Screen.Height + ClientHeight + tmAltura;
      Top := xIniTop;
      for I := xIniTop downto xTop do
      begin
         Top := Top - 1;
         Show;
         Update;
         Application.ProcessMessages;
         Sleep(1);
      end;
      Sleep(100000);
      for I := xTop to xIniTop do
      begin
         Top := Top + 1;
         Show;
         Update;
         Application.ProcessMessages;
         Sleep(1);
      end;
      Close;
      FreeAndNil(MeuForm);
   end;



Então depois que você fizer a verificação em sua base basta dispara o método assim:

ExibirPoPup(Sender); // Desta forma o Sender enviará o que estiver implementado na procedure Exibir PoPup...
Responder