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

📄 drillrelay_unt.pas

📁 煤矿行业采掘接替计划自动生成系统
💻 PAS
📖 第 1 页 / 共 5 页
字号:
begin
 if varisnull(Base_DataS.DataSet.FieldByName('Project_Id').Value) then
   begin
     showmessage('请选择相应的方案!');
     exit;
   end;
 if varisnull(Base_DataS.DataSet.FieldByName('WorkGroup').Value) then
   begin
     showmessage('请选择相应的掘进队!');
     exit;
   end;
 if varisnull(Base_DataS.DataSet.FieldByName('Area').Value) then
   begin
     showmessage('请选择相应的采区!');
     exit;
   end;
 //读取界面给新添加记录指定的值,这些值可能不符合要求,需要进行调整
 AddProject:=strtoint(DBLookUpComboBox1.Text);
 AddWorkGroup:=DrillGroup_DataS.DataSet.FieldByName('WorkGroup_Id').AsInteger;
 AddWorkGroupName:=DrillGroup_DataS.DataSet.FieldByName('WorkGroup_Name').AsString;
 AddFace_Lane:=DrillTask_DataS.DataSet.FieldByName('Lane_Id').AsInteger;
 AddFace_LaneName:=DrillTask_DataS.DataSet.FieldByName('Name').AsString;
 AddLST:=DrillTask_DataS.DataSet.FieldByName('LST').AsDateTime;
 AddLFT:=DrillTask_DataS.DataSet.FieldByName('LFT').AsDateTime;
 AddTaskTime:=DrillTask_DataS.DataSet.FieldByName('TaskTime').AsInteger;
 AddTechnicType:=DrillTask_DataS.DataSet.fieldbyname('Technic_Type').AsString;

 //确定添加记录对应的掘进工艺方式对应的接替间隔天数
 for r:=1 to High(DrillRelayIntervT) do
   begin
     if DrillRelayIntervT[r].Technic=AddTechnicType  then
       begin
         Interv:=DrillRelayIntervT[r].IntervalTime;
         break;
       end;
   end;

 //最终确定新添加记录的各个字段值
 Base_DataS.DataSet.FieldByName('Sequence').AsInteger:=LastRelay.Sequence+1;

 //判断添加记录的方案编号是否合乎要求
 //所添加的记录的方案编号可以是原表中的最后一条记录的方案编号,
 //也可以是与表中所有记录的方案编号均不同,但是不能出现某个方案的接替记录被其它方案隔开的情况
 if(LastRelay.Project_Id<>0)and(AddProject<>LastRelay.Project_Id)//若表为空,则定义LastRelay的序号和方案编号为0
   then
     begin
       for i:=1 to High(Relay) do
         begin
           if Relay[i].Project_Id=AddProject then
             begin
               showmessage('不允许在此处添加前面已经存在的方案:‘'+inttostr(AddProject)+'’,请重新选择方案!若要编辑该方案请在前面的对应方案中插入!');
               DBLookUpComboBox1.SetFocus;
               exit;
             end;
         end;
     end;
 Base_DataS.DataSet.FieldByName('Project_Id').AsInteger:=AddProject;
 //判断同一个方案中的掘进任务是否有重复,若有重复,则退出添加过程,重新指定接替任务
 if LastRelay.Project_Id<>0 then
 for i:=1 to High(Relay) do
   begin
     if(Relay[i].Project_Id=LastRelay.Project_Id)and(Relay[i].Face_Lane=AddFace_Lane)
      then
        begin
           Inf1:=messagedlg('该方案中不能重复接替 "'+AddFace_LaneName+'",请重新选择!继续请按"yes"!',mtconfirmation,[mbyes,mbno],0);
           if Inf1=mrno then
             begin
               Base_DataS.DataSet.Cancel; //取消添加操作
               AddMode:=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:='';
               exit;
             end;
           DBLookUpListBox1.SetFocus;
           exit;
        end;
   end;
 Base_DataS.DataSet.FieldByName('Face_Lane').AsInteger:=AddFace_Lane;
 if LastRelay.Project_Id<>0 then
 if AddWorkGroup=LastRelay.WorkGroup //如果新添加的记录的施工队(CurrentGroup)和原表中的最后一条记录的施工队(WorkGroup)是同一个施工队时
   then
     begin
      Base_DataS.DataSet.FieldByName('Relay_Route').AsInteger:=LastRelay.Relay_Route;
      Base_DataS.DataSet.FieldByName('Relay_Id').AsInteger:=LastRelay.Relay_Id+1;

      EndDay:=trunc(LastRelay.E_Date);//得到上一个接替任务的结束时间
      Base_DataS.DataSet.FieldByName('Begin_Date').AsDateTime:=EndDay+Interv;
      Base_DataS.DataSet.FieldByName('End_Date').AsDateTime:=EndDay+Interv+AddTaskTime;
     end;
 if(LastRelay.Project_Id=0)or(AddWorkGroup<>LastRelay.WorkGroup) then  //添加第一个记录或者不是同一个施工队时
     begin
      //判断新添加的施工队是否与同一方案中前面的施工队重复(重复是不允许的)
       for i:=1 to High(Relay) do
         begin
            if(Relay[i].Project_Id=LastRelay.Project_Id)and(Relay[i].WorkGroup=AddWorkGroup)
              then
                begin
                   Inf1:=messagedlg('该方案中 "'+AddWorkGroupName+'" 掘进队不能安排两次,请重新选择采煤队!继续请按"yes"!',mtconfirmation,[mbyes,mbno],0);
                   if Inf1=mrno then
                     begin
                       Base_DataS.DataSet.Cancel; //取消表的添加操作
                       AddMode:=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:='';
                       exit;
                     end;
                   DBLookUpComboBox2.SetFocus;
                   exit;
                end;
         end;
       Base_DataS.DataSet.FieldByName('Relay_Route').AsInteger:=LastRelay.Relay_Route+1;
       Base_DataS.DataSet.FieldByName('Relay_Id').AsInteger:=1;


       //确定该掘进任务的开始时间
       //通过界面输入该掘进队的第一个掘进任务的开始时间
       TimePara_Frm:=TTimePara_Frm.Create(self);
       TimePara_Frm.ShowModal;
       BeginDay:=TimePara_Frm.BeginTime;
       TimePara_Frm.Free;
       TimePara_Frm:=nil;
       Base_DataS.DataSet.FieldByName('Begin_Date').AsDateTime:=BeginDay;
       Base_DataS.DataSet.FieldByName('End_Date').AsDateTime:=BeginDay+AddTaskTime;
     end;

 //----------以下是判断添加的掘进接替任务能否满足最迟开、完工时间的要求--------
 if Base_DataS.DataSet.FieldByName('Begin_Date').AsDateTime>AddLST then
   begin
     Inf1:=messagedlg('添加的掘进任务"'+AddFace_LaneName+'"的开工时间迟于它的最迟开工时间:'+datetostr(AddLST)+',您可以将此项任务安排给其它掘进队,或者返回“掘进任务”页面修改该掘进任务的相关参数。确认把此项掘进任务安排在最迟开工时间之后吗?',mtconfirmation,[mbyes,mbno],0);
     if Inf1=mrno then
       begin
         Base_DataS.DataSet.Cancel; //取消表的添加操作
         AddMode:=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:='';
         exit;
       end;
   end;
 //----------以上是判断添加的掘进接替任务能否满足最迟开、完工时间的要求--------

 try
   Base_DataS.DataSet.Post;
   //在掘进任务表中(Lane_AdoTab表)把已经安排过的掘进任务做标记
   Data_Frm.Lane_AdoTab.Locate('Lane_Id',AddFace_Lane,[locaseinsensitive]);
   Data_Frm.Lane_AdoTab.Edit;
   Data_Frm.Lane_AdoTab.FieldByName('Disposed').AsInteger:=1;//0:未安排;1:已安排
   Data_Frm.Lane_AdoTab.Post;
 except
   Base_DataS.DataSet.Cancel;//没有更新成功,取消表的添加状态,以便执行其它操作
   showmessage('添加数据没有更新成功!');
 end;
 AddMode:=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.InsertDrillRelay;
var
i,j,r,m1,m2,n,BeginDay,EndDay,Interv:integer;
Name1:string;
Inf1,Inf:Variant;
InsertWorkGroup,InsertDrillFace_Lane:integer; //新插入的记录的施工队和掘进任务的编号
InsertWorkGroupName,InsertDrillFace_LaneName:string; //新插入的记录的施工队和掘进任务的名称
//Remain,DayOutput:single;
InsertBeginT,InsertEndT:integer;
InsertTaskTime:integer; //插入的记录的掘进任务工期,掘进工艺
InsertTechnicType:string;
InsertLST,InsertLFT:TDate;
begin
   //................
   if varisnull(Base_DataS.DataSet.FieldByName('WorkGroup').Value) then
     begin
       showmessage('请选择相应的施工队!');
       exit;
     end;
   if varisnull(Base_DataS.DataSet.FieldByName('Area').Value) then
     begin
       showmessage('请选择相应的采区!');
       exit;
     end;
   //取得界面给新插入记录指定的值,这些值可能不符合要求,需要进行调整
   InsertWorkGroup:=DrillGroup_DataS.DataSet.FieldByName('WorkGroup_Id').AsInteger;
   InsertWorkGroupName:=DrillGroup_DataS.DataSet.FieldByName('WorkGroup_Name').AsString;
   InsertDrillFace_Lane:=DrillTask_DataS.DataSet.FieldByName('Lane_Id').AsInteger;
   InsertDrillFace_LaneName:=DrillTask_DataS.DataSet.FieldByName('Name').AsString;
   InsertTaskTime:=DrillTask_DataS.DataSet.FieldByName('TaskTime').AsInteger;
   InsertTechnicType:=DrillTask_DataS.DataSet.fieldbyname('Technic_Type').AsString;
   InsertLST:=DrillTask_DataS.DataSet.FieldByName('LST').AsDateTime;
   InsertLFT:=DrillTask_DataS.DataSet.FieldByName('LFT').AsDateTime;

   

   //确定添加记录对应的掘进工艺方式对应的接替间隔天数
   for r:=1 to High(DrillRelayIntervT) do
     begin
       if DrillRelayIntervT[r].Technic=InsertTechnicType  then
         begin
           Interv:=DrillRelayIntervT[r].IntervalTime;
           break;
         end;
     end;

   //最终确定新插入记录的各个字段值
   with Base_DataS.DataSet do
     begin
       FieldByName('Sequence').AsInteger:=Current.Sequence;
       //判断该方案是否被安排了重复的掘进任务
       for i:=1 to High(Relay) do
         begin
           if(Relay[i].Project_Id=Current.Project_Id)
              and(Relay[i].Face_Lane=InsertDrillFace_Lane) then
             begin
               Inf1:=messagedlg('该方案中不能重复安排掘进任务 "'+InsertDrillFace_LaneName+'" ,请重新选择!,继续请按"yes"!',mtconfirmation,[mbyes,mbno],0);
               if Inf1=mrno then
                 begin
                   Cancel; //取消插入操作
                   InsertMode:=false;
                   //还原对原表中从当前记录到以后的记录所做的临时修改
                   GotoBookmark(Mark);

⌨️ 快捷键说明

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