📄 sysdata_manage.pas
字号:
unit Sysdata_manage;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, StdCtrls, Buttons, Grids, DBGrids, ExtCtrls,
ComCtrls, RpDefine, RpCon, RpConDS, Menus, Mask, DBCtrls, RpRave, RpBase,
RpSystem, ValEdit;
type
TfrmSysdata_manage = class(TForm)
DS_away_query: TDataSource;
ADOQtmp: TADOQuery;
ADOQ_away_query: TADOQuery;
ADOQpersonshouzhi: TADOQuery;
ADOQemp: TADOQuery;
ADOQupdate: TADOQuery;
ADOQGetyearmonth: TADOQuery;
ADOQtmp_emp: TADOQuery;
ADOQ_TJFlag: TADOQuery;
ADOQ_away_queryempid: TIntegerField;
ADOQ_away_queryempname: TStringField;
ADOQ_away_querysex: TStringField;
ADOQ_away_querydepname: TStringField;
ADOQ_away_querydutyname: TStringField;
ADOQ_away_querytotal: TBCDField;
ADOQ_away_queryzhi: TBCDField;
ADOQ_away_querybalance: TBCDField;
Panel2: TPanel;
Panel3: TPanel;
GroupBox2: TGroupBox;
ListEditor1: TValueListEditor;
Panel1: TPanel;
Label_num: TLabel;
Label2: TLabel;
Bevel1: TBevel;
SaveBtn: TBitBtn;
BitBtn1: TBitBtn;
Panel6: TPanel;
Panel4: TPanel;
AllBtn: TSpeedButton;
SigBtn: TSpeedButton;
DelSigBtn: TSpeedButton;
DelAllBtn: TSpeedButton;
GroupBox5: TGroupBox;
Panel5: TPanel;
Label_Display: TLabel;
edtname: TEdit;
SearchBtn: TBitBtn;
ComboBox_dep: TComboBox;
ComboBox_duty: TComboBox;
ComboBox_awayEmpID: TComboBox;
DBGrid2: TDBGrid;
ProgressBar1: TProgressBar;
Panel7: TPanel;
RadioGroup1: TRadioGroup;
Btn_Account: TBitBtn;
GroupBox1: TGroupBox;
CheckBox1: TCheckBox;
LBL_money: TLabel;
procedure FormShow(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure RadioGroup1Click(Sender: TObject);
procedure ComboBox_awayEmpIDKeyPress(Sender: TObject; var Key: Char);
procedure AllBtnClick(Sender: TObject);
procedure SigBtnClick(Sender: TObject);
procedure DelSigBtnClick(Sender: TObject);
procedure DelAllBtnClick(Sender: TObject);
procedure SaveBtnClick(Sender: TObject);
procedure ListEditor1StringsChange(Sender: TObject);
procedure CheckBox1Click(Sender: TObject);
procedure Btn_AccountClick(Sender: TObject);
procedure SearchBtnClick(Sender: TObject);
private
{ Private declarations }
function Get_lastbalance(empid:integer;yearmonth:string):real;
procedure Account_emppay;
public
{ Public declarations }
empid,empname,depname,dutyname:string;
end;
var
frmSysdata_manage: TfrmSysdata_manage;
implementation
uses data,sharevar,sharefun, ColorSetup;
{$R *.dfm}
//得到对应人员在当前日期前的第一个日期的结余
function TfrmSysdata_manage.Get_lastbalance(empid:integer;yearmonth:string):real;
begin
result:=0;
with ADOQGetyearmonth do
begin
close; sql.Clear;
sql.Add('select balance from personshouzhi where empid=:empid and yearmonth<:yearmonth order by yearmonth desc');
parameters.ParamValues['empid']:=empid;
parameters.ParamValues['yearmonth']:=yearmonth;
try
execsql; open;
except
end;
first; if recordcount>0 then
result:=fieldvalues['balance'];
close;
end;
end;
procedure TfrmSysdata_manage.FormShow(Sender: TObject);
begin
//添加离职人员编码
with ADOQemp do
begin
close;sql.clear;
sql.add('select empid from employee where state=0');
try
execsql; open;
except
MsgErr(handle,'添加已离职员工信息失败!'); exit;
end;
if recordcount =0 then
begin
MsgErr(handle,'无离职员工信息!');
exit;
end;
first;
ComboBox_awayEmpID.Items.Clear;
while not eof do
begin
ComboBox_awayEmpID.Items.Add(fieldvalues['empid']);
next;
end;
end;
//添加部门信息
with ADOQtmp do
begin
close; sql.Clear;
sql.Add('select depname from department');
open;
combobox_dep.Items.Clear;
first;
while not eof do
begin
combobox_dep.Items.Add(fieldvalues['depname']);
next;
end;
end;
//添加职务信息
with adoqtmp do
begin
close; sql.Clear;
sql.Add('select dutyname from duty');
open;
combobox_duty.Items.Clear;
first;
while not eof do
begin
combobox_duty.Items.Add(fieldvalues['dutyname']);
next;
end;
close;
end;
ComboBox_awayEmpID.SetFocus;
end;
//统计查询对应条件的离职人员的工资收入总账状况
procedure TfrmSysdata_manage.Account_emppay;
var
inprice_num :integer; //未指定工价的工序数量
tmpstr:string;
DataTJ_flag:boolean;
begin
//1.按条件查找到对应的已离职员工
//关闭已经查找到的数据
ADOQ_away_query.Close;
with ADOQemp do
begin
close; sql.Clear;
sql.Add('select a.empid from employee a,department b, duty c');
sql.Add('where a.depid=b.depid and a.dutyid=c.dutyid and a.state=0');
case RadioGroup1.ItemIndex of
0:
begin
if empid<>'' then
begin
try
strtoint(empid);
except
Msgerr(handle,'请输入正确的员工编号!');
abort; exit;
end;
sql.Add(' and a.empid=:empid');
parameters.ParamValues['empid']:=strtoint(empid);
end;
end;
1:
begin
if empname<>'' then
begin
sql.Add('and a.empname=:empname');
parameters.ParamValues['empname']:=empname;
end;
end;
2:
begin
sql.add('and b.depname=:depname');
parameters.ParamValues['depname']:=depname;
end;
3:
begin
sql.Add('and c.dutyname=:dutyname');
parameters.ParamValues['dutyname']:=dutyname;
end;
end;
try
execsql; open;
except
MsgErr(handle,'查找数据出错,请重试!');
abort; exit;
end;
if recordcount=0 then
begin
MsgErr(handle,'没查找到对应条件的离职员工!');
close; abort; exit;
end;
end;
//2.检查是否给当前所有已验收未入总账的工序定工价
with adoqtmp do
begin
close; sql.Clear;
sql.add('select a.ord_id, b.seq_name, b.seq_price from v_outbom_log2 a,sequence_price b');
sql.add('where a.flag=1 and a.TJflag=0 and (a.temp_key=b.temp_key)');
sql.Add('group by b.temp_key, a.ord_id, b.seq_name, b.seq_price');
try
open; first;
except
Msgerr(handle,'统计离职人员收支总账报表失败--工价查找!');
exit;
end;
DataTJ_flag:=true;
inprice_num:=0;
while not eof do
begin
if (fieldvalues['seq_price']=0) or (fieldvalues['seq_price']=null) then
begin
tmpstr:='订单批号:['+fieldvalues['ord_id']+'下的工序 ['+fieldvalues['seq_name']+'] 还没有给工价';
msgerr(handle, tmpstr);
DataTJ_flag:=false; Inc(inprice_num);
end;
next;
end;
if not DataTJ_flag then
begin
tmpstr:='统计离职人员收支总账报表失败--共有 ['+inttostr(inprice_num)+'] 个工序工价未指定!';
tmpstr:=tmpstr+#13+#13+' 请先到工序工价表指定工价再作统计!';
msgerr(handle,tmpstr);
abort; exit;
end;
end;//工序工价统计结束.End
//初始化进程条
ProgressBar1.Max:=adoqemp.RecordCount;
Label_Display.Visible:=true;
ProgressBar1.Position:=0;
application.ProcessMessages;
datatj_flag:=true;
ADOQemp.first;
//利用循环计算离职员工工资收入
while not adoqemp.Eof do
begin
ProgressBar1.Max:=adoqemp.RecordCount+ProgressBar1.Max;
application.ProcessMessages;
//1.得到当前人员收支表所有已统计的记录(刷新)
with ADOQpersonshouzhi do
begin
close;sql.Clear;
sql.add('select * from personshouzhi where empid=:v_empid order by yearmonth desc');
parameters.ParamValues['v_empid']:=adoqemp.fieldvalues['empid'];
try
open;
except
if datamod.ADOCon.InTransaction then datamod.ADOCon.RollbackTrans;
datatj_flag:=false; break;
end;
end;
//2.计算工序收入(A~当前日期)************************************************************
with adoqtmp do
begin
close;sql.clear;
sql.add('select a.empid,a.yearmonth,(sum(b.seq_price*a.num)) as total from v_outbom_log2 a,sequence_price b');
sql.add('where a.flag=1 and a.TJflag=0 and (a.temp_key=b.temp_key) and (a.empid=:v_empid)');
sql.add('group by a.yearmonth, a.empid order by a.yearmonth');
parameters.ParamValues['v_empid']:=adoqemp.fieldvalues['empid'];
open; first;
while not eof do
begin
//2.数据开始提交
DataTJ_flag:=true;
datamod.ADOCon.BeginTrans;
with ADOQupdate do
begin
//2.1得到当前人员当月的收支总表的记录
close; sql.Clear;
sql.Add('select * from personshouzhi where empid=:v_empid and yearmonth=:V_yearmonth');
parameters.ParamValues['v_empid']:=adoqemp.FieldValues['empid'];
parameters.ParamValues['V_yearmonth']:=adoqtmp.FieldValues['yearmonth'];
try
execsql; open;
except
if datamod.ADOCon.InTransaction then datamod.ADOCon.RollbackTrans;
datatj_flag:=false; break;
end;//2.1.End
//2.2如果该员工该月存在收支记录,则修改收入
if recordcount>0 then
begin
close; sql.Clear;
sql.Add('update personshouzhi set shou=shou+:v_total');
sql.Add('where empid=:v_empid and yearmonth=:V_yearmonth');
parameters.ParamValues['v_empid']:=adoqemp.FieldValues['empid'];
parameters.ParamValues['V_yearmonth']:=adoqtmp.FieldValues['yearmonth'];
parameters.ParamValues['v_total']:=adoqtmp.FieldValues['total'];
try
execsql;
except
if datamod.ADOCon.InTransaction then datamod.ADOCon.RollbackTrans;
DataTJ_flag:=false; break;
end;
//2.5.1如果员工工序收入入总账成功则修改[Tjflag]字段值
with ADOQ_TJFlag do
begin
close; sql.Clear;
sql.Add('update outbom_log set Tjflag=1 where empid=:v_empid');
parameters.ParamValues['v_empid']:=adoqtmp.FieldValues['empid'];
try
execsql;
except
if datamod.ADOCon.InTransaction then datamod.ADOCon.RollbackTrans;
DataTJ_flag:=False; break;
end;
end;//2.5.1.End
end//2.2.End
else
//如果没找到则添加.Else
begin
//2.3如果个人月收支表中没找到记录则直接新增
if ADOQpersonshouzhi.RecordCount =0 then
begin
close; sql.Clear;
sql.Add('insert into personshouzhi(empid,yearmonth,shou)');
sql.Add('values(:v_empid,:v_yearmonth,:v_shou)');
parameters.ParamValues['v_empid']:=adoqemp.FieldValues['empid'];
parameters.ParamValues['V_yearmonth']:=adoqtmp.FieldValues['yearmonth'];
parameters.ParamValues['v_shou']:=adoqtmp.FieldValues['total'];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -