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

📄 minestatistic_unt.pas

📁 煤矿行业采掘接替计划自动生成系统
💻 PAS
📖 第 1 页 / 共 3 页
字号:
unit MineStatistic_Unt;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DataEdit_BaseUnt, DB, Grids, DBGrids, StdCtrls, Buttons,
  ExtCtrls, ADODB, Mask, DBCtrls, ComCtrls, Menus;

type
  TMineStatData=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_DayOutput:integer;//计划的日产量
    Plan_DayProgress:single;//计划的日进度
    Plan_BeginDate:TDate; //计划开工日期
    Plan_EndDate:TDate; //计划完工日期
  end;

  TMineStatistic_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;
    MineTeam_AdoQ: TADOQuery;
    RelayFace_AdoQ: TADOQuery;
    MineTeam_DataS: TDataSource;
    RelayFace_DataS: TDataSource;
    Label7: TLabel;
    DBEdit3: TDBEdit;
    PopupMenu1: TPopupMenu;
    N1: TMenuItem;
    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 DBLookupComboBox1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure DBLookupComboBox2KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure DateTimePicker1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure DateTimePicker2KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure DBEdit1KeyDown(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 FormClose(Sender: TObject; var Action: TCloseAction);
    procedure N1Click(Sender: TObject);
    procedure DBLookupComboBox2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    LastWorkGroup:integer;//采煤统计表中,最后一条记录的采煤队编号
    LastBegin_Date,LastEnd_Date:TDate;
    EditMode:boolean;
    MineStat:array of TMineStatData; //统计表中的多条记录
    AddStat:TMineStatData;//统计表中的一条记录
    Mine:Array of TMineStatData;//记录统计表中所涉及的回采面实际生产信息,无重复

    procedure ReadStatData;//读取已经存在的统计数据

  //对采煤统计数据进行排序,排序规则是:
  //1、首先对于同一个采煤队的回采面进度统计数据应连续存放在数据表中
  //2、同一个采煤队中不同回采面要按照接替先后顺序排序
  //3、同一个采煤队的同一个回采面的统计信息按照时间先后顺序排序
    procedure Taxis;  //
  //对采煤统计数据进行处理,确定实际开、完工日期,完成百分比
    procedure DealMineStat;
  end;

var
  MineStatistic_Frm: TMineStatistic_Frm;

implementation
uses Data_Unt,TimePara_Unt,MineRelayShow_Unt,Hint_Unt;
{$R *.dfm}

procedure TMineStatistic_Frm.FormCreate(Sender: TObject);
begin
  inherited;
  EditMode:=false;  //置初始状态为非修改模式
  with MineTeam_AdoQ do
    begin
      Parameters.ParamByName('v').Value:='采煤';
      ExecSQL;
      open;
    end;
end;

procedure TMineStatistic_Frm.DBLookupComboBox1Click(Sender: TObject);
var
str:string;
MineTeam_Id:integer;
AddWorkGroup:integer;
begin
  str:=DBLookUpComboBox1.Text;
  if str='' then
    begin
      showmessage('请选择一个采煤队!');
      exit;
    end;
  MineTeam_Id:=MineTeam_AdoQ.FieldByName('WorkGroup_Id').AsInteger;
  with RelayFace_AdoQ do
    begin
      close;
      sql.Clear;
      sql.Add('select Face_Lane,WorkGroup,Relay_Id,Face_Id,Name,Remain_Reserve,Begin_Date,End_Date from 回采接替f,回采面f');
      sql.Add('where (WorkGroup=:v1)and(Face_Id=Face_Lane)');
      sql.Add('order by Relay_Id asc');
      Parameters.ParamByName('v1').Value:=MineTeam_Id;
      ExecSQL;
      open;
    end;
  RelayFace_DataS.DataSet:=RelayFace_AdoQ;
  DBLookUpComboBox2.ListSource:=RelayFace_DataS;
  DBLookUpComboBox2.ListField:='Name';
  DBLookUpComboBox2.KeyField:='Face_Id';

  AddWorkGroup:=MineTeam_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 TMineStatistic_Frm.BitBtn3Click(Sender: TObject);
var
i,j,k:integer;
FaceId,RelayId: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;
  FaceId:=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(MineStat) do
    begin
      if MineStat[i].Item_Id=FaceId 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;
  DBGrid1.ReadOnly:=false;
  Base_DataS.DataSet.Edit;
  With Base_DataS.DataSet do
    begin
      FieldByName('Begin_Date').AsDateTime:=d1;
      FieldByName('End_Date').AsDateTime:=d2;
      //确定添加的记录的回采面在回采接替表中的接替序号Relay_Id
      Data_Frm.MineRelay_AdoTab.Locate('Face_Lane',FaceId,[locaseinsensitive]);
      RelayId:=Data_Frm.MineRelay_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 TMineStatistic_Frm.BitBtn1Click(Sender: TObject);
var
LastId:integer;

begin
//首先读取表中已经存在的所有记录,存入MineStat数组中,
//留待后面进行排序时和添加的记录(存入AddStat中)一起使用
  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 MineTeam_AdoQ.FieldByName('WorkGroup_Id').AsInteger=
  except
    showmessage('数据库未连接正确!');
  end;
  DBLookUpComboBox1.SetFocus;
end;

procedure TMineStatistic_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 TMineStatistic_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 TMineStatistic_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 TMineStatistic_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 TMineStatistic_Frm.BitBtn8Click(Sender: TObject);
begin
  inherited;
  EditMode:=true;
end;

procedure TMineStatistic_Frm.DBLookupComboBox1KeyDown(Sender: TObject;

⌨️ 快捷键说明

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