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

📄 relay_baseunt.pas

📁 煤矿行业采掘接替计划自动生成系统
💻 PAS
📖 第 1 页 / 共 4 页
字号:

procedure TRelay_BaseFrm.BitBtn2Click(Sender: TObject);
begin
  DeleteAndAdjust;
end;

procedure TRelay_BaseFrm.DBLookupComboBox2KeyDown(Sender: TObject;
  var Key: Word; Shift: TShiftState);
begin
  if key=VK_RETURN then DBLookupComboBox3.SetFocus;

end;

procedure TRelay_BaseFrm.DBLookupComboBox3KeyDown(Sender: TObject;
  var Key: Word; Shift: TShiftState);
begin
  if key=VK_RETURN then DBLookupListBox1.SetFocus;

end;

procedure TRelay_BaseFrm.ReadRelayData;
var
i,n:integer;
begin
  //读取Base_DataS数据集中的数据,以便在需要的时候进行数据比较和检查等处理
  try
    n:=Base_DataS.DataSet.RecordCount;
    SetLength(Relay,n+1);
    Base_DataS.DataSet.First;
    i:=1;
    while not Base_DataS.DataSet.Eof do
      begin
        Relay[i].Sequence:=Base_DataS.DataSet.FieldByName('Sequence').AsInteger;
        Relay[i].Project_Id:=Base_DataS.DataSet.FieldByName('Project_Id').AsInteger;
        Relay[i].Relay_Route:=Base_DataS.DataSet.FieldByName('Relay_Route').AsInteger;
        Relay[i].Relay_Id:=Base_DataS.DataSet.FieldByName('Relay_Id').AsInteger;
        Relay[i].Face_Lane:=Base_DataS.DataSet.FieldByName('Face_Lane').AsInteger;
        Relay[i].Area:=Base_DataS.DataSet.FieldByName('Area').AsInteger;
        Relay[i].WorkGroup:=Base_DataS.DataSet.FieldByName('WorkGroup').AsInteger;
        Relay[i].B_Date:=Base_DataS.DataSet.FieldByName('Begin_Date').AsDateTime;
        Relay[i].E_Date:=Base_DataS.DataSet.FieldByName('End_Date').AsDateTime;
        Relay[i].TaskTime:=trunc(Relay[i].E_Date-Relay[i].B_Date);

        Data_Frm.Lane_AdoTab.Locate('Lane_Id',Relay[i].Face_Lane,[locaseinsensitive]);
        if (not Data_Frm.Lane_AdoTab.FieldByName('WorkQuantity').IsNull)
          then Relay[i].WorkQuantity:=Data_Frm.Lane_AdoTab.FieldByName('WorkQuantity').AsFloat
          else Relay[i].WorkQuantity:=0;
        Relay[i].Rock_Property:=Data_Frm.Lane_AdoTab.FieldByName('Rock_Property').AsString;
        Relay[i].Lane_Property:=Data_Frm.Lane_AdoTab.FieldByName('Property').AsString;
        Relay[i].Support_Type:=Data_Frm.Lane_AdoTab.FieldByName('Support_Type').AsString;

        Base_DataS.DataSet.Next;
        i:=i+1;
      end;
  except
  end;
end;

procedure TRelay_BaseFrm.BitBtn10Click(Sender: TObject);
var
i,LastId:integer;
begin
  if Base_DataS.DataSet.RecordCount>0 then ReadRelayData;
  try
    if Base_DataS.DataSet.RecordCount=0 then LastId:=0
       else LastId:=GetLastRecId(Base_DataS.DataSet,'Sequence');
    Base_DataS.DataSet.Append;
    Base_DataS.DataSet.FieldByName('Sequence').Value:=LastId+1;
  except
    showmessage('数据库未连接正确!');
  end;

  BitBtn3.Enabled:=true;
  DBGrid1.ReadOnly:=false;
  DBGrid1.Enabled:=false;
  BitBtn1.Enabled:=false;
  BitBtn2.Enabled:=false;
  BitBtn4.Enabled:=false;
  BitBtn5.Enabled:=false;
  BitBtn6.Enabled:=false;
  BitBtn7.Enabled:=false;
  BitBtn8.Enabled:=false;
  BitBtn9.Enabled:=false;
  BitBtn10.Enabled:=false;
  BitBtn11.Enabled:=false;
  BitBtn12.Enabled:=false;
  for i:=1 to Panel2.ControlCount do
      begin
        if Panel2.Controls[i-1].Tag>=0 then
           Panel2.Controls[i-1].Enabled:=true;
      end;

  DBLookUpComboBox1.SetFocus;
//在处于添加方案状态时,避免进行添加和更新具体接替任务的数据操作,
//也即是关闭DBLookUpListBox1的OnDblClick和OnKeyPress两个事件执行相应程序段
  //ProjectAddMode:=true;
end;

procedure TRelay_BaseFrm.DateTimePicker1Change(Sender: TObject);
begin
  BeginDateChange:=true;

end;

procedure TRelay_BaseFrm.DateTimePicker2Change(Sender: TObject);
begin
  EndDateChange:=true;

end;

procedure TRelay_BaseFrm.DBLookupListBox1Enter(Sender: TObject);
begin
  FaceIsEdit:=true;

end;

procedure TRelay_BaseFrm.BitBtn11Click(Sender: TObject);
var
PriorRec:TRelay;//前一条记录
PriorPriorRec:TRelay;
CurrentRec:TRelay; //当前记录
PriorTaskT,CurrentTaskT,PriorInterv,CurrentInterv:integer;
SecondRelay:boolean;//是否是一个施工队的第二个接替任务
begin
  if Base_DataS.DataSet.RecordCount=0 then exit;
  if Base_DataS.DataSet.FieldByName('Sequence').AsInteger=1 then exit;
  if Base_DataS.DataSet.FieldByName('Relay_Id').AsInteger=1 then exit;
  //初始任务当前记录不是当前施工队的第二个接替任务
  SecondRelay:=false;
  with Base_DataS.DataSet do
    begin
      CurrentRec.Sequence:=FieldByName('Sequence').AsInteger;
      CurrentRec.Project_Id:=FieldByName('Project_Id').AsInteger;
      CurrentRec.Relay_Route:=FieldByName('Relay_Route').AsInteger;
      CurrentRec.Relay_Id:=FieldByName('Relay_Id').AsInteger;
      CurrentRec.Face_Lane:=FieldByName('Face_Lane').AsInteger;
      CurrentRec.Area:=FieldByName('Area').AsInteger;
      CurrentRec.WorkGroup:=FieldByName('WorkGroup').AsInteger;
      CurrentRec.B_Date:=FieldByName('Begin_Date').AsDateTime;
      CurrentRec.E_Date:=FieldByName('End_Date').AsDateTime;
    end;
  Base_DataS.DataSet.Prior;
  with Base_DataS.DataSet do
    begin
      PriorRec.Sequence:=FieldByName('Sequence').AsInteger;
      PriorRec.Project_Id:=FieldByName('Project_Id').AsInteger;
      PriorRec.Relay_Route:=FieldByName('Relay_Route').AsInteger;
      PriorRec.Relay_Id:=FieldByName('Relay_Id').AsInteger;
      PriorRec.Face_Lane:=FieldByName('Face_Lane').AsInteger;
      PriorRec.Area:=FieldByName('Area').AsInteger;
      PriorRec.WorkGroup:=FieldByName('WorkGroup').AsInteger;
      PriorRec.B_Date:=FieldByName('Begin_Date').AsDateTime;
      PriorRec.E_Date:=FieldByName('End_Date').AsDateTime;
    end;
  if PriorRec.Relay_Id=1 then SecondRelay:=true;
  if Base_DataS.DataSet.FieldByName('Sequence').AsInteger<>1 then //如果不是第二条记录,则读取上上条记录的信息
    begin
      Base_DataS.DataSet.Prior;
      with Base_DataS.DataSet do
        begin
          PriorPriorRec.Sequence:=FieldByName('Sequence').AsInteger;
          PriorPriorRec.Project_Id:=FieldByName('Project_Id').AsInteger;
          PriorPriorRec.Relay_Route:=FieldByName('Relay_Route').AsInteger;
          PriorPriorRec.Relay_Id:=FieldByName('Relay_Id').AsInteger;
          PriorPriorRec.Face_Lane:=FieldByName('Face_Lane').AsInteger;
          PriorPriorRec.Area:=FieldByName('Area').AsInteger;
          PriorPriorRec.WorkGroup:=FieldByName('WorkGroup').AsInteger;
          PriorPriorRec.B_Date:=FieldByName('Begin_Date').AsDateTime;
          PriorPriorRec.E_Date:=FieldByName('End_Date').AsDateTime;
        end;
      Base_DataS.DataSet.Next;
      PriorInterv:=round(PriorRec.B_Date-PriorPriorRec.E_Date);
    end;
//若当前记录的前一条记录是首采面,则要寻找该首采面的回采开始前的间歇时间,
//因为作为首采面是不考虑开始前的间歇时间的,所以在接替表中无法得出间歇时间,
//要通过其它表来查询得出
  if  SecondRelay
         then
           begin
             Data_Frm.Face_AdoTab.Locate('Face_Id',PriorRec.Face_Lane,[locaseinsensitive]);
             PriorRec.TechnicType:=Data_Frm.Face_AdoTab.fieldbyname('Technic_Type').AsInteger;
             Data_Frm.MineInterval_AdoTab.Locate('Technic_Type',PriorRec.TechnicType,[locaseinsensitive]);
             PriorRec.Interval:=Data_Frm.MineInterval_AdoTab.fieldbyname('Interval_Time').AsInteger;
             PriorInterv:=PriorRec.Interval;
           end;

  Base_DataS.DataSet.Next;
  CurrentInterv:=round(CurrentRec.B_Date-PriorRec.E_Date);
  PriorTaskT:=round(PriorRec.E_Date-PriorRec.B_Date);
  CurrentTaskT:=round(CurrentRec.E_Date-CurrentRec.B_Date);

  if (CurrentRec.Project_Id=PriorRec.Project_Id)
         and(CurrentRec.Relay_Route=PriorRec.Relay_Route)
    then
     begin
       if not SecondRelay then
         begin
           //修改当前记录的工作面,采区,开始日期和结束日期
           Base_DataS.DataSet.Edit;
           with Base_DataS.DataSet do
             begin
               //if not Data_Frm.Face_AdoTab.Locate('Face_Id',PriorRec.Face_Lane,[locaseinsensitive])
                 //then exit;
               FieldByName('Face_Lane').AsInteger:=PriorRec.Face_Lane;
               FieldByName('Area').AsInteger:=PriorRec.Area;
               FieldByName('Begin_Date').AsDateTime:=PriorPriorRec.E_Date+CurrentInterv+CurrentTaskT+PriorInterv;
               FieldByName('End_Date').AsDateTime:=PriorPriorRec.E_Date+CurrentInterv+CurrentTaskT+PriorInterv+PriorTaskT;
               Post;
             end;
           Base_DataS.DataSet.Prior;
           //修改当前记录的前一条记录的工作面,采区,开始日期和结束日期
           Base_DataS.DataSet.Edit;
           with Base_DataS.DataSet do
             begin
               //if not Data_Frm.Face_AdoTab.Locate('Face_Id',CurrentRec.Face_Lane,[locaseinsensitive])
                 //then exit;
               FieldByName('Face_Lane').AsInteger:=CurrentRec.Face_Lane;
               FieldByName('Area').AsInteger:=CurrentRec.Area;
               FieldByName('Begin_Date').AsDateTime:=PriorPriorRec.E_Date+CurrentInterv;
               FieldByName('End_Date').AsDateTime:=PriorPriorRec.E_Date+CurrentInterv+CurrentTaskT;
               Post;
             end;
         end;
         if SecondRelay then
           begin
             //修改当前记录的工作面,采区,开始日期和结束日期
             Base_DataS.DataSet.Edit;
             with Base_DataS.DataSet do
               begin
                 //if not Data_Frm.Face_AdoTab.Locate('Face_Id',PriorRec.Face_Lane,[locaseinsensitive])
                   //then exit;
                 FieldByName('Face_Lane').AsInteger:=PriorRec.Face_Lane;
                 FieldByName('Area').AsInteger:=PriorRec.Area;
                 FieldByName('Begin_Date').AsDateTime:=PriorRec.B_Date+CurrentTaskT+PriorInterv;
                 FieldByName('End_Date').AsDateTime:=PriorRec.B_Date+CurrentTaskT+PriorInterv+PriorTaskT;
                 Post;
               end;
             Base_DataS.DataSet.Prior;
             //修改当前记录的前一条记录的工作面,采区,开始日期和结束日期
             Base_DataS.DataSet.Edit;
             with Base_DataS.DataSet do
               begin
                 //if not Data_Frm.Face_AdoTab.Locate('Face_Id',CurrentRec.Face_Lane,[locaseinsensitive])
                   //then exit;
                 FieldByName('Face_Lane').AsInteger:=CurrentRec.Face_Lane;
                 FieldByName('Area').AsInteger:=CurrentRec.Area;
                 FieldByName('Begin_Date').AsDateTime:=PriorRec.B_Date;
                 FieldByName('End_Date').AsDateTime:=PriorRec.B_Date+CurrentTaskT;
                 Post;
               end;
           end;
     end;
end;

procedure TRelay_BaseFrm.BitBtn12Click(Sender: TObject);
var
CurrentNextRec:TRelay;//前一条记录
CurrentPriorRec:TRelay;
CurrentRec:TRelay; //当前记录
CurrentNextTaskT,CurrentTaskT,CurrentNextInterv,CurrentInterv:integer;
FirstRelay:boolean;//是否是一个施工队的第二个接替任务
CurrentRecNo,LastRecNo:integer;
MK:Tbookmark;
begin
  if Base_DataS.DataSet.RecordCount=0 then exit;

  CurrentRecNo:=Base_DataS.DataSet.RecNo;
  MK:=Base_DataS.DataSet.GetBookmark;
  Base_DataS.DataSet.Last;
  LastRecNo:=Base_DataS.DataSet.RecNo;
  Base_DataS.DataSet.GotoBookmark(MK);
  if CurrentRecNo=LastRecNo then exit;//如果是最后一条记录

  with Base_DataS.DataSet do
    begin
      CurrentRec.Sequence:=FieldByName('Sequence').AsInteger;
      CurrentRec.Project_Id:=FieldByName('Project_Id').AsInteger;
      CurrentRec.Relay_Route:=FieldByName('Relay_Route').AsInteger;
      CurrentRec.Relay_Id:=FieldByName('Relay_Id').AsInteger;
      CurrentRec.Face_Lane:=FieldByName('Face_Lane').AsInteger;
      CurrentRec.Area:=FieldByName('Area').AsInteger;
      CurrentRec.WorkGroup:=FieldByName('WorkGroup').AsInteger;
      CurrentRec.B_Date:=FieldByName('Begin_Date').AsDateTime;
      CurrentRec.E_Date:=FieldByName('End_Date').AsDateTime;
    end;
  CurrentTaskT:=round(CurrentRec.E_Date-CurrentRec.B_Date);
  FirstRelay:=false;//初始假定不是当前施工队的首采面
  if CurrentRec.Relay_Id=1 then FirstRelay:=true;
  if not FirstRelay then  //若不是首采面
    begin
      Base_DataS.DataSet.Prior;
      with Base_DataS.DataSet do
        begin

⌨️ 快捷键说明

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