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

📄 yxxx_view_pas.~pas

📁 delphi6.0电子寻更源程序,用来计算保安有无查抄
💻 ~PAS
📖 第 1 页 / 共 5 页
字号:
unit yxxx_view_pas;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  RXCtrls, ExtCtrls, StdCtrls, Mask, ToolEdit, DBCtrls, Buttons, Grids,
  DBGrids, ComCtrls,db,bde;

type
  Tyxxx_view = class(TForm)
    Panel2: TPanel;
    DBLookupComboBox3: TDBLookupComboBox;
    GroupBox1: TGroupBox;
    DBLookupComboBox2: TDBLookupComboBox;
    DBLookupComboBox4: TDBLookupComboBox;
    GroupBox2: TGroupBox;
    DateEdit1: TDateEdit;
    DateEdit2: TDateEdit;
    GroupBox3: TGroupBox;
    RadioButton1: TRadioButton;
    RadioButton2: TRadioButton;
    RadioButton3: TRadioButton;
    DBLookupComboBox1: TDBLookupComboBox;
    DBLookupComboBox5: TDBLookupComboBox;
    Edit1: TEdit;
    Panel3: TPanel;
    BitBtn3: TBitBtn;
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    TabSheet3: TTabSheet;
    TabSheet4: TTabSheet;
    TabSheet5: TTabSheet;
    DBGrid1: TDBGrid;
    DBGrid2: TDBGrid;
    DBGrid4: TDBGrid;
    DBGrid5: TDBGrid;
    DBGrid3: TDBGrid;
    Panel4: TPanel;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    BitBtn2: TBitBtn;
    Label9: TLabel;
    BitBtn12: TBitBtn;
    BitBtn11: TBitBtn;
    procedure FormCreate(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure BitBtn12Click(Sender: TObject);
    procedure BitBtn11Click(Sender: TObject);
    procedure BitBtn3Click(Sender: TObject);
    procedure PageControl1Change(Sender: TObject);
    procedure DateEdit1Exit(Sender: TObject);
    procedure DateEdit2Exit(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    function    roundtime(time1,time2:tdatetime):integer;
    function	ttom(time1:tdatetime):Integer;
    function	dectime(time1,time2:tdatetime):integer;
    function	decdatetime(date1,time1,date2,time2:tdatetime):integer;
    procedure	DeleteSameRec;   //删除两点连续
    //procedure   checktime(worker,ln,sh:string;date1:tdatetime;bm1,bm2:tbookmark);//检查时间异常
    procedure selectoneday(date1:tdatetime);//选择单天的有效记录
    procedure checkrecord(date1:tdatetime;code1,linename1,shifts1:string);//选择漏点、乱序、完整、时间异常记录
  procedure threaddone(SENDER:TOBJECT);
  end;

var
  yxxx_view: Tyxxx_view;
  begindate,enddate:tdatetime;
  flag:boolean;
  l_com,n:integer;                      //点数
  l_begintime,l_endtime:Ttime;                  //上下班时间
  _linename,_shifts,_code:string;        //线路、班次、员工、日期
  _pdate:Tdatetime;
  _chkcycl,_dgpcxx,_dgpcsx,_ntime:integer;               //周期、下限、上限 、向前间隔
 implementation
uses password_unit,thread_yxxx_view,choose_pas,dm_yxxx_view_pas,  MENU,yxxx_report_pas,gvas,LDXX_report_PAS,lxxx_report_pas,sjyc_report_pas,wzxx_report_pas;
{$R *.DFM}
procedure tyxxx_view.checkrecord(date1:tdatetime;code1,linename1,shifts1:string);
var i:integer;
ldbs:boolean; //漏点标示
j,lost_lseq:integer;          //漏点记录
lost_node,lost_nodeplace,lost_name:string;//漏点记录
number,count:array[1..100] of integer;  //漏点信息
l_cf_curs,l_cf_firsttrec,l_cf_endrec,l_cf_lseq:integer;//乱序信息
l_cf_date,l_cf_da,l_cf_time,l_cf_ti,l_cf_endt,l_cf_brkbt,l_cf_brket:tdatetime;
l_cf_ifcon:boolean;
_pencode,_pstatu:string;
bookmark1,bookmark2,bookmark3:tbookmark;//乱序信息
lxbs:boolean;
l_ci_lseq:integer; //时间异常
L_ci_t1,l_ci_d1 ,l_ci_t2,l_ci_d2:tdatetime;
l_ci_ntime,_sx,_xx:integer;
l_ci_time:integer;    //时间异常
begin
with dm_yxxx_view.q_choose_point do
  begin    //选择该线路的点数
  close;
  parambyname('linename').asstring:=linename1;
  open;
  l_com:=recordcount;
  first ;
   if l_com>0 then
     begin //记录点数
        for i:=1 to l_com do
         begin
         number[i]:=fieldbyname('lseq').asinteger;
         count[i]:=0;
         next;
         end;
       end; // 记录点数
end;   //   选择该线路的点数
{with dm_yxxx_view.q_choose_shifts do
begin //选择班次,根据周期,确定循环次数
    close;
    parambyname('linename').asstring:=linename1;
    parambyname('shifts').asstring:=shifts1;
    open;
    l_begintime:=fieldbyname('firstp').asdatetime;
    l_endtime:= fieldbyname('lastp').asdatetime;
   _chkcycl:=fieldbyname('chkcycl').asinteger;
    n:=(_chkcycl)div(roundtime(l_begintime,l_endtime));
    end;  //选择班次,根据周期,确定循环次数  }
 with dm_yxxx_view.t_yxxx_view do
 begin// 0.1检查记录
 //indexfieldnames:=fieldbyname('ptime').asstring;
if recordcount=0 then
                begin    //写入漏检记录(该点没有巡逻);
                with dm_yxxx_view.q_yxxx_fl  do
                  begin
                  //close;
                  //open;
                  append;
                  fieldbyname('linename').asstring:=linename1;
                  fieldbyname('shifts').asstring:=shifts1;
                  fieldbyname('code').asstring:=code1;
                  fieldbyname('pdate').asdatetime:=date1;
                  fieldbyname('xxbs').asstring:='1';
                  fieldbyname('case').asstring:='沒有巡邏';
                  post;
                  end; //
                  ldbs:=true;
                end// 写入漏检记录(该点没有巡逻);
                else
                begin//检查漏点记录
                 first;
                 ldbs:=false;
                 //dm_yxxx_view.q_choose_point.Close;
                 //dm_yxxx_view.q_choose_point.open;
                   while not eof do
                   begin  //1.0.0
                   l_begintime:=fieldbyname('firstp').asdatetime;
                   l_endtime:= fieldbyname('lastp').asdatetime;
                   _chkcycl:=fieldbyname('chkcycl').asinteger;
                   n:=(_chkcycl)div(roundtime(l_begintime,l_endtime));
                    for j:=1 to l_com do
                    begin //1.0
                      if number[j]=fieldbyname('lseq').asinteger then
                       begin//1.1
                       count[j]:=count[j]+1;
                       break;
                       end;//1.1
                      //next;
                     end;  //1.0
                     next;
                     end;//1.0.0
                   for i:=1 to l_com do
                     begin // 1.2
                      if count[i]<n  then
                        begin//找到漏点记录
                        ldbs:=true;
                        //lost_point:=number[i]
                         with dm_yxxx_view.q_choose_point  do
                          begin // 1.3
                           //close;
                           //open;
                           first;
                          Locate('linename;lseq',vararrayOf([linename1,number[i]]),[loCaseInsensitive]);
                          lost_node:=fieldbyname('node').asstring;
                          lost_name:=fieldbyname('name').asstring;
                          lost_nodeplace:=fieldbyname('nodeplace').asstring;
                          lost_lseq:=fieldbyname('lseq').asinteger;
                          end;  // 1.3
                        with dm_yxxx_view.q_yxxx_fl  do
                          begin               //写入漏点记录
                          //close;
                          //open;
                          append;
                          fieldbyname('linename').asstring:=linename1;
                          fieldbyname('shifts').asstring:=shifts1;
                          fieldbyname('code').asstring:=code1;
                          fieldbyname('pdate').asdatetime:=date1;
                          fieldbyname('xxbs').asstring:='1';
                          fieldbyname('case').asstring:='該點漏檢';
                          fieldbyname('node').asstring:=lost_node;
                          fieldbyname('nodeplace').asstring:=lost_nodeplace;
                          fieldbyname('lseq').asinteger:=lost_lseq;
                          fieldbyname('name').asstring:=lost_name;
                          post;
                          end; //写入漏点记录
                        end; //找到漏点记录
                     end;  //  1.2
                 end; //检查漏点记录
 if  not ldbs   then
                 begin //检查乱序记录2.0
                 first;
                 l_cf_curs:=1;
                 l_cf_ifcon:=true;
                 l_cf_endrec:=0;
                 l_cf_da:=fieldbyname('pdate').asdatetime;
                 l_cf_ti:=fieldbyname('ptime').asdatetime;
                 bookmark2:=getbookmark;//获取第一条记录位置
                 lxbs:=false;
                 while not eof do
                   begin //2.1
                   l_cf_lseq:=fieldbyname('lseq').asinteger;
                   if l_cf_lseq=l_cf_curs then
                    begin //2.2 判断是否按顺序巡更
                    if l_cf_lseq=1 then
                      begin //2.3     第一个点
                      l_cf_da:=fieldbyname('pdate').asdatetime;
                      l_cf_ti:=fieldbyname('ptime').asdatetime;
                      bookmark1:=getbookmark;
                      end;  //2.3   第一个点
                    if l_cf_lseq=l_com then
                      begin //2.4   最后一个点
                      l_cf_endt:=fieldbyname('ptime').asdatetime;
                      if not lxbs then
                      begin //4.3   写入完整、时间异常记录
                      //写入完整信息
                       with dm_yxxx_view.q_yxxx_fl do
                         begin//3.0
                         //close;
                         //open;
                         append;
                         fieldbyname('pdate').asdatetime:=date1;
                         fieldbyname('linename').asstring:=linename1;
                         fieldbyname('shifts').asstring:=shifts1;
                         fieldbyname('code').asstring:=code1;
                         fieldbyname('xxbs').asstring:='2';
                         fieldbyname('ptime').asdatetime:=l_cf_ti;
                         fieldbyname('endtime').asdatetime:=l_cf_endt;
                         post;
                         end; //3.0
                      //写入完整信息
                      bookmark3:=getbookmark;
                      //检查时间异常信息
                      gotobookmark(bookmark1);//跳到第一点
                      l_ci_lseq:=1;
                      l_ci_t1:=fieldbyname('ptime').asdatetime;
                      l_ci_d1:=fieldbyname('pdate').asdatetime;
                      //if l_ci_t1>fieldbyname('firstp').asdatetime+
                      next;
                      while l_ci_lseq<l_com do
                        begin //4.2
                        l_ci_lseq:=l_ci_lseq+1;
                        l_ci_t2:=fieldbyname('ptime').asdatetime;
                        l_ci_d2:=fieldbyname('pdate').asdatetime;
                        l_ci_time:=decdatetime(l_ci_d2,l_ci_t2,l_ci_d1,l_ci_t1);
                        l_ci_ntime:=fieldbyname('ntime').asinteger;
                        _xx:=fieldbyname('dgpcxx').asinteger;
                        _sx:=fieldbyname('dgpcsx').asinteger;
                        if decdatetime(l_ci_d2,l_ci_t2,l_ci_d1,l_ci_t1)>(l_ci_ntime+_xx) then
                        begin//(fieldbyname('ntime').asinteger+fieldbyname('dgpcxx').asinteger) then  //大于到干偏差下限为时间过长
                       //写入时间异常记录 -时间过长
                       with dm_yxxx_view.q_yxxx_fl do
                         begin
                         //close;
                         //open;
                         append;
                         edit;
                         fieldbyname('xxbs').asstring:='4';
                         fieldbyname('pdate').asdatetime:=l_ci_d2;
                         fieldbyname('ptime').asdatetime:=l_ci_t2;
                         fieldbyname('linename').asstring:=linename1;
                         fieldbyname('shifts').asstring:=shifts1;
                         fieldbyname('code').asstring:=code1;
                         fieldbyname('case').asstring:='(第'+inttostr(l_ci_lseq-1)+'到'+inttostr(l_ci_lseq)+'点) 时间间隔过长';
                         fieldbyname('conifo').asstring:=timetostr(l_ci_t1)+'---'+timetostr(l_ci_t2);
                         post;
                         end;
                         end
                         else
                      //写入时间异常记录-时间过长
                       if decdatetime(l_ci_d2,l_ci_t2,l_ci_d1,l_ci_t1)<(l_ci_ntime-_sx) then
                       begin //fieldbyname('ntime').asinteger-fieldbyname('dgpcsx').asinteger then //小于到岗时间偏差上限为时间过断
                     // 写入时间异常记录 -时间过断
                        with dm_yxxx_view.q_yxxx_fl do
                         begin
                         //close;
                         //open;
                         append;
                         edit;
                         fieldbyname('xxbs').asstring:='4';
                         fieldbyname('pdate').asdatetime:=l_ci_d2;
                         fieldbyname('ptime').asdatetime:=l_ci_t2;
                         fieldbyname('linename').asstring:=linename1;
                         fieldbyname('shifts').asstring:=shifts1;
                         fieldbyname('code').asstring:=code1;
                         fieldbyname('case').asstring:='(第'+inttostr(l_ci_lseq-1)+'到'+inttostr(l_ci_lseq)+'点) 时间间隔过短';
                         fieldbyname('conifo').asstring:=timetostr(l_ci_t1)+'---'+timetostr(l_ci_t2);
                         post;
                         end;
                         end;
                    // 写入时间异常记录 -时间过断
                       l_ci_t1:=fieldbyname('ptime').asdatetime;
                       l_ci_d1:=fieldbyname('pdate').asdatetime;
                       next;
                       end;   //4.2
                       end;//4.3
                       gotobookmark(bookmark3);
                       freebookmark(bookmark3);
                      //检查时间异常信息
                      l_cf_curs:=1;
                      end//     2.4  最后一个点
                      else
                      l_cf_curs:=l_cf_curs+1;
                    end   //2.2 判断是否按顺序巡更
                    else
                    begin // 2.5 没按顺序
                    lxbs:=true;
                    l_cf_da:=fieldbyname('pdate').asdatetime;

⌨️ 快捷键说明

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