📄 emppay_out.pas
字号:
unit EmpPay_Out;
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_EmpPay_Out = class(TForm)
ADOQtmp: TADOQuery;
DS_tmp: TDataSource;
ADOQ_emp: TADOQuery;
ADOQ_Count: TADOQuery;
ADOQ_search: TADOQuery;
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
Panel1: TPanel;
Panel2: TPanel;
GroupBox1: TGroupBox;
ListEditor1: TValueListEditor;
SaveBtn: TBitBtn;
ExtBtn: TBitBtn;
Panel3: TPanel;
AllBtn: TSpeedButton;
SigBtn: TSpeedButton;
DelSigBtn: TSpeedButton;
DelAllBtn: TSpeedButton;
GroupBox2: TGroupBox;
Panel4: TPanel;
emp_num: TLabel;
RadioGroup1: TRadioGroup;
Edit1: TEdit;
BitBtn1: TBitBtn;
SearchBtn: TBitBtn;
ComboBox_dep: TComboBox;
ComboBox_duty: TComboBox;
Panel5: TPanel;
DBGrid2: TDBGrid;
DBGrid: TDBGrid;
Panel6: TPanel;
Label5: TLabel;
ComboBox_ID: TComboBox;
ADOQ_Emp_payout: TADOQuery;
DS_Emp_payout: TDataSource;
BitBtn_locate: TBitBtn;
BitBtn3: TBitBtn;
PrtBtn: TBitBtn;
edtname: TEdit;
Label11: TLabel;
Label12: TLabel;
edtsex: TEdit;
ADOQ_Emp_payoutlog_id: TAutoIncField;
ADOQ_Emp_payoutempid: TIntegerField;
ADOQ_Emp_payoutyearmonth: TStringField;
ADOQ_Emp_payoutmoney: TBCDField;
ADOQ_Emp_payouttmp_id: TIntegerField;
ADOQ_Emp_payoutrec_date: TDateTimeField;
ADOQ_Emp_payoutopername: TStringField;
Label13: TLabel;
Edtpay: TEdit;
GroupBox5: TGroupBox;
Label4: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
year_s: TSpinEdit;
month_s: TSpinEdit;
eyear: TSpinEdit;
emonth: TSpinEdit;
ADOQ_Emp_payoutempname: TStringField;
RvProject1: TRvProject;
RvSystem1: TRvSystem;
Rv_TJ_EMP_Payout: TRvDataSetConnection;
GroupBox4: TGroupBox;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
syear: TSpinEdit;
smonth: TSpinEdit;
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 ComboBox_IDKeyPress(Sender: TObject; var Key: Char);
procedure ComboBox_IDChange(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_EmpPay_Out: TForm_EmpPay_Out;
implementation
uses sharefun, sharevar,data;
{$R *.dfm}
procedure TForm_EmpPay_Out.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
action:=cafree;
end;
procedure TForm_EmpPay_Out.AllBtnClick(Sender: TObject);
var tmpstr, tmpstr2: string;
begin
if not adoq_emp.Active then exit;
if adoq_emp.RecordCount =0 then exit;
with adoq_emp do
begin
First;
while not eof do
begin
tmpstr:=trim(adoq_emp.FieldValues['empname']);
tmpstr2:=inttostr(adoq_emp.FieldValues['empid']);
if tmpstr<>ListEditor1.Values[tmpstr2] then
ListEditor1.InsertRow(tmpstr2,tmpstr,false);
next;
end;
end;
end;
procedure TForm_EmpPay_Out.SigBtnClick(Sender: TObject);
var tmpstr, tmpstr2: string;
begin
if not adoq_emp.Active then exit;
if adoq_emp.RecordCount =0 then exit;
tmpstr:=trim(adoq_emp.FieldValues['empname']);
tmpstr2:=inttostr(adoq_emp.FieldValues['empid']);
if tmpstr=ListEditor1.Values[tmpstr2] then
begin
msgerr(handle,'员工编号:'+tmpstr2+', 姓名:['+tmpstr+'] 已经存在!');
exit;
end;
ListEditor1.InsertRow(tmpstr2,tmpstr,false);
end;
procedure TForm_EmpPay_Out.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_EmpPay_Out.DelAllBtnClick(Sender: TObject);
begin
if ListEditor1.Strings.Count=0 then exit;
if msgqst(handle,'确定删除当前选择的所有人员数据吗?')=idno then exit;
ListEditor1.Strings.Clear;
end;
procedure TForm_EmpPay_Out.SaveBtnClick(Sender: TObject);
var
tmpstr, year_str, month_str,yearmonth:string;
i, emp_num_s, emp_num_e:integer;
sys_bool:boolean;
pay:real;
tmp_id:integer;
begin
if ListEditor1.Strings.Count=0 then exit;
emp_num_s:=ListEditor1.Strings.Count;
emp_num_e:=0;
year_str:=trim(syear.Text);
month_str:=trim(smonth.Text);
yearmonth:=formatdatetime('yyyy-mm',strtodate(year_str+'-'+month_str+'-01'));
if length(yearmonth)<>7 then
begin
MsgErr(handle,'请输入正确的发放工资的年、月份!');
exit;
end;
if not checkdate(yearmonth+'-10') then
begin
MsgErr(handle,'请输入正确的发放工资的年、月份!');
exit;
end;
tmpstr:='确认将当前所选择的: ['+inttostr(ListEditor1.Strings.count)+'] 位员工的 [';
tmpstr:=tmpstr+year_str+'年'+month_str+'月] 的工资发放吗?';
if msgqst(handle,tmpstr)=idno then exit;
application.ProcessMessages;
if not get_oper_tmpid(curAdmin.user_id , tmp_id) then
begin
MsgErr(handle,'人员工资发放失败,请重试!');
exit;
end;
//利用循环发放人员工资
for i:=1 to ListEditor1.Strings.Count do
begin
//数据提交开始
sys_bool:=true;
datamod.ADOCon.BeginTrans;
//计算当前人员的应得工资
with ADOQ_Count do
begin
close; sql.Clear;
sql.Add('select pay from emp_pay where empid=:V_empid');
parameters.ParamValues['V_empid']:=strtoint(ListEditor1.Cells[0,i]);
try
open;
except
if i>1 then tmpstr:=tmpstr+#13+#13+' 截止到编号为:['+ListEditor1.Cells[0,i-1]+'] 人员工资发放成功,剩下其它失败!'
else tmpstr:='人员工资发放失败,请重试!';
msgerr(handle,tmpstr);
sys_bool:=false;
if datamod.ADOCon.InTransaction then datamod.ADOCon.RollbackTrans;
break; exit;
end;
pay:=fieldvalues['pay'];
end;//计算当前人员的应得工资.End
//查找是否已经发放对应人员的该月份工资
with ADOQ_search do
begin
close; sql.Clear;
tmpstr:='';
tmpstr:=yearmonth+'_'+ListEditor1.Cells[0,i];
sql.Add('select money from v_emp_payout where tmp_id=:v_tmp_id');
parameters.ParamValues['v_tmp_id']:=tmpstr;
try
open;
except
if i>1 then tmpstr:=tmpstr+#13+#13+' 截止到编号为:['+ListEditor1.Cells[0,i-1]+'] 人员工资发放成功,剩下其它失败!'
else tmpstr:='人员工资发放失败,请重试!';
msgerr(handle,tmpstr);
sys_bool:=false;
if datamod.ADOCon.InTransaction then datamod.ADOCon.RollbackTrans;
break; exit;
end;
if recordcount>0 then
begin
tmpstr:=' ['+year_str+'年'+month_str+'月] 的工资已经发放!';
tmpstr:='编号为:['+ListEditor1.Cells[0,i]+'] 的员工['+ListEditor1.Cells[1,i]+']'+#13+#13+tmpstr;
msgok(handle,tmpstr);
emp_num_e:=emp_num_e+1;
if datamod.ADOCon.InTransaction then datamod.ADOCon.RollbackTrans;
continue;
end;
end;//查找是否已经发放对应人员的该月份工资.End
//真正发放人员工资
with ADOQtmp do
begin
close;sql.clear;
sql.add('insert Emp_Payout (empid,yearmonth,money,tmp_id) values(:v_empid,:v_yearmonth,:V_money,:v_tmp_id)');
parameters.ParamValues['V_empid']:=strtoint(ListEditor1.Cells[0,i]);
parameters.ParamValues['v_yearmonth']:=yearmonth;
parameters.ParamValues['V_money']:=pay;
parameters.ParamValues['V_tmp_id']:=tmp_id;
try
execsql;
except
if i>1 then tmpstr:=tmpstr+#13+#13+' 截止到编号为:['+ListEditor1.Cells[0,i-1]+'] 人员工资发放成功,剩下其它失败!'
else tmpstr:='人员工资发放失败,请重试!';
msgerr(handle,tmpstr);
sys_bool:=false;
if datamod.ADOCon.InTransaction then datamod.ADOCon.RollbackTrans;
break; exit;
end;
end; //真正发放人员工资.End
//提交数据库
if not sys_bool then
begin
if datamod.ADOCon.InTransaction then datamod.ADOCon.RollbackTrans;
exit;
end;
if datamod.ADOCon.InTransaction then
begin
try
datamod.ADOCon.CommitTrans;
except
if i>1 then tmpstr:=tmpstr+#13+#13+' 截止到编号为:['+ListEditor1.Cells[0,i-1]+'] 人员工资发放成功,剩下其它失败!'
else tmpstr:='人员工资发放失败,请重试!';
msgerr(handle,tmpstr);
if datamod.ADOCon.InTransaction then datamod.ADOCon.RollbackTrans; break; exit;
end;
end;
end; //利用循环发放人员工资.End
if emp_num_e>0 then
begin
if emp_num_s=emp_num_e then
begin
tmpstr:='当前所选择的:['+inttostr(emp_num_s)+']位员工的 [';
tmpstr:=tmpstr+year_str+'年'+month_str+'月] 的工资已经全部发放,';
tmpstr:=tmpstr+#13+#13+' 该次发放工资均失效!';
end
else
begin
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -