Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Impresión
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-03-2024
foxito foxito is offline
Miembro
 
Registrado: abr 2008
Ubicación: Orizaba, Ver
Posts: 32
Poder: 0
foxito Va por buen camino
Smile Impresion De Comandas

Hola buen día a todos, espero me puedan ayudar o detectar mi error de antemano gracias por permitir poner este tema. Estoy realizando un pool de impresiones pero tengo el problema de que no imprime completo la orden de la comanda; es decir que desde un dispositivo móvil genera la orden y envía a MySQL a una tabla llamada p_POOL_CMDA y entonces una vez llegada la información tengo un programa que realice con un thread para estar recibiendo las ordenes y de ahí enviarlas a sus respectivas direcciones (cocina, bebidas, etc). Pero resulta que cuando llegan algunas ordenes llegan un retarde de 1 milesegundo y mi programa ya tomo la información inicial y no envía completo:

Cita:
MOVIL
1 HAMBURGUESA
CON QUESO
SIN CEBOLLA
Cita:
MI PROGRAMA RECIBE
1 HAMBURGUESA
CON QUESO (LLEGA UN 1MILESEGUNDO MAS TARDE Y MI SELECT YA NO LO CONSIDERA Y LO ENVIA EN LA SIGUIENTE ORDEN )
SIN CEBOLLA


Mi programa de ej.

Código:
procedure TForm1.btnRefreshClick(Sender: TObject);
begin
    btnRefresh.Enabled := False;
    tmPrint.Enabled := False;
    t := TThread.CreateAnonymousThread(procedure
    var
        x  : integer;
        SavePlace : TBookmark;
    begin
      x := 1;

      SQLExecute.SQL.Text := 'DELETE FROM p_POOL_CMDAS WHERE ESTATUS = "EN" ';
      SQLExecute.ExecSQL();

      qry_geral.Close;

      qry_geral.SQL.Text := 'SELECT PC.ID, ID_COMANDA, FCH_HORA, ID_CODSKU, ' +
        'DESCRIP, QTY, PRECIO, ID_CUENTA, ID_MESERO, TOT_COMENSAL,'+
        'ID_SECC_PREPAR, TIPSKU, DESCRIP_OLD, ID_GRUPO, MESAUNIDA,' +
        'ESTATUS,US.NOMBRE AS NAME_MESERO ' +
        'FROM p_POOL_CMDAS PC ' +
        'JOIN m_USUARIOS US ON PC.ID_MESERO = US.CVE ' +
        'WHERE ESTATUS <> "EN" ' +
        'ORDER BY ID_GRUPO, ID ';

      sleep(500);

      qry_geral.Open();

      qry_geral.First;
      while NOT qry_geral.Eof do
      begin

        etapa := 'Selección de Comandas';

        TThread.Synchronize(nil, procedure
        begin
          lbl.Caption := x.ToString;


          Add_Cmdas_Print(qry_geral.FieldByName('ID_COMANDA').AsInteger,
                     qry_geral.FieldByName('FCH_HORA').AsString,
                     qry_geral.FieldByName('ID_CODSKU').AsString,
                     qry_geral.FieldByName('DESCRIP').AsString,
                     qry_geral.FieldByName('QTY').AsFloat,
                     qry_geral.FieldByName('PRECIO').AsFloat,
                     qry_geral.FieldByName('ID_CUENTA').AsString,
                     qry_geral.FieldByName('ID_MESERO').AsInteger,
                     qry_geral.FieldByName('TOT_COMENSAL').AsInteger,
                     qry_geral.FieldByName('ID_SECC_PREPAR').AsInteger,
                     qry_geral.FieldByName('TIPSKU').AsString,
                     qry_geral.FieldByName('DESCRIP_OLD').AsString,
                     qry_geral.FieldByName('ID_GRUPO').AsInteger,
                     qry_geral.FieldByName('MESAUNIDA').AsBoolean,
                     qry_geral.FieldByName('ESTATUS').AsString,
                     qry_geral.FieldByName('NAME_MESERO').AsString,
                     qry_geral.FieldByName('ID').AsInteger
                     );

        end);

        x := x + 1;

        qry_geral.Next;

      end; // END WHILE

      etapa := 'Impresión de comandas';

      pkFOLIO := '';

      if mmOrden.RecordCount > 0 then
      begin

        mmOrden.DisableControls;

        mmOrden.First;
        while not( mmOrden.Eof) do
        begin

          if mmOrdenESTATUS.AsString <> 'EN' then
          begin

            TThread.Synchronize(nil, procedure
            begin
              lbl.Caption := x.ToString;

                (* OBTIENE EL NUMERO DE COMANDA *)
                pkFOLIO := mmOrdenID_COMANDA.AsString;

                (* ENVIAR IMPRESION *)
                PrintComanda(pkFOLIO);

                SavePlace := mmOrden.GetBookmark;

                ChangeStatus();

                (* GUARDAR LA COMANDA *)
                SaveComanda();

                mmOrden.GotoBookmark( SavePlace );

                sleep(300);
            end);

          end;

          mmOrden.Next;

        end; // END WHILE

        mmOrden.EnableControls;
      end;

      etapa := 'API';
      mmOrden.EmptyDataSet;
      mmOrden.Refresh;
      tmPrint.Enabled := True;

    end);

    //t.FreeOnTerminate := true;
    t.OnTerminate := ThreadEnd;
    t.Start;

end;
Les agradecería mucho que me puedan ayudar.

Última edición por Neftali [Germán.Estévez] fecha: 22-03-2024 a las 15:22:24. Razón: Corregir link dela imagen
Responder Con Cita
  #2  
Antiguo 22-03-2024
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.757
Poder: 21
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
No he leido el código, pero según tu mensaje, creo que la aplicación que hace el pool de impresión solo deberá tener en cuenta comandas "viejas" (con una antigüedad de más de "5" segundos).

De esta manera, si los terminales tardan 1 o 2 segundos en transmitir las líneas de la comanda, siempre verás comandas completas.

Algo así (firebird):
Código Delphi [-]
{
NOW es la fecha y hora del servidor Firebird
(1/24/60/60) es un segundo (1 día / 24 horas / 60 minutos / 60 segundos)
}
 
      qry_geral.SQL.Text := 'SELECT PC.ID, ID_COMANDA, FCH_HORA, ID_CODSKU, ' +
        'DESCRIP, QTY, PRECIO, ID_CUENTA, ID_MESERO, TOT_COMENSAL,'+
        'ID_SECC_PREPAR, TIPSKU, DESCRIP_OLD, ID_GRUPO, MESAUNIDA,' +
        'ESTATUS,US.NOMBRE AS NAME_MESERO ' +
        'FROM p_POOL_CMDAS PC ' +
        'JOIN m_USUARIOS US ON PC.ID_MESERO = US.CVE ' +
        'WHERE ESTATUS <> "EN" ' +

        'AND  FCH_HORA < 'NOW' - 5*(1/24/60/60)' +

        'ORDER BY ID_GRUPO, ID ';
Responder Con Cita
  #3  
Antiguo 22-03-2024
foxito foxito is offline
Miembro
 
Registrado: abr 2008
Ubicación: Orizaba, Ver
Posts: 32
Poder: 0
foxito Va por buen camino
Hola duilioisola, gracias por tu respuestas lo probare y te comento mas tarde. Me parece una muy buena solución
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Problema con las comandas de STRING cesar.zapata Varios 3 23-10-2012 02:08:44
Impresion shoulder Varios 3 29-03-2010 19:37:11
Fin de Impresion luxus Impresión 3 19-12-2007 01:45:32
Impresion con Rav Alejandro73 Impresión 0 21-06-2007 20:27:02
Problema de impresion Detener la Impresion Gangster Impresión 2 26-01-2007 20:22:12


La franja horaria es GMT +2. Ahora son las 01:01:01.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi