⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main_unt.pas

📁 煤矿行业采掘接替计划自动生成系统
💻 PAS
📖 第 1 页 / 共 2 页
字号:
begin
  if MineRelay_FrmCreated
    then MineRelay_Frm.MineRelay_Report
    else
      begin
        MineRelay_Frm:=TMineRelay_Frm.Create(self);
        MineRelay_Frm.MineRelay_Report;
      end;
end;

procedure TMain_Frm.N24Click(Sender: TObject);
begin
  if DrillRelay_FrmCreated
    then DrillRelay_Frm.DrillRelay_Report
    else
      begin
        DrillRelay_Frm:=TDrillRelay_Frm.Create(self);
        DrillRelay_Frm.DrillRelay_Report;
      end;
end;

//调整回采面的工期后,调整回采接替计划的开、完工时间;掘进任务的开、完工时间;掘进接替计划的开、完工时间
procedure TMain_Frm.N17Click(Sender: TObject);
var
  FaceTaskT:array of TFaceTask;
  i,j,m,n,Id:integer;
  //d:Tdate;
  //BookM:TBookMark;
  FaceN:string;

begin
if  HaveForm then
  begin
    showmessage('请先关闭工作区内的窗体!');
    exit;
  end;
FaceInfo_Frm:=TFaceInfo_Frm.Create(self);
FaceInfo_Frm.BorderStyle:=bsSizeable;
FaceInfo_Frm.Align:=alNone;
FaceInfo_Frm.BorderIcons:=[biSystemMenu,biMinimize,biMaximize];
FaceInfo_Frm.Caption:='工作面参数修改';

FaceParaAdjust:=true;//使处于回采面参数调整状态
FaceInfo_Frm.ShowModal;
if Data_Frm.MineRelay_AdoTab.RecordCount=0 then
  begin
    //showmessage('');
    exit; //若还没有安排回采接替,则退出时间调整
  end;


m:=Data_Frm.MineRelay_AdoTab.RecordCount;
setlength(FaceTaskT,m+1);
 //记录工期变化之差,在回采接替表中(MineRelay_AdoTab)存有回采面的原工期,
 //修改了回采面表中的工期后,就可以用修改了的工期减去回采接替表中的原工期,
 //得出工期变化量
Data_Frm.MineRelay_AdoTab.First;
for i:=1 to m do
  begin
    FaceTaskT[i].FaceId:=Data_Frm.MineRelay_AdoTab.FieldByName('Face_Lane').AsInteger;
    Data_Frm.Face_AdoTab.Locate('Face_Id',FaceTaskT[i].FaceId,[locaseinsensitive]);
    //计算修改工作面工期参数后,已经制订的回采计划中的回采面工期与修改后的回采面的工期之差
    FaceTaskT[i].DeltaT:=Data_Frm.Face_AdoTab.FieldByName('TaskTime').AsInteger-
                           Data_Frm.MineRelay_AdoTab.FieldByName('TaskTime').AsInteger;
    FaceTaskT[i].FaceName:=Data_Frm.Face_AdoTab.FieldByName('Name').AsString;
    Data_Frm.MineRelay_AdoTab.Next;
  end;

//调整回采接替计划中的工期和开、完工时间
for i:=1 to m do
  begin
    if FaceTaskT[i].DeltaT<>0 then //若回采面的工期发生改变
      begin
        AdjustMineRelayTime(FaceTaskT[i]);
      end;
  end;

if Data_Frm.Lane_AdoTab.RecordCount=0 then
  begin
    //showmessage('');
    exit;//若没有形成掘进任务,则退出
  end;

with Data_Frm.Lane_AdoTab do
  begin
    first;
    while not eof do
      begin
        if (FieldByName('State').AsString='待开工')
          and((FieldByName('LST').AsDateTime=null)or(FieldByName('LFT').AsDateTime=null))
            then
              begin
                showmessage('请先进入“掘进方案-掘进任务”界面计算掘进任务的最迟开、完工时间');
                exit;
              end;
        next;
      end;
  end;

//调整掘进任务中的开、完工时间
for i:=1 to High(FaceTaskT) do
  begin
    if FaceTaskT[i].DeltaT<>0 then
      begin
        //Data_Frm.MineRelay_AdoTab.Locate('Face_Lane',FaceTaskT[i].FaceId,[locaseinsensitive]);
        with Data_Frm.MineRelay_AdoTab do
          begin
            Locate('Face_Lane',FaceTaskT[i].FaceId,[locaseinsensitive]);
            next; //寻找改变工期的回采面的所有接替面,以便修改接替面的掘进准备开、完工时间
            while(FieldByName('Relay_Id').AsInteger<>1)and(not eof)do
              begin
                Id:=FieldByName('Face_Lane').AsInteger;
                Data_Frm.Face_AdoTab.Locate('Face_Id',Id,[locaseinsensitive]);
                FaceN:=Data_Frm.Face_AdoTab.FieldByName('Name').AsString;
                AdjustDrillTaskTime(FaceN,FaceTaskT[i]);
                next;
              end;
          end;
      end;

  end;     //end:  for i:=1 to High(FaceTaskT) do


  //调整掘进接替计划中的开、完工时间,较复杂,暂时放在这里

end;

procedure TMain_Frm.AdjustDrillTaskTime(FaceName:string;FaceTask:TFaceTask);
var
BookM:TBookMark;
Face:string;
d:TDate;
begin
with Data_Frm.Lane_AdoTab do
  begin
    first;
    while not eof do
      begin
        Face:=FieldByName('Face').AsString;
        if(Face=FaceName)then
            begin
              while (not eof)and(Face=FaceName) do
                begin
                  next;
                  Face:=FieldByName('Face').AsString;
                end;
              if not eof then Prior;
              BookM:=GetBookMark;
              Face:=FieldByName('Face').AsString;
              while(not bof)and((Face=FaceName)or((Face=null)or(Face='')))
                      and(FieldByName('State').AsString<>'已完工')do
                begin
                  edit;
                  d:=FieldByName('LST').AsDateTime;
                  d:=d+FaceTask.DeltaT;
                  FieldByName('LST').AsDateTime:=d;
                  post;
                  edit;
                  d:=FieldByName('LFT').AsDateTime;
                  d:=d+FaceTask.DeltaT;
                  FieldByName('LFT').AsDateTime:=d;
                  post;
                  Prior;
                  Face:=FieldByName('Face').AsString;
                end;
              GotoBookMark(BookM);
            end; //end:  if(FaceN=FaceName)then
        next;
      end;
  end;    //end: with Data_Frm.Lane_AdoTab do
end;

procedure TMain_Frm.AdjustMineRelayTime(FaceTask:TFaceTask);
var
BookM:TBookMark;
Id:integer;
d:TDate;
begin
With Data_Frm.MineRelay_AdoTab do
  begin
    first;
    Id:=FieldByName('Face_Lane').AsInteger;
    while(not eof)and(Id<>FaceTask.FaceId)do
      begin
        next;
        Id:=FieldByName('Face_Lane').AsInteger;
      end;
    if Id<>FaceTask.FaceId then
      begin
        showmessage('回采接替计划中没有涉及到被修改的回采面“'+FaceTask.FaceName+'”');
        exit;
      end;
    edit;
    FieldByName('TaskTime').AsInteger:=FieldByName('TaskTime').AsInteger+FaceTask.DeltaT;
    post;
    //被修改工期的回采面,只改变它的完工日期,即,认定改变工期时,开工时间没有变化
    d:=FieldByName('End_Date').AsDateTime;
    d:=d+FaceTask.DeltaT;
    edit;
    FieldByName('End_Date').AsDateTime:=d;
    Post;
    next;
    while (not eof)and(FieldByName('Relay_Id').AsInteger<>1) do
      begin
        d:=FieldByName('Begin_Date').AsDateTime;
        d:=d+FaceTask.DeltaT;
        edit;
        FieldByName('Begin_Date').AsDateTime:=d;
        post;
        d:=FieldByName('End_Date').AsDateTime;
        d:=d+FaceTask.DeltaT;
        edit;
        FieldByName('End_Date').AsDateTime:=d;
        post;
        next;
      end;
  end;   //end:  With Data_Frm.MineRelay_AdoTab do  //调整回采接替计划中的工期和开、完工时间

end;

procedure TMain_Frm.N27Click(Sender: TObject);
begin
MineStatistic_Frm:=TMineStatistic_Frm.Create(self);
MineStatistic_Frm.ShowModal;
end;

procedure TMain_Frm.N2Click(Sender: TObject);
begin
DrillStatistic_Frm:=TDrillStatistic_Frm.Create(self);
DrillStatistic_Frm.ShowModal;
end;

procedure TMain_Frm.N35Click(Sender: TObject);
begin
Frm_Gra:=TFrm_Gra.Create(self);
Frm_Gra.ShowModal;
Frm_Gra.Free;
Frm_Gra:=nil;
end;

procedure TMain_Frm.N36Click(Sender: TObject);
begin
Frm_Project:=TFrm_Project.Create(self);
Frm_Project.ShowModal;
Frm_Project.Free;
Frm_Project:=nil;
end;


procedure TMain_Frm.N26Click(Sender: TObject);
begin
if HaveForm then exit;
MineRelayEdit_Frm:=TMineRelayEdit_Frm.Create(Panel2);
MineRelayEdit_Frm.Parent:=Panel2;
MineRelayEdit_Frm.Show;
HaveForm:=true;
StatusBar1.Panels[0].Text:='回采工作统计......';
end;

procedure TMain_Frm.N30Click(Sender: TObject);
begin
if HaveForm then exit;
DrillRelayEdit_Frm:=TDrillRelayEdit_Frm.Create(Panel2);
DrillRelayEdit_Frm.Parent:=Panel2;
DrillRelayEdit_Frm.Show;
HaveForm:=true;
StatusBar1.Panels[0].Text:='掘进工作统计......';
end;

procedure TMain_Frm.N32Click(Sender: TObject);
begin
  Hint_Frm:=THint_Frm.Create(self);
  try
    MineRelay_Frm.MineRelayTrace;
  except
  end;
  Hint_Frm.Free;
  Hint_Frm:=nil;
end;

procedure TMain_Frm.ToolButton13Click(Sender: TObject);
begin
close;
end;

procedure TMain_Frm.N33Click(Sender: TObject);
begin
  try
    DrillRelay_Frm.DrillRelayTrace;
  except
  end;
end;

procedure TMain_Frm.FormActivate(Sender: TObject);
begin
//Main_Frm.Refresh;
end;

procedure TMain_Frm.Button1Click(Sender: TObject);
var
i,j,k,m,n:integer;
begin
  if Data_Frm.Lane_AdoTab.RecordCount=0 then
    begin
      showmessage('没有掘进任务记录!');
      exit;
    end;
  m:=Data_Frm.Lane_AdoTab.RecordCount;
  setlength(DT_Prog,m+1);
  //读取
  with Data_Frm.Lane_AdoTab do
    begin
      if not active then open;
      first;
      i:=1;
      while not eof do
        begin
          DT_Prog[i].Lane_Id:=FieldByName('Lane_Id').AsInteger;
          DT_Prog[i].Project_Id:=FieldByName('Project_Id').AsInteger;
          DT_Prog[i].Name:=FieldByName('Name').AsString;
          DT_Prog[i].Section_Type:=FieldByName('Section_Type').AsString;
          DT_Prog[i].WorkQuantity:=FieldByName('WorkQuantity').AsFloat;
          DT_Prog[i].DayProgress:=FieldByName('DayProgress').AsFloat;
          DT_Prog[i].TaskTime:=FieldByName('TaskTime').AsInteger;
          next;
          i:=i+1;
        end;
    end;
  //写入
  with Data_Frm.DrillTask_DayProgress do
    begin
      for i:=1 to High(DT_Prog) do
        begin
          if not active then open;
          append;
          FieldByName('Lane_Id').AsInteger:=DT_Prog[i].Lane_Id;
          FieldByName('Project_Id').AsInteger:=DT_Prog[i].Project_Id;
          FieldByName('Name').AsString:=DT_Prog[i].Name;
          FieldByName('Section_Type').AsString:=DT_Prog[i].Section_Type;
          FieldByName('WorkQuantity').AsFloat:=DT_Prog[i].WorkQuantity;
          FieldByName('DayProgress').AsFloat:=DT_Prog[i].DayProgress;
          FieldByName('TaskTime').AsInteger:=DT_Prog[i].TaskTime;
          post;
        end;
    end;
end;

procedure TMain_Frm.Button2Click(Sender: TObject);
var
i,j,k,m,n:integer;
NameStr:string;
begin
  if not Data_Frm.DrillTask_DayProgress.Active then Data_Frm.DrillTask_DayProgress.open;
  if Data_Frm.DrillTask_DayProgress.RecordCount=0 then
    begin
      showmessage('没有掘进任务日进度信息记录!');
      exit;
    end;
  m:=Data_Frm.DrillTask_DayProgress.RecordCount;
  setlength(DT_Prog,m+1);
  //读取
  with Data_Frm.DrillTask_DayProgress do
    begin
      if not active then open;
      first;
      i:=1;
      while not eof do
        begin
          DT_Prog[i].Lane_Id:=FieldByName('Lane_Id').AsInteger;
          DT_Prog[i].Project_Id:=FieldByName('Project_Id').AsInteger;
          DT_Prog[i].Name:=FieldByName('Name').AsString;
          DT_Prog[i].Section_Type:=FieldByName('Section_Type').AsString;
          DT_Prog[i].WorkQuantity:=FieldByName('WorkQuantity').AsFloat;
          DT_Prog[i].DayProgress:=FieldByName('DayProgress').AsFloat;
          DT_Prog[i].TaskTime:=FieldByName('TaskTime').AsInteger;
          next;
          i:=i+1;
        end;
    end;
  //写入
  with Data_Frm.Lane_AdoTab do
    begin
      if not active then open;
      first;
      while not eof do
        begin
          NameStr:=FieldByName('Name').AsString;
          for i:=1 to High(DT_Prog) do
            begin
              if DT_Prog[i].Name=NameStr then
                begin
                  edit;
                  //FieldByName('Lane_Id').AsInteger:=DT_Prog[i].Lane_Id;
                  //FieldByName('Project_Id').AsInteger:=DT_Prog[i].Project_Id;
                  //FieldByName('Name').AsString:=DT_Prog[i].Name;
                  FieldByName('Section_Type').AsString:=DT_Prog[i].Section_Type;
                  FieldByName('WorkQuantity').AsFloat:=DT_Prog[i].WorkQuantity;
                  FieldByName('DayProgress').AsFloat:=DT_Prog[i].DayProgress;
                  FieldByName('TaskTime').AsInteger:=DT_Prog[i].TaskTime;
                  post;
                  break;
                end;
            end;
          next;
        end;
    end;
  showmessage('导入完毕,请查看!');    
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -