📄 laneinfo_unt.pas
字号:
unit LaneInfo_Unt;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DataEdit_BaseUnt, DB, Grids, DBGrids, StdCtrls, Buttons,
ExtCtrls, DBCtrls, Mask, ADODB;
type
//掘进任务中的前工序有关信息
TPriorLane=record
Lane_Id:integer;
Name:string;
Propty:string;
State:string;
TaskT:integer;
LST:TDate;
LFT:TDate;
Disposed:integer;
tag:integer;//辅助变量,为给前工序按照Lane_Id从小到大进行排序之用
BETCalculated:boolean; //辅助变量:开完工时间(BET)是否已经计算,初值设为fasle(没有计算)
ArrayId:integer;//辅助变量,为了确定前工序对应的任务的数组中的编号
Finished:boolean;//辅助变量,用于标志前工序是否在当前工序开始之前完成,若是则为true,否则为false
end;
//掘进任务的有关信息
TLaneRecInfo=record
Project_Id:integer;
Lane_Id:integer;
Propty:string;
Name:string;
PriorLane_Count:integer;
PriorLane:array of TPriorLane;
//Lane_Type:integer;
Section_Area:single;
Section_Type:string;
SupportType:string;
TechnicType:string;
Rock_Property:string;
//Rigidity:single;
State:string;
WorkQuantity:single;
DayProgress:single;
TaskT:integer;
LST:TDate;
LFT:TDate;
Face:string;
Area:string;
Disposed:integer;
tag:integer;//辅助变量
BETCalculated:boolean;//辅助变量:开完工时间(BET)是否已经计算,初值设为fasle(没有计算)
Finished:boolean;//辅助变量
ArrayId:integer;//辅助变量,为了确定前工序对应的任务的数组中的编号
end;
TPriorFace=record
ArrayId:integer;
Seq:integer;
Project_Id:integer;
Relay_Route:integer;
Relay_Id:integer;
Face_Lane:integer;
Face_Name:string;
Area_Id:integer;
Area_Name:string;
WorkGroup_Id:integer;
WorkGroup_Name:string;
BeginDate:TDate;
EndDate:TDate;
end;
// 接替面的相关信息
TRelayFace=record
Seq:integer;
Project_Id:integer;
Relay_Route:integer;
Relay_Id:integer;
Face_Lane:integer;
Face_Name:string;
Area_Id:integer;
Area_Name:string;
WorkGroup_Id:integer;
WorkGroup_Name:string;
BeginDate:TDate;
EndDate:TDate;
MineTechnicId:integer;
MineTechnicName:string;
PriorFace:TPriorFace;
RepairTime:integer;
SetUpTime:integer;
AheadTime:integer;
AreaType:string; //所在采区的性质:上山或者下山
FaceState:integer;//0:采完,1:正在回采,2:待采状态
Face_Length:integer;
Push_Length:integer;
Height:single; //单位:米
DayProgress:single; //单位:米/天
Consistency:single; //密度:吨/立方米
Begin_Length:integer; //初始走向长度,为输出报表之用
End_Length:integer; //期末走向长度,为输出报表之用
CycRate:single; //循环率,为输出报表之用
CycCount:integer; //循环次,为输出报表之用
ReckonDays:integer; //天数,为输出报表之用
Report_BeginDate:TDate; //报表中的起始时间,为输出报表之用
Report_EndDate:TDate; //报表中的结束时间,为输出报表之用
CycOutPut:integer;//循环产量,为输出报表之用
AverageDayOut:integer;//平均日产量
BelongedAreaState:string;
FirstMine:Boolean;
HaveChose:boolean; //辅助判断变量,为帮助生成掘进任务之用
end;
TPriorTask=record
Id:integer;
Name:string;
Task_Type:string;
tag:integer;//tag:辅助变量,为生成具体掘进任务(Lane_AdoTab表中的记录)的前置工序(PriorTask_AdoTab表中)而设置的变量
end;
//各类掘进任务,比如回采的掘进任务一般有:风巷、机巷、切眼等
TDrillCommonTask=record
Id:integer;
Name:string;
Task_Type:string;
PriorTask_Count:integer;
PriorTask:array of TPriorTask;
FirstFaceDrillPrior_Count:integer;//仅仅用于首采面的情况,记录首采面的巷道准备之前的掘进工作的个数
FirstFaceDrillPrior:array of TPriorTask;//仅仅用于首采面的情况,记录首采面的巷道准备之前的掘进工作
IsLastTask:boolean;//判断是否是该类任务的最后任务,比如回采任务的最后任务可能就是切眼刷大
SpecialLastTask:boolean;//当回采面是炮采或者普采时无切眼刷大,因此此时如果切眼刷大是最后工序,则要把该工序的前一个工序作为最后工序
tag:integer;//为PriorTask读取前工序的辅助变量
end;
//为使掘进工作有余地,通常把掘进任务的工程量按一定系数估计地比实际要大
TDrillAssurance=record
TypeName:string;
Coeff:single; //其值一般大于等于1
end;
//调整前置工序表中的Lane_Id和PriorLane_Id之用
TPriorDrillTask=record
Sequence:integer;
Id:integer;
Lane_Id:integer;
PriorLane_Id:integer;
Lane_Name:string;
PriorLane_Name:string;
IsDeleted:boolean;
end;
TLaneInfo_Frm = class(TDataEdit_BaseFrm)
Label1: TLabel;
DBEdit1: TDBEdit;
Label2: TLabel;
DBEdit2: TDBEdit;
Label3: TLabel;
DBEdit3: TDBEdit;
Label4: TLabel;
Label5: TLabel;
Label7: TLabel;
Label8: TLabel;
Label6: TLabel;
DBComboBox1: TDBComboBox;
DBComboBox2: TDBComboBox;
DBComboBox3: TDBComboBox;
DBComboBox4: TDBComboBox;
DBComboBox5: TDBComboBox;
BitBtn9: TBitBtn;
BitBtn10: TBitBtn;
BitBtn11: TBitBtn;
Label9: TLabel;
Label10: TLabel;
DBEdit4: TDBEdit;
DBEdit5: TDBEdit;
Label11: TLabel;
DBComboBox6: TDBComboBox;
BitBtn12: TBitBtn;
Label12: TLabel;
DBLookupComboBox1: TDBLookupComboBox;
Project_ADOQ: TADOQuery;
Project_DataS: TDataSource;
BitBtn13: TBitBtn;
procedure BitBtn8Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure DBEdit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure DBComboBox1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure DBEdit2KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure DBEdit3KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure BitBtn3Click(Sender: TObject);
procedure DBComboBox2KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure DBComboBox3KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure DBComboBox4KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure DBComboBox5KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure BitBtn9Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn10Click(Sender: TObject);
procedure DBEdit4KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure DBEdit5KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure BitBtn11Click(Sender: TObject);
procedure DBComboBox6KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure BitBtn12Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure DBLookupComboBox1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure BitBtn13Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
AddMode:boolean;
AreaFinishAheadTime:integer;//采区准备提前时间,天
LaneInfo:array of TLaneRecInfo;
RelayFace:array of TRelayFace;
DrillTask:array of TDrillCommonTask;
PriorDT:array of TPriorDrillTask;
//为使掘进工作有余地,通常把掘进任务的工程量按一定系数估计地比实际要大
DrillAssurance:array of TDrillAssurance;
//读取掘进任务数据(Data_Frm.Lane_AdoTab)
procedure ReadLaneInfo;
//调整前置工序表中的Lane_Id和PriorLane_Id编号
procedure AdjustDrillTask;
//读取回采接替计划,并获取安准时间,掘进完成提前时间,
//判断是否是准备采区的首采面,所得到的信息存入RelayFace
procedure ReadRelayFace;
//把某个接替面对应的掘进任务写进‘巷道’表(Data_Frm.Lane_AdoTab)中
procedure WriteIntoLaneTab(RelayF:TRelayFace);
//按照顺序一个接一个地处理计算掘进任务的最迟开、完工时间(BET:Begin,End Time)
//procedure CalBET_OneByOne;
//按照前置工序以尽可能短的工期来计算掘进任务的最迟开、完工时间
procedure CalBET_ShortDate;
end;
var
LaneInfo_Frm: TLaneInfo_Frm;
implementation
uses Data_Unt,MineRelay_Unt,Relay_Unt,LaneTime_Unt,DrillTask_Unt,DrillAssurance_Unt,Main_Unt,
MineRelayInterval_Unt,AreaAheadPara_Unt, PriorTask_Unt,FirstFaceDrillWorkPriorTask_Unt,
DrillWorkPriorTask_Unt;
{$R *.dfm}
procedure TLaneInfo_Frm.BitBtn8Click(Sender: TObject);
begin
AddMode:=false;
inherited;
DBEdit1.SetFocus;
end;
procedure TLaneInfo_Frm.BitBtn1Click(Sender: TObject);
var
i,LastId:integer;
begin
AddMode:=true;
inherited;
try
if Base_DataS.DataSet.RecordCount=0 then LastId:=0
else LastId:=GetLastRecId(Base_DataS.DataSet,'Lane_Id');
//Base_DataS.DataSet.Last;
//LastProject:=Base_DataS.DataSet.FieldByName('Project_Id').AsInteger;
{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;
next;
i:=i+1;
end;
end; }
ReadLaneInfo;
Base_DataS.DataSet.Append;
Base_DataS.DataSet.FieldByName('Lane_Id').Value:=LastId+1;
except
showmessage('数据库未连接正确!');
end;
DBLookUpComboBox1.SetFocus;
//DBLookUpComboBox1.Text:='1';
end;
procedure TLaneInfo_Frm.DBEdit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=VK_RETURN then DBComboBox1.SetFocus;
end;
procedure TLaneInfo_Frm.DBComboBox1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=VK_RETURN then DBComboBox2.SetFocus;
end;
procedure TLaneInfo_Frm.DBEdit2KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=VK_RETURN then DBComboBox3.SetFocus;
end;
procedure TLaneInfo_Frm.DBEdit3KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=VK_RETURN then BitBtn3.SetFocus;
end;
procedure TLaneInfo_Frm.BitBtn3Click(Sender: TObject);
var
AppendProject:integer;
i,j,RepeatProjectId,LastProjectId:integer;
BKM:TBookMark;
begin
if DBLookUpComboBox1.Text='' then
begin
showmessage('请确定任务的方案编号!');
BitBtn3.Enabled:=true;
//DBLookUpComboBox1.Enabled:=true;
DBLookUpComboBox1.SetFocus;
exit;
end;
if AddMode then //如果是添加记录,则另外进行处理
begin
AppendProject:=strtoint(DBLookUpComboBox1.Text);
//showmessage('添加的方案编号为:'+inttostr(AppendProject));
//---------------------------------------------------
LastProjectId:=LaneInfo[high(LaneInfo)].Project_Id;
for i:=High(LaneInfo)-1 downto 1 do
begin
if LaneInfo[i].Project_Id<>LastProjectId then
begin
if LaneInfo[i].Project_Id=AppendProject then
begin
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -