Espero que tengan un feliz inicio de año y que todo lo que desearon, planearon, prometieron se cumpla!!
Bueno, entrando en materia; estoy realizando una aplicación de captura de datos desde el puerto serial (5 puertos) el envío de datos no es demasiado rápido -5 segundos entre dos de los dispositivos, 3 minutos en otro y casi 5 minutos con otros dos- la probabilidad de colisión de datos es muy baja y hasta ahora todo me ha ido bien en las pruebas, mi problema se presenta cuando necesito generar tres reportes (Rave Reports) - por cada grupo de dispositivos- esto se hace al "final" del turno de trabajo -06:00:00 a.m. / 02:00:00 p.m. / 10:00:00 p.m. - pues bien el reporte mas grande consta de aproximadamente 116 paginas y la aplicación se "congela" en la captura de datos y queda bloqueada, debo cerrarla y reiniciar nuevamente y funciona perfecta.
delphi
case miHora of 6: begin [b]CreaRptTercero;[/b] with frmtrn1 do begin sgHoras.TopRow := 1; LimpiaTurnos; end; with frmtrn2 do begin sgHoras.TopRow := 1; LimpiaTurnos; end; with frmtrn3 do begin sgHoras.TopRow := 1; LimpiaTurnos; end; end; 14: begin [b]CreaRptPrimero;[/b] frmtrn1.sgHoras.TopRow := 9; frmtrn2.sgHoras.TopRow := 9; frmtrn3.sgHoras.TopRow := 9; end; 22: begin [b]CreaRptSegundo;[/b] frmtrn1.sgHoras.TopRow := 17; frmtrn2.sgHoras.TopRow := 17; frmtrn3.sgHoras.TopRow := 17; end;
Como pueden ver en la porcion de codigo anterior creo los reportes a la hora adecuada y hago otras tareas que no ocupan demasiado tiempo, esto es en unos Frames y StringGrid.
Con este codigo obtengo los datos del turno y los envio a impresion PDF
delphi
procedure TfrmPrincipal.CreaRptPrimero; var tdtInicio,tdtFinal:TDateTime; myYear, myMonth, myDay: Word; begin DecodeDate(Now,myYear,myMonth,myDay); tdtInicio := StrToDateTime(DateTostr(Today) + ' ' + '06:00:00'); tdtFinal := StrToDatetime(Datetostr(Today) + ' ' + '13:59:59'); dmDatabase.RptTurnoGpo1(tdtInicio,tdtFinal); //Realiza un query de +- 5000 registros dmDatabase.RptTurnoGpo2(tdtInicio,tdtFinal); //Realiza un query de +- 300 registros dmReportes.ImprimePDFGpo1('Reporte' + IntToStr(myDay) + IntToStr(myMonth) + IntToStr(myYear) + '_1', 'Primer Turno ' + DateToStr(Today)); dmReportes.ImprimePDFGpo2('Reporte' + IntToStr(myDay) + IntToStr(myMonth) + IntToStr(myYear) + '_1', 'Primer Turno ' + DateToStr(Today)); end;
Estoy pensando ( ) ideas peregrinas así que antes de hacer mas bobadas pido una opinión sobre lo que debería de hacer.
Saludos y gracias por el tiempo y atencion prestado.