📄 drillrelay_unt.pas
字号:
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 + -