📄 laneinfo_unt.pas
字号:
RelayFace[i].Face_Lane:=FieldByName('Face_Lane').AsInteger;
RelayFace[i].Area_Id:=FieldByName('Area').AsInteger;
RelayFace[i].WorkGroup_Id:=FieldByName('WorkGroup').AsInteger;
RelayFace[i].BeginDate:=FieldByName('Begin_Date').AsDateTime;
RelayFace[i].EndDate:=FieldByName('End_Date').AsDateTime;
RelayFace[i].FirstMine:=false; //初始假定均不是首采面,后面再进行判断
RelayFace[i].HaveChose:=false;//辅助判断变量,为帮助生成掘进任务之用
next;
i:=i+1;
end;
end;
//对读取后的数据进行相关判断和处理
for i:=1 to High(RelayFace) do
begin
Face:=RelayFace[i].Face_Lane;
Area:=RelayFace[i].Area_Id;
WorkGroup:=RelayFace[i].WorkGroup_Id;
//确定回采面名称及其工艺
Data_Frm.Face_AdoTab.Locate('Face_Id',Face,[locaseinsensitive]);
with Data_Frm.Face_AdoTab do
begin
RelayFace[i].FaceState:=FieldByName('Mined').AsInteger;//0:采完,1:正在回采,2:待采状态
RelayFace[i].Face_Name:=FieldByName('Name').AsString;
m:=FieldByName('Push_Length').AsInteger;
n:=FieldByName('Finish_Length').AsInteger;
RelayFace[i].Push_Length:=m-n;
RelayFace[i].Face_Length:=FieldByName('Face_Length').AsInteger;
RelayFace[i].Height:=FieldByName('Mine_Height').AsFloat;
RelayFace[i].DayProgress:=FieldByName('Day_Progress').AsFloat;
RelayFace[i].Consistency:=FieldByName('Consistency').AsFloat;
RelayFace[i].RepairTime:=FieldByName('Repair_Time').AsInteger;
RelayFace[i].AverageDayOut:=FieldByName('Day_OutPut').AsInteger;
end;
Technic:=Data_Frm.Face_AdoTab.FieldByName('Technic_Type').AsInteger;
RelayFace[i].MineTechnicId:=Technic;//1:炮采,2:普采,3:综采,4:综放
//确定不同工艺的回采面的安准时间和掘进完成提前时间
Data_Frm.MineInterval_AdoTab.Locate('Technic_Type',Technic,[locaseinsensitive]);
RelayFace[i].SetUpTime:=Data_Frm.MineInterval_AdoTab.FieldByName('FixPrepare_Time').AsInteger;
RelayFace[i].AheadTime:=Data_Frm.MineInterval_AdoTab.FieldByName('DrillFinish_Ahead').AsInteger;
//确定采区性质、采区名称和采区生产状态
Data_Frm.Area_AdoTab.Locate('Area_Id',Area,[locaseinsensitive]);
RelayFace[i].AreaType:=Data_Frm.Area_AdoTab.fieldByName('Area_Type').AsString;
RelayFace[i].Area_Name:=Data_Frm.Area_AdoTab.fieldByName('Area_Name').AsString;
RelayFace[i].BelongedAreaState:=Data_Frm.Area_AdoTab.fieldByName('State').AsString;
//确定采煤队名称
Data_Frm.Worker_AdoTab.Locate('WorkGroup_Id',WorkGroup,[locaseinsensitive]);
RelayFace[i].WorkGroup_Name:=Data_Frm.Worker_AdoTab.FieldByName('WorkGroup_Name').AsString;
//确定首采面
Earliest:=true;
for j:=1 to High(RelayFace) do
begin
if (RelayFace[i].Project_Id=RelayFace[j].Project_Id)and(RelayFace[i].Area_Id=RelayFace[j].Area_Id)
and(RelayFace[i].BeginDate>RelayFace[j].BeginDate)and(RelayFace[j].Seq<>RelayFace[i].Seq) then
begin
Earliest:=false;
break;
end;
end;
//只有准备采区才存在首采面的问题
if (RelayFace[i].BelongedAreaState='准备采区')and(Earliest) then
RelayFace[i].FirstMine:=true;
end;
end;
procedure TLaneInfo_Frm.BitBtn13Click(Sender: TObject);
var
i,j,t,Lane_Id,m,IdPos:integer;
TempLane_Id:integer; //给前工序排序之用
TempLane_Name:string; //给前工序排序之用
TaskName,LaneName:string;
begin
BitBtn2.Enabled:=false;
BitBtn8.Enabled:=false;
BitBtn9.Enabled:=false;
BitBtn10.Enabled:=false;
BitBtn11.Enabled:=false;
//由于掘进任务变化(巷道f表)引起了编号(Lane_Id)变化,需要对前置工序f表中的Lane_Id和PriorLane_Id进行调整
AdjustDrillTask;
//读取掘进任务信息
ReadLaneInfo;
//检查是否存在工序没有估算工期
for i:=1 to High(LaneInfo) do
begin
if (LaneInfo[i].State<>'已完工')and((LaneInfo[i].TaskT=null)or(LaneInfo[i].TaskT=0)) then
begin
showmessage('’'+LaneInfo[i].Name+'‘还没有估算工期!');
//找到没有估计工期的记录位置
with Base_DataS.DataSet do
begin
first;
while not eof do
begin
if FieldByName('Lane_Id').AsInteger=LaneInfo[i].Lane_Id
then break;
next;
end;
end;
exit;
end;
end;
//显示自动产生的各掘进任务的前工序的信息,并可由用户进行修改
PriorTask_Frm:=TPriorTask_Frm.Create(self);
PriorTask_Frm.ShowModal;
PriorTask_Frm.Free;
PriorTask_Frm:=nil;
//读取掘进任务前工序信息
with Data_Frm.PriorTask_AdoTab do //对应于“前置工序”表
begin
first;
//确定前工序数目
while not eof do
begin
TaskName:=FieldByName('Lane_Name').AsString;
//原来:t:=FieldByName('Lane_Id').AsInteger;
for i:=1 to High(LaneInfo) do
begin
if LaneInfo[i].Name=TaskName then //原来:if LaneInfo[i].Lane_Id=t then
begin
LaneInfo[i].PriorLane_Count:=LaneInfo[i].PriorLane_Count+1;
break;
end;
end;
next;
end;
for i:=1 to High(LaneInfo) do
begin
if LaneInfo[i].PriorLane_Count<>0 then
begin
setlength(LaneInfo[i].PriorLane,LaneInfo[i].PriorLane_Count+1);
end;
end;
//确定前工序具体信息
first;
while not eof do
begin
TaskName:=FieldByName('Lane_Name').AsString;
//原来:t:=FieldByName('Lane_Id').AsInteger;
for i:=1 to High(LaneInfo) do
begin
if LaneInfo[i].Name=TaskName then //原来:if LaneInfo[i].Lane_Id=t then
begin
j:=LaneInfo[i].tag;
LaneInfo[i].PriorLane[j].Lane_Id:=FieldByName('PriorLane_Id').AsInteger;
LaneInfo[i].PriorLane[j].Name:=FieldByName('PriorLane_Name').AsString;
LaneName:=LaneInfo[i].PriorLane[j].Name;
//原来:Lane_Id:=LaneInfo[i].PriorLane[j].Lane_Id;
//找到并读取前工序在“巷道”表中(Lane_AdoTab)对应的相关信息
for m:=1 to High(LaneInfo) do
begin
if LaneInfo[m].Name=LaneName then //原来:if LaneInfo[m].Lane_Id=Lane_Id then
begin
LaneInfo[i].PriorLane[j].Propty:=LaneInfo[m].Propty;
LaneInfo[i].PriorLane[j].State:=LaneInfo[m].State;
LaneInfo[i].PriorLane[j].TaskT:=LaneInfo[m].TaskT;
LaneInfo[i].PriorLane[j].LST:=LaneInfo[m].LST;
LaneInfo[i].PriorLane[j].LFT:=LaneInfo[m].LFT;
LaneInfo[i].PriorLane[j].tag:=0;
LaneInfo[i].PriorLane[j].Disposed:=0;
LaneInfo[i].PriorLane[j].BETCalculated:=false;
break;
end;
end;
LaneInfo[i].tag:=LaneInfo[i].tag+1;
break;
end; //end: if LaneInfo[i].Lane_Id=t then
end;
next;
end; //end: while not eof //确定前工序具体信息
//把掘进任务的前工序按照Lane_Id从小到大进行排序
for i:=1 to High(LaneInfo) do
begin
if LaneInfo[i].PriorLane_Count=0 then continue;
for j:=1 to LaneInfo[i].PriorLane_Count do
begin
TempLane_Id:=LaneInfo[i].PriorLane[j].Lane_Id;
TempLane_Name:=LaneInfo[i].PriorLane[j].Name;
IdPos:=0;
for m:=j+1 to LaneInfo[i].PriorLane_Count do
begin
if LaneInfo[i].PriorLane[m].Lane_Id<TempLane_Id then
begin
TempLane_Id:=LaneInfo[i].PriorLane[m].Lane_Id;
TempLane_Name:=LaneInfo[i].PriorLane[m].Name;
IdPos:=m;
end;
end;
if IdPos>0 then //找到了比LaneInfo[i].PriorLane[j].Lane_Id还小的前工序
begin
LaneInfo[i].PriorLane[IdPos].Lane_Id:=LaneInfo[i].PriorLane[j].Lane_Id;
LaneInfo[i].PriorLane[IdPos].Name:=LaneInfo[i].PriorLane[j].Name;
LaneInfo[i].PriorLane[j].Lane_Id:=TempLane_Id;
LaneInfo[i].PriorLane[j].Name:=TempLane_Name;
end;
end;
end; //end: for i:=1 to High(LaneInfo) do //把掘进任务的前工序按照Lane_Id从小到大进行排序
end; //end: with Data_Frm.PriorTask_AdoTab do //读取掘进任务前工序信息
//确定掘进任务的内容
DrillTask_Frm:=TDrillTask_Frm.Create(self);
//读取掘进任务内容
setlength(DrillTask,DrillTask_Frm.Base_DataS.DataSet.RecordCount+1);
with DrillTask_Frm.Base_DataS.DataSet do
begin
i:=1;
First;
while not eof do
begin
DrillTask[i].Id:=FieldByName('Id').AsInteger;
DrillTask[i].Name:=FieldByName('Name').AsString;
DrillTask[i].Task_Type:=FieldByName('Type').AsString;
DrillTask[i].IsLastTask:=false;
next;
i:=i+1;
end;
end;
//判断各类掘进任务的最后任务
for i:=1 to High(DrillTask)-1 do
begin
if DrillTask[i].Task_Type<>DrillTask[i+1].Task_Type then
DrillTask[i].IsLastTask:=true;
end;
DrillTask[High(DrillTask)].IsLastTask:=true;
DrillTask_Frm.Free;
DrillTask_Frm:=nil;
//由用户输入确定采区准备完毕的提前时间,即开始进行回采巷道掘进之前要提前的时间:AreaFinshAheadTime
AreaAheadPara_Frm:=TAreaAheadPara_Frm.Create(self);
AreaAheadPara_Frm.ShowModal;
try
AreaFinishAheadTime:=strtoint(AreaAheadPara_Frm.Edit1.Text);
except
showmessage('请确定输入的是整型数据!这里将指定为100天,若修改,请重新进行时间计算!');
AreaFinishAheadTime:=100;
end;
AreaAheadPara_Frm.Free;
AreaAheadPara_Frm:=nil;
CalBET_ShortDate;
//显示并修改有关掘进任务开、完工时间参数
LaneTime_Frm:=TLaneTime_Frm.Create(self);
LaneTime_Frm.ShowModal;
LaneTime_Frm.Free;
showmessage('下面可以进行掘进计划安排!');
BitBtn2.Enabled:=false;
BitBtn8.Enabled:=false;
BitBtn10.Enabled:=false;
BitBtn11.Enabled:=false;
end;
procedure TLaneInfo_Frm.ReadLaneInfo;
var
i:integer;
begin
setlength(LaneInfo,Base_DataS.DataSet.RecordCount+1);
with Base_DataS.DataSet do
begin
if not active then open;
first;
i:=1;
while not eof do
begin
LaneInfo[i].Project_Id:=FieldByName('Project_Id').AsInteger;
LaneInfo[i].Lane_Id:=FieldByName('Lane_Id').AsInteger;
LaneInfo[i].Name:=FieldByName('Name').AsString;
LaneInfo[i].Propty:=FieldByName('Property').AsString;
LaneInfo[i].Section_Area:=FieldByName('Section_Area').AsFloat;
LaneInfo[i].Section_Type:=FieldByName('Section_Type').AsString;
LaneInfo[i].SupportType:=FieldByName('Support_Type').AsString;
LaneInfo[i].TechnicType:=FieldByName('Technic_Type').AsString;
LaneInfo[i].Rock_Property:=FieldByName('Rock_Property').AsString;
LaneInfo[i].State:=FieldByName('State').AsString;
LaneInfo[i].WorkQuantity:=FieldByName('WorkQuantity').AsFloat;
LaneInfo[i].DayProgress:=FieldByName('DayProgress').AsFloat;
LaneInfo[i].TaskT:=FieldByName('TaskTime').AsInteger;
LaneInfo[i].LST:=FieldByName('LST').AsDateTime;
LaneInfo[i].LFT:=FieldByName('LFT').AsDateTime;
LaneInfo[i].Face:=FieldByName('Face').AsString;
LaneInfo[i].Area:=FieldByName('Area').AsString;
LaneInfo[i].Disposed:=FieldByName('Disposed').AsInteger;
//--------------------------
LaneInfo[i].PriorLane_Count:=0;
LaneInfo[i].tag:=1;
LaneInfo[i].BETCalculated:=false;
next;
i:=i+1;
end;
end;
end;
procedure TLaneInfo_Frm.WriteIntoLaneTab(RelayF: TRelayFace);
var
i,j,LastId,m,n,LastSequence,Lane_Id:integer;
str,str1,str2,TaskName,LaneName:string;
begin
if not RelayF.FirstMine then //若不是首采面
begin
//逐个把掘进任务写进表中
for i:=1 to High(DrillTask) do
begin
//由于不是首采面,所以该面的掘进准备工作只涉及回采巷道,
//因此排除非回采巷道任务
if DrillTask[i].Task_Type<>'回采' then continue;
//只有综采和综放才存在切眼刷大的工序
if RelayF.MineTechnicId<3 then //1:炮采,2:普采,3:综采,4:综放
begin
if pos('切眼刷大',DrillTask[i].Name)>0 then continue;
end;
//写入
LastId:=GetLastRecId(Base_DataS.DataSet,'Lane_Id');
Lane_Id:=LastId+1;
with Base_DataS.DataSet do //Base_DataS.DataSet:"巷道"表:(Data_Frm.Lane_AdoTab)
begin
append;
FieldByName('Lane_Id').AsInteger:=Lane_Id;
FieldByName('Project_Id').AsInteger:=RelayF.Project_Id;
FieldByName('Disposed').AsInteger:=0;//初始时指定任务没有被安排,0:没有安排;1:已安排
//---------------------------------------------------------------------------
FieldByName('Property').AsString:='回采巷道';
FieldByName('Name').AsString:=RelayF.Face_Name+DrillTask[i].Name;
FieldByName('Section_Area').AsFloat:=6.6;
FieldByName('Section_Type').AsString:='梯形'; //应指定用户常用的项目,此处暂时指定‘梯形’,‘锚喷’,‘机掘’,‘煤巷’
FieldByName('Support_Type').AsString:='锚喷';
FieldByName('Technic_Type').AsString:='机掘';
FieldByName('Rock_Property').AsString:='煤巷';
FieldByName('Area').AsString:=RelayF.Area_Name;
FieldByName('Face').AsString:=RelayF.Face_Name;
//--------调试:暂时先指定掘进任务工期均为50天,调试完成后去掉此处代码
FieldByName('TaskTime').AsInteger:=50;
//-------------------------Test-----------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -