cshcomm.pas.svn-base
来自「一个用Delphi开发的ERP软件」· SVN-BASE 代码 · 共 667 行 · 第 1/2 页
SVN-BASE
667 行
unit CshComm;
interface
uses
Classes, SysUtils, Controls,Windows, Forms, ComCtrls,CommCtrl,DBGrids,
Messages, Graphics, ADODB, ActiveX, SYSDATA, CommFun, Dialogs, StdCtrls;
//取得所有帐户名称
procedure GetAllAcct(AAcctName:TComboBox;AQuery:TADOQuery);
//取票据编号
function GetBillNo(ADateTime:TDateTime):string;
//取得上一条记录的日期及编号
procedure GetPriorRecord(AccNo:Integer;ADate:TDateTime;ABill:Integer; var ADateTime:TDateTime; var ABillNo:Integer);
//重算当前记录以后的记录的余额 //AccNo:帐户编号
procedure ReCalcBalance(AccNo:Integer; ADateTime:TDateTime; ABillNo:Integer);
//取得帐户的余额
function GetAccBalance(AccNo:Integer;ADate:TDateTime):Double;
//取得某个帐户某个期间的金额
//AccNo:帐户编号(电脑编号)
//AFromDate:起始日期
//AToDate:结束日期
//AFlag:标识(1=期初,2=收入,3=支出)
function GetAccAmount(AccNo:Integer; AFromDate:TDateTime; AToDate:TDateTime; AFlag:Integer):Double;
//采购折扣单,采购发票单,付款单新增、修改、删除时调用
//反写采购定单PUR510B的发票金额、付款折扣、已付金额
//ACode: 采购单号
//AType: 增加=ADD,减少=DEL
procedure UpdatePUR510B(ACode,AType:String); overload;
//销售折扣单,销售发票单,收款单新增、修改、删除时调用
//反写销售定单ORD510B的发票金额、收款折扣、已收金额
//ACode: 销售单号
//AType: 增加=ADD,减少=DEL
procedure UpdateORD510B(ACode,AType:String); overload;
//反写销售定单ORD510B的已收款额
//AType: 增加=ADD,减少=DEL
procedure UpdateORD510B(AccNo:Integer;ADate:TDateTime;ABillNo:Integer;AField,AType:String); overload;
//反写采购定单PUR510B的已付款额
//AType: 增加=ADD,减少=DEL
procedure UpdatePUR510B(AccNo:Integer;ADate:TDateTime;ABillNo:Integer;AField,AType:String); overload;
//反写销售发票ACR510B的已收支金额
//AType: 增加=ADD,减少=DEL
procedure UpdateACR510B(AccNo:Integer;ADate:TDateTime;ABillNo:Integer;AType:String);
//反写采购发票ACP510B的已收支金额
//AType: 增加=ADD,减少=DEL
procedure UpdateACP510B(AccNo:Integer;ADate:TDateTime;ABillNo:Integer;AType:String);
//取CSH610的顺序编号
function GetSeqNo(ADateTime:TDateTime):string;
//取得应收应付帐的期初余额
function GetAcrOpen(AInOut,ACustNo,ACurrNo,AType:Integer;AFromDate:TDateTime):Double;
//更新债权债务帐本表
//新增时:UpdateCSH610(AObjType,ACustNo,ACurrNo,AInOut,ATypeNo,ABillNo,ABillType,ADate,AAmount,edtCode.Text,'','ADD');
//删除时:UpdateCSH610(AOldObjType,AOldCustNo,AOldCurrNo,0,0,AOldBillNo,0,AOldDate,AOldAmount,'','','DEL');
//修改时,保存前,删除旧的调用一次,保存后,增加新的调用一次
// UpdateCSH610(AOldObjType,AOldCustNo,AOldCurrNo,0,0,AOldBillNo,0,AOldDate,AOldAmount,'','','DEL');
// UpdateCSH610(AObjType,ACustNo,ACurrNo,AInOut,ATypeNo,ABillNo,ABillType,ADate,AAmount,edtCode.Text,'','ADD');
//AObjType: 对象类型(0=客户,1=员工)
//ATypeNo: 债权债务(0=债权,1=债务) 销售发票=0,采购发票=1
//AInOut: 收支类型(0=期初,1=应收应付,2=已收已付) 销售发票=1,采购发票=1,销售退货=1,采购退货=1,销售收款=2,采购付款=2
//ABillType: 单据类型(0=期初单号,1=销售发票,2=采购发票,3=收支单)
//AType: ADD=新增,DEL=删除
procedure UpdateCSH610(AObjType,ACustNo,ACurrNo,AInOut,ATypeNo,ABillNo,ABillType:Integer;ADate:TDateTime;AAmount:Double;AOrder,ARemark,AType:String);
implementation
//取得所有帐户名称
procedure GetAllAcct(AAcctName:TComboBox;AQuery:TADOQuery);
begin
AAcctName.Items.Clear;
AQuery.Close;
AQuery.SQL.Clear;
if ASuper then
begin
AQuery.SQL.Add('select * from CSH550');
end else
begin
AQuery.SQL.Add('select * from SYS500D A, CSH550 B');
AQuery.SQL.Add('where A.S500D_003=B.C550_001 and A.S500D_002=''ACC'' and A.S500D_004='+GetBoolean(True)+' and A.S500D_001='+IntToStr(AUserID));
end;
AQuery.Open;
while not AQuery.Eof do
begin
AAcctName.Items.Add(AQuery.FieldByName('C550_002').AsString);
AQuery.Next;
end;
AAcctName.ItemIndex:=0;
end;
//取票据编号
//ADateTime:日期
function GetBillNo(ADateTime:TDateTime):string;
begin
SYSDM.qryQuery.Close;
SYSDM.qryQuery.SQL.Clear;
SYSDM.qryQuery.SQL.Add('select max(C500_004) from CSH500 where C500_002<>0 and C500_003='+GetDateString(ADateTime));
SYSDM.qryQuery.Open;
if SYSDM.qryQuery.Fields[0].IsNull then
Result:='1'
else
Result:=IntToStr(SYSDM.qryQuery.Fields[0].Value+1);
SYSDM.qryQuery.Close;
end;
//取得上一条记录的日期及编号
procedure GetPriorRecord(AccNo:Integer;ADate:TDateTime;ABill:Integer; var ADateTime:TDateTime; var ABillNo:Integer);
begin
SYSDM.qryQuery.Close;
SYSDM.qryQuery.SQL.Clear;
SYSDM.qryQuery.SQL.Add('select top 2 * from CSH500 where C500_001='+IntToStr(AccNo)+' and ((C500_003<='+GetDateString(ADate)+' and C500_004<='+IntToStr(ABill)+') or C500_003<'+GetDateString(ADate)+')');
SYSDM.qryQuery.SQL.Add('order by C500_001,C500_003 desc,C500_004 desc');
SYSDM.qryQuery.Open;
SYSDM.qryQuery.Last;
ADateTime:=SYSDM.qryQuery.FieldByName('C500_003').Value;
ABillNo:=SYSDM.qryQuery.FieldByName('C500_004').Value;
end;
//重算所有记录的余额
//AccNo:帐户编号
//ADateTime:票据日期
//ABillNo:票据编号
procedure ReCalcBalance(AccNo:Integer; ADateTime:TDateTime; ABillNo:Integer);
var
Amount:double;
begin
SYSDM.qryQuery.Close;
SYSDM.qryQuery.SQL.Clear;
SYSDM.qryQuery.SQL.Add('select * from CSH500 where C500_001='+IntToStr(AccNo)+' and ((C500_003>='+GetDateString(ADateTime)+' and C500_004>='+IntToStr(ABillNo)+') or C500_003>'+GetDateString(ADateTime)+')');
SYSDM.qryQuery.SQL.Add('order by C500_001,C500_003,C500_004');
SYSDM.qryQuery.Open;
Amount:=SYSDM.qryQuery.FieldByName('C500_014').Value;
{showmessage('帐号:'+inttostr(AccNo)+#13#13+
'日期:'+formatdatetime('yyyy-mm-dd',ADateTime)+#13#13+
'编号:'+inttostr(abillno)+#13#13+
'金额:'+SYSDM.qryQuery.FieldByName('C500_014').asstring
);
}
SYSDM.qryQuery.Next;
while not SYSDM.qryQuery.Eof do
begin
SYSDM.qryQuery.Edit;
if SYSDM.qryQuery.FieldByName('C500_008').Value=0 then //收入
Amount:=Amount+SYSDM.qryQuery.FieldByName('C500_007').Value
else if SYSDM.qryQuery.FieldByName('C500_008').Value=1 then //支出
Amount:=Amount-SYSDM.qryQuery.FieldByName('C500_007').Value;
SYSDM.qryQuery.FieldByName('C500_014').Value:=Amount;
SYSDM.qryQuery.Post;
SYSDM.qryQuery.Next;
end;
end;
//取得帐户的余额
function GetAccBalance(AccNo:Integer;ADate:TDateTime):Double;
begin
SYSDM.qryQuery.Close;
SYSDM.qryQuery.SQL.Clear;
SYSDM.qryQuery.SQL.Add('select top 1 C500_014 from CSH500 where C500_001='+IntToStr(AccNo)+' and C500_003<='+GetDateString(ADate)+' order by C500_003 desc,C500_004 desc');
SYSDM.qryQuery.Open;
if SYSDM.qryQuery.FieldByName('C500_014').IsNull then
Result:=0
else
Result:=SYSDM.qryQuery.FieldByName('C500_014').Value;
end;
//取得某个帐户某个期间的金额
//AccNo:帐户编号(电脑编号)
//AFromDate:起始日期
//AToDate:结束日期
//AFlag:标识(1=期初,2=收入,3=支出)
function GetAccAmount(AccNo:Integer; AFromDate:TDateTime; AToDate:TDateTime; AFlag:Integer):Double;
begin
Result:=0;
if AFlag=1 then //期初
begin
SYSDM.qryQuery.Close;
SYSDM.qryQuery.SQL.Clear;
SYSDM.qryQuery.SQL.Add('select top 1 C500_014 from CSH500 where C500_001='+IntToStr(AccNo));
SYSDM.qryQuery.SQL.Add(' and C500_003<'+GetDateString(AFromDate));
SYSDM.qryQuery.SQL.Add('order by C500_001,C500_003 desc ,C500_004 desc');
SYSDM.qryQuery.Open;
if SYSDM.qryQuery.IsEmpty then
begin
SYSDM.qryQuery.Close;
SYSDM.qryQuery.SQL.Clear;
SYSDM.qryQuery.SQL.Add('select C550_008 from CSH550 where C550_001='+IntToStr(AccNo));
SYSDM.qryQuery.Open;
end;
Result:=SYSDM.qryQuery.Fields[0].AsFloat;
end else
if AFlag=2 then //收入
begin
SYSDM.qryQuery.Close;
SYSDM.qryQuery.SQL.Clear;
SYSDM.qryQuery.SQL.Add('select sum(C500_007) from CSH500 where C500_001='+IntToStr(AccNo));
SYSDM.qryQuery.SQL.Add(' and C500_002<>0 and C500_008=0 and C500_003>='+GetDateString(AFromDate)+' and C500_003<='+GetDateString(AToDate));
SYSDM.qryQuery.Open;
if SYSDM.qryQuery.Fields[0].IsNull then
Result:=0
else
Result:=SYSDM.qryQuery.Fields[0].AsFloat;
end else
if AFlag=3 then //支出
begin
SYSDM.qryQuery.Close;
SYSDM.qryQuery.SQL.Clear;
SYSDM.qryQuery.SQL.Add('select sum(C500_007) from CSH500 where C500_001='+IntToStr(AccNo));
SYSDM.qryQuery.SQL.Add(' and C500_008=1 and C500_003>='+GetDateString(AFromDate)+' and C500_003<='+GetDateString(AToDate));
SYSDM.qryQuery.Open;
if SYSDM.qryQuery.Fields[0].IsNull then
Result:=0
else
Result:=SYSDM.qryQuery.Fields[0].AsFloat;
end;
end;
//销售折扣单,销售发票单,收款单新增、修改、删除时调用
//反写销售定单ORD510B的发票金额、收款折扣、已收金额
//ACode: 销售单号
//AType: 增加=ADD,减少=DEL
procedure UpdateORD510B(ACode,AType:String);
var
AQuery:TADOQuery;
AQuery1:TADOQuery;
AAmount:Double;
ALineNo:Integer;
begin
AQuery:=TADOQuery.Create(nil);
AQuery.Connection:=SYSDM.ADOC;
AQuery1:=TADOQuery.Create(nil);
AQuery1.Connection:=SYSDM.ADOC;
//更新发票金额
AQuery.Close;
AQuery.SQL.Clear;
AQuery.SQL.Add('select A510B_003,A510B_004,sum(A510B_010) as FAmount');
AQuery.SQL.Add('from ACR510B,ACR510A where A510B_001=A510A_001 and A510A_002=0 and A510B_003='+''''+ACode+'''');
AQuery.SQL.Add('group by A510B_003,A510B_004');
AQuery.Open;
while not AQuery.Eof do
begin
AAmount:=AQuery.FieldByName('FAmount').AsFloat;
ALineNo:=AQuery.FieldByName('A510B_004').Value;
AQuery1.Close;
AQuery1.SQL.Clear;
AQuery1.SQL.Add('select A510B_003,A510B_004,sum(A510B_010) as FAmount');
AQuery1.SQL.Add('from ACR510B,ACR510A where A510B_001=A510A_001 and A510A_002=1 and A510B_003='+''''+ACode+''''+' and A510B_004='+IntToStr(ALineNo));
AQuery1.SQL.Add('group by A510B_003,A510B_004');
AQuery1.Open;
AAmount:=AAmount-AQuery1.FieldByName('FAmount').AsFloat;
if AType='DEL' then AAmount:=AAmount*-1;
AQuery1.Close;
AQuery1.SQL.Clear;
AQuery1.SQL.Add('update ORD510B set O510B_024='+FloatToStr(AAmount)+' where O510B_001='+''''+ACode+''''+' and O510B_002='+IntToStr(ALineNo));
AQuery1.ExecSQL;
AQuery.Next;
end;
//更新折扣额
AQuery.Close;
AQuery.SQL.Clear;
AQuery.SQL.Add('select A500B_003,A500B_004,sum(A500B_007) as FAmount');
AQuery.SQL.Add('from ACR500B where A500B_003='+''''+ACode+'''');
AQuery.SQL.Add('group by A500B_003,A500B_004');
AQuery.Open;
while not AQuery.Eof do
begin
AAmount:=AQuery.FieldByName('FAmount').AsFloat;
ALineNo:=AQuery.FieldByName('A500B_004').Value;
if AType='DEL' then AAmount:=AAmount*-1;
AQuery1.Close;
AQuery1.SQL.Clear;
AQuery1.SQL.Add('update ORD510B set O510B_025='+FloatToStr(AAmount)+' where O510B_001='+''''+ACode+''''+' and O510B_002='+IntToStr(ALineNo));
AQuery1.ExecSQL;
AQuery.Next;
end;
//更新收款金额
AQuery.Close;
AQuery.SQL.Clear;
AQuery.SQL.Add('select A510B_003,A510B_004,sum(C510_008) as FAmount');
AQuery.SQL.Add('from CSH510,CSH500,ACR510B');
AQuery.SQL.Add('where C510_001=C500_001 and C510_002=C500_002 and C510_003=C500_003 and C510_004=C500_004 and C510_005=A510B_001 and C510_006=A510B_002 and ');
AQuery.SQL.Add(' C500_016=1 and A510B_003='+''''+ACode+'''');
AQuery.SQL.Add('group by A510B_003,A510B_004');
AQuery.Open;
while not AQuery.Eof do
begin
AAmount:=AQuery.FieldByName('FAmount').AsFloat;
ALineNo:=AQuery.FieldByName('A510B_004').Value;
if AType='DEL' then AAmount:=AAmount*-1;
AQuery1.Close;
AQuery1.SQL.Clear;
AQuery1.SQL.Add('update ORD510B set O510B_027='+FloatToStr(AAmount)+' where O510B_001='+''''+ACode+''''+' and O510B_002='+IntToStr(ALineNo));
AQuery1.ExecSQL;
AQuery.Next;
end;
AQuery1.Close;
AQuery1.Free;
AQuery.Close;
AQuery.Free;
end;
//采购折扣单,采购发票单,付款单新增、修改、删除时调用
//反写采购定单PUR510B的发票金额、付款折扣、已付金额
//ACode: 采购单号
//AType: 增加=ADD,减少=DEL
procedure UpdatePUR510B(ACode,AType:String);
var
AQuery:TADOQuery;
AAmount:Double;
ALineNo:Integer;
begin
AQuery:=TADOQuery.Create(nil);
AQuery.Connection:=SYSDM.ADOC;
//更新发票金额
AQuery.Close;
AQuery.SQL.Clear;
AQuery.SQL.Add('select A510B_003,A510B_004,sum(A510B_010) as FAmount');
AQuery.SQL.Add('from ACP510B,ACP510A where A510B_001=A510A_001 and A510A_002=0 and A510B_003='+''''+ACode+'''');
AQuery.SQL.Add('group by A510B_003,A510B_004');
AQuery.Open;
while not AQuery.Eof do
begin
AAmount:=AQuery.FieldByName('FAmount').AsFloat;
ALineNo:=AQuery.FieldByName('A510B_004').Value;
SYSDM.qryQuery.Close;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?