程序中有一个数据处理线程,代码如下:
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;