📄 unit_attendmanager.pas
字号:
end;
procedure Tfrm_attendmanager.sbtn_editClick(Sender: TObject);
begin
if pagecontrol1.ActivePage = sht_Normal then
begin
if sg_Normal.RowCount =2 then exit;
sg_Normal.Options :=[goFixedVertLine,goFixedHorzLine,goVertLine,goHorzLine,goRangeSelect,goColSizing,goEditing];
sbtn_edit.Enabled :=false;
sbtn_save.Enabled :=true;
sbtn_delete.Enabled := false;
end else
begin
if sg_Special.rowcount =2 then exit;
sg_Special.Options :=[goFixedVertLine,goFixedHorzLine,goVertLine,goHorzLine,goRangeSelect,goColSizing,goEditing];
sbtn_edit.Enabled :=false;
sbtn_save.Enabled :=true;
sbtn_delete.Enabled := false;
end;
end;
procedure Tfrm_attendmanager.sbtn_saveClick(Sender: TObject);
var
i:integer;
temp_date,temp_SQL,pre_morning,pre_afternoon,pre_evening,aft_morning,aft_afternoon,aft_evening:string;
begin
if pagecontrol1.ActivePage = sht_Normal then
begin
dmod.Database.StartTransaction ;
try
for i:=1 to sg_Normal.RowCount -2 do
begin
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];
with dmod.qrydata do
begin
close;
temp_SQL :='update normalattend set ';
if pre_morning <>'' then temp_SQL := temp_SQL +'pre_morning='+#39+temp_date+' '+pre_morning+#39;
if pre_morning <>'' then
begin
if aft_morning <>'' then
temp_SQL := temp_SQL +',aft_morning='+#39+temp_date +' ' +aft_morning+#39;
end else
begin
if aft_morning <>'' then
temp_SQL := temp_SQL +'aft_morning='+#39+temp_date +' ' +aft_morning+#39;
end;
if aft_morning <>'' then
begin
if pre_afternoon<>'' then
temp_SQL := temp_SQL +',pre_afternoon='+#39+temp_date+' ' +pre_afternoon+#39;
end else
begin
if pre_afternoon<>'' then
temp_SQL := temp_SQL +'pre_afternoon='+#39+temp_date+' ' +pre_afternoon+#39;
end;
if pre_afternoon<>'' then
begin
if aft_afternoon<>'' then
temp_SQL := temp_SQL +',aft_afternoon='+#39+temp_date+' ' +aft_afternoon+#39;
end else
begin
if aft_afternoon<>'' then
temp_SQL := temp_SQL +'aft_afternoon='+#39+temp_date+' ' +aft_afternoon+#39;
end;
if aft_afternoon<>'' then
begin
if pre_evening <>'' then
temp_SQL := temp_SQL +',pre_evening='+#39+temp_date +' ' +pre_evening+#39;
end else
begin
if pre_evening <>'' then
temp_SQL := temp_SQL +'pre_evening='+#39+temp_date +' ' +pre_evening+#39;
end;
if pre_evening <>'' then
begin
if aft_evening <>'' then
temp_SQL := temp_SQL +',aft_evening='+#39+temp_date +' ' +aft_evening+#39;
end else
begin
if aft_evening <>'' then
temp_SQL := temp_SQL +'aft_evening='+#39+temp_date +' ' +aft_evening+#39 ;
end;
temp_SQL := temp_SQL +' where emp_no='+#39+trim(edt_Empno.text)+#39+' and att_date='+#39+temp_date+#39;
SQL.Text := temp_SQL;
ExecSQL;
end;
end;
finally
try
dmod.Database.Commit ;
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.Database.Rollback ;
MessageBox(handle,'数据保存失败,请重试!','提示',mb_ok+mb_iconinformation);
end;
end;//开始进行特殊考勤的保存
end else begin
try
dmod.Database.StartTransaction ;
with dmod.qrydata 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)';
ParamByName('empno').Asstring:=trim(edt_Empno.Text);
ParamByName('empname').Asstring:=trim(edt_Empname.Text);
ParamByName('attdate').AsDate:= StrToDate(sg_Special.cells[0,i]);
ParamByName('timestart').AsDateTime :=StrToDateTime(sg_Special.cells[0,i]+' '+sg_Special.cells[3,i]) ;
ParamByName('timeend').asDateTime :=StrToDateTime(sg_Special.cells[0,i]+' '+sg_Special.cells[4,i]);
ParamByName('reasonid').Asstring:=sg_Special.cells[1,i];
ExecSQL;
end;
end;
finally
try
dmod.Database.Commit ;
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.Database.Rollback ;
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.qrydata 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.qrydata 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.qrydata 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 + -