📄 thread_yxxx_view.pas
字号:
fieldbyname('workercode').asstring:=dm_yxxx_view.q_ysxx.fieldbyname('workercode').asstring;
fieldbyname('workername').asstring:=dm_yxxx_view.q_ysxx.fieldbyname('workername').asstring;
fieldbyname('nodename').asstring:=dm_yxxx_view.q_ysxx.fieldbyname('name').asstring;
fieldbyname('nodeplace').asstring:=dm_yxxx_view.q_ysxx.fieldbyname('nodeplace').asstring;
fieldbyname('shifts').asstring:=dm_yxxx_view.q_ysxx.fieldbyname('shifts').asstring;
fieldbyname('pstatu').asstring:=dm_yxxx_view.q_ysxx.fieldbyname('pstatu').asstring;
fieldbyname('pdate').asdatetime:=dm_yxxx_view.q_ysxx.fieldbyname('pdate').asdatetime;
fieldbyname('ptime').asdatetime:=dm_yxxx_view.q_ysxx.fieldbyname('ptime').asdatetime;
fieldbyname('firstp').asdatetime:=dm_yxxx_view.q_ysxx.fieldbyname('firstp').asdatetime;
fieldbyname('lastp').asdatetime:=dm_yxxx_view.q_ysxx.fieldbyname('lastp').asdatetime;
fieldbyname('lseq').asinteger:=dm_yxxx_view.q_ysxx.fieldbyname('lseq').asinteger;
fieldbyname('ntime').asinteger:=dm_yxxx_view.q_ysxx.fieldbyname('ntime').asinteger;
fieldbyname('chkcycl').asinteger:=dm_yxxx_view.q_ysxx.fieldbyname('chkcycl').asinteger;
fieldbyname('dgpcsx').asinteger:=dm_yxxx_view.q_ysxx.fieldbyname('dgpcsx').asinteger;
fieldbyname('dgpcxx').asinteger:=dm_yxxx_view.q_ysxx.fieldbyname('dgpcxx').asinteger;
fieldbyname('times').asinteger:=dm_yxxx_view.q_ysxx.fieldbyname('times').asinteger;
post;
end;
next;
end;//建立临时表
end;// 0.01
end;//生成有效信息 临时
WITH DM_yxxx_view.t_yxxx_view do
begin //从临时表中 删除上班时间不合格两点连续的记录
if not IsEmpty then
begin //0.3
check_times:=fieldbyname('times').asinteger;
l_begintime:=fieldbyname('firstp').asdatetime;
l_endtime:=fieldbyname('lastp').asdatetime;
_dgpcxx:=fieldbyname('dgpcxx').asinteger;
_dgpcsx:=fieldbyname('dgpcsx').asinteger;
//_ntime:=fieldbyname('ntime').asinteger;
_chkcycl:=fieldbyname('chkcycl').asinteger;
L_tX:=dectime(l_endtime,l_begintime);
//while not eof do
//begin
IF (L_TX=0) OR ((L_TX/60)=24) then //上班时间与下半时进相等
begin //0.0
IF L_com<3 THEN //小于三个点
BEGIN
FIRST;
WHILE NOT EOF DO
BEGIN
L_DATE:=FIELDBYNAME('PDATE').AsDATETIME;
L_TIME:=FIELDBYNAME('PTIME').ASDATETIME;
if (decdatetime(l_date,l_time,_pdate,l_begintime)<(0-_dgpcsx))or(decdatetime(l_date,l_time,_pdate,l_begintime)>1440) then
begin
delete;
end;
//else
next;
END;
end
ELSE
begin //大于三个点
first;
WHILE NOT EOF DO
BEGIN
L_DATE:=FIELDBYNAME('PDATE').AsDATETIME;
L_TIME:=FIELDBYNAME('PTIME').ASDATETIME;
if (decdatetime(l_date,l_time,_pdate,l_begintime)<(0-_dgpcsx))or (decdatetime(l_date,l_time,_pdate,l_begintime)>1440) then
begin
delete;
end;
//else
next;
END;
last;
WHILE not bof do
begin
l_lseq:=fieldbyname('lseq').AsInteger;
IF (L_LSEQ<(L_COM/2)) then
BEGIN
DELETE;
IF BOF THEN break
end
else
break;
end;
first;
WHILE not eof do
begin
l_lseq:=fieldbyname('lseq').AsInteger;
if l_LSEQ>(L_COM/2) then
begin
DELETE;
IF EOF then
break;
end
else
break;
end;
end;
end //0.0
ELSE
begin //0.1 上班时间与下班时间不等
IF l_begintime<l_endtime then
begin //上班时间小于下班时间
first;
while not eof do
begin
L_DATE:=FIELDBYNAME('PDATE').AsDATETIME;
L_TIME:=FIELDBYNAME('PTIME').ASDATETIME;
if (decdatetime(l_date,l_time,_pdate,l_begintime)<(0-_dgpcsx))or (decdatetime(l_date,l_time,_pdate,l_endtime)>0) then
begin
delete;
end
else
next;
end;
end
ELSE
begin//上半时间大于下班时间
first;
while not eof do
begin
L_DATE:=FIELDBYNAME('PDATE').AsDATETIME;
L_TIME:=FIELDBYNAME('PTIME').ASDATETIME;
if(decdatetime(l_date,l_time,_pdate,l_begintime)<(0-_dgpcsx))or (decdatetime(l_date,l_time,_Pdate+1,l_endtime)>0) then
begin
delete;
end
else
next;
end;
end;
end; //0.1
// open;
FIRST;
deletesamerec;//删除两点连续现象
//showmessage(inttostr(recordcount));
end;//0.3
end;// 从临时表 删除上班时间不合格两点连续的记录
with dm_yxxx_view.BatchMove1 do
begin //从临时信息表导入到有效信息表中。
execute;
//showmessage(inttostr(DM_yxxx_view.t_yxxx_view.recordcount));
end;
checkrecord(_pdate,l_pencode,_code,_linename,_shifts);
next;
end; //查找人员线路班次
end;//0.02
dm_yxxx_view.q_pen.Next;
end;//按棒号分类
end; //选择一天的巡更情况
procedure thread_yxxx.save_ldjl(pen1,lx,linename1,shifts1,code1,lost_node,_pencode,_pstatu:string;date1,l_cf_ti:tdatetime);
begin
with dm_yxxx_view.t_yxxx_view do
begin
///l_cf_da:=fieldbyname('pdate').asdatetime;
l_cf_ti:=fieldbyname('ptime').asdatetime;
lost_node:=fieldbyname('node').asstring;
_pencode:=fieldbyname('pencode').asstring;
_pstatu:=fieldbyname('pstatu').asstring;
end;
lx:='3';
with dm_yxxx_view.q_yxxx_fl do
begin // 记录乱序信息 2.7
//close;
//open;
append;
edit;
fieldbyname('pencode').asstring:=pen1;
fieldbyname('xxbs').asstring:='3';
fieldbyname('linename').asstring:=linename1;
fieldbyname('shifts').asstring:=shifts1;
fieldbyname('pdate').asdatetime:=date1;
fieldbyname('code').asstring:=code1;
fieldbyname('ptime').asdatetime:=l_cf_ti;
fieldbyname('node').asstring:=lost_node;
fieldbyname('pencode').asstring:=_pencode;
fieldbyname('pstatu').asstring:=_pstatu;
post;
end; // 记录漏点信息2.7
end;
procedure thread_yxxx.checkrecord(date1:tdatetime;pen1,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,L_fi_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;//bmk_ld,bmk_first:tbookmark;//乱序信息
{判断乱序方法:首先判断是否有起始点,如果存在(新的一次巡更开始),检查后一点次序号
是否比前一点次序号小,如果是表示乱序,否则不乱序}
lxbs:boolean;
WZBS: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; //时间异常
list_ld:tstringlist; //漏列表
ld_first:integer;
begin
try //创建
list_ld:=tstringlist.Create;
list_ld.Clear;
with dm_yxxx_view.q_choose_point do
begin //选择该线路的点数
close;
sql.Clear ;
sql.Add('select * from point where linename='''+linename1+''' order by lseq ');
//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_ysxx do
begin
close;
sql.Clear ;
sql.Add('select * from yxxx_fl where (xxbs=''1'') and (code='''+code1+''') and (linename='''+linename1+''') and (shifts='''+shifts1+''')') ;
sql.add('and(pdate =:_pdate )');
ParamByName('_pdate').asdatetime:=date1;
open;
end;
if dm_yxxx_view.q_ysxx.RecordCount=0 then
begin
with dm_yxxx_view.q_yxxx_fl do
begin
//close;
//open;
append;
edit;
//fieldbyname('pencode').asstring:=pen1;
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;
exit;
end;
end// 写入漏检记录(该点没有巡逻);
else
begin//检查漏点记录
first;
ldbs:=false;
//if list_ld<>nil then
//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:=check_times;//巡建次数
//n:=(roundtime(l_begintime,l_endtime))div(_chkcycl);
for j:=1 to l_com do
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -