📄 laneinfo_unt.pas
字号:
//获取各个掘进任务的前工序的个数
first;
while not eof do
begin
t:=FieldByName('DrillTask_Id').AsInteger;
for i:=1 to High(DrillTask) do
begin
if DrillTask[i].Id=t then
begin
DrillTask[i].PriorTask_Count:=DrillTask[i].PriorTask_Count+1;
break;
end;
end;
next;
end;
//进一步读取各掘进工作任务的前工序信息
for i:=1 to High(DrillTask) do
begin
if DrillTask[i].PriorTask_Count<>0 then
setlength(DrillTask[i].PriorTask,DrillTask[i].PriorTask_Count+1);
end;
first;
while not eof do
begin
t:=FieldByName('DrillTask_Id').AsInteger;
for i:=1 to High(DrillTask) do
begin
if DrillTask[i].Id=t then
begin
j:=DrillTask[i].tag;
DrillTask[i].PriorTask[j].Id:=FieldByName('PriorTask_Id').AsInteger;
DrillTask[i].PriorTask[j].Name:=FieldByName('PriorTask_Name').AsString;
for n:=1 to High(DrillTask) do
begin
if DrillTask[n].Id=DrillTask[i].PriorTask[j].Id then
begin
DrillTask[i].PriorTask[j].Task_Type:=DrillTask[n].Task_Type;
break;
end;
end;
DrillTask[i].tag:=DrillTask[i].tag+1;
break;
end;
end;
next;
end;
end; //end: with DrillWorkPriorTask_Frm.Base_DataS.DataSet do
DrillWorkPriorTask_Frm.Free;
DrillWorkPriorTask_Frm:=nil;
//重置DrillTask[i].tag的值为初值1,以辅助用于下面的操作
for i:=1 to High(DrillTask) do
begin
DrillTask[i].tag:=1;
end;
//-----------------------test
{for i:=1 to High(DrillTask) do
begin
str:='';
if DrillTask[i].PriorTask_Count<>0 then
begin
for j:=1 to DrillTask[i].PriorTask_Count do
begin
str:=str+DrillTask[i].PriorTask[j].Name+',';
end;
showmessage('’'+DrillTask[i].Name+'‘的前工序有:'+str);
end;
end;}
//--------------------------test
//确定首采面的巷道准备之前的掘进工作
FirstFaceDrillWorkPriorTask_Frm:=TFirstFaceDrillWorkPriorTask_Frm.Create(self);
FirstFaceDrillWorkPriorTask_Frm.ShowModal;
with FirstFaceDrillWorkPriorTask_Frm.Base_DataS.DataSet do
begin
first;
while not eof do
begin
t:=FieldByName('DrillTask_Id').AsInteger;
for i:=1 to High(DrillTask) do
begin
if DrillTask[i].Id=t then
begin
DrillTask[i].FirstFaceDrillPrior_Count:=DrillTask[i].FirstFaceDrillPrior_Count+1;
break;
end;
end;
next;
end;
//进一步读取各掘进工作任务的前工序信息
for i:=1 to High(DrillTask) do
begin
if DrillTask[i].FirstFaceDrillPrior_Count<>0 then
setlength(DrillTask[i].FirstFaceDrillPrior,DrillTask[i].FirstFaceDrillPrior_Count+1);
end;
first;
while not eof do
begin
t:=FieldByName('DrillTask_Id').AsInteger;
for i:=1 to High(DrillTask) do
begin
if DrillTask[i].Id=t then
begin
j:=DrillTask[i].tag;
DrillTask[i].FirstFaceDrillPrior[j].Id:=FieldByName('PriorTask_Id').AsInteger;
DrillTask[i].FirstFaceDrillPrior[j].Name:=FieldByName('PriorTask_Name').AsString;
for n:=1 to High(DrillTask) do
begin
if DrillTask[n].Id=DrillTask[i].FirstFaceDrillPrior[j].Id then
begin
DrillTask[i].FirstFaceDrillPrior[j].Task_Type:=DrillTask[n].Task_Type;
break;
end;
end;
DrillTask[i].tag:=DrillTask[i].tag+1;
break;
end;
end;
next;
end;
end;
FirstFaceDrillWorkPriorTask_Frm.Free;
FirstFaceDrillWorkPriorTask_Frm:=nil;
//-----------------------test
{for i:=1 to High(DrillTask) do
begin
str:='';
if DrillTask[i].FirstFaceDrillPrior_Count<>0 then
begin
for j:=1 to DrillTask[i].FirstFaceDrillPrior_Count do
begin
str:=str+DrillTask[i].FirstFaceDrillPrior[j].Name+',';
end;
showmessage('’'+DrillTask[i].Name+'‘的前工序有:'+str);
end;
end;}
//--------------------------test
//确定掘进保险系数
DrillAssurance_Frm:=TDrillAssurance_Frm.Create(self);
DrillAssurance_Frm.ShowModal;
setlength(DrillAssurance,DrillAssurance_Frm.Base_DataS.DataSet.RecordCount+1);
With DrillAssurance_Frm.Base_DataS.DataSet do
begin
first;
i:=1;
while not eof do
begin
DrillAssurance[i].TypeName:=FieldByName('LaneType').AsString;
DrillAssurance[i].Coeff:=FieldByName('Coeff').AsFloat;
next;
i:=i+1;
end;
end;
DrillAssurance_Frm.Free;
DrillAssurance_Frm:=nil;
LaneInfo_Frm.Refresh;
//进度显示
//读取接替面信息
ReadRelayFace;
//use of test
//for i:=1 to High(RelayFace) do
//begin
//if RelayFace[i].FirstMine then showmessage('’'+inttostr(RelayFace[i].Project_Id)+'‘方案:'RelayFace[i].Area_Name+'采区的首采面:'+RelayFace[i].Face_Name);
//end;
//2、产生掘进任务,并写进"巷道"表中(Data_Frm.Lane_AdoTab)
with Base_DataS.DataSet do
begin
while RecordCount>0 do
begin
//Firstly,Delete all records in the table
first;
delete;
end;
close;
//Secondly,Write correlative data into the LaneInfo_AdoTab table
open;
//Caculate the count of project of RelayFace
ProjectCount:=1;
for i:=1 to High(RelayFace)-1 do
begin
if RelayFace[i].Project_Id<>RelayFace[i+1].Project_Id then
ProjectCount:=ProjectCount+1;
end;
//获取各个方案的编号
setlength(Proj,ProjectCount+1);
Proj[1].Id:=RelayFace[1].Project_Id;
j:=1;
for i:=2 to High(RelayFace) do
begin
if RelayFace[i].Project_Id<>Proj[j].Id then
begin
Proj[j+1].Id:=RelayFace[i].Project_Id;
j:=j+1;
end;
end;
//计算每个方案的接替记录数目
for i:=1 to ProjectCount do
begin
Proj[i].Count:=0;
for j:=1 to High(RelayFace) do
begin
if RelayFace[j].Project_Id=Proj[i].Id
then Proj[i].Count:=Proj[i].Count+1;
end;
end;
//use of test
//for i:=1 to ProjectCount do
//begin
//showmessage('共有'+inttostr(ProjectCount)+'个方案:这里是方案‘'+inttostr(Proj[i].Id)+'’');
//end;
//逐个方案进行处理
for i:=1 to ProjectCount do
begin
//Find the latest BeginDate in every project:LatestDate
LatestDate:=0;
for j:=1 to High(RelayFace) do
begin
if (RelayFace[j].Project_Id=Proj[i].Id)
and(RelayFace[j].BeginDate>LatestDate)
then LatestDate:=RelayFace[j].BeginDate;
end;
LatestDate:=LatestDate+1;
//处理方案中的每个记录,
//以下循环即是为了对方案Proj[i].Id中的每一个接替面按照开工时间先后逐个进行处理,
//处理过的接替面进行标记:RelayFace[t].HaveChose:=true;
Main_Frm.StatusBar1.Panels[0].Text:='产生掘进任务.....';
Main_Frm.StatusBar1.Refresh;
Main_Frm.PosId:=0;
Main_Frm.Step:=Main_Frm.StatusBarLen/(ProjectCount*High(RelayFace));
Main_Frm.Col:=clBlue;
for j:=1 to High(RelayFace) do
begin
inc(Main_Frm.PosId);
Main_Frm.StatusBarFill;
//在每次处理还没有被处理的接替面时,
//都要先找出剩余没有处理的接替面中开工时间最早的一个接替面
Early.BeginDate:=LatestDate;
Early.Seq:=0;
if RelayFace[j].Project_Id<>Proj[i].Id then continue;//去除非Proj[i].Id方案
//找到Proj[i].Id方案中未处理过的最早开工的接替面
for k:=1 to High(RelayFace) do
begin
if RelayFace[k].HaveChose then continue; //去除已经处理过的接替面
if (RelayFace[k].Project_Id=Proj[i].Id)
and(RelayFace[k].BeginDate<Early.BeginDate) then
begin
Early.BeginDate:=RelayFace[k].BeginDate;
Early.Seq:=RelayFace[k].Seq;
end;
end;
//到此处编号为Early.Seq的接替面是最早开工的,对其进行标记
for t:=1 to High(RelayFace) do
begin
if RelayFace[t].HaveChose then continue; //排除已经处理过的接替面
if RelayFace[t].Seq=Early.Seq then
begin
RelayFace[t].HaveChose:=true;
{//排除非待采状态的接替面
if RelayFace[t].FaceState<>2 then continue;//RelayF.FaceState=0,1。 0:采完,1:正在回采,2:待采状态}
//把RelayFace[t]相关的掘进任务添加进‘巷道’表中
WriteIntoLaneTab(RelayFace[t]);
break;
end;
end;
//
end;//end: for j:=1 to Proj[i].Count do 处理方案中的每个记录
Main_Frm.StatusBar1.Panels[0].Text:='';
Main_Frm.StatusBar1.Refresh;
end;//end: for i:=1 to ProjectCount do 逐个方案进行处理
end;//end:with Base_DataS.DataSet do
//激活相应按钮
//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;
BitBtn13.Enabled:=true;
//BitBtn12.Enabled:=false;
end;
procedure TLaneInfo_Frm.FormCreate(Sender: TObject);
begin
LaneInfo_FrmCreated:=true;
inherited;
try
Project_AdoQ.Active:=true;
except
showmessage('数据库连接有问题!(Project_ADOQ控件连接有误)');
end;
end;
procedure TLaneInfo_Frm.DBLookupComboBox1KeyDown(Sender: TObject;
var Key: Word; Shift: TShiftState);
begin
if key=VK_RETURN then DBEdit1.SetFocus;
end;
procedure TLaneInfo_Frm.ReadRelayFace; //读取回采接替计划,并获取安准时间,掘进完成提前时间,判断是否是准备采区的首采面
var
i,j,m,n:integer;
Face,Area,WorkGroup,Technic:integer;
Earliest:boolean;
begin
if Data_Frm.MineRelay_AdoTab.RecordCount=0 then
begin
showmessage('回采接替计划还没有安排!');
exit;
end;
with Data_Frm.MineRelay_AdoTab do
begin
if not active then open;
setlength(RelayFace,RecordCount+1);
first;
i:=1;
//读取表中的数据
while not eof do
begin
RelayFace[i].Seq:=FieldByName('Sequence').AsInteger;
RelayFace[i].Project_Id:=FieldByName('Project_Id').AsInteger;
RelayFace[i].Relay_Route:=FieldByName('Relay_Route').AsInteger;
RelayFace[i].Relay_Id:=FieldByName('Relay_Id').AsInteger;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -