frm_k_jrdjpas.pas
来自「是一个用delphi设计的考勤系统」· PAS 代码 · 共 543 行 · 第 1/2 页
PAS
543 行
unit Frm_K_JrdjPas;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ModalForm, Menus, StdCtrls, ExtCtrls, DB, DBTables, ComCtrls,
Buttons, YLabelButton, ChangeImage, ADODB, ImgList, UErrDisplay,
ModalForm1;
type
TFrm_K_Jrdj = class(TMyModalForm1)
pnlxxsd: TPanel;
Label1: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
Shape1: TShape;
Shape2: TShape;
labny: TLabel;
labn: TLabel;
laby: TLabel;
Label4: TLabel;
ProgressBar1: TProgressBar;
BtnRefresh: TChangeImg;
LBtnRefresh: TLabelB;
BtnOk: TChangeImg;
LBtnOk: TLabelB;
pkq_M_IniDay: TADOStoredProc;
TV: TTreeView;
BtnFirst: TChangeImg;
BtnPrev: TChangeImg;
BtnLast: TChangeImg;
BtnNext: TChangeImg;
YhLv: TListView;
cmbrq: TComboBox;
Label3: TLabel;
BitBtn2: TBitBtn;
BitBtn1: TBitBtn;
procedure FormCreate(Sender: TObject);
procedure BtnOkClick(Sender: TObject);
procedure BtnRefreshClick(Sender: TObject);
procedure cmbrqClick(Sender: TObject);
procedure TVClick(Sender: TObject);
procedure BtnNextClick(Sender: TObject);
procedure BtnLastClick(Sender: TObject);
procedure BtnPrevClick(Sender: TObject);
procedure BtnFirstClick(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Frm_K_Jrdj: TFrm_K_Jrdj;
oRq:array of TCheckBox;
old_values:array of integer;
nodevalue: string; //树节点的数值
implementation
uses DM_DataModal, UGlobal;
{$R *.dfm}
procedure TFrm_K_Jrdj.FormCreate(Sender: TObject);
var
i:integer;
sKsrq:string;
ts:integer;
query:TADOQuery;
begin
gtKqgl.LoadOrganTree(Winddata.AdoConn, TV, 4); //初始化用户信息
borderstyle := bsdialog;
query:=TADOQuery.create(self);
try
with query do
begin
Connection:=WindData.AdoConn;
sql.clear;
sql.add('select distinct n,y from kq_bcsd');
open;
cmbrq.Items.Clear;
while not eof do
begin
cmbrq.Items.Add(fieldbyname('n').asstring+'-'+fieldbyname('y').asstring);
next;
end;
end;
finally
query.free;
end;
////////////////初始化复选框///////////////
setlength(orq,32);
setlength(old_values,32);
for i:=1 to 31 do
begin
orq[i]:=Tcheckbox.Create(pnlxxsd);
orq[i].parent:=pnlxxsd;
orq[i].Caption:=inttostr(i);
orq[i].Width:=60;
orq[i].Checked:=true;
old_values[i]:=1;
end;
//////////////提取已有的无考勤日期////////////
query := TADOQuery.Create(screen.activeform);
try
query.Connection := WindData.AdoConn;
with query do
begin
sql.Clear;
sql.add('select distinct y,n from kq_bcsd where y+n in(select max(y+n) from kq_bcsd)');
open;
if not eof then
begin
labn.caption:=trim(fieldbyname('n').asstring);
laby.caption:=trim(fieldbyname('y').asstring);
end
else
begin
labn.caption:=copy(datetostr(date),1,4);
laby.caption:=copy(datetostr(date),6,2);
end;
end;
with query do
begin
sql.Clear;
sql.Add('select * from kq_bcsd where n='''+trim(labn.caption)+''' and y='''+trim(laby.caption)+'''');
open;
if not eof then
begin
for i:=1 to 31 do
if Fields[i+4].AsString='X' then
begin
orq[i].Checked:=true;
old_values[i]:=1;
end
else
begin
orq[i].Checked:=False;
old_values[i]:=0;
end;
end
else
for i:=1 to 31 do
begin
orq[i].Checked:=False;
old_values[i]:=0;
end;
end;
sksrq:=labn.Caption+'-'+laby.Caption+'-'+'01';
ts:=(dayofweek(strtodate(sksrq))) -2;
for i:=1 to 31 do
begin
orq[i].Caption:=inttostr(i);
orq[i].top:=((i+ts) div 7)*32+80;
orq[i].Left:=((i+ts) mod 7)*60+21;
orq[i].Width:=60;
end;
pnlxxsd.BringToFront;
pnlxxsd.Visible:=True;
finally
query.free;
end;
end;
procedure TFrm_K_Jrdj.BtnOkClick(Sender: TObject);
var
misaturday, misunday, mistartsj, miendsj,i: integer;
query:Tquery;
begin
if application.MessageBox('设置后的时间将不需要考勤,是否继续?','系统提示',mb_okcancel+mb_iconwarning)=id_cancel then exit;
progressbar1.Max:=31;
progressbar1.Position:=0;
with pkq_M_IniDay do
begin
for i:=1 to 31 do
begin
progressbar1.Position:=progressbar1.Position+1;
if orq[i].Checked then
begin
if i<10 then
Parameters.ParamByName('@sDay').Value:='0'+inttostr(i)
else
Parameters.ParamByName('@sDay').Value:=inttostr(i);
Parameters.ParamByName('@svalue').Value:='X';
old_values[i]:=1;
Parameters.ParamByName('@n').Value:=labn.caption;
Parameters.ParamByName('@y').Value:=laby.caption;
execproc;
end
else
begin
if old_values[i]=1 then
begin
if i<10 then
Parameters.ParamByName('@sDay').Value:='0'+inttostr(i)
else
Parameters.ParamByName('@sDay').Value:=inttostr(i);
Parameters.ParamByName('@svalue').Value:='O';
old_values[i]:=0;
Parameters.ParamByName('@n').Value:=labn.caption;
Parameters.ParamByName('@y').Value:=laby.caption;
execproc;
end;
end;
end;
application.MessageBox('节假日时间设置完毕!','系统提示',mb_ok);
progressbar1.Position:=0;
end;
end;
procedure TFrm_K_Jrdj.BtnRefreshClick(Sender: TObject);
var
i:integer;
sKsrq:string;
ts:integer;
query:TADOQuery;
begin
if cmbrq.Text='' then
begin
application.MessageBox('请选择日期后重试!','系统提示',mb_ok+mb_iconwarning);
exit;
end;
//////////////提取已有的无考勤日期////////////
query := TADOQuery.Create(screen.activeform);
try
query.Connection := WindData.AdoConn;
with query do
begin
labn.caption:=copy(cmbrq.text,1,4);
laby.caption:=copy(cmbrq.text,6,2);
sql.Clear;
sql.Add('select * from kq_bcsd where n='''+trim(labn.caption)+''' and y='''+trim(laby.caption)+'''');
open;
if not eof then
begin
for i:=1 to 31 do
if Fields[i+4].AsString='X' then
begin
orq[i].Checked:=true;
old_values[i]:=1;
end
else
begin
orq[i].Checked:=False;
old_values[i]:=0;
end;
end
else
begin
application.MessageBox('无此月分份的班次设置','系统提示',mb_ok+mb_iconwarning);
for i:=1 to 31 do
begin
orq[i].Checked:=False;
old_values[i]:=0;
end;
BtnOk.Enabled:=false;
LBtnOk.Enabled:=false;
end;
end;
sksrq:=labn.Caption+'-'+laby.Caption+'-'+'01';
ts:=(dayofweek(strtodate(sksrq))) -2;
for i:=1 to 31 do
begin
orq[i].Caption:=inttostr(i);
orq[i].top:=((i+ts) div 7)*32+80;
orq[i].Left:=((i+ts) mod 7)*60+21;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?