📄 minestatistic_unt.pas
字号:
j:=j+1;
MineStat[i].WorkGroup_Id:=TempStat[j].WorkGroup_Id;
MineStat[i].Item_Id:=TempStat[j].Item_Id;
MineStat[i].Begin_Date:=TempStat[j].Begin_Date;
MineStat[i].End_Date:=TempStat[j].End_Date;
MineStat[i].Finished:=TempStat[j].Finished;
MineStat[i].Remain:=TempStat[j].Remain;
MineStat[i].Finished_Sum:=TempStat[j].Finished_Sum;
MineStat[i].Relay_Id:=TempStat[j].Relay_Id;
end;
j:=j+1;
AddStat.WorkGroup_Id:=TempStat[j].WorkGroup_Id;
AddStat.Item_Id:=TempStat[j].Item_Id;
AddStat.Begin_Date:=TempStat[j].Begin_Date;
AddStat.End_Date:=TempStat[j].End_Date;
AddStat.Finished:=TempStat[j].Finished;
AddStat.Remain:=TempStat[j].Remain;
AddStat.Finished_Sum:=TempStat[j].Finished_Sum;
AddStat.Relay_Id:=TempStat[j].Relay_Id;
end; //end: if n=High(MineStat)
//更新数据库
//首先更新最后一条记录
With Base_DataS.DataSet do
begin
last;
edit;
FieldByName('WorkGroup_Id').AsInteger:=AddStat.WorkGroup_Id;
FieldByName('Item_Id').AsInteger:=AddStat.Item_Id;
FieldByName('Begin_Date').AsDateTime:=AddStat.Begin_Date;
FieldByName('End_Date').AsDateTime:=AddStat.End_Date;
FieldByName('Finished').AsInteger:=AddStat.Finished;
FieldByName('Remain').AsInteger:=AddStat.Remain;
FieldByName('Finished_Sum').AsInteger:=AddStat.Finished_Sum;
FieldByName('Relay_Id').AsInteger:=AddStat.Relay_Id;
post;
end;
WorkGroupId:=MineStat[m-1].WorkGroup_Id;
//ItemId:=MineStat[m].Item_Id;
//找到需要更新的位置
with Base_DataS.DataSet do
begin
first;
while (not eof) do
begin
if(FieldByName('WorkGroup_Id').AsInteger=WorkGroupId)then
begin
break;
end;
next;
end;
while(FieldByName('WorkGroup_Id').AsInteger=WorkGroupId)do
begin
next;
end;
end;
BK:=Base_DataS.DataSet.GetBookmark;
With Base_DataS.DataSet do
begin
i:=m;
while i<=High(MineStat) do
begin
edit;
FieldByName('WorkGroup_Id').AsInteger:=MineStat[i].WorkGroup_Id;
FieldByName('Item_Id').AsInteger:=MineStat[i].Item_Id;
FieldByName('Begin_Date').AsDateTime:=MineStat[i].Begin_Date;
FieldByName('End_Date').AsDateTime:=MineStat[i].End_Date;
FieldByName('Finished').AsInteger:=MineStat[i].Finished;
FieldByName('Remain').AsInteger:=MineStat[i].Remain;
FieldByName('Finished_Sum').AsInteger:=MineStat[i].Finished_Sum;
FieldByName('Relay_Id').AsInteger:=MineStat[i].Relay_Id;
post;
next;
i:=i+1;
end;
end; //end: With Base_DataS.DataSet do
Base_DataS.DataSet.GotoBookmark(BK);
Base_DataS.DataSet.FreeBookmark(BK);
end; //end: if k>0 then
end;
end;
procedure TMineStatistic_Frm.DBEdit3KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=VK_RETURN then BitBtn3.SetFocus;
end;
procedure TMineStatistic_Frm.ReadStatData;
var
m,n,i,j:integer;
Item_Id:integer;
begin
if Base_DataS.DataSet.RecordCount=0 then exit;
m:=Base_DataS.DataSet.RecordCount;
setlength(MineStat,m+1);
with Base_DataS.DataSet do
begin
first;
i:=1;
while not eof do
begin
MineStat[i].Id:=FieldByName('Id').AsInteger;
MineStat[i].WorkGroup_Id:=FieldByName('WorkGroup_Id').AsInteger;
MineStat[i].Item_Id:=FieldByName('Item_Id').AsInteger;
MineStat[i].Begin_Date:=FieldByName('Begin_Date').AsDateTime;
MineStat[i].End_Date:=FieldByName('End_Date').AsDateTime;
MineStat[i].Finished:=FieldByName('Finished').AsInteger;
MineStat[i].Remain:=FieldByName('Remain').AsInteger;
MineStat[i].Finished_Sum:=FieldByName('Finished_Sum').AsInteger;
MineStat[i].Relay_Id:=FieldByName('Relay_Id').AsInteger;
MineStat[i].PercentComplete:=0; //暂时设置初值为0
next;
i:=i+1;
end;
end;
with Data_Frm.Face_AdoTab do
begin
first;
while not eof do
begin
Item_Id:=FieldByName('Face_Id').AsInteger;
for i:=1 to High(MineStat) do
begin
if MineStat[i].Item_Id=Item_Id then
begin
MineStat[i].Plan_Amount:=round(FieldByName('Remain_Reserve').AsFloat*10000);
MineStat[i].Plan_DayOutput:=FieldByName('Day_Output').AsInteger;
MineStat[i].Plan_DayProgress:=FieldByName('Day_Progress').AsFloat;
MineStat[i].Plan_TaskTime:=FieldByName('TaskTime').AsInteger;
MineStat[i].Name:=FieldByName('Name').AsString;
break; //这样,每个回采面的多条统计记录中,只有第一条记录有Plan_Amount,Plan_DayOutput,Day_Progress,TaskTime等信息
end;
end;
next;
end;
end;
end;
procedure TMineStatistic_Frm.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
//处理采煤统计情况后,更新到“回采接替跟踪f”表中
Hint_Frm:=THint_Frm.Create(self);
Hint_Frm.Timer1.Enabled:=true;
Hint_Frm.Caption:='处理信息提示';
Hint_Frm.Image1.Visible:=false;
Hint_Frm.Label1.Caption:='处理统计数据......';
Hint_Frm.ShowModal;
Hint_Frm.Free;
Hint_Frm:=nil;
DealMineStat;
end;
procedure TMineStatistic_Frm.DealMineStat;
var
i,j,k,m,n,s,t:integer;
Item_Id,FaceNum:integer;
Remain,Finished,Finished_Sum,Percent,DateDis:integer;
BeginDate,EndDate:TDate;
Find:Boolean;
begin
//读取统计数据
ReadStatData;
//首先计算统计数据(存在MineStat数组中)涉及到几个不同的回采面
Item_Id:=MineStat[1].Item_Id;
FaceNum:=1;
for i:=2 to High(MineStat) do
begin
if MineStat[i].Item_Id<>Item_Id then
begin
FaceNum:=FaceNum+1;
Item_Id:=MineStat[i].Item_Id;
end;
end;
//接着把统计数据中的不同回采面的信息提取并存放在Mine数组中
setlength(Mine,FaceNum+1);
j:=1;
Mine[j].WorkGroup_Id:=MineStat[1].WorkGroup_Id;
Mine[j].Item_Id:=MineStat[1].Item_Id;
Mine[j].Name:=MineStat[1].Name;
Mine[j].Plan_Amount:=MineStat[1].Plan_Amount;
Mine[j].Plan_TaskTime:=MineStat[1].Plan_TaskTime;
Mine[j].Plan_DayOutput:=MineStat[1].Plan_DayOutput;
Mine[j].Plan_DayProgress:=MineStat[1].Plan_DayProgress;
Item_Id:=MineStat[1].Item_Id;
for i:=2 to High(MineStat) do
begin
if MineStat[i].Item_Id<>Item_Id then
begin
j:=j+1;
Mine[j].WorkGroup_Id:=MineStat[i].WorkGroup_Id;
Mine[j].Item_Id:=MineStat[i].Item_Id;
Mine[j].Name:=MineStat[i].Name;
Mine[j].Plan_Amount:=MineStat[i].Plan_Amount;
Mine[j].Plan_TaskTime:=MineStat[i].Plan_TaskTime;
Mine[j].Plan_DayOutput:=MineStat[i].Plan_DayOutput;
Mine[j].Plan_DayProgress:=MineStat[i].Plan_DayProgress;
Item_Id:=MineStat[i].Item_Id;
end;
end;
//把统计的各回采面的实际开、完工日期默认值暂设为计划开、完工日期
with Data_Frm.MineRelay_AdoTab do
begin
first;
while not eof do
begin
for i:=1 to High(Mine) do
begin
if Mine[i].Item_Id=FieldByName('Face_Lane').AsInteger then
begin
Mine[i].Begin_Date:=FieldByName('Begin_Date').AsDateTime;
Mine[i].Plan_BeginDate:=FieldByName('Begin_Date').AsDateTime;
Mine[i].End_Date:=FieldByName('End_Date').AsDateTime;
Mine[i].Plan_EndDate:=FieldByName('End_Date').AsDateTime;
break;
end;
end;
next;
end;
end;
//开始处理
for i:=1 to High(Mine) do
begin
Item_Id:=Mine[i].Item_Id;
//Dealed:=false;
for j:=1 to High(MineStat) do
begin
if MineStat[j].Item_Id=Item_Id then
begin
//首先处理回采面Mine[i]对应的第一条记录,以确定实际开工日期
TimePara_Frm:=TTimePara_Frm.Create(self);
TimePara_Frm.Caption:='确认实际开工日期';
TimePara_Frm.Label1.Caption:='"'+Mine[i].Name+'" 计划'
+datetostr(Mine[i].Begin_Date)+'开工,实际开工日期请确认:';
TimePara_Frm.DateTimePicker1.Date:=MineStat[j].Begin_Date;
TimePara_Frm.ShowModal;
Mine[i].Begin_Date:=TimePara_Frm.BeginTime;
TimePara_Frm.Free;
TimePara_Frm:=nil;
//首先找到编号为Item_Id的回采面在表中对应的最后一条统计记录,以读取其统计结束日期等其它信息
k:=j;
while MineStat[k].Item_Id=Item_Id do
begin
k:=k+1;
if k>High(MineStat) then //统计表中涉及的最后一个回采面只有一个统计记录
begin
break;
end;
if k=High(MineStat) then //统计表中涉及的最后一个回采面有多个统计记录
begin
k:=k+1;
break;
end;
end;
Mine[i].Finished_Sum:=MineStat[k-1].Finished_Sum;
// 1:采掘工作结束
if(MineStat[k-1].Remain<=0)
then
begin
Mine[i].End_Date:=MineStat[k-1].End_Date;
Mine[i].PercentComplete:=100;
end;
// 2:采掘工作没有结束
if(MineStat[k-1].Remain>0)
then
begin
Percent:=round((MineStat[k-1].Finished_Sum/Mine[i].Plan_Amount)*100);
Mine[i].PercentComplete:=Percent;
end;
break; //break: for j:=1 to High(MineStat) do
end; //end: if MineStat[j].Item_Id=Item_Id then
end; //end: for j:=1 to High(MineStat) do
end;//end: for i:=1 to High(Mine) do
//把对采煤统计情况处理的结果(存放在Mine数组中)更新到“回采接替跟踪”表中
try
With Data_Frm.MineRelayTrace_AdoTab do
begin
first;
while not eof do
begin
Find:=false;
Item_Id:=FieldByName('Face_Lane').AsInteger;
for i:=1 to High(Mine) do
begin
if Mine[i].Item_Id=Item_Id then
begin
Find:=true;
break; //break: for i:=1 to High(Mine) do
end;
end;
if Find then //如果“采煤统计”表中统计的回采面中有“回采接替跟踪”表当前的记录对应的回采面时,则进行更新处理
begin
Edit;
FieldByName('Begin_Date').AsDateTime:=Mine[i].Begin_Date;
FieldByName('End_Date').AsDateTime:=Mine[i].End_Date;
FieldByName('PercentComplete').AsInteger:=Mine[i].PercentComplete;
post;
end;
next;
end;
end; //end: With Data_Frm.MineRelayTrace_AdoTab do
except
showmessage('向“回采接替跟踪”表中更新数据时出现错误,位置在MineStatistic_Unt单元中的DealMineStat过程中。');
end;
end;
procedure TMineStatistic_Frm.N1Click(Sender: TObject);
begin
MineRelayShow_Frm:=TMineRelayShow_Frm.Create(self);
MineRelayShow_Frm.Show;
end;
procedure TMineStatistic_Frm.DBLookupComboBox2Click(Sender: TObject);
var
FaceId,Remain:integer;
i,j,k:integer;
NoOne:boolean;
BeginDate,EndDate:TDate;
begin
FaceId:=Base_DataS.DataSet.FieldByName('Item_Id').AsInteger;
Remain:=trunc(RelayFace_DataS.DataSet.FieldByName('Remain_Reserve').AsFloat*10000);
BeginDate:=RelayFace_DataS.DataSet.FieldByName('Begin_Date').AsDateTime;
EndDate:=RelayFace_DataS.DataSet.FieldByName('End_Date').AsDateTime;
NoOne:=true;//假设统计表中没有新添加的回采面
for i:=1 to High(MineStat) do
begin
if MineStat[i].Item_Id=FaceId then
begin
NoOne:=false;
break;
end;
end;
if NoOne then //若新添加的记录对应的回采面在原表中没有,则设置该添加的回采面的剩余储量
begin
Base_DataS.DataSet.FieldByName('Remain').AsInteger:=Remain;
Base_DataS.DataSet.FieldByName('Finished_Sum').AsInteger:=0;
Base_DataS.DataSet.FieldByName('Finished').AsInteger:=0;
DateTimePicker1.DateTime:=BeginDate;
DateTimePicker2.DateTime:=BeginDate;
end;
DateTimePicker1.Enabled:=true;
DateTimePicker2.Enabled:=true;
DBEdit1.Enabled:=true;
DBEdit2.Enabled:=true;
DBEdit3.Enabled:=true;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -