Ver Mensaje Individual
  #12  
Antiguo 02-04-2012
carlo_acp carlo_acp is offline
Miembro
 
Registrado: may 2006
Posts: 26
Reputación: 0
carlo_acp Va por buen camino
Bueno amigos gracias por sus aportes, lo resolví de esta manera y lo comparto con uds:
1. En el form puse un temporizador de 2 segundos

2. he creado un tabla MovEsta con los campos
ESTA = 0(sin pedidos pendientes) 1(con pedidos pendientes)
HORAING tipo TIMESTAMP (pone la hora en la que se hizo el pedido)

3. en la tabla de Pedidos MovPediD un campo llamado HORAP tipo TIMESTAMP (con la hora del pedido)
4. he creado un TRIGGER en AfterPost de la Tabla de Pedidos
UPDATE movEsta set esta='1', horaIng='now' ;

5. un SP llamado NuevosPedidos

Código SQL [-]
CREATE OR ALTER PROCEDURE NUEVOS_PEDIDOS 
returns (
    lista1 varchar(1000),
    lista2 varchar(1000),
    lista3 varchar(1000))
as
declare variable esta varchar(1);
declare variable horaing timestamp;
declare variable horaact timestamp;
begin
    /* verificar si existe pedidos nuevos */
    SELECT esta, HoraIng, HoraAct from MovEsta
    WHERE esta='1'
    INTO :esta, :horaing,:HoraAct;

    /* si existen nuevos pedidos, devolver listado del pedido */
    if (esta='1') then
        begin
        SELECT list(p.cdpl , ','), list(d.nomb, ','), list(mesa, ',')
        FROM MovPediD P
        LEFT OUTER JOIN DbPlato D ON d.cdpl=P.cdpl
        WHERE P.horaP > :horaAct and P.horaP <=:horaIng
        into :Lista1, :lista2, :lista3 ;
        /* marcar MovEsta.esta=0 y horaAct =now para que ya no tenga pedidos pendientes */
        /* hasta la hora en que se esta actualiando a cocina */
        update MovEsta set esta='0', horaAct='now' ;
    end
 
end

El funcionamiento es de la siguiente manera: cuando realizan el pedido al momento de grabar en la tabla MovPediD, actualiza a MovEsta en el campo ESTA='1' y el HORAING='now'.
El timer en el form, hace la llamada al SP NuevosPedidos y se analiza lo que devuelve:

Código Delphi [-]
   if dat.spNuevos_Pedidos.Params[0].AsString<>'' then
      begin // agregar a cds nuevos pedidos
      CargarNuevosPedidos; /* separar las listas enviadas,  separadas por comas 
                           y crear los registros en el CDS que se muestra en el grid
   end;
Y este es el procedimiento;

Código Delphi [-]
procedure CargarNuevosPedidos;
var xNombre :  string;
begin
   // distribuyendo para cargarlo por registros a cds
   while pos(',', xNombre)>0 do
      begin
      Dat.cdsTempo.Append;
      dat.cdsTempoNOMBRE.AsString:= copy(xNombre, 1, pos(',', xNombre)-1);
      dat.cdsTempo.Post;
      xNombre:= trim(copy(xNombre, pos(',',xNombre)+1, 1000));
   end;
   Dat.cdsTempo.Append;
   dat.cdsTempoNOMBRE.AsString:= xnombre;
   dat.cdsTempo.Post;
end;

de esta forma me esta funcionando, estoy analizando otras opciones pero por lo pronto esta corriendo la aplicacion como se queria. Lo comparto aver si le sirve a alguien

Gracias Neftaly por la idea y a todos amigos,
Saludos
Responder Con Cita