📄 drillstatistic_unt.pas
字号:
unit DrillStatistic_Unt;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DataEdit_BaseUnt, DB, Grids, DBGrids, StdCtrls, Buttons,
ExtCtrls, ADODB, Mask, DBCtrls, ComCtrls;
type
TDrillStatData=record //掘进接替统计数据
Id:integer;
WorkGroup_Id:integer;
Item_Id:integer;
Begin_Date:TDate;
End_Date:TDate;
Finished:integer;
Remain:integer;
Finished_Sum:integer;
Relay_Id:integer;//接替面在回采接替表中的接替序号,是用来辅助排序
PercentComplete:Integer;//完成百分比
Name:String;
Plan_Amount:integer;//计划任务总工作量
Plan_TaskTime:integer;//计划的任务总工期
Plan_DayProgress:single;//计划的日进度
Plan_BeginDate:TDate;
Plan_EndDate:TDate;
end;
TDrillStatistic_Frm = class(TDataEdit_BaseFrm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
DBLookupComboBox1: TDBLookupComboBox;
DBLookupComboBox2: TDBLookupComboBox;
DateTimePicker1: TDateTimePicker;
DateTimePicker2: TDateTimePicker;
DBEdit1: TDBEdit;
DBEdit2: TDBEdit;
DrillTeam_AdoQ: TADOQuery;
RelayDrill_AdoQ: TADOQuery;
DrillTeam_DataS: TDataSource;
RelayDrill_DataS: TDataSource;
Label7: TLabel;
DBEdit3: TDBEdit;
procedure FormCreate(Sender: TObject);
procedure DBLookupComboBox1Click(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn4Click(Sender: TObject);
procedure BitBtn5Click(Sender: TObject);
procedure BitBtn6Click(Sender: TObject);
procedure BitBtn7Click(Sender: TObject);
procedure BitBtn8Click(Sender: TObject);
procedure DBEdit2KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure DBEdit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure DateTimePicker2KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure DateTimePicker1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure DBLookupComboBox2KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure DBLookupComboBox1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure DBEdit3KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure DBLookupComboBox2Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
LastWorkGroup:integer;//掘进统计表中,最后一条记录的采煤队编号
LastBegin_Date,LastEnd_Date:TDate;
EditMode:boolean;
DrillStat:array of TDrillStatData; //统计表中的多条记录
Drill:array of TDrillStatData;//记录统计表中所涉及的巷道实际生产信息,无重复
AddStat:TDrillStatData; //统计表中的一条记录
procedure ReadStatData;//读取已经存在的统计数据
//对掘进统计数据进行排序,排序规则是:
//1、首先对于同一个掘进队的任务进度统计数据应连续存放在数据表中
//2、同一个掘进队中不同任务要按照接替先后顺序排序
//3、同一个掘进队的同一个任务的统计信息按照时间先后顺序排序
procedure Taxis;
//对采煤统计数据进行处理,确定实际开、完工日期,完成百分比
procedure DealDrillStat;
end;
var
DrillStatistic_Frm: TDrillStatistic_Frm;
implementation
uses Data_Unt, Hint_Unt, TimePara_Unt;
{$R *.dfm}
procedure TDrillStatistic_Frm.FormCreate(Sender: TObject);
begin
inherited;
EditMode:=false; //置初始状态为非修改模式
with DrillTeam_AdoQ do
begin
Parameters.ParamByName('v1').Value:='掘进';
Parameters.ParamByName('v2').Value:='开拓';
ExecSQL;
open;
end;
end;
procedure TDrillStatistic_Frm.DBLookupComboBox1Click(Sender: TObject);
var
str:string;
DrillTeam_Id:integer;
AddWorkGroup:integer;
begin
str:=DBLookUpComboBox1.Text;
if str='' then
begin
showmessage('请选择一个掘进队!');
exit;
end;
DrillTeam_Id:=DrillTeam_AdoQ.FieldByName('WorkGroup_Id').AsInteger;
with RelayDrill_AdoQ do
begin
close;
sql.Clear;
sql.Add('select Face_Lane,WorkGroup,Relay_Id,Lane_Id,Name,WorkQuantity,Begin_Date,End_Date from 掘进接替f,巷道f');
sql.Add('where (WorkGroup=:v1)and(Lane_Id=Face_Lane)');
sql.Add('order by Relay_Id asc');
Parameters.ParamByName('v1').Value:=DrillTeam_Id;
ExecSQL;
open;
end;
RelayDrill_DataS.DataSet:=RelayDrill_AdoQ;
DBLookUpComboBox2.ListSource:=RelayDrill_DataS;
DBLookUpComboBox2.ListField:='Name';
DBLookUpComboBox2.KeyField:='Lane_Id';
AddWorkGroup:=DrillTeam_Id;
if not EditMode then
begin
if AddWorkGroup=LastWorkGroup
then
begin
DateTimePicker1.Date:=LastEnd_Date+1;
DateTimePicker2.Date:=now;
end
else
begin
DateTimePicker1.Date:=LastBegin_Date;
DateTimePicker2.Date:=LastEnd_Date;
end;
end;
end;
procedure TDrillStatistic_Frm.BitBtn3Click(Sender: TObject);
var
LaneId,RelayId:integer;
i:integer;
Remain,Finished,Finished_Sum:integer;
d1,d2:TDate;
str:string;
NoOne:Boolean;
begin
if VarIsNull(Base_DataS.DataSet.FieldByName('WorkGroup_Id').Value)
then
begin
showmessage('请确定相应的掘进队!');
BitBtn3.Enabled:=true;
DBLookUpComboBox1.Enabled:=true;
DBLookUpComboBox1.SetFocus;
exit;
end;
if VarIsNull(Base_DataS.DataSet.FieldByName('Item_Id').Value)
then
begin
showmessage('请确定相应的掘进工作面!');
BitBtn3.Enabled:=true;
DBLookUpComboBox2.Enabled:=true;
DBLookUpComboBox2.SetFocus;
exit;
end;
LaneId:=Base_DataS.DataSet.FieldByName('Item_Id').AsInteger;
d1:=trunc(DateTimePicker1.Date);
d2:=trunc(DateTimePicker2.Date);
if d1>d2 then
begin
showmessage('结束时间应该在开始时间之后,请重新确定时间!');
BitBtn3.Enabled:=true;
DateTimePicker1.Enabled:=true;
DateTimePicker2.Enabled:=true;
DateTimePicker1.SetFocus;
exit;
end;
if d2>now then
begin
showmessage('统计结束时间应在系统当前时间之前,请重新确定!');
BitBtn3.Enabled:=true;
DateTimePicker1.Enabled:=true;
DateTimePicker2.Enabled:=true;
DateTimePicker2.SetFocus;
exit;
end;
inherited;
NoOne:=true;//假设新添加的记录对应的掘进任务在原表中不存在
for i:=1 to High(DrillStat) do
begin
if DrillStat[i].Item_Id=LaneId then
begin
NoOne:=false;
break;
end;
end;
if NoOne then //如果新添加的记录对应的掘进任务在原表中不存在,则要在添加时就处理完成进度(Finished),剩余量(Remain)和累计完成进度(Finished_Sum)三个变量的值
begin
Finished:=Base_DataS.DataSet.FieldByName('Finished').AsInteger;
Finished_Sum:=Finished;
Remain:=Base_DataS.DataSet.FieldByName('Remain').AsInteger-Base_DataS.DataSet.FieldByName('Finished').AsInteger;
end;
Base_DataS.DataSet.Edit;
With Base_DataS.DataSet do
begin
FieldByName('Begin_Date').AsDateTime:=d1;
FieldByName('End_Date').AsDateTime:=d2;
//确定添加的记录的掘进任务在掘进接替表中的接替序号Relay_Id
Data_Frm.DrillRelay_AdoTab.Locate('Face_Lane',LaneId,[locaseinsensitive]);
RelayId:=Data_Frm.DrillRelay_AdoTab.FieldByName('Relay_Id').AsInteger;
FieldByName('Relay_Id').AsInteger:=RelayId;
if NoOne then
begin
FieldByName('Finished').AsInteger:=Finished;
FieldByName('Remain').AsInteger:=Remain;
FieldByName('Finished_Sum').AsInteger:=Finished_Sum;
end;
Post;
end;
//读取刚添加的记录
with Base_DataS.DataSet do
begin
AddStat.Id:=FieldByName('Id').AsInteger;
AddStat.WorkGroup_Id:=FieldByName('WorkGroup_Id').AsInteger;
AddStat.Item_Id:=FieldByName('Item_Id').AsInteger;
AddStat.Begin_Date:=FieldByName('Begin_Date').AsDateTime;
AddStat.End_Date:=FieldByName('End_Date').AsDateTime;
AddStat.Finished:=FieldByName('Finished').AsInteger;
AddStat.Remain:=FieldByName('Remain').AsInteger;
AddStat.Finished_Sum:=FieldByName('Finished_Sum').AsInteger;
AddStat.Relay_Id:=FieldByName('Relay_Id').AsInteger;
end;
if not EditMode then //若是添加模式
begin
//把添加的数据进行排序
Taxis;
end;
if EditMode then //若是修改模式
begin
EditMode:=false;
end;
end;
procedure TDrillStatistic_Frm.BitBtn1Click(Sender: TObject);
var
LastId:integer;
begin
ReadStatData;
inherited;
DateTimePicker1.Enabled:=false;
DateTimePicker2.Enabled:=false;
DBEdit1.Enabled:=false;
DBEdit2.Enabled:=false;
DBEdit3.Enabled:=false;
try
if Base_DataS.DataSet.RecordCount=0 then
begin
LastId:=0;
LastWorkGroup:=0;
LastBegin_Date:=now-1;
LastEnd_Date:=now;
end
else
begin
LastId:=GetLastRecId(Base_DataS.DataSet,'Id');
LastWorkGroup:=GetLastRecId(Base_DataS.DataSet,'WorkGroup_Id');
LastBegin_Date:=GetLastRecId(Base_DataS.DataSet,'Begin_Date');
LastEnd_Date:=GetLastRecId(Base_DataS.DataSet,'End_Date');
end;
Base_DataS.DataSet.Append;
Base_DataS.DataSet.FieldByName('Id').Value:=LastId+1;
//if DrillTeam_AdoQ.FieldByName('WorkGroup_Id').AsInteger=
except
showmessage('数据库未连接正确!');
end;
DBLookUpComboBox1.SetFocus;
end;
procedure TDrillStatistic_Frm.BitBtn4Click(Sender: TObject);
var
d1,d2:TDate;
begin
inherited;
d1:=Base_DataS.DataSet.FieldByName('Begin_Date').AsDateTime;
d2:=Base_DataS.DataSet.FieldByName('End_Date').AsDateTime;
DateTimePicker1.Date:=d1;
DateTimePicker2.Date:=d2;
end;
procedure TDrillStatistic_Frm.BitBtn5Click(Sender: TObject);
var
d1,d2:TDate;
begin
inherited;
d1:=Base_DataS.DataSet.FieldByName('Begin_Date').AsDateTime;
d2:=Base_DataS.DataSet.FieldByName('End_Date').AsDateTime;
DateTimePicker1.Date:=d1;
DateTimePicker2.Date:=d2;
end;
procedure TDrillStatistic_Frm.BitBtn6Click(Sender: TObject);
var
d1,d2:TDate;
begin
inherited;
d1:=Base_DataS.DataSet.FieldByName('Begin_Date').AsDateTime;
d2:=Base_DataS.DataSet.FieldByName('End_Date').AsDateTime;
DateTimePicker1.Date:=d1;
DateTimePicker2.Date:=d2;
end;
procedure TDrillStatistic_Frm.BitBtn7Click(Sender: TObject);
var
d1,d2:TDate;
begin
inherited;
d1:=Base_DataS.DataSet.FieldByName('Begin_Date').AsDateTime;
d2:=Base_DataS.DataSet.FieldByName('End_Date').AsDateTime;
DateTimePicker1.Date:=d1;
DateTimePicker2.Date:=d2;
end;
procedure TDrillStatistic_Frm.BitBtn8Click(Sender: TObject);
begin
inherited;
EditMode:=true;
end;
procedure TDrillStatistic_Frm.DBEdit2KeyDown(Sender: TObject;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -