📄 yxxx_view_pas.~pas
字号:
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 + -