程序中有一个数据处理线程,代码如下:
procedure TDatPrcThread.Execute;
begin
while not self.Exit do
begin
Sleep(10);
//每秒执行一次
if flag <> self.SysDat.GetMM then
begin
flag := self.SysDat.GetMM;
self.DatPrc;//数据处理
//换班清零
if((self.SysDat.GetFF=0) and ((self.SysDat.GetSS - self.SysDat.GetPara.kstime) mod 8 = 0)) then
begin
if timeprnbz then
begin
timeprnbz := false;
clsbb; end;
end else timeprnbz := true;
end;
end;
end;
当换班条件合适时进行换班处理,主要是执行clsbb函数,在clsbb函数中有一段报表打印语句,执行时报表能够显示,但是无法往下执行了。
procedure TDatPrcThread.clsbb;
var
i: integer;
DatObj: TDatObj;
LastFileName : string;
begin
if self.SysDat.GetSS = self.SysDat.GetPara.kstime then //到倒班时间
begin
self.SysDat.TeamShift(self.SysDat.getpara.shift_ID); //倒班
SaveSysParaFileData(self.SysDat.GetPara); //保存系统参数
end;
……
LastFileName := self.SysDat.GetFileName;
self.SysDat.SetFN_FD; //计算报表文件名
//打印报表
if FrmReport = nil then FrmReport := TFrmReport.Create(nil);
FrmReport.SetDat(self.SysDat);
FrmReport.FillReportData(LastFileName);
FrmReport.QuickRep1.Preview;
FrmReport.Close;
end;
procedure TDatPrcThread.Execute;
begin
while not self.Exit do
begin
Sleep(10);
//每秒执行一次
if flag <> self.SysDat.GetMM then
begin
flag := self.SysDat.GetMM;
self.DatPrc;//数据处理
//换班清零
if((self.SysDat.GetFF=0) and ((self.SysDat.GetSS - self.SysDat.GetPara.kstime) mod 8 = 0)) then
begin
if timeprnbz then
begin
timeprnbz := false;
clsbb; end;
end else timeprnbz := true;
end;
end;
end;
当换班条件合适时进行换班处理,主要是执行clsbb函数,在clsbb函数中有一段报表打印语句,执行时报表能够显示,但是无法往下执行了。
procedure TDatPrcThread.clsbb;
var
i: integer;
DatObj: TDatObj;
LastFileName : string;
begin
if self.SysDat.GetSS = self.SysDat.GetPara.kstime then //到倒班时间
begin
self.SysDat.TeamShift(self.SysDat.getpara.shift_ID); //倒班
SaveSysParaFileData(self.SysDat.GetPara); //保存系统参数
end;
……
LastFileName := self.SysDat.GetFileName;
self.SysDat.SetFN_FD; //计算报表文件名
//打印报表
if FrmReport = nil then FrmReport := TFrmReport.Create(nil);
FrmReport.SetDat(self.SysDat);
FrmReport.FillReportData(LastFileName);
FrmReport.QuickRep1.Preview;
FrmReport.Close;
end;
改成
FrmReport.QuickRep1.Print;