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 + -
显示快捷键?