⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 minestatistic_unt.pas

📁 煤矿行业采掘接替计划自动生成系统
💻 PAS
📖 第 1 页 / 共 3 页
字号:
                    j:=j+1;
                    MineStat[i].WorkGroup_Id:=TempStat[j].WorkGroup_Id;
                    MineStat[i].Item_Id:=TempStat[j].Item_Id;
                    MineStat[i].Begin_Date:=TempStat[j].Begin_Date;
                    MineStat[i].End_Date:=TempStat[j].End_Date;
                    MineStat[i].Finished:=TempStat[j].Finished;
                    MineStat[i].Remain:=TempStat[j].Remain;
                    MineStat[i].Finished_Sum:=TempStat[j].Finished_Sum;
                    MineStat[i].Relay_Id:=TempStat[j].Relay_Id;
                  end;
                j:=j+1;
                AddStat.WorkGroup_Id:=TempStat[j].WorkGroup_Id;
                AddStat.Item_Id:=TempStat[j].Item_Id;
                AddStat.Begin_Date:=TempStat[j].Begin_Date;
                AddStat.End_Date:=TempStat[j].End_Date;
                AddStat.Finished:=TempStat[j].Finished;
                AddStat.Remain:=TempStat[j].Remain;
                AddStat.Finished_Sum:=TempStat[j].Finished_Sum;
                AddStat.Relay_Id:=TempStat[j].Relay_Id;
              end;  //end: if n=High(MineStat)

          //更新数据库
          //首先更新最后一条记录
          With Base_DataS.DataSet do
            begin
              last;
              edit;
              FieldByName('WorkGroup_Id').AsInteger:=AddStat.WorkGroup_Id;
              FieldByName('Item_Id').AsInteger:=AddStat.Item_Id;
              FieldByName('Begin_Date').AsDateTime:=AddStat.Begin_Date;
              FieldByName('End_Date').AsDateTime:=AddStat.End_Date;
              FieldByName('Finished').AsInteger:=AddStat.Finished;
              FieldByName('Remain').AsInteger:=AddStat.Remain;
              FieldByName('Finished_Sum').AsInteger:=AddStat.Finished_Sum;
              FieldByName('Relay_Id').AsInteger:=AddStat.Relay_Id;
              post;
            end;
          WorkGroupId:=MineStat[m-1].WorkGroup_Id;
          //ItemId:=MineStat[m].Item_Id;
          //找到需要更新的位置
          with Base_DataS.DataSet do
            begin
              first;
              while (not eof) do
                begin
                  if(FieldByName('WorkGroup_Id').AsInteger=WorkGroupId)then
                    begin
                      break;
                    end;
                  next;
                end;
              while(FieldByName('WorkGroup_Id').AsInteger=WorkGroupId)do
                begin
                  next;
                end;
            end;
          BK:=Base_DataS.DataSet.GetBookmark;
          With Base_DataS.DataSet do
            begin
              i:=m;
              while i<=High(MineStat) do
                begin
                  edit;
                  FieldByName('WorkGroup_Id').AsInteger:=MineStat[i].WorkGroup_Id;
                  FieldByName('Item_Id').AsInteger:=MineStat[i].Item_Id;
                  FieldByName('Begin_Date').AsDateTime:=MineStat[i].Begin_Date;
                  FieldByName('End_Date').AsDateTime:=MineStat[i].End_Date;
                  FieldByName('Finished').AsInteger:=MineStat[i].Finished;
                  FieldByName('Remain').AsInteger:=MineStat[i].Remain;
                  FieldByName('Finished_Sum').AsInteger:=MineStat[i].Finished_Sum;
                  FieldByName('Relay_Id').AsInteger:=MineStat[i].Relay_Id;
                  post;
                  next;
                  i:=i+1;
                end;
            end; //end:  With Base_DataS.DataSet do
          Base_DataS.DataSet.GotoBookmark(BK);
          Base_DataS.DataSet.FreeBookmark(BK);
        end;  //end:  if k>0 then
    end;
end;

procedure TMineStatistic_Frm.DBEdit3KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if key=VK_RETURN then BitBtn3.SetFocus;

end;

procedure TMineStatistic_Frm.ReadStatData;
var
m,n,i,j:integer;
Item_Id:integer;
begin
  if Base_DataS.DataSet.RecordCount=0 then exit;
  m:=Base_DataS.DataSet.RecordCount;
  setlength(MineStat,m+1);
  with Base_DataS.DataSet do
    begin
      first;
      i:=1;
      while not eof do
        begin
          MineStat[i].Id:=FieldByName('Id').AsInteger;
          MineStat[i].WorkGroup_Id:=FieldByName('WorkGroup_Id').AsInteger;
          MineStat[i].Item_Id:=FieldByName('Item_Id').AsInteger;
          MineStat[i].Begin_Date:=FieldByName('Begin_Date').AsDateTime;
          MineStat[i].End_Date:=FieldByName('End_Date').AsDateTime;
          MineStat[i].Finished:=FieldByName('Finished').AsInteger;
          MineStat[i].Remain:=FieldByName('Remain').AsInteger;
          MineStat[i].Finished_Sum:=FieldByName('Finished_Sum').AsInteger;
          MineStat[i].Relay_Id:=FieldByName('Relay_Id').AsInteger;
          MineStat[i].PercentComplete:=0;  //暂时设置初值为0
          next;
          i:=i+1;
        end;
    end;
  with Data_Frm.Face_AdoTab do
    begin
      first;
      while not eof do
        begin
          Item_Id:=FieldByName('Face_Id').AsInteger;
          for i:=1 to High(MineStat) do
            begin
              if MineStat[i].Item_Id=Item_Id then
                begin
                  MineStat[i].Plan_Amount:=round(FieldByName('Remain_Reserve').AsFloat*10000);
                  MineStat[i].Plan_DayOutput:=FieldByName('Day_Output').AsInteger;
                  MineStat[i].Plan_DayProgress:=FieldByName('Day_Progress').AsFloat;
                  MineStat[i].Plan_TaskTime:=FieldByName('TaskTime').AsInteger;
                  MineStat[i].Name:=FieldByName('Name').AsString;
                  break; //这样,每个回采面的多条统计记录中,只有第一条记录有Plan_Amount,Plan_DayOutput,Day_Progress,TaskTime等信息
                end;
            end;
          next;
        end;
    end;
end;



procedure TMineStatistic_Frm.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  //处理采煤统计情况后,更新到“回采接替跟踪f”表中
  Hint_Frm:=THint_Frm.Create(self);
  Hint_Frm.Timer1.Enabled:=true;
  Hint_Frm.Caption:='处理信息提示';
  Hint_Frm.Image1.Visible:=false;
  Hint_Frm.Label1.Caption:='处理统计数据......';
  Hint_Frm.ShowModal;
  Hint_Frm.Free;
  Hint_Frm:=nil;

  DealMineStat;
end;

procedure TMineStatistic_Frm.DealMineStat;
var
i,j,k,m,n,s,t:integer;
Item_Id,FaceNum:integer;
Remain,Finished,Finished_Sum,Percent,DateDis:integer;
BeginDate,EndDate:TDate;
Find:Boolean;
begin
  //读取统计数据
  ReadStatData;
//首先计算统计数据(存在MineStat数组中)涉及到几个不同的回采面
  Item_Id:=MineStat[1].Item_Id;
  FaceNum:=1;
  for i:=2 to High(MineStat) do
    begin
      if MineStat[i].Item_Id<>Item_Id then
        begin
          FaceNum:=FaceNum+1;
          Item_Id:=MineStat[i].Item_Id;
        end;
    end;
//接着把统计数据中的不同回采面的信息提取并存放在Mine数组中
  setlength(Mine,FaceNum+1);
  j:=1;
  Mine[j].WorkGroup_Id:=MineStat[1].WorkGroup_Id;
  Mine[j].Item_Id:=MineStat[1].Item_Id;
  Mine[j].Name:=MineStat[1].Name;
  Mine[j].Plan_Amount:=MineStat[1].Plan_Amount;
  Mine[j].Plan_TaskTime:=MineStat[1].Plan_TaskTime;
  Mine[j].Plan_DayOutput:=MineStat[1].Plan_DayOutput;
  Mine[j].Plan_DayProgress:=MineStat[1].Plan_DayProgress;

  Item_Id:=MineStat[1].Item_Id;
  for i:=2 to High(MineStat) do
    begin
      if MineStat[i].Item_Id<>Item_Id then
        begin
          j:=j+1;
          Mine[j].WorkGroup_Id:=MineStat[i].WorkGroup_Id;
          Mine[j].Item_Id:=MineStat[i].Item_Id;
          Mine[j].Name:=MineStat[i].Name;
          Mine[j].Plan_Amount:=MineStat[i].Plan_Amount;
          Mine[j].Plan_TaskTime:=MineStat[i].Plan_TaskTime;
          Mine[j].Plan_DayOutput:=MineStat[i].Plan_DayOutput;
          Mine[j].Plan_DayProgress:=MineStat[i].Plan_DayProgress;

          Item_Id:=MineStat[i].Item_Id;
        end;
    end;
  //把统计的各回采面的实际开、完工日期默认值暂设为计划开、完工日期
  with Data_Frm.MineRelay_AdoTab do
    begin
      first;
      while not eof do
        begin
          for i:=1 to High(Mine) do
            begin
              if Mine[i].Item_Id=FieldByName('Face_Lane').AsInteger then
                begin
                  Mine[i].Begin_Date:=FieldByName('Begin_Date').AsDateTime;
                  Mine[i].Plan_BeginDate:=FieldByName('Begin_Date').AsDateTime;
                  Mine[i].End_Date:=FieldByName('End_Date').AsDateTime;
                  Mine[i].Plan_EndDate:=FieldByName('End_Date').AsDateTime;
                  break;
                end;
            end;
          next;
        end;
    end;

  //开始处理
  for i:=1 to High(Mine) do
    begin
      Item_Id:=Mine[i].Item_Id;
      //Dealed:=false;
      for j:=1 to High(MineStat) do
        begin
          if MineStat[j].Item_Id=Item_Id then
            begin
              //首先处理回采面Mine[i]对应的第一条记录,以确定实际开工日期
              TimePara_Frm:=TTimePara_Frm.Create(self);
              TimePara_Frm.Caption:='确认实际开工日期';
              TimePara_Frm.Label1.Caption:='"'+Mine[i].Name+'" 计划'
                  +datetostr(Mine[i].Begin_Date)+'开工,实际开工日期请确认:';
              TimePara_Frm.DateTimePicker1.Date:=MineStat[j].Begin_Date;
              TimePara_Frm.ShowModal;
              Mine[i].Begin_Date:=TimePara_Frm.BeginTime;
              TimePara_Frm.Free;
              TimePara_Frm:=nil;

              //首先找到编号为Item_Id的回采面在表中对应的最后一条统计记录,以读取其统计结束日期等其它信息
              k:=j;
              while MineStat[k].Item_Id=Item_Id do
                begin
                  k:=k+1;
                  if k>High(MineStat) then //统计表中涉及的最后一个回采面只有一个统计记录
                    begin
                      break;
                    end;
                  if k=High(MineStat) then //统计表中涉及的最后一个回采面有多个统计记录
                    begin
                      k:=k+1;
                      break;
                    end;
                end;
              Mine[i].Finished_Sum:=MineStat[k-1].Finished_Sum;

              // 1:采掘工作结束
              if(MineStat[k-1].Remain<=0)
                then
                     begin
                       Mine[i].End_Date:=MineStat[k-1].End_Date;
                       Mine[i].PercentComplete:=100;
                     end;

              // 2:采掘工作没有结束
              if(MineStat[k-1].Remain>0)
                then
                  begin
                    Percent:=round((MineStat[k-1].Finished_Sum/Mine[i].Plan_Amount)*100);
                    Mine[i].PercentComplete:=Percent;
                  end;
              break; //break: for j:=1 to High(MineStat) do
            end;    //end:  if MineStat[j].Item_Id=Item_Id then
        end;    //end:  for j:=1 to High(MineStat) do
    end;//end: for i:=1 to High(Mine) do

    //把对采煤统计情况处理的结果(存放在Mine数组中)更新到“回采接替跟踪”表中
    try
      With Data_Frm.MineRelayTrace_AdoTab do
        begin
          first;
          while not eof do
            begin
              Find:=false;
              Item_Id:=FieldByName('Face_Lane').AsInteger;
              for i:=1 to High(Mine) do
                begin
                  if Mine[i].Item_Id=Item_Id then
                    begin
                      Find:=true;
                      break;   //break: for i:=1 to High(Mine) do
                    end;
                end;
              if Find then  //如果“采煤统计”表中统计的回采面中有“回采接替跟踪”表当前的记录对应的回采面时,则进行更新处理
                begin
                  Edit;
                  FieldByName('Begin_Date').AsDateTime:=Mine[i].Begin_Date;
                  FieldByName('End_Date').AsDateTime:=Mine[i].End_Date;
                  FieldByName('PercentComplete').AsInteger:=Mine[i].PercentComplete;
                  post;
                end;
              next;
            end;
        end;  //end:   With Data_Frm.MineRelayTrace_AdoTab do
    except
      showmessage('向“回采接替跟踪”表中更新数据时出现错误,位置在MineStatistic_Unt单元中的DealMineStat过程中。');
    end;

end;

procedure TMineStatistic_Frm.N1Click(Sender: TObject);
begin
  MineRelayShow_Frm:=TMineRelayShow_Frm.Create(self);
  MineRelayShow_Frm.Show;

end;

procedure TMineStatistic_Frm.DBLookupComboBox2Click(Sender: TObject);
var
FaceId,Remain:integer;
i,j,k:integer;
NoOne:boolean;
BeginDate,EndDate:TDate;
begin
  FaceId:=Base_DataS.DataSet.FieldByName('Item_Id').AsInteger;
  Remain:=trunc(RelayFace_DataS.DataSet.FieldByName('Remain_Reserve').AsFloat*10000);
  BeginDate:=RelayFace_DataS.DataSet.FieldByName('Begin_Date').AsDateTime;
  EndDate:=RelayFace_DataS.DataSet.FieldByName('End_Date').AsDateTime;
  NoOne:=true;//假设统计表中没有新添加的回采面
  for i:=1 to High(MineStat) do
    begin
      if MineStat[i].Item_Id=FaceId then
        begin
          NoOne:=false;
          break;
        end;
    end;
  if NoOne then  //若新添加的记录对应的回采面在原表中没有,则设置该添加的回采面的剩余储量
    begin
      Base_DataS.DataSet.FieldByName('Remain').AsInteger:=Remain;
      Base_DataS.DataSet.FieldByName('Finished_Sum').AsInteger:=0;
      Base_DataS.DataSet.FieldByName('Finished').AsInteger:=0;
      DateTimePicker1.DateTime:=BeginDate;
      DateTimePicker2.DateTime:=BeginDate;
    end;
  DateTimePicker1.Enabled:=true;
  DateTimePicker2.Enabled:=true;
  DBEdit1.Enabled:=true;
  DBEdit2.Enabled:=true;
  DBEdit3.Enabled:=true;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -