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

📄 laneinfo_unt.pas

📁 煤矿行业采掘接替计划自动生成系统
💻 PAS
📖 第 1 页 / 共 5 页
字号:
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 + -