📄 fixdepdlg.pas
字号:
unit FixDepDlg;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, EditForm, KsSkinForms, KsSkinProgress, KsSkinButtons,
KsSkinListBoxs, Base2InfoFixAdd, SysPublic, DB, ADODB, se_controls,
KsSkinSpeedButtons;
type
TfrmFixDepDlg = class(TfrmEditForm)
ListBoxDep: TSeSkinListBox;
bbOk: TSeSkinButton;
bbNo: TSeSkinButton;
ProgressBar: TSeSkinProgressBar;
ListBoxUDep: TSeSkinListBox;
procedure bbNoClick(Sender: TObject);
procedure bbOkClick(Sender: TObject);
private
{ Private declarations }
bReturn: Boolean;
cPubMode: Char;
procedure MainShow;
function DBCalcDepreciation: Integer;
function DBCalcUnDepreciation: Integer;
procedure LoadData;
public
{ Public declarations }
end;
function FixDepDlgShow(cMode: Char): Boolean; //'D'计提折旧 'U'反计提折旧
implementation
{$R *.dfm}
function FixDepDlgShow(cMode: Char): Boolean;
var
frmFixDepDlg: TfrmFixDepDlg;
begin
frmFixDepDlg := TfrmFixDepDlg.Create(Application);
with frmFixDepDlg do
begin
cPubMode := cMode;
MainShow;
Result := bReturn;
Free;
end;
end;
procedure TfrmFixDepDlg.MainShow;
begin
bReturn := False;
LoadData;
ShowModal;
end;
procedure TfrmFixDepDlg.LoadData;
begin
if cPubMode = 'D' then
begin
ListBoxDep.Visible := True;
caption := '固定资产计提折旧';
end
else
if cPubMode = 'U' then
begin
ListBoxUDep.Visible := True;
caption := '固定资产反计提折旧';
end;
end;
function TfrmFixDepDlg.DBCalcDepreciation: Integer; //循环数据库进行折旧
var
ADOSetTmp: TADODataSet;
sSql, sUpSql, sAbateMode: string;
lFixID: Integer;
dBorn, dAllA, dNetV, dFutuP, dFutuV, dUserM, dCountM, dMAMod, dMAVal: Double;
dSumDep: Double;
begin
Result := 0;
sSql := ' SELECT F.ID, F.AbateMode, F.BornValue, F.AllAbate, F.NetValue, F.BornValue,' +
' F.FutuPvalue, F.FutuValue, F.UseMonth, F.CountMonth, iif(isnull(Sum(D.MAbateValue)),0,Sum(D.MAbateValue)) AS SumDep ' +
' FROM FixedAssets AS F LEFT JOIN (SELECT * FROM FixedDepreciate WHERE Period<' + IntToStr(GetPeriod) + ')' +
' AS D ON F.ID = D.FixID ' +
' WHERE (F.Delete=False) ' +
' GROUP BY F.ID, F.AbateMode, F.BornValue, F.AllAbate, F.NetValue, F.BornValue,' +
' F.FutuPvalue, F.FutuValue, F.UseMonth, F.CountMonth';
ADOSetTmp := TADODataSet.Create(nil);
ADOSetTmp.LockType := ltReadOnly;
if not OpenDataSet(ADOSetTmp, sSql) then
begin ADOSetTmp.Free;
Exit;
end;
if ADOSetTmp.IsEmpty then
begin Result := -1;
Exit;
end; //没有记录时退出
ProgressBar.Max := ADOSetTmp.RecordCount * 2; //进度条最大值
while not ADOSetTmp.Eof do
begin
lFixID := ADOSetTmp.FieldByName('ID').AsInteger;
sAbateMode := ADOSetTmp.FieldByName('AbateMode').AsString;
dBorn := ADOSetTmp.FieldByName('BornValue').AsFloat; //原值
dAllA := ADOSetTmp.FieldByName('AllAbate').AsFloat;
dNetV := ADOSetTmp.FieldByName('NetValue').AsFloat;
dFutuP := ADOSetTmp.FieldByName('FutuPvalue').AsFloat;
dFutuV := ADOSetTmp.FieldByName('FutuValue').AsFloat;
dUserM := ADOSetTmp.FieldByName('UseMonth').AsFloat;
dCountM := ADOSetTmp.FieldByName('CountMonth').AsFloat;
dSumDep := ADOSetTmp.FieldByName('AllAbate').AsFloat + ADOSetTmp.FieldByName('SumDep').AsFloat;
{1} ProgressBar.Position := ProgressBar.Position + 1; //进度条增量
CalcDepreciation(Trim(sAbateMode), dBorn - dSumDep, dAllA, dNetV, dFutuP, dFutuV, dUserM, dCountM, 0, dMAMod, dMAVal);
sUpSql := 'INSERT INTO FixedDepreciate ([FixID],[Period],[MAbateMod],[MAbateValue])' +
' VALUES(' + IntToStr(lFixID) + ',' + IntToStr(GetPeriod) + ',' + FloatToStr2(dMAMod) +
',' + FloatToStr2(dMAVal) + ')';
ExecSql(sUpSql);
{2} ProgressBar.Position := ProgressBar.Position + 1; //进度条增量
ADOSetTmp.Next;
end;
ADOSetTmp.Free;
Result := 1;
end;
function TfrmFixDepDlg.DBCalcUnDepreciation: Integer; //循环数据库进行反折旧
var
ADOSetTmp: TADODataSet;
sSql, sUpSql: string;
lFixID: Integer;
begin
Result := 0;
sSql := 'SELECT * FROM FixedAssets WHERE [Delete]=FALSE AND [Period]<' + IntToStr(GetPeriod);
ADOSetTmp := TADODataSet.Create(nil);
ADOSetTmp.LockType := ltReadOnly;
if not OpenDataSet(ADOSetTmp, sSql) then
begin ADOSetTmp.Free;
Exit;
end;
if ADOSetTmp.IsEmpty then
begin Result := -1;
Exit;
end; //没有记录时退出
ProgressBar.Max := ADOSetTmp.RecordCount * 1; //进度条最大值
while not ADOSetTmp.Eof do
begin
lFixID := ADOSetTmp.FieldByName('ID').AsInteger;
sUpSql := 'DELETE FROM FixedDepreciate WHERE FixID=' + IntToStr(lFixID) + ' AND [Period]<' + IntToStr(GetPeriod);
ExecSql(sUpSql);
{1} ProgressBar.Position := ProgressBar.Position + 1; //进度条增量
ADOSetTmp.Next;
end;
ADOSetTmp.Free;
Result := 1;
end;
procedure TfrmFixDepDlg.bbNoClick(Sender: TObject);
begin
inherited;
Close;
end;
procedure TfrmFixDepDlg.bbOkClick(Sender: TObject);
begin
inherited;
if cPubMode = 'D' then
begin
case DBCalcDepreciation of
0: ShowMsg('计提折旧出错,请检查固定资产明细后重试!');
1: ShowMsg('本期固定资产计提折旧成功!');
-1: ShowMsg('本期没有要计提折旧的固定资产!');
end;
end
else
if cPubMode = 'U' then
begin
case DBCalcUnDepreciation of
0: ShowMsg('反计提折旧出错,请检查后重再试!');
1: ShowMsg('本期固定资产反计提折旧成功!');
-1: ShowMsg('本期没有固定资产计提折旧数据!');
end;
end;
end;
end.
//此源码由程序太平洋收集整理发布,任何人都可自由转载,但需保留本站信息
//╭⌒╮┅~ ¤ 欢迎光临程序太平洋╭⌒╮
//╭⌒╭⌒╮╭⌒╮~╭⌒╮ ︶ ,︶︶
//,︶︶︶︶,''︶~~ ,''~︶︶ ,''
//╔ ╱◥███◣═╬╬╬╬╬╬╬╬╬╗
//╬ ︱田︱田 田 ︱ ╬
//╬ http://www.5ivb.net ╬
//╬ ╭○╮● ╬
//╬ /■\/■\ ╬
//╬ <| || 有希望,就有成功! ╬
//╬ ╬
//╚╬╬╬╬╬╬╬╬╬╬╗ ╔╬╬╬╬╝
//
//说明:
//专业提供VB、.NET、Delphi、ASP、PB源码下载
//包括:程序源码,控件,商业源码,系统方案,开发工具,书籍教程,技术文档
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -