?? cshcomm.pas.svn-base
字號:
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);
//取票據(jù)編號
function GetBillNo(ADateTime:TDateTime):string;
//取得上一條記錄的日期及編號
procedure GetPriorRecord(AccNo:Integer;ADate:TDateTime;ABill:Integer; var ADateTime:TDateTime; var ABillNo:Integer);
//重算當(dāng)前記錄以后的記錄的余額 //AccNo:帳戶編號
procedure ReCalcBalance(AccNo:Integer; ADateTime:TDateTime; ABillNo:Integer);
//取得帳戶的余額
function GetAccBalance(AccNo:Integer;ADate:TDateTime):Double;
//取得某個(gè)帳戶某個(gè)期間的金額
//AccNo:帳戶編號(電腦編號)
//AFromDate:起始日期
//AToDate:結(jié)束日期
//AFlag:標(biāo)識(1=期初,2=收入,3=支出)
function GetAccAmount(AccNo:Integer; AFromDate:TDateTime; AToDate:TDateTime; AFlag:Integer):Double;
//采購折扣單,采購發(fā)票單,付款單新增、修改、刪除時(shí)調(diào)用
//反寫采購定單PUR510B的發(fā)票金額、付款折扣、已付金額
//ACode: 采購單號
//AType: 增加=ADD,減少=DEL
procedure UpdatePUR510B(ACode,AType:String); overload;
//銷售折扣單,銷售發(fā)票單,收款單新增、修改、刪除時(shí)調(diào)用
//反寫銷售定單ORD510B的發(fā)票金額、收款折扣、已收金額
//ACode: 銷售單號
//AType: 增加=ADD,減少=DEL
procedure UpdateORD510B(ACode,AType:String); overload;
procedure UpdateTAS533(ACode,AType:String);
//反寫銷售定單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;
//反寫銷售發(fā)票ACR510B的已收支金額
//AType: 增加=ADD,減少=DEL
procedure UpdateACR510B(AccNo:Integer;ADate:TDateTime;ABillNo:Integer;AType:String);
//反寫采購發(fā)票ACP510B的已收支金額
//AType: 增加=ADD,減少=DEL
procedure UpdateACP510B(AccNo:Integer;ADate:TDateTime;ABillNo:Integer;AType:String);
//取CSH610的順序編號
function GetSeqNo(ADateTime:TDateTime):string;
//取得應(yīng)收應(yīng)付帳的期初余額
function GetAcrOpen(AInOut,ACustNo,ACurrNo,AType:Integer;AFromDate:TDateTime):Double;
//更新債權(quán)債務(wù)帳本表
//新增時(shí):UpdateCSH610(AObjType,ACustNo,ACurrNo,AInOut,ATypeNo,ABillNo,ABillType,ADate,AAmount,edtCode.Text,'','ADD');
//刪除時(shí):UpdateCSH610(AOldObjType,AOldCustNo,AOldCurrNo,0,0,AOldBillNo,0,AOldDate,AOldAmount,'','','DEL');
//修改時(shí),保存前,刪除舊的調(diào)用一次,保存后,增加新的調(diào)用一次
// 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: 債權(quán)債務(wù)(0=債權(quán),1=債務(wù)) 銷售發(fā)票=0,采購發(fā)票=1
//AInOut: 收支類型(0=期初,1=應(yīng)收應(yīng)付,2=已收已付) 銷售發(fā)票=1,采購發(fā)票=1,銷售退貨=1,采購?fù)素?1,銷售收款=2,采購付款=2
//ABillType: 單據(jù)類型(0=期初單號,1=銷售發(fā)票,2=采購發(fā)票,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 SYS500C A, CSH550 B');
AQuery.SQL.Add('where A.S500C_002=B.C550_001 and A.S500C_003=''ACC'' and A.S500C_004='+GetBoolean(True)+' and A.S500C_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;
//取票據(jù)編號
//ADateTime:日期
function GetBillNo(ADateTime:TDateTime):string;
begin
SYSDM.qryQuery.Close;
SYSDM.qryQuery.SQL.Clear;
SYSDM.qryQuery.SQL.Add('select max(C510A_002) from CSH510A where C510A_004<>0 and C510A_010='+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 CSH510A where C510A_003='+IntToStr(AccNo)+' and ((C510A_010<='+GetDateString(ADate)+' and C510A_002<='+IntToStr(ABill)+') or C510A_010<'+GetDateString(ADate)+')');
SYSDM.qryQuery.SQL.Add('order by C510A_010,C510A_002 desc');
SYSDM.qryQuery.Open;
SYSDM.qryQuery.Last;
if not SYSDM.qryQuery.IsEmpty then
begin
ADateTime:=SYSDM.qryQuery.FieldByName('C510A_010').Value;
ABillNo:=SYSDM.qryQuery.FieldByName('C510A_002').Value;
end;
end;
//重算所有相關(guān)記錄的余額:相同的帳戶,在特定票據(jù)之后
//AccNo:帳戶編號
//ADateTime:票據(jù)日期
//ABillNo:票據(jù)編號
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 CSH510A where C510A_003='+IntToStr(AccNo)+' and ((C510A_010>='+GetDateString(ADateTime)+' and C510A_002>='+IntToStr(ABillNo)+') or C510A_010>'+GetDateString(ADateTime)+')');
SYSDM.qryQuery.SQL.Add('order by C510A_010,C510A_002');
SYSDM.qryQuery.Open;
if SYSDM.qryQuery.IsEmpty then
Amount:=0
else
Amount:=SYSDM.qryQuery.FieldByName('C510A_013').AsFloat;
SYSDM.qryQuery.Next;
while not SYSDM.qryQuery.Eof do
begin
SYSDM.qryQuery.Edit;
if SYSDM.qryQuery.FieldByName('C510A_005').Value=0 then //收入
Amount:=Amount+SYSDM.qryQuery.FieldByName('C510A_009').Value
else if SYSDM.qryQuery.FieldByName('C510A_005').Value=1 then //支出
Amount:=Amount-SYSDM.qryQuery.FieldByName('C510A_009').Value;
SYSDM.qryQuery.FieldByName('C510A_013').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 C510A_013 from CSH510A where C510A_003='+IntToStr(AccNo)+' and C510A_010<='+GetDateString(ADate)+' order by C510A_010 desc,C510A_002 desc');
SYSDM.qryQuery.Open;
if SYSDM.qryQuery.FieldByName('C510A_013').IsNull then
Result:=0
else
Result:=SYSDM.qryQuery.FieldByName('C510A_013').Value;
end;
//取得某個(gè)帳戶某個(gè)期間的金額
//AccNo:帳戶編號(電腦編號)
//AFromDate:起始日期
//AToDate:結(jié)束日期
//AFlag:標(biāo)識(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 C510A_013 from CSH510A where C510A_003='+IntToStr(AccNo));
SYSDM.qryQuery.SQL.Add(' and C510A_010<'+GetDateString(AFromDate));
SYSDM.qryQuery.SQL.Add('order by C510A_010 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(C510A_009) from CSH510A where C510A_013='+IntToStr(AccNo));
SYSDM.qryQuery.SQL.Add(' and C510A_004<>0 and C510A_005=0 and C510A_010>='+GetDateString(AFromDate)+' and C510A_010<='+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(C510A_009) from CSH510A where C510A_013='+IntToStr(AccNo));
SYSDM.qryQuery.SQL.Add(' and C510A_004<>0 and C510A_005=1 and C510A_010>='+GetDateString(AFromDate)+' and C510A_010<='+GetDateString(AToDate));
SYSDM.qryQuery.Open;
if SYSDM.qryQuery.Fields[0].IsNull then
Result:=0
else
Result:=SYSDM.qryQuery.Fields[0].AsFloat;
end;
end;
//銷售折扣單,銷售發(fā)票單,收款單新增、修改、刪除時(shí)調(diào)用
//反寫銷售定單ORD510B的發(fā)票金額、收款折扣、已收金額
//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;
//更新發(fā)票金額
AQuery.Close;
AQuery.SQL.Clear;
AQuery.SQL.Add('select distinct O510B_002');
AQuery.SQL.Add(' from ORD510A,ORD510B');
AQuery.SQL.Add(' where O510A_001=O510B_001 and O510A_001='+''''+ACode+'''');
AQuery.Open;
while not AQuery.Eof do
begin
ALineNo:=AQuery.FieldByName('O510B_002').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');
AQuery1.SQL.Add(' where A510B_001=A510A_001 and A510A_002=0 and A510B_003='+''''+ACode+''''+' and A510B_004='+IntToStr(ALineNo));
AQuery1.SQL.Add(' group by A510B_003,A510B_004');
AQuery1.Open;
AAmount:=AQuery1.FieldByName('FAmount').AsFloat;
AQuery1.Close;
AQuery1.SQL.Clear;
AQuery1.SQL.Add('select A510B_003,A510B_004,sum(A510B_010) as FAmount');
AQuery1.SQL.Add(' from ACR510B,ACR510A');
AQuery1.SQL.Add(' 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;
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 distinct O510B_002');
AQuery.SQL.Add(' from ORD510A,ORD510B');
AQuery.SQL.Add(' where O510A_001=O510B_001 and O510A_001='+''''+ACode+'''');
AQuery.Open;
while not AQuery.Eof do
begin
ALineNo:=AQuery.FieldByName('O510B_002').Value;
AQuery1.Close;
AQuery1.SQL.Clear;
AQuery1.SQL.Add('select A500B_003,A500B_004,sum(A500B_007) as FAmount');
AQuery1.SQL.Add(' from ACR500B,ORD510B ');
AQuery1.SQL.Add(' where A500B_003=O510B_001 and A500B_004=O510B_002 and A500B_003='+''''+ACode+''''+' and O510B_002='+IntToStr(ALineNo));
AQuery1.SQL.Add(' group by A500B_003,A500B_004');
AQuery1.Open;
AAmount:=AQuery1.FieldByName('FAmount').AsFloat;
AQuery1.Close;
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -