📄 minerelay_unt.pas
字号:
unit MineRelay_Unt;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Relay_BaseUnt, DB, DBCtrls, Grids, DBGrids, StdCtrls, Buttons,
ExtCtrls, ADODB, ComCtrls, Menus;
type
TRelayFaceInfo=record
Project_Id:integer;
Id:integer;
Name:string;
Arrayed:boolean;
end;
TInterval=record
MineTechnic:integer;
FixPrepareTime:integer;
IntervalTime:integer;
end;
TMineRelay_Frm = class(TRelay_BaseFrm)
MineGroup_DataS: TDataSource;
Face_DataS: TDataSource;
MineGroup_AdoQ: TADOQuery;
Face_AdoQ: TADOQuery;
Area_DataS: TDataSource;
AllFace_DataS: TDataSource;
PopupMenu1: TPopupMenu;
N1: TMenuItem;
PopupMenu2: TPopupMenu;
N2: TMenuItem;
Face_AdoQFace_Id: TIntegerField;
Face_AdoQName: TStringField;
Face_AdoQFace_Type: TIntegerField;
Face_AdoQMine_Height: TFloatField;
Face_AdoQTechnic_Type: TIntegerField;
Face_AdoQObliquity: TFloatField;
Face_AdoQMiningArea: TIntegerField;
Face_AdoQMined: TIntegerField;
Face_AdoQCoal: TIntegerField;
Face_AdoQFinish_Length: TIntegerField;
Face_AdoQReserve: TFloatField;
Face_AdoQRemain_Reserve: TFloatField;
Face_AdoQField: TStringField;
N3: TMenuItem;
N4: TMenuItem;
Face_AdoQFace_Length: TIntegerField;
Face_AdoQPush_Length: TIntegerField;
N5: TMenuItem;
Face_AdoQDay_Progress: TFloatField;
Face_AdoQConsistency: TFloatField;
Face_AdoQTaskTime: TIntegerField;
Face_AdoQDay_Output: TIntegerField;
procedure FormCreate(Sender: TObject);
procedure DBLookupComboBox3Click(Sender: TObject);
procedure DBLookupListBox1DblClick(Sender: TObject);
procedure DBLookupListBox1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure BitBtn3Click(Sender: TObject);
procedure BitBtn8Click(Sender: TObject);
procedure BitBtn9Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure N1Click(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure N3Click(Sender: TObject);
procedure N4Click(Sender: TObject);
procedure N5Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
//procedure DBLookupListBox1Enter(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
//记录各种回采工艺的安装准备时间和接替间隔时间
IntervalPara:array of TInterval;
procedure AddPost_NewRelayTask;//在表的最后添加一条记录
procedure InsertPost_NewRelayTask; //在当前记录的前面插入一条记录
function FaceArrayFinished:boolean;//检查待安排的回采面是否被安排完毕
procedure MineRelay_StripGraph; //将回采接替计划导入Project
procedure MineRelayTrace; //将采煤生产的实际情况导入到Project,以进行采煤计划的跟踪管理
procedure MineRelay_Report;//将回采接替计划按照要求在Excel中形成报表
end;
var
MineRelay_Frm: TMineRelay_Frm;
implementation
uses Data_Unt,TimePara_Unt,MineRelayInterval_Unt,MineTechPopup_Unt,
DrillAssurance_Unt,FaceInfo_Unt,DrillRelay_Unt, Main_Unt,
CAD_Pro_Exc_Unt,LaneInfo_Unt,ReportCondition_Unt,Hint_Unt;
{$R *.dfm}
procedure TMineRelay_Frm.FormCreate(Sender: TObject);
var
str:string;
i,n:integer;
begin
MineRelay_FrmCreated:=true;
inherited;
n:=MineInterval_DataS.DataSet.RecordCount;
SetLength(IntervalPara,n+1);
with MineInterval_DataS.DataSet do
begin
first;
for i:=1 to n do
begin
IntervalPara[i].MineTechnic:=FieldByName('Technic_Type').AsInteger;
IntervalPara[i].FixPrepareTime:=FieldByName('FixPrepare_Time').AsInteger;
IntervalPara[i].IntervalTime:=FieldByName('Interval_Time').AsInteger;
next;
end;
end;
//从施工队中查找采煤队
with MineGroup_AdoQ do
begin
close;
sql.Clear;
sql.Add('select WorkGroup_Type,WorkGroup_Name,WorkGroup_Id from 施工队f');
sql.Add('where WorkGroup_Type=:r');
str:='采煤';
parameters.ParamByName('r').Value:=str;
ExecSQL;
open;
end;
DBLookUpComboBox2.ListSource:=MineGroup_DataS;
DBLookUpComboBox2.ListField:='WorkGroup_Name';
DBLookUpComboBox2.KeyField:='WorkGroup_Id';
DBLookUpComboBox2.DataSource:=Base_DataS;
DBLookUpComboBox2.DataField:='WorkGroup';
end;
procedure TMineRelay_Frm.DBLookupComboBox3Click(Sender: TObject);
var
str:string;
begin
str:=DBLookUpComboBox3.Text;
if str='' then
begin
showmessage('请输入相应的采区!');
exit;
end;
if Area_DataS.DataSet.Locate('Area_Name',str,[locaseinsensitive])
then
with Face_AdoQ do
begin
close;
//sql.Clear;
//sql.Add('select Face_Id,Name,MiningArea,Mined,Remain_Reserve,Technic_Type,Day_Output from 回采面');
//sql.Add('where (MiningArea=:v1) and (Mined<>0)'); //Mined<>0意思是该回采面没有回采完毕,是正在回采或者待采的面
parameters.ParamByName('v1').Value:=Area_DataS.DataSet.fieldbyname('Area_Id').AsInteger;
ExecSQL;
open;
end
else exit;
DBLookUpListBox1.ListSource:=Face_DataS;//Face_DataS的数据集对应Face_AdoQ
DBLookUpListBox1.ListField:='Name';
DBLookUpListBox1.KeyField:='Face_Id';
//DBLookUpListBox1.DataSource:=Area_DataS;
//DBLookUpListBox1.DataField:='';
end;
procedure TMineRelay_Frm.DBLookupListBox1DblClick(Sender: TObject);
begin
if InsertMode then
begin
InsertPost_NewRelayTask;
Face_AdoQ.Close;
DBLookupListBox1.Refresh;
end;
if AddMode then
begin
AddPost_NewRelayTask;
Face_AdoQ.Close;
DBLookupListBox1.Refresh;
end;
end;
procedure TMineRelay_Frm.DBLookupListBox1KeyDown(Sender: TObject;
var Key: Word; Shift: TShiftState);
begin
if key=VK_RETURN then
begin
if InsertMode then
begin
InsertPost_NewRelayTask;
Face_AdoQ.Close;
DBLookupListBox1.Refresh;
end;
if AddMode then
begin
AddPost_NewRelayTask;
Face_AdoQ.Close;
DBLookupListBox1.Refresh;
end;
end;
end;
procedure TMineRelay_Frm.BitBtn3Click(Sender: TObject);
var
i,j,Pro_Id:integer;
Inf,Inf1:Variant;
EditFace:integer;
EditFaceName:string;
EditBeginDate,EditEndDate:TDate;
BeginDay:integer;
Remain,DayOutput:single;
AddTaskTime:integer;
DelT:integer;//计算当前记录修改后的结束时间与原结束时间之间的差
BK:TBookMark;
begin
if EditMode then
begin
//若没有做任何修改,则退出,并做相关处理
if(not FaceIsEdit)and(not BeginDateChange)and(not EndDateChange)then
begin
showmessage('没有做任何修改!');
Base_DataS.DataSet.Cancel; //取消表的添加操作
EditMode:=false;
BitBtn3.Enabled:=false;
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;
DBLookUpComboBox2.Enabled:=false;
DBLookUpComboBox3.Enabled:=false;
DBLookUpListBox1.Enabled:=false;
Label6.Visible:=false;
Label7.Visible:=false;
DateTimePicker1.Visible:=false;
DateTimePicker2.Visible:=false;
exit;
end;
//对修改的回采面的开始时间和结束时间进行判断
EditBeginDate:=trunc(DateTimePicker1.Date);
EditEndDate:=trunc(DateTimePicker2.Date);
if BeginDateChange and EndDateChange then //开始时间和结束时间均修改了
begin
if EditBeginDate>=EditEndDate then
begin
showmessage('结束时间应该在开始时间之后!');
DateTimePicker2.SetFocus;
exit;
end;
end;
if BeginDateChange then //仅仅修改了开始时间,或者开始与结束时间都修改了
begin
if Current.Sequence<>1 then
begin
if Current.Relay_Id<>1 then
begin
if EditBeginDate<=CurrentPriorRelay.E_Date then
begin
showmessage('本回采面的开始时间应该在上一个回采面结束以后!');
DateTimePicker1.SetFocus;
exit;
end;
end;
end;
end;
if (not BeginDateChange)and(EndDateChange) then //仅仅修改了结束时间
begin
if EditEndDate<=Current.B_Date then
begin
showmessage('修改后的结束时间应在本回采面的开始时间之后!');
DateTimePicker2.SetFocus;
exit;
end;
end;
Inf:=messagedlg('确认修改吗?',mtconfirmation,[mbyes,mbno],0);
if Inf=mryes
then
begin
if (FaceIsEdit)and(DBLookUpListBox1.SelectedItem<>'') then
begin
EditFace:=Face_DataS.DataSet.FieldByName('Face_Id').AsInteger;
EditFaceName:=Face_DataS.DataSet.FieldByName('Name').AsString;
//.......要根据不同情况对采煤队编号,接替号和工作面进行处理.....
for i:=1 to High(Relay) do
begin
if (Relay[i].Project_Id=Current.Project_Id)
and(Relay[i].Face_Lane=EditFace)then
begin
if Current.Face_Lane=EditFace then break;//可以允许保持原记录的回采面不变
Inf1:=messagedlg('该方案中不能重复接替 "'+EditFaceName+'" 回采面,请重新指定!继续请按"yes"!',mtconfirmation,[mbyes,mbno],0);
if Inf1=mrno then
begin
Base_DataS.DataSet.Cancel; //取消表的添加操作
EditMode:=false;
BitBtn3.Enabled:=false;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -