📄 unit_attendmanager.pas
字号:
temp_date:= sg_Normal.cells[0,i];
pre_morning:=sg_Normal.cells[1,i];
aft_morning:=sg_Normal.cells[2,i];
pre_afternoon:=sg_Normal.cells[3,i];
aft_afternoon:=sg_Normal.cells[4,i];
pre_evening:=sg_Normal.cells[5,i];
aft_evening:=sg_Normal.cells[6,i];
if temp_date <> '' then
try
strtodate(temp_date);
except
err_no := err_no + 1 ;
end ;
if pre_morning <> '' then
try
pre_morning := timetostr(strtotime(pre_morning));
sg_Normal.cells[1,i] := pre_morning ;
except
err_no := err_no + 1 ;
end ;
if aft_morning <> '' then
try
aft_morning := timetostr(strtotime(aft_morning));
sg_Normal.cells[2,i] := aft_morning ;
except
err_no := err_no + 1 ;
end ;
if pre_afternoon <> '' then
try
pre_afternoon := timetostr(strtotime(pre_afternoon));
sg_Normal.cells[3,i] := pre_afternoon ;
except
err_no := err_no + 1 ;
end ;
if aft_afternoon <> '' then
try
aft_afternoon := timetostr(strtotime(aft_afternoon));
sg_Normal.cells[4,i] := aft_afternoon ;
except
err_no := err_no + 1 ;
end ;
if pre_evening <> '' then
try
pre_evening := timetostr(strtotime(pre_evening));
sg_Normal.cells[5,i] := pre_evening ;
except
err_no := err_no + 1 ;
end ;
if aft_evening <> '' then
try
aft_evening := timetostr(strtotime(aft_evening));
sg_Normal.cells[6,i] := aft_evening ;
except
err_no := err_no + 1 ;
end ;
with dmod.ADOQuery1 do
begin
close;
temp_SQL :='update normalattend set ';
if pre_morning <>'' then
temp_Str := 'pre_morning='+#39+temp_date+' '+pre_morning+#39;
if temp_str <> '' then
begin
if aft_morning <>'' then
temp_Str := temp_Str +',aft_morning='+#39+temp_date +' ' +aft_morning+#39;
end else
begin
if aft_morning <>'' then
temp_Str := 'aft_morning='+#39+temp_date +' ' +aft_morning+#39;
end;
if temp_str <>'' then
begin
if pre_afternoon<>'' then
temp_Str := temp_Str +',pre_afternoon='+#39+temp_date+' ' +pre_afternoon+#39;
end else
begin
if pre_afternoon<>'' then
temp_Str := 'pre_afternoon='+#39+temp_date+' ' +pre_afternoon+#39;
end;
if temp_str <>'' then
begin
if aft_afternoon<>'' then
temp_Str := temp_Str +',aft_afternoon='+#39+temp_date+' ' +aft_afternoon+#39;
end else
begin
if aft_afternoon<>'' then
temp_Str := 'aft_afternoon='+#39+temp_date+' ' +aft_afternoon+#39;
end;
if temp_str <>'' then
begin
if pre_evening <>'' then
temp_Str := temp_Str +',pre_evening='+#39+temp_date +' ' +pre_evening+#39;
end else
begin
if pre_evening <>'' then
temp_Str := 'pre_evening='+#39+temp_date +' ' +pre_evening+#39;
end;
if temp_str <>'' then
begin
if aft_evening <>'' then
temp_Str := temp_Str +',aft_evening='+#39+temp_date +' ' +aft_evening+#39;
end else
begin
if aft_evening <>'' then
temp_Str := 'aft_evening='+#39+temp_date +' ' +aft_evening+#39 ;
end;
if (temp_str <> '') and (err_no = 0) then
begin
temp_SQL := temp_SQL + temp_str + ' where emp_no='+#39+trim(edt_Empno.text)+#39+' and att_date='+#39+temp_date+#39;
SQL.Text := temp_SQL;
ExecSQL;
end ;
end;
end;
finally
if err_no = 0 then
begin
try
dmod.ADOConn.CommitTrans ;
MessageBox(handle,'数据保存成功!','提示',mb_ok+mb_iconinformation);
sg_Normal.Options :=[goFixedVertLine,goFixedHorzLine,goVertLine,goHorzLine,goRangeSelect,goColSizing,goRowSelect];
sbtn_save.Enabled :=false;
sbtn_edit.Enabled :=true;
sbtn_delete.Enabled :=true;
except
dmod.ADOConn.RollbackTrans ;
MessageBox(handle,'数据保存失败,请重试!','提示',mb_ok+mb_iconinformation);
end;
end
else
begin
dmod.ADOConn.RollbackTrans ;
MessageBox(handle,'数据保存失败,请重试!','提示',mb_ok+mb_iconinformation);
end ;
end;//开始进行特殊考勤的保存
end else begin
try
dmod.ADOConn.BeginTrans ;
with dmod.ADOQuery1 do
begin
close;
SQL.Text :='delete from specialattend where emp_no='+#39+trim(edt_empno.Text)+#39+
' and att_date between'+#39+DateToStr(dtp_datestart.Date)+#39+
' and '+#39+DateToStr(dtp_dateend.Date)+#39;
ExecSQL;
for i:=1 to sg_Special.Rowcount-2 do
begin
Close;
SQL.Text :='insert into SpecialAttend(emp_no,emp_name,att_date,time_start,time_end,reason_id) values('+
':empno,:empname,:attdate,:timestart,:timeend,:reasonid)';
Parameters.ParamValues['empno']:=trim(edt_Empno.Text);
Parameters.ParamValues['empname']:=trim(edt_Empname.Text);
Parameters.ParamValues['attdate']:= StrToDate(sg_Special.cells[0,i]);
Parameters.ParamValues['timestart'] :=StrToDateTime(sg_Special.cells[0,i]+' '+sg_Special.cells[3,i]) ;
Parameters.ParamValues['timeend'] :=StrToDateTime(sg_Special.cells[0,i]+' '+sg_Special.cells[4,i]);
Parameters.ParamValues['reasonid']:=sg_Special.cells[1,i];
ExecSQL;
end;
end;
finally
try
dmod.ADOConn.CommitTrans ;
MessageBox(handle,'数据保存成功!','提示',mb_ok+mb_iconinformation);
sg_Normal.Options :=[goFixedVertLine,goFixedHorzLine,goVertLine,goHorzLine,goRangeSelect,goColSizing,goRowSelect];
sbtn_save.Enabled :=false;
sbtn_edit.Enabled :=true;
sbtn_delete.Enabled :=true;
except
dmod.ADOConn.RollbackTrans ;
MessageBox(handle,'数据保存失败,请重试!','提示',mb_ok+mb_iconinformation);
end;
end;
end;
end;
procedure Tfrm_attendmanager.sbtn_deleteClick(Sender: TObject);
begin
if pagecontrol1.ActivePage = sht_Normal then
begin
if MessageBox(handle,'你确定删除该员工正常考勤记录吗?','询问',mb_yesno+mb_iconquestion)=IDYES then
begin
if sg_Normal.Cells[0,sg_Normal.Row]='' then exit;
with dmod.ADOQuery1 do
begin
close;
SQL.Text :='delete from normalattend where emp_no='+#39+trim(edt_Empno.Text)+#39+
' and att_date='+#39+sg_Normal.Cells[0,sg_Normal.Row]+#39;
ExecSQL;
end;
StringGridDelete(sg_Normal,sg_Normal.Row);
if sg_Normal.Row = sg_Normal.RowCount - 1 then
begin
if sg_Normal.RowCount > 2 then
sg_Normal.Row := sg_Normal.Row - 1
else
sbtn_back.Enabled := false;
end;
if sg_Normal.Row = 1 then sbtn_front.Enabled := false;
if sg_Normal.Row = sg_Normal.RowCount - 2 then sbtn_back.Enabled := false;
end;
end else begin
if MessageBox(handle,'你确定删除该员工特殊考勤记录吗?','询问',mb_yesno+mb_iconquestion)=IDYES then
begin
if sg_Special.Cells[0,sg_Special.Row]='' then exit;
with dmod.ADOQuery1 do
begin
close;
SQL.Text :='delete from specialattend where emp_no='+#39+trim(edt_Empno.Text)+#39+
' and att_date='+#39+sg_Special.Cells[0,sg_Special.Row]+#39+
' and reason_id='+#39+sg_Special.Cells[1,sg_Special.row]+#39;
ExecSQL;
end;
StringGridDelete(sg_Special,sg_Special.Row);
if sg_Special.Row = sg_Special.RowCount - 1 then
begin
if sg_Special.RowCount > 2 then
sg_Special.Row := sg_Special.Row - 1
else
sbtn_back.Enabled := false;
end;
if sg_Special.Row = 1 then sbtn_front.Enabled := false;
if sg_Special.Row = sg_Special.RowCount - 2 then sbtn_back.Enabled := false;
end;
end;
end;
procedure Tfrm_attendmanager.edt_EmpnoExit(Sender: TObject);
begin
with dmod.ADOQuery1 do
begin
Close;
SQL.Text :='select emp_name from employee where emp_no='+#39+trim(edt_Empno.Text)+#39;
Open;
if not eof then
edt_empname.Text := FieldByName('emp_name').AsString
else begin
MessageBox(self.handle,'该员工编号不存在,请重试!','提示',mb_ok+mb_iconinformation);
edt_empno.SetFocus ;
end;
end;
end;
procedure Tfrm_attendmanager.sbtn_backClick(Sender: TObject);
begin
if pagecontrol1.ActivePage = sht_Normal then
begin
if sg_Normal.Row > sg_Normal.RowCount-2 then
begin
sbtn_back.Enabled := false;
exit;
end;
sbtn_front.Enabled := true;
sg_Normal.Row := sg_Normal.Row+1;
end else begin
if sg_Special.Row > sg_Special.RowCount-2 then
begin
sbtn_back.Enabled := false;
exit;
end;
sbtn_front.Enabled := true;
sg_Special.Row := sg_Special.Row+1;
end;
end;
procedure Tfrm_attendmanager.sbtn_frontClick(Sender: TObject);
begin
if pagecontrol1.ActivePage = sht_Normal then
begin
if sg_Normal.Row=1 then
begin
sbtn_front.Enabled := false;
exit;
end;
sbtn_back.Enabled := true;
sg_Normal.Row := sg_Normal.Row-1;
end else begin
if sg_Special.Row=1 then
begin
sbtn_front.Enabled := false;
exit;
end;
sbtn_back.Enabled := true;
sg_Special.Row := sg_Special.Row-1;
end;
end;
procedure Tfrm_attendmanager.N1Click(Sender: TObject);
begin
DoSelectReason;
end;
procedure Tfrm_attendmanager.sg_SpecialMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if sg_Special.cells[0,sg_Special.Row]='' then exit;
if button=mbright then
popupmenu1.Popup(X,Y+150);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -