📄 employee_backup.pas
字号:
unit Employee_Backup;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, Grids, DBGrids, DB, ADODB, StdCtrls, Buttons, ValEdit,
ComCtrls, Spin, DateUtils, Mask, DBCtrls, RpCon, RpConDS, RpBase,
RpSystem, RpDefine, RpRave;
type
TForm_employee_Backup = class(TForm)
ADOQtmp: TADOQuery;
DS_emp: TDataSource;
ADOQ_ADDEmp_LZ: TADOQuery;
ADOQ_search: TADOQuery;
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
DBGrid: TDBGrid;
Panel6: TPanel;
Label5: TLabel;
ComboBox_ID: TComboBox;
DS_Emp_backup: TDataSource;
BitBtn_locate: TBitBtn;
BitBtn3: TBitBtn;
PrtBtn: TBitBtn;
edtname: TEdit;
Label11: TLabel;
GroupBox5: TGroupBox;
Label18: TLabel;
Label19: TLabel;
sdate: TDateTimePicker;
edate: TDateTimePicker;
ProgressBar1: TProgressBar;
Panel1: TPanel;
Panel2: TPanel;
GroupBox1: TGroupBox;
emp_num: TLabel;
ListEditor1: TValueListEditor;
SaveBtn: TBitBtn;
ExtBtn: TBitBtn;
Panel5: TPanel;
Panel3: TPanel;
AllBtn: TSpeedButton;
SigBtn: TSpeedButton;
DelSigBtn: TSpeedButton;
DelAllBtn: TSpeedButton;
GroupBox2: TGroupBox;
Panel4: TPanel;
RadioGroup1: TRadioGroup;
Edit1: TEdit;
BitBtn1: TBitBtn;
SearchBtn: TBitBtn;
ComboBox_dep: TComboBox;
ComboBox_duty: TComboBox;
DBGrid2: TDBGrid;
ADOQ_employee: TADOQuery;
ADOQ_Emp_Backup: TADOQuery;
Label1: TLabel;
Edt_ZZempid: TEdit;
Label_Display: TLabel;
Panel7: TPanel;
RvProject1: TRvProject;
RvSystem1: TRvSystem;
Rv_Emp_backup: TRvDataSetConnection;
ADOQ_Emp_Backupid: TIntegerField;
ADOQ_Emp_BackupLZ_empid: TIntegerField;
ADOQ_Emp_BackupZZ_empid: TIntegerField;
ADOQ_Emp_Backupempname: TStringField;
ADOQ_Emp_Backupsex: TStringField;
ADOQ_Emp_Backupdepname: TStringField;
ADOQ_Emp_Backupdutyname: TStringField;
ADOQ_Emp_BackupLZ_date: TDateTimeField;
ADOQ_Emp_Backupopername: TStringField;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure AllBtnClick(Sender: TObject);
procedure SigBtnClick(Sender: TObject);
procedure DelSigBtnClick(Sender: TObject);
procedure DelAllBtnClick(Sender: TObject);
procedure SaveBtnClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure SearchBtnClick(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure RadioGroup1Click(Sender: TObject);
procedure ListEditor1StringsChange(Sender: TObject);
procedure PageControl1Change(Sender: TObject);
procedure BitBtn_locateClick(Sender: TObject);
procedure PrtBtnClick(Sender: TObject);
private
{ Private declarations }
s_date, e_date: string;
public
{ Public declarations }
end;
var
Form_employee_Backup: TForm_employee_Backup;
implementation
uses sharefun, sharevar,data;
{$R *.dfm}
procedure TForm_employee_Backup.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
action:=cafree;
end;
procedure TForm_employee_Backup.AllBtnClick(Sender: TObject);
var tmpstr, tmpstr2: string;
is_LZ_flag:boolean;
begin
if not ADOQ_employee.Active then exit;
if ADOQ_employee.RecordCount =0 then exit;
with ADOQ_employee do
begin
First;
while not eof do
begin
tmpstr:=trim(ADOQ_employee.FieldValues['empname']);
tmpstr2:=inttostr(ADOQ_employee.FieldValues['empid']);
with ADOQtmp do
begin
//如果存在未验收的工序料时,提出
close;sql.clear;
sql.Add('select empid from outbom_log where qbfl_flag=0 and empid=:v_oldempid ');
parameters.ParamValues['v_oldempid']:=ADOQ_employee.FieldValues['empid'];
try
open;
except
end;
is_LZ_flag:=recordcount<1
end;
if (tmpstr<>ListEditor1.Values[tmpstr2]) and is_LZ_flag then
ListEditor1.InsertRow(tmpstr2,tmpstr,false);
next;
end;
end;
end;
procedure TForm_employee_Backup.SigBtnClick(Sender: TObject);
var tmpstr, tmpstr2: string;
begin
if not ADOQ_employee.Active then exit;
if ADOQ_employee.RecordCount =0 then exit;
tmpstr:=trim(ADOQ_employee.FieldValues['empname']);
tmpstr2:=inttostr(ADOQ_employee.FieldValues['empid']);
if tmpstr=ListEditor1.Values[tmpstr2] then
begin
msgerr(handle,'员工编号:'+tmpstr2+', 姓名:['+tmpstr+'] 已经存在!');
exit;
end;
//如果存在未验收的工序料时,提出
with ADOQtmp do
begin
close;sql.clear;
sql.Add('select empid from outbom_log where qbfl_flag=0 and empid=:v_oldempid ');
parameters.ParamValues['v_oldempid']:=ADOQ_employee.FieldValues['empid'];
try
open;
except
end;
if recordcount>0 then
begin
MsgErr(handle,'该人员有未退工序料,请先退料!');
abort; exit;
end;
end;
ListEditor1.InsertRow(tmpstr2,tmpstr,false);
end;
procedure TForm_employee_Backup.DelSigBtnClick(Sender: TObject);
begin
if ListEditor1.Strings.Count=0 then exit;
if msgqst(handle,'确定删除编号:['+ListEditor1.Cells[0,ListEditor1.Row]+'], 姓名:['+ListEditor1.Cells[1,ListEditor1.Row]+']的数据码?')=idno then exit;
ListEditor1.Strings.Delete(ListEditor1.Row-1) ;
end;
procedure TForm_employee_Backup.DelAllBtnClick(Sender: TObject);
begin
if ListEditor1.Strings.Count=0 then exit;
if msgqst(handle,'确定删除当前选择的所有人员数据吗?')=idno then exit;
ListEditor1.Strings.Clear;
end;
procedure TForm_employee_Backup.SaveBtnClick(Sender: TObject);
var
tmpstr:string;
i, emp_num_s, emp_num_e,
empid_int, //离职前员工编号
tmp_empid:integer; //离职前员工流水号
emp_BLflag:boolean;
tmp_id, maxid:integer;
begin
if ListEditor1.Strings.Count=0 then exit;
emp_num_s:=ListEditor1.Strings.Count;
emp_num_e:=0;
tmpstr:='确认将当前所选择的: ['+inttostr(ListEditor1.Strings.count)+'] 位员工';
tmpstr:=tmpstr+'全部离职吗?'+#13+#13+'(注意:人员离职后,将无法还原人员信息!)';
if msgqst(handle,tmpstr)=idno then exit;
application.ProcessMessages;
//得到当前操作员的ID号
if not get_oper_tmpid(curAdmin.user_id , tmp_id) then
begin
MsgErr(handle,'人员离职失败,请重试--ALL!');
exit;
end;
///////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////
//初始化进程条
ProgressBar1.Max:=ListEditor1.Strings.Count;
ProgressBar1.Position:=0;
Label_Display.Visible:=true;
application.ProcessMessages;
//利用循环人员离职
for i:=1 to ListEditor1.Strings.Count do
begin
//1.找到离职人员的最大编码
GetMaxID(datamod.ADOCon,'employee','empid',maxid);
if maxid<500000 then maxid:=500000;
ProgressBar1.Position:=ProgressBar1.Position+1;
application.ProcessMessages;
//1.1得到待离职人员的信息
with ADOQ_search do
begin
emp_BLflag:=false;
close; sql.Clear;
sql.Add('select a.*,b.depname,c.dutyname from employee a,department b, duty c');
sql.Add('where a.depid=b.depid and a.dutyid=c.dutyid and a.empid=:V_empid');
parameters.ParamValues['V_empid']:=strtoint(ListEditor1.Cells[0,i]);
try
execsql; open;
except
if i>1 then tmpstr:=tmpstr+#13+#13+' 截止到编号为:['+ListEditor1.Cells[0,i-1]+'] 人员离职成功,剩下其它失败1.1!'
else tmpstr:='员工离职失败,请重试--1.1!';
inc(emp_num_e);
msgerr(handle,tmpstr);
if datamod.ADOCon.InTransaction then datamod.ADOCon.RollbackTrans;
break; exit;
end;
if recordcount=0 then
begin
// Msgerr(handle,'没找到编号为:['+ListEditor1.Cells[0,i])+'] 的人员信息!');
if i>1 then tmpstr:=tmpstr+#13+#13+' 截止到编号为:['+ListEditor1.Cells[0,i-1]+'] 人员离职成功,剩下其它失败1.1!'
else tmpstr:='员工离职失败,请重试--1.1!';
msgerr(handle,tmpstr);
inc(emp_num_e);
if datamod.ADOCon.InTransaction then datamod.ADOCon.RollbackTrans;
break; exit;
end;
empid_int:=ADOQ_search.FieldValues['empid'];
tmp_empid:=adoq_search.FieldValues['id'];
end;
//数据提交开始
emp_BLflag:=true;
datamod.ADOCon.BeginTrans;
//2.更改人员编码
with ADOQtmp do
begin
close;sql.clear;
sql.add('insert into employee(empid,empname,sex,depid,dutyid,grade,telephone,mobile,worktime,email,idcard,born,province,area,address,photo,state)'); //
sql.add('values(:empid,:empname,:sex,:depid,:dutyid,:grade,:telephone,:mobile,:worktime,:email,:idcard,:born,:province,:area,:address,:photo,0)'); //
parameters.ParamValues['empid']:=maxid;
parameters.ParamValues['empname']:=ADOQ_search.FieldValues['empname'];
parameters.ParamValues['sex']:=ADOQ_search.FieldValues['sex'];
parameters.ParamValues['depid']:=ADOQ_search.FieldValues['depid'];
parameters.ParamValues['dutyid']:=ADOQ_search.FieldValues['dutyid'];
parameters.ParamValues['grade']:=ADOQ_search.FieldValues['grade'];
parameters.ParamValues['telephone']:=ADOQ_search.FieldValues['telephone'];
parameters.ParamValues['mobile']:=ADOQ_search.FieldValues['mobile'];
parameters.ParamValues['worktime']:=ADOQ_search.FieldValues['worktime'];
parameters.ParamValues['email']:=ADOQ_search.FieldValues['email'];
parameters.ParamValues['idcard']:=ADOQ_search.FieldValues['idcard'];
parameters.ParamValues['born']:=ADOQ_search.FieldValues['born'];
parameters.ParamValues['province']:=ADOQ_search.FieldValues['province'];
parameters.ParamValues['area']:=ADOQ_search.FieldValues['area'];
parameters.ParamValues['address']:=ADOQ_search.FieldValues['address'];
// parameters.ParamValues['photo']:=ADOQ_search.FieldValues['photo'];
//传送人员相片
if not ADOQ_search.FieldByName('photo').IsNull then
Parameters.ParamByName('photo').LoadFromStream(CreateBlobStream(ADOQ_search.FieldByName('photo'),bmRead),ftGraphic);
try
execsql;
except
if i>1 then tmpstr:=tmpstr+#13+#13+' 截止到编号为:['+ListEditor1.Cells[0,i-1]+'] 人员离职成功,剩下其它失败2.1!'
else tmpstr:='员工离职失败,请重试--2.1!';
MsgErr(handle,tmpstr);
inc(emp_num_e);
if datamod.ADOCon.InTransaction then datamod.ADOCon.RollbackTrans;
emp_BLflag:=false; break; exit;
end;
end; //2.更改人员编码
//3.更改与当前人员相关的数据
//3.1处理表outbom_log
with ADOQtmp do
begin
close;sql.clear;
sql.Add('update outbom_log set empid=:v_empid where empid=:v_oldempid');
parameters.ParamValues['v_empid']:=maxid;
parameters.ParamValues['v_oldempid']:=ADOQ_search.FieldValues['empid'];
try
execsql;
except
if i>1 then tmpstr:=tmpstr+#13+#13+' 截止到编号为:['+ListEditor1.Cells[0,i-1]+'] 人员离职成功,剩下其它失败3.1!'
else tmpstr:='员工离职失败,请重试--3.1!';
MsgErr(handle,tmpstr);
inc(emp_num_e);
if datamod.ADOCon.InTransaction then datamod.ADOCon.RollbackTrans;
emp_BLflag:=false; break; exit;
end;
end;
//3.3处理表brrow
with ADOQtmp do
begin
close;sql.clear;
sql.Add('update brrow set empid=:v_empid where empid=:v_oldempid');
parameters.ParamValues['v_empid']:=maxid;
parameters.ParamValues['v_oldempid']:=ADOQ_search.FieldValues['empid'];
try
execsql;
except
if i>1 then tmpstr:=tmpstr+#13+#13+' 截止到编号为:['+ListEditor1.Cells[0,i-1]+'] 人员离职成功,剩下其它失败3.3!'
else tmpstr:='员工离职失败,请重试--3.3!';
MsgErr(handle,tmpstr);
if datamod.ADOCon.InTransaction then datamod.ADOCon.RollbackTrans;
inc(emp_num_e);
MsgErr(handle,tmpstr);
emp_BLflag:=false; break; exit
end;
end;
//3.4处理表ck_material
with ADOQtmp do
begin
close;sql.clear;
sql.Add('update ck_material set empid=:v_empid where empid=:v_oldempid');
parameters.ParamValues['v_empid']:=maxid;
parameters.ParamValues['v_oldempid']:=ADOQ_search.FieldValues['empid'];
try
execsql;
except
if i>1 then tmpstr:=tmpstr+#13+#13+' 截止到编号为:['+ListEditor1.Cells[0,i-1]+'] 人员离职成功,剩下其它失败3.4!'
else tmpstr:='员工离职失败,请重试--3.4!';
MsgErr(handle,tmpstr);
if datamod.ADOCon.InTransaction then datamod.ADOCon.RollbackTrans;
inc(emp_num_e);
MsgErr(handle,'人员离职处理失败3.4!');
emp_BLflag:=false; break; exit;
end;
end;
//3.5处理表earn_abs
with ADOQtmp do
begin
close;sql.clear;
sql.Add('update earn_abs set empid=:v_empid where empid=:v_oldempid');
parameters.ParamValues['v_empid']:=maxid;
parameters.ParamValues['v_oldempid']:=ADOQ_search.FieldValues['empid'];
try
execsql;
except
if i>1 then tmpstr:=tmpstr+#13+#13+' 截止到编号为:['+ListEditor1.Cells[0,i-1]+'] 人员离职成功,剩下其它失败3.5!'
else tmpstr:='员工离职失败,请重试--3.5!';
MsgErr(handle,tmpstr);
if datamod.ADOCon.InTransaction then datamod.ADOCon.RollbackTrans;
inc(emp_num_e);
MsgErr(handle,tmpstr);
emp_BLflag:=false; break; exit;
end;
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -