publicfunction.pas
来自「pasa人力资源考勤管理系统」· PAS 代码 · 共 1,538 行 · 第 1/4 页
PAS
1,538 行
Function FindField(Data:TDataset;Str:String):TField;
var i,iCount:integer;
Begin
Result:=Nil;
iCount :=Data.FieldCount;
For i:=0 To iCount - 1 Do
IF Data.Fields[i].DisplayLabel=Str Then
Begin
Result:=Data.Fields[i];
Break;
End;
End;
//在字符串的日期型上加整数
function DateDec(rq:String;days:integer):String;
var
hanlen2:Tdate;
begin
try
hanlen2:=StrToDate(rq)+days;
Result:=FormatDateTime('yyyy'+dateseparator+'mm'+dateseparator+'dd',hanlen2);
except
Result:='0000'+dateseparator+'00'+dateseparator+'00';
end;
end;
//date1应上date2实上
function date1Decdate2Minute(date1,date2:string):Integer;
var
d1,d2:TDatetime;
hour,min,sec,msec:word;
hour1,min1,sec1,msec1:word;
hours,mins:integer;
begin
Result:=0;
try
d1:=strtodatetime(date1);
d2:=strtodatetime(date2);
decodetime(d1,hour,min,sec,msec);
decodetime(d2,hour1,min1,sec1,msec1);
hours:=hour1-hour;
mins:=min1-min;
result:=mins+hours*60;
except
Application.MessageBox('您输入的时间格式有误!','时间错误',MB_OK+MB_ICONWARNING);
end;
end;
function date1Decdate2Hour(date1,date2:string;sj:integer):Real;
var
hanInt:integer;
hanReal:Real;
begin
hanInt:=date1Decdate2Minute(date1,date2)-sj;
hanReal:=hanInt/60;
hanInt:=Trunc(hanReal*2);
Result:=hanInt/2;
end;
//让资料存入历史档案中,包括(修改和删除的)
procedure writeRecorder(aqy:TADOdataset;bn:boolean);
var i,j:integer;
sr,tname:string;
begin
sr:='';
for i:=0 to aqy.Fields.Count-1 do
sr:=sr+aqy.Fields[i].AsString+'\';
sr:=stringreplace(sr,'''','"',[rfReplaceAll]);
with datamod.ADOQuery2 do
begin
sql.Clear;
sql.Add('select max(num) from history'); //选择当前记录编号最大的
open;
if eof then
i:=1
else
i:=fields[0].AsInteger+1;
close;
tname:=trim(copy(aqy.CommandText,pos('from',aqy.CommandText)+4,20)); //取得表名
if pos(' ',tname)<>0 then
tname:=copy(tname,1,pos(' ',tname)-1);
if bn then j:=1 else j:=0; //判断该记录是修改的还是删除的
sql.Clear;
sql.Add('insert history values('''+inttostr(i)+''','''+tname+''','''','''+pubworkname+''','''+datetimetostr(now)+''','''+sr+''','''+inttostr(j)+''')' );
execsql;
close;
end;
end;
//将字符串型月份加上Inteval月 inteval可为正也可为负
function MonthDec(rq:string;inteval:integer):String;
var month,Year:string;
Qry:TADOQuery;
begin
with datamod do
begin
try
Qry:=TADOQuery.create(application);
Qry.connection:=Query1.connection;
Qry.Close;
if length(rq)=7 then
Qry.sql.text:='Select year(dateadd(mm,'+inttostr(inteval)+','''+rq+dateseparator+'01'+''')) as yea,month(dateadd(mm,'+inttostr(inteval)+','''+rq+dateseparator+'01'+''')) as monthy '
else
Qry.sql.text:='Select year(dateadd(mm,'+inttostr(inteval)+','''+rq+''')) as yea,month(dateadd(mm,'+inttostr(inteval)+','''+rq+''')) as monthy ';
Qry.open;
month:=inttostr(Qry.fieldbyname('monthy').value);
year:=inttostr(Qry.fieldbyname('yea').value);
if length(month)<2 then
month:='0'+month;
Result:=year+dateseparator+month;
except
Result:='0000'+dateseparator+'00';
end;
end;
end;
function booleantostr(b:boolean):string; //布尔型转化成字符型
begin
if b then
result:='1'
else
result:='0';
end;
function strtoboolean(s:string):boolean; //字符型转化成布尔型
begin
try
result:=false;
try
if (strtoint(s)>=1) then
result:=true
else
if (s='0') or (lowercase(s)='false') then
result:=false
except
end;
try
if lowercase(s)='true' then
result:=true
else
if lowercase(s)='false' then
result:=false;
except
end;
except
application.messagebox('参数错误.','Error',mb_ok+mb_iconerror);
end;
end;
function calcfixot(kind:string;workno:string):Real; //计算固定加班费(每小时加班费)
var
m:string;
x:string;
i:integer;
Qry1:TADOQuery;
fix,days:real; //Fix用来存放所有加项总和,days用来存放本月总工作天数
begin
fix:=0;
result:=0;
with datamod do
begin
Qry1:=TADOQuery.Create(Application);
qry1.connection:=Query1.connection;
Qry1.Sql.Text:='Select * from sal16010 where otmoneyno='''+kind+''' ';
Qry1.Open;
if not Qry1.eof then
begin
if (not Qry1.fieldbyname('moneyperhour').isnull) and (Qry1.fieldbyname('moneyperhour').value<>0) then
Result:=Qry1.Fieldbyname('moneyperhour').value
else begin
m:=Qry1.Fieldbyname('memo2').asstring;
m:=m+'+';
while length(m)>0 do
begin
i:=pos('+',m); //找出FieldName
x:=copy(m,1,i-1);
delete(m,1,i);
fix:=fix+adoQuery1.fieldbyname(x).asfloat;
end;
days:=GetDays(formatdatetime('mm',date),formatdatetime('yyyy',date));
AdoQuery2.SQL.Text:='Select count(*) as con from pub06010 where (left(comdate,4)+substring(comdate,6,2)='''+formatdatetime('yyyymm',date)+''') '+
' and comcode='''+adoQuery1.fieldbyname('dothing').asstring+''' ';
AdoQuery2.Open;
days:=days-Adoquery2.fieldbyname('con').value;
if days=0 then
result:=0
else
Result:=fix/(days*8);
AdoQuery2.Close;
end;
end;
end;
end;
function calcaddmoney(workno:string):Real; //计算员工的津贴(迟到扣津贴、请假扣津贴)
var
Jin:TIniFile;
Path,ch:String;
Qry1:TADOQuery;
begin
with datamod do
begin
Qry1:=TADOQuery.create(application);
Qry1.connection:=datamod.database1;
Result:=0;
Path:=ExtractfilePath(Application.exename)+'Data\JingTie.ini';
Jin:=Tinifile.Create(path);
Qry1.close;
Qry1.sql.text:='Select * from per24010 where workno='''+workno+''' and leave=0 ';
Qry1.open;
if not Qry1.eof then
begin
ch:=Jin.ReadString('JingTie','职务津贴','0');
if strtoboolean(ch) then
Result:=Qry1.fieldbyname('profmoney').asfloat;
ch:=Jin.ReadString('JingTie','技术津贴','0');
if strtoboolean(ch) then
Result:=Result+Qry1.fieldbyname('techmoney').asfloat;
ch:=Jin.ReadString('JingTie','部门津贴','0');
if strtoboolean(ch) then
Result:=Result+Qry1.fieldbyname('deptmoney').asfloat;
ch:=Jin.ReadString('JingTie','其它津贴1','0');
if strtoboolean(ch) then
Result:=Result+Qry1.fieldbyname('money1').asfloat;
ch:=Jin.ReadString('JingTie','其它津贴2','0');
if strtoboolean(ch) then
Result:=Result+Qry1.fieldbyname('money2').asfloat;
end;
Jin.Free;
end;
end;
//
function calcjiangchengmoney(workno:string):Real; //计算员工
var
Jiangcheng:TIniFile;
Path,ch:String;
Qry1:TADOQuery;
begin
with datamod do
begin
Qry1:=TADOQuery.create(application);
Qry1.connection:=datamod.database1;
Result:=0;
Path:=ExtractfilePath(Application.exename)+'Data\Jiangcheng.ini';
Jiangcheng:=Tinifile.Create(path);
Qry1.close;
Qry1.sql.text:='Select * from per24010 where workno='''+workno+''' and leave=0 ';
Qry1.open;
if not Qry1.eof then
begin
ch:=Jiangcheng.ReadString('Jiangcheng','职务津贴','0');
if strtoboolean(ch) then
Result:=Qry1.fieldbyname('profmoney').asfloat;
ch:=Jiangcheng.ReadString('Jiangcheng','技术津贴','0');
if strtoboolean(ch) then
Result:=Result+Qry1.fieldbyname('techmoney').asfloat;
ch:=Jiangcheng.ReadString('Jiangcheng','生活补助','0');
if strtoboolean(ch) then
Result:=Result+Qry1.fieldbyname('deptmoney').asfloat;
ch:=Jiangcheng.ReadString('Jiangcheng','底薪','0');
if strtoboolean(ch) then
Result:=Result+Qry1.fieldbyname('basepay').asfloat;
ch:=Jiangcheng.ReadString('Jiangcheng','其加1','0');
if strtoboolean(ch) then
Result:=Result+Qry1.fieldbyname('add1').asfloat;
ch:=Jiangcheng.ReadString('Jiangcheng','其加2','0');
if strtoboolean(ch) then
Result:=Result+Qry1.fieldbyname('add2').asfloat;
ch:=Jiangcheng.ReadString('Jiangcheng','全勤奖','0');
if strtoboolean(ch) then
Result:=Result+Qry1.fieldbyname('present').asfloat;
end;
Jiangcheng.Free;
end;
end;
//
//调用查找的共用窗体
procedure findrecorder(ast:Tadodataset;aname,tname:string);
var fname:string;
i:integer;
che:Tcheckbox;
begin
fname:=',';
if not assigned(formcanfind) then
formcanfind:=tformcanfind.create(application);
formcanfind.show;
formcanfind.createfield(ast.Fields.Count);
for i:=0 to ast.Fields.Count-1 do
begin
che:=Tcheckbox(formcanfind.findcomponent('check'+inttostr(i)));
with che do
begin
che.caption:=ast.Fields[i].DisplayName;
if i<6 then
begin
che.Checked :=true;
if i=0 then
fname:=ast.Fields[0].fieldName
else
fname:=fname+','+ast.Fields[i].fieldName;
end;
end;
end;
with formcanfind.adoQuery1 do
begin
close;
sql.clear;
sql.add('select '+fname+' from '+tname+' ');
open;
end;
formcanfind.showcolumnname(ast.Fields.Count);
formcanfind.showcomboxitem(ast.fields.count);
formcanfind.adt :=ast;
formcanfind.gettablename(aname,tname);
end;
//判断输入的是否是字符型数据
function checkstr(s:string):boolean;
var i:integer;
begin
for i:=1 to length(s) do
if not ((copy(s,i,1)>='0') and (copy(s,i,1)<='9')) then
begin
result:=false;
break;
end;
result:=true;
end;
//在注册表中取出调用此过程的窗体中的dbgrid栏位宽度
procedure getdbgridwidth(var dg:Tdbgrid;formname:string);
var i:integer;
Reg: TRegistry;
begin
Reg:=TRegistry.Create;
Reg.RootKey:=HKEY_LOCAL_MACHINE;
if Reg.OpenKey('\Software\Microsoft\Windows\CurrentVersion\RunOnce',true) then
for i:=0 to dg.columns.Count-1 do
if reg.ValueExists(formname+dg.columns[i].fieldName) then //在注册表中找该键值是否存在,不存在不执行
dg.Columns[i].Width:=Reg.Readinteger(formname+dg.columns[i].fieldName); //请取注册表中键值对应的栏位宽
Reg.Free;
end;
//在注册表中存入调用此过程的窗体中的dbgrid栏位宽度
procedure setdbgridwidth(var dg:Tdbgrid;formname:string);
var i:integer;
reg:TRegistry;
begin
reg:=Tregistry.create;
try
Reg.RootKey := HKEY_LOCAL_MACHINE;
if Reg.OpenKey('\Software\Microsoft\Windows\CurrentVersion\RunOnce', True) then
for i:=0 to dg.columns.Count-1 do
Reg.writeinteger(formname+dg.columns[i].fieldName,dg.Columns[i].Width);
finally
Reg.CloseKey;
Reg.Free;
end;
end;
procedure returnzhi(fm:Tform;order:integer);
var h,w:integer;
begin
h:=435;
w:=448;
if assigned(fm) then
case order of
1:begin
if not assigned(formjiben1) then
begin
formjiben1:=Tformjiben.create(application);
with formjiben1 do
begin
height:=h;
width:=w;
Caption:='职称';
adotable1.close;
adotable1.TableName :='per01010';
adotable1.open;
ADOTable1.Fields[0].DisplayLabel :='职称代码';
ADOTable1.Fields[1].DisplayLabel :='职称名称';
combobox1.Text:='01--职称代码';
combobox1.Style :=csdropdownlist;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?