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

📄 drillrelay_unt.pas

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

               DBLookUpComboBox1.Enabled:=false;
               ComboBox1.Enabled:=false;
               DBLookUpComboBox2.Enabled:=false;
               DBLookUpComboBox3.Enabled:=false;
               DBLookUpListBox1.Enabled:=false;
               Label5.Caption:='';
               exit;
             end;
           Inf1:=messagedlg('不允许在此处插入 "'+InsertWorkGroupName+'" 掘进队,只能指定 "'+Name1+'"  掘进队,请选择!继续请按"yes"!',mtconfirmation,[mbyes,mbno],0);
           if Inf1=mrno then
             begin
               Cancel; //取消插入操作
               InsertMode:=false;
               //还原对原表中从当前记录到以后的记录所做的临时修改
               GotoBookmark(Mark);

               j:=1;
               while not Eof do
                  begin
                    Edit;
                    FieldByName('Sequence').AsInteger:=BehindRelay[j].Sequence;
                    Post; //更新后表的指针仍然指向当前记录,但是,当关闭再打开该表后,该当前记录的Sequence字段值若仍然为-1,则指针指向的记录将发生变化
                    Next;
                    j:=j+1;
                  end;
               GotoBookmark(Mark);
               DBGrid1.ReadOnly:=true;
               DBGrid1.Enabled:=true;
               BitBtn1.Enabled:=true;
               BitBtn2.Enabled:=true;
               BitBtn4.Enabled:=true;
               BitBtn5.Enabled:=true;
               BitBtn6.Enabled:=true;
               BitBtn7.Enabled:=true;
               BitBtn8.Enabled:=true;
               BitBtn9.Enabled:=true;
               BitBtn10.Enabled:=true;
               BitBtn11.Enabled:=true;
               BitBtn12.Enabled:=true;
               BitBtn13.Enabled:=true;

               DBLookUpComboBox1.Enabled:=false;
               ComboBox1.Enabled:=false;
               DBLookUpComboBox2.Enabled:=false;
               DBLookUpComboBox3.Enabled:=false;
               DBLookUpListBox1.Enabled:=false;
               Label5.Caption:='';
               exit;
             end;
           DBLookUpComboBox2.SetFocus;
           exit;
         end;
       FieldByName('Face_Lane').AsInteger:=InsertDrillFace_Lane;
     end;

   //记录插入的掘进任务的开始时间和结束时间
   InsertBeginT:=trunc(Base_DataS.DataSet.FieldByName('Begin_Date').AsDateTime);
   InsertEndT:=trunc(Base_DataS.DataSet.FieldByName('End_Date').AsDateTime);
   //----------以下是判断添加的掘进接替任务能否满足最迟开、完工时间的要求--------
   if InsertBeginT>InsertLST then
     begin
       Inf1:=messagedlg('插入的掘进任务"'+InsertDrillFace_LaneName+'"的开工时间迟于它的最迟开工时间:'+datetostr(InsertLST)+',您可以将此项任务安排给其它掘进队,或者返回“掘进任务”页面修改该掘进任务的相关参数。确认把此项掘进任务安排在最迟开工时间之后吗?',mtconfirmation,[mbyes,mbno],0);
       if Inf1=mrno then  
         begin
           Base_DataS.DataSet.Cancel; //取消插入操作
           InsertMode:=false;
           //还原对原表中从当前记录到以后的记录所做的临时修改
           Base_DataS.DataSet.GotoBookmark(Mark);

           j:=1;
           while not Base_DataS.DataSet.Eof do
              begin
                Base_DataS.DataSet.Edit;
                Base_DataS.DataSet.FieldByName('Sequence').AsInteger:=BehindRelay[j].Sequence;
                Base_DataS.DataSet.Post; //更新后表的指针仍然指向当前记录,但是,当关闭再打开该表后,该当前记录的Sequence字段值若仍然为-1,则指针指向的记录将发生变化
                Base_DataS.DataSet.Next;
                j:=j+1;
              end;
           Base_DataS.DataSet.GotoBookmark(Mark);
           DBGrid1.ReadOnly:=true;
           DBGrid1.Enabled:=true;
           BitBtn1.Enabled:=true;
           BitBtn2.Enabled:=true;
           BitBtn4.Enabled:=true;
           BitBtn5.Enabled:=true;
           BitBtn6.Enabled:=true;
           BitBtn7.Enabled:=true;
           BitBtn8.Enabled:=true;
           BitBtn9.Enabled:=true;
           BitBtn10.Enabled:=true;
           BitBtn11.Enabled:=true;
           BitBtn12.Enabled:=true;
           BitBtn13.Enabled:=true;

           DBLookUpComboBox1.Enabled:=false;
           ComboBox1.Enabled:=false;
           DBLookUpComboBox2.Enabled:=false;
           DBLookUpComboBox3.Enabled:=false;
           DBLookUpListBox1.Enabled:=false;
           Label5.Caption:='';
           exit;
         end;
     end;
   //----------以上是判断添加的掘进接替任务能否满足最迟开、完工时间的要求--------
   try
     Base_DataS.DataSet.Post; //更新插入的记录

     //在掘进任务表中(Lane_AdoTab表)把已经安排过的掘进任务做标记
     Data_Frm.Lane_AdoTab.Locate('Lane_Id',InsertDrillFace_Lane,[locaseinsensitive]);
     Data_Frm.Lane_AdoTab.Edit;
     Data_Frm.Lane_AdoTab.FieldByName('Disposed').AsInteger:=1;//0:未安排;1:已安排
     Data_Frm.Lane_AdoTab.Post;

//记录指针返回到开始插入时的位置,对插入数据后的表进行修正,主要是修正“Sequence”、“Relay_Route”、“Relay_Id”、“Begin_Time”和“End_Time”字段
     Base_DataS.DataSet.GotoBookmark(Mark);
     with Base_DataS.DataSet do
       begin
         if InsertWorkGroup=Current.WorkGroup then
           begin
             m1:=Current.Project_Id;
             m2:=Current.Relay_Route;
             for i:=1 to High(BehindRelay) do
               begin
                 if (BehindRelay[i].Project_Id=m1)and(BehindRelay[i].Relay_Route=m2)
                   then
                     begin
                       Edit;
                       FieldByName('Sequence').AsInteger:=BehindRelay[i].Sequence+1;
                       FieldByName('Relay_Id').AsInteger:=BehindRelay[i].Relay_Id+1;

                       if Current.Relay_Id=1  //是在某掘进队的第一个接替面上插入的记录,插入的记录成为首采面,指定该首采面的开始日期可能大于也可能小于或者等于原首采面的开始日期,因此之后的回采面的开始与结束时间均要有一个因插入的首采面开始日期推后或者提前的增量trunc(InsertBeginT-Current.B_Date)
                         then
                           begin //(InsertTaskTime+Interv+trunc(InsertBeginT-Current.B_Date)):插入第一个接替面增加的工期推后时间
                             FieldByName('Begin_Date').AsDateTime:=trunc(BehindRelay[i].B_Date)+(InsertTaskTime+Interv+trunc(InsertBeginT-Current.B_Date));
                             FieldByName('End_Date').AsDateTime:=trunc(BehindRelay[i].E_Date)+(InsertTaskTime+Interv+trunc(InsertBeginT-Current.B_Date));
                           end
                         else
                           begin
                             FieldByName('Begin_Date').AsDateTime:=trunc(BehindRelay[i].B_Date)+InsertTaskTime+Interv;
                             FieldByName('End_Date').AsDateTime:=trunc(BehindRelay[i].E_Date)+InsertTaskTime+Interv;
                           end;
                       Post;
                     end
                   else
                     begin
                       Edit;
                       FieldByName('Sequence').AsInteger:=BehindRelay[i].Sequence+1;
                       Post;
                     end;
                 next;
               end;
           end;
         if (InsertWorkGroup<>Current.WorkGroup)and(Current.Relay_Id=1) then
           begin
             if InsertWorkGroup=CurrentPriorRelay.WorkGroup then //插入的是上一个掘进队的最后一个接替面,所以从插入的记录之后开始,不需要改变掘进任务起始时间
               begin
                 for i:=1 to High(BehindRelay) do
                   begin
                     Edit;
                     FieldByName('Sequence').AsInteger:=BehindRelay[i].Sequence+1;
                     Post;
                     next;
                   end;
               end;
             if InsertWorkGroup<>CurrentPriorRelay.WorkGroup then
               begin
                 if Inf=mryes then //插入的记录是原当前记录(插入之前,指针指向的记录)所在方案的第一个掘进队,插入的是一个新掘进队的首个掘进任务,后面的掘进任务的接替起始时间不变
                   begin
                     for i:=1 to High(BehindRelay) do
                       begin
                         Edit;
                         FieldByName('Sequence').AsInteger:=BehindRelay[i].Sequence+1;
                         if(BehindRelay[i].Project_Id=Current.Project_Id)then
                           begin
                             FieldByName('Relay_Route').AsInteger:=BehindRelay[i].Relay_Route+1;
                           end;
                         Post;
                         next;
                       end;
                   end;
                 if Inf=mrno then //插入的记录是原当前记录的前一条记录所在方案的最后一个掘进队,插入的是一个新掘进队的首个掘进任务,后面的掘进任务的接替起始时间不变
                   begin
                     for i:=1 to High(BehindRelay) do
                       begin
                         Edit;
                         FieldByName('Sequence').AsInteger:=BehindRelay[i].Sequence+1;
                         Post;
                         next;
                       end;
                   end;
               end;
           end;
       end;
     //把插入并更新后的接替表关闭后再打开,以显现出插入后的效果
     Base_DataS.DataSet.Close;
     Base_DataS.DataSet.Open;
     Base_DataS.DataSet.GotoBookmark(Mark);
     Base_DataS.DataSet.FreeBookmark(Mark);
   except
     Base_DataS.DataSet.Cancel; //取消表的插入状态
     showmessage('插入操作更新没有成功!');
     //在掘进任务表中(Lane_AdoTab表)把已经安排过的掘进任务做标记
     Data_Frm.Lane_AdoTab.Locate('Lane_Id',InsertDrillFace_Lane,[locaseinsensitive]);
     Data_Frm.Lane_AdoTab.Edit;
     Data_Frm.Lane_AdoTab.FieldByName('Disposed').AsInteger:=0;//0:未安排;1:已安排
     Data_Frm.Lane_AdoTab.Post;
   end;
   //插入并更新成功后进行善后处理
   InsertMode:=false;//更新成功或者更新没有成功都取消界面的插入状态

   DBGrid1.ReadOnly:=true;
   DBGrid1.Enabled:=true;
   BitBtn1.Enabled:=true;
   BitBtn2.Enabled:=true;
   BitBtn4.Enabled:=true;
   BitBtn5.Enabled:=true;
   BitBtn6.Enabled:=true;
   BitBtn7.Enabled:=true;
   BitBtn8.Enabled:=true;
   BitBtn9.Enabled:=true;
   BitBtn10.Enabled:=true;
   BitBtn11.Enabled:=true;
   BitBtn12.Enabled:=true;
   BitBtn13.Enabled:=true;

   DBLookUpComboBox1.Enabled:=false;
   ComboBox1.Enabled:=false;
   DBLookUpComboBox2.Enabled:=false;
   DBLookUpComboBox3.Enabled:=false;
   DBLookUpListBox1.Enabled:=false;

   Label5.Caption:='';
   BitBtn1.SetFocus;
end;

procedure TDrillRelay_Frm.BitBtn1Click(Sender: TObject);
var
i,n:integer;
begin
  if not ParaHaveEnsured then
    begin
      //确定掘进接替间隔时间,机掘和炮掘分别确定间隔天数
      DrillRelayIntervT_Frm:=TDrillRelayIntervT_Frm.Create(self);
      DrillRelayIntervT_Frm.ShowModal;
      with DrillRelayIntervT_Frm.DataSource1.DataSet do
        begin
          n:=recordcount;
          setlength(DrillRelayIntervT,n+1);
          first;
          i:=1;
          while not eof do
            begin
              DrillRelayIntervT[i].Technic:=FieldByName('TechnicType').AsString;
              DrillRelayIntervT[i].IntervalTime:=FieldByName('IntervT').AsInteger;
              next;
              i:=i+1;
            end;
        end;
      DrillRelayIntervT_Frm.Free;
      DrillRelayIntervT_Frm:=nil;
      ParaHaveEnsured:=true;
    end;
  AddMode:=true; //标志处于添加接替任务记录状态,以便能够执行DBLookUpListBox1的OnDblClick和OnKeyPress两个事件进行更新

  BitBtn1.Enabled:=false;
  BitBtn2.Enabled:=false;
  BitBtn3.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;
  BitBtn13.Enabled:=false;
  DBGrid1.Enabled:=false;

  if Base_DataS.DataSet.RecordCount>0
   then
    begin
      //读取Base_DataS数据集中的数据,以便在需要的时候进行数据比较和检查等处理
      ReadRelayData;
      //获取接替表中最后一条记录的相关信息,以便在后面添加接替任务时进行数据检查处理
      LastRelay.Sequence:=GetLastRecId(Base_DataS.DataSet,'Sequence');
      LastRelay.Project_Id:=GetLastRecId(Base_DataS.DataSet,'Project_Id');
      LastRelay.Relay_Route:=GetLastRecId(Base_DataS.DataSet,'Relay_Route');
      LastRelay.Relay_Id:=GetLastRecId(Base_DataS.DataSet,'Relay_Id');
      LastRelay.Face_Lane:=GetLastRecId(Base_DataS.DataSet,'Face_Lane');
      LastRelay.WorkGroup:=GetLastRecId(Base_DataS.DataSet,'WorkGroup');
      LastRelay.Area:=GetLastRecId(Base_DataS.DataSet,'Area');
      LastRelay.B_Date:=GetLastRecId(Base_DataS.DataSet,'Begin_Date');
      LastRelay.E_Date:=GetLastRecId(Base_DataS.DataSet,'End_Date');
      LastRelay.TaskTime:=trunc(LastRelay.E_Date-LastRelay.B_Date);

 

⌨️ 快捷键说明

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