📄 etp_month_acc.pas
字号:
unit Etp_Month_ACC;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, StdCtrls, Buttons, Grids, DBGrids, ExtCtrls,
ComCtrls, Mask, DBCtrls,Menus, ImgList, Spin,DateUtils, RpCon, RpConDS,
RpBase, RpSystem, RpDefine, RpRave;
type
TForm_Etp_Month_ACC = class(TForm)
ADOQ_Etp_shouzhi: TADOQuery;
RvProject1: TRvProject;
RvSystem1: TRvSystem;
Rv_GJSLMX: TRvDataSetConnection;
DBGrid: TDBGrid;
DS_Etp_ShouZhi: TDataSource;
adoqtmp: TADOQuery;
ADOQupdate: TADOQuery;
ADOQEtp_shouzhi: TADOQuery;
ADOQ_TJFlag: TADOQuery;
ADOQ_Etp_shouzhiid: TAutoIncField;
ADOQ_Etp_shouzhiyearmonth: TStringField;
ADOQ_Etp_shouzhishou: TBCDField;
ADOQ_Etp_shouzhiyinzhi: TBCDField;
ADOQ_Etp_shouzhishizhi: TBCDField;
ADOQ_Etp_shouzhiZhiself: TBCDField;
ADOQ_Etp_shouzhibalance: TBCDField;
Panel1: TPanel;
GroupBox1: TGroupBox;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
syear: TSpinEdit;
smonth: TSpinEdit;
eyear: TSpinEdit;
emonth: TSpinEdit;
CheckBox1: TCheckBox;
Label_Display: TLabel;
PrtBtn: TBitBtn;
SearchBtn: TBitBtn;
ExtBtn: TBitBtn;
ProgressBar1: TProgressBar;
RvProject2: TRvProject;
RvSystem2: TRvSystem;
Rv_TJ_Etp_Month: TRvDataSetConnection;
procedure FormShow(Sender: TObject);
procedure SearchBtnClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure PrtBtnClick(Sender: TObject);
private
{ Private declarations }
sdate, edate: string;
public
{ Public declarations }
end;
var
Form_Etp_Month_ACC: TForm_Etp_Month_ACC;
implementation
uses sharevar,sharefun,data;
{$R *.dfm}
procedure TForm_Etp_Month_ACC.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
action:=cafree;
end;
procedure TForm_Etp_Month_ACC.FormShow(Sender: TObject);
var tmpdatetime:TDateTime;
begin
GetHostDateTime(datamod.ADOCon,tmpdatetime);
syear.MaxValue:=yearof(tmpdatetime);
syear.Text:=inttostr(yearof(tmpdatetime));
eyear.MaxValue:=yearof(tmpdatetime);
eyear.Text:=inttostr(yearof(tmpdatetime));
emonth.Text:=inttostr(monthof(tmpdatetime));
end;
procedure TForm_Etp_Month_ACC.SearchBtnClick(Sender: TObject);
var
DataTJ_flag:boolean;
begin
sdate:=syear.Text +'-'+ smonth.Text;
edate:=eyear.Text +'-'+ emonth.Text;
if not checkdate(sdate+'-10') then
begin
MsgErr(handle,'请输入正确的开始日期!');
syear.SetFocus;
exit;
end;
if not checkdate(edate+'-10') then
begin
MsgErr(handle,'请输入正确的结束日期!');
eyear.SetFocus;
exit;
end;
if strtodate(edate+'-1') < strtodate(sdate+'-1') then
begin
msgerr(handle,'结束时间不能小于起始时间!');
eyear.SetFocus;
exit;
end;
//如果是重新统计则执行以下操作
if CheckBox1.Checked then
begin
//2.计算企业的主要收入(A~当前日期)************************************************************
with adoqtmp do
begin
close;sql.clear;
sql.add('select yearmonth,sum(money) as total from V_earning where tjflag=0');
sql.add('group by yearmonth order by yearmonth');
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 Etp_ShouZhi where yearmonth=:V_yearmonth');
parameters.ParamValues['V_yearmonth']:=adoqtmp.FieldValues['yearmonth'];
try
execsql; open;
except
datatj_flag:=false;
if datamod.ADOCon.InTransaction then datamod.ADOCon.RollbackTrans;
break; exit;
end;//2.1.End
//2.2如果该员工该月存在收支记录,则修改收入
if recordcount>0 then
begin
close; sql.Clear;
sql.Add('update Etp_ShouZhi set shou=shou+:v_total');
sql.Add('where yearmonth=:V_yearmonth');
parameters.ParamValues['V_yearmonth']:=adoqtmp.FieldValues['yearmonth'];
parameters.ParamValues['v_total']:=adoqtmp.FieldValues['total'];
try
execsql;
except
DataTJ_flag:=false;
if datamod.ADOCon.InTransaction then datamod.ADOCon.RollbackTrans;
break; exit;
end;
end//2.2.End
else
//如果没找到则添加.Else
begin
//2.3如果个人月收支表中没找到记录则直接新增
close; sql.Clear;
sql.Add('insert into Etp_ShouZhi(yearmonth,shou)');
sql.Add('values(:v_yearmonth,:v_shou)');
parameters.ParamValues['V_yearmonth']:=adoqtmp.FieldValues['yearmonth'];
parameters.ParamValues['v_shou']:=adoqtmp.FieldValues['total'];
try
execsql;
except
DataTJ_flag:=False;
if datamod.ADOCon.InTransaction then datamod.ADOCon.RollbackTrans;
break; exit;
end;
end;//如果没找到则添加.Else.End
//2.5.1如果入总账成功则修改[Tjflag]字段值
with ADOQ_TJFlag do
begin
close; sql.Clear;
sql.Add('update earning set Tjflag=1');
try
execsql;
except
DataTJ_flag:=False;
if datamod.ADOCon.InTransaction then datamod.ADOCon.RollbackTrans;
break; exit;
end;
end;//2.5.1.End
end;//with ADOQupdate do.End
//2.提交数据
if not DataTJ_flag then
begin
if datamod.ADOCon.InTransaction then datamod.ADOCon.RollbackTrans;
MsgErr(handle,'统计人员收支总账报表失败--工序收入!');
break; exit;
end;
if datamod.ADOCon.InTransaction then
begin
try
datamod.ADOCon.CommitTrans;
except
MsgErr(handle,'统计人员收支总账报表失败--工序收入!');
if datamod.ADOCon.InTransaction then datamod.ADOCon.RollbackTrans;
break; exit;
end;
end;
next;
end;
end;//2.计算企业的主要收入结束.End
//3.计算企业月应支工资的金额数(从个人收入表中得到)************************************************************
DataTJ_flag:=true; //初始化标量,用以控制循环的进度
with ADOQEtp_shouzhi do
begin
//取出当前表内所有有关的数据
close;sql.Clear;
sql.add('select * from Etp_ShouZhi order by yearmonth desc');
open;
end;
with adoqtmp do
begin
close; sql.clear;
sql.add('select yearmonth,(sum(shou)+sum(fshou)) as total from personshouzhi');
sql.add('group by yearmonth order by yearmonth');
open;
//初始化进程条
ProgressBar1.Max:=adoqtmp.Recordcount;
ProgressBar1.Position:=0;
Label_Display.Visible:=true;
application.ProcessMessages;
first;
while not eof do
begin
//2.数据开始提交
ProgressBar1.Position:=ProgressBar1.Position+1;
application.ProcessMessages;
DataTJ_flag:=true;
datamod.ADOCon.BeginTrans;
with ADOQupdate do
begin
//2.1得到当月的收支总表的记录
close; sql.Clear;
sql.Add('select * from Etp_ShouZhi where yearmonth=:V_yearmonth');
parameters.ParamValues['V_yearmonth']:=adoqtmp.FieldValues['yearmonth'];
try
execsql; open;
except
DataTJ_flag:=false;
if datamod.ADOCon.InTransaction then datamod.ADOCon.RollbackTrans;
break; exit;
end;//2.1.End
//2.2如果该员工该月存在收支记录,则修改收入
if recordcount>0 then
begin
close; sql.Clear;
sql.Add('update Etp_ShouZhi set yinzhi=:v_total');
sql.Add('where yearmonth=:V_yearmonth');
parameters.ParamValues['V_yearmonth']:=adoqtmp.FieldValues['yearmonth'];
parameters.ParamValues['v_total']:=adoqtmp.FieldValues['total'];
try
execsql;
except
DataTJ_flag:=false;
if datamod.ADOCon.InTransaction then datamod.ADOCon.RollbackTrans;
break; exit;
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -