?? cshcomm.pas.svn-base
字號(hào):
AQuery.Close;
AQuery.SQL.Clear;
AQuery.SQL.Add('select A510B_003,A510B_004,sum(C510B_006) as FAmount');
AQuery.SQL.Add('from CSH510A,CSH510B,ACP510B');
AQuery.SQL.Add('where C510A_001=C510B_001 and C510B_003=A510B_001 and C510B_004=A510B_002 and');
AQuery.SQL.Add(' C510A_003='+IntToStr(AccNo)+' and C510A_010='+GetDateString(ADate)+' and C510A_002='+IntToStr(ABillNo));
AQuery.SQL.Add('group by A510B_003,A510B_004');
AQuery.Open;
while not AQuery.Eof do
begin
AAmount:=AQuery.FieldByName('FAmount').Value;
ALineNo:=AQuery.FieldByName('A510B_004').Value;
if AType='DEL' then AAmount:=AAmount*-1;
SYSDM.qryQuery.Close;
SYSDM.qryQuery.SQL.Clear;
SYSDM.qryQuery.SQL.Add('update PUR510B set P510B_027=P510B_027+'+FloatToStr(AAmount)+' where P510B_001='+''''+AQuery.FieldByName('A510B_003').AsString+''''+' and P510B_002='+IntToStr(ALineNo));
SYSDM.qryQuery.ExecSQL;
AQuery.Next;
end;
AQuery.Close;
AQuery.Free;
end;
//反寫(xiě)銷(xiāo)售發(fā)票ACR510B的已收支金額
//AccNo:帳戶(hù)編號(hào) ABillNo:單據(jù)編號(hào)(C500_004)
//AType:增加金額=ADD,減少金額=DEL
procedure UpdateACR510B(AccNo:Integer;ADate:TDateTime;ABillNo:Integer;AType:String);
var
AQuery:TADOQuery;
AAmount:Double;
ALineNo:Integer;
procedure UpdateStatus(ACode:string);
var
AQuery:TADOQuery;
strSQL:string;
begin
AQuery:=TADOQuery.Create(nil);
AQuery.Connection:=SYSDM.ADOC;
AQuery.SQL.Add('select sum(A510B_010) as FTotal, sum(A510B_012) as FRecAmunot from ACR510B where A510B_001='+''''+ACode+'''');
AQuery.Open;
if AQuery.FieldByName('FRecAmunot').Value=0 then strSQL:='update ACR510A set A510A_003=0 where A510A_001='+''''+ACode+'''';
if AQuery.FieldByName('FRecAmunot').Value=AQuery.FieldByName('FTotal').Value then strSQL:='update ACR510A set A510A_003=3 where A510A_001='+''''+ACode+'''';
if (AQuery.FieldByName('FRecAmunot').Value<AQuery.FieldByName('FTotal').Value) and (AQuery.FieldByName('FRecAmunot').Value>0) then strSQL:='update ACR510A set A510A_003=2 where A510A_001='+''''+ACode+'''';
AQuery.Close;
if strSQL<>'' then
begin
AQuery.SQL.Clear;
AQuery.SQL.Add(strSQL);
AQuery.ExecSQL;
end;
AQuery:=nil;
AQuery.Free;
end;
begin
AQuery:=TADOQuery.Create(nil);
AQuery.Connection:=SYSDM.ADOC;
AQuery.Close;
AQuery.SQL.Clear;
AQuery.SQL.Add('select C510B_003,C510B_004,sum(C510B_006) as FAmount');
AQuery.SQL.Add('from CSH510A,CSH510B');
AQuery.SQL.Add('where C510B_001=C510A_001 and C510A_003='+IntToStr(AccNo)+' and C510A_010='+GetDateString(ADate)+' and C510A_002='+IntToStr(ABillNo));
AQuery.SQL.Add('group by C510B_003,C510B_004');
AQuery.Open;
while not AQuery.Eof do
begin
AAmount:=AQuery.FieldByName('FAmount').Value;
if AType='DEL' then AAmount:=AAmount*-1;
ALineNo:=AQuery.FieldByName('C510B_004').Value;
SYSDM.qryQuery.Close;
SYSDM.qryQuery.SQL.Clear;
SYSDM.qryQuery.SQL.Add('update ACR510B set A510B_012=A510B_012+'+FloatToStr(AAmount)+' where A510B_001='+''''+AQuery.FieldByName('C510B_003').AsString+''''+' and A510B_002='+IntToStr(ALineNo));
SYSDM.qryQuery.ExecSQL;
SYSDM.qryQuery.Close;
SYSDM.qryQuery.SQL.Clear;
SYSDM.qryQuery.SQL.Add('select distinct A510B_001 from ACR510B where A510B_001='+''''+AQuery.FieldByName('C510B_003').AsString+''''+' and A510B_002='+IntToStr(ALineNo));
SYSDM.qryQuery.Open;
UpdateStatus(SYSDM.qryQuery.FieldByName('A510B_001').Value);
AQuery.Next;
end;
AQuery.Close;
AQuery.Free;
end;
//反寫(xiě)采購(gòu)發(fā)票ACP510B的已收支金額
//AccNo:帳戶(hù)編號(hào) ABillNo:單據(jù)編號(hào)(C500_004)
//AType: 增加=ADD,減少=DEL
procedure UpdateACP510B(AccNo:Integer;ADate:TDateTime;ABillNo:Integer;AType:String);
var
AQuery:TADOQuery;
AAmount:Double;
ALineNo:Integer;
procedure UpdateStatus(ACode:string);
var
AQuery:TADOQuery;
strSQL:string;
begin
AQuery:=TADOQuery.Create(nil);
AQuery.Connection:=SYSDM.ADOC;
AQuery.SQL.Add('select sum(A510B_010) as FTotal, sum(A510B_012) as FPayAmunot from ACP510B where A510B_001='+''''+ACode+'''');
AQuery.Open;
if AQuery.FieldByName('FPayAmunot').Value=0 then strSQL:='update ACP510A set A510A_003=0 where A510A_001='+''''+ACode+'''';
if AQuery.FieldByName('FPayAmunot').Value=AQuery.FieldByName('FTotal').Value then strSQL:='update ACP510A set A510A_003=3 where A510A_001='+''''+ACode+'''';
if (AQuery.FieldByName('FPayAmunot').Value<AQuery.FieldByName('FTotal').Value) and (AQuery.FieldByName('FPayAmunot').Value>0) then strSQL:='update ACP510A set A510A_003=2 where A510A_001='+''''+ACode+'''';
AQuery.Close;
if strSQL<>'' then
begin
AQuery.SQL.Clear;
AQuery.SQL.Add(strSQL);
AQuery.ExecSQL;
end;
AQuery:=nil;
AQuery.Free;
end;
begin
AQuery:=TADOQuery.Create(nil);
AQuery.Connection:=SYSDM.ADOC;
AQuery.Close;
AQuery.SQL.Clear;
AQuery.SQL.Add('select C510B_003,C510B_004,sum(C510B_006) as FAmount');
AQuery.SQL.Add('from CSH510A,CSH510B');
AQuery.SQL.Add('where C510A_001=C510B_001 and C510A_003='+IntToStr(AccNo)+' and C510A_010='+GetDateString(ADate)+' and C510A_002='+IntToStr(ABillNo));
AQuery.SQL.Add('group by C510B_003,C510B_004');
AQuery.Open;
while not AQuery.Eof do
begin
AAmount:=AQuery.FieldByName('FAmount').Value;
if AType='DEL' then AAmount:=AAmount*-1;
ALineNo:=AQuery.FieldByName('C510B_004').Value;
SYSDM.qryQuery.Close;
SYSDM.qryQuery.SQL.Clear;
SYSDM.qryQuery.SQL.Add('update ACP510B set A510B_012=A510B_012+'+FloatToStr(AAmount)+' where A510B_001='+''''+AQuery.FieldByName('C510B_003').AsString+''''+' and A510B_002='+IntToStr(ALineNo));
SYSDM.qryQuery.ExecSQL;
SYSDM.qryQuery.Close;
SYSDM.qryQuery.SQL.Clear;
SYSDM.qryQuery.SQL.Add('select distinct A510B_001 from ACP510B where A510B_001='+''''+AQuery.FieldByName('C510B_003').AsString+''''+' and A510B_002='+IntToStr(ALineNo));
SYSDM.qryQuery.Open;
UpdateStatus(SYSDM.qryQuery.FieldByName('A510B_001').Value);
AQuery.Next;
end;
AQuery.Close;
AQuery.Free;
end;
//取CSH610的順序編號(hào)
function GetSeqNo(ADateTime:TDateTime):string;
begin
SYSDM.qryQuery.Close;
SYSDM.qryQuery.SQL.Clear;
SYSDM.qryQuery.SQL.Add('select max(C610_011) from CSH610 where C610_005<>0 and C610_006='+GetDateString(ADateTime));
SYSDM.qryQuery.Open;
Result:=IntToStr(SYSDM.qryQuery.Fields[0].AsInteger+1);
SYSDM.qryQuery.Close;
end;
//取得應(yīng)收應(yīng)付帳的期初余額
function GetAcrOpen(AInOut,ACustNo,ACurrNo,AType:Integer;AFromDate:TDateTime):Double;
var
AQuery:TADOQuery;
begin
AQuery:=TADOQuery.Create(nil);
AQuery.Connection:=SYSDM.ADOC;
//如果查詢(xún)起始日期在建帳之后,則取上一條記錄的余額,如果查詢(xún)起始日期在建帳之前,則取建立的期初余額
AQuery.Close;
AQuery.SQL.Clear;
AQuery.SQL.Add('select top 1 C610_008 from CSH610 where C610_004='+IntToStr(AInOut)+' and C610_001='+IntToStr(AType)+' and C610_002='+IntToStr(ACustNo)+' and C610_003='+IntToStr(ACurrNo)+' and C610_006<'+GetDateString(AFromDate)+' order by C610_006 desc,C610_011 desc');
AQuery.Open;
if AQuery.IsEmpty then
begin
AQuery.Close;
AQuery.SQL.Clear;
AQuery.SQL.Add('select C610_008 from CSH610 where C610_004='+IntToStr(AInOut)+' and C610_001='+IntToStr(AType)+' and C610_002='+IntToStr(ACustNo)+' and C610_003='+IntToStr(ACurrNo)+' and C610_005=0');
AQuery.Open;
end;
Result:=AQuery.FieldByName('C610_008').AsFloat;
AQuery.Close;
AQuery.Free;
end;
//更新債權(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: 對(duì)象類(lèi)型(0=客戶(hù),1=員工)
//ATypeNo: 債權(quán)債務(wù)(0=債權(quán),1=債務(wù)) 銷(xiāo)售發(fā)票=0,采購(gòu)發(fā)票=1
//AInOut: 收支類(lèi)型 0:期初 1:收入 2:支出 (0=期初,1=應(yīng)收應(yīng)付,2=已收已付) 銷(xiāo)售發(fā)票=1,采購(gòu)發(fā)票=1,銷(xiāo)售退貨=1,采購(gòu)?fù)素?1,銷(xiāo)售收款=2,采購(gòu)付款=2
//ABillType: 單據(jù)類(lèi)型(0=期初單號(hào),1=銷(xiāo)售發(fā)票,2=采購(gòu)發(fā)票,3=收支單)
//AType: ADD=新增,DEL=刪除
//AOrder:相關(guān)單號(hào):銷(xiāo)售發(fā)票號(hào)、采購(gòu)發(fā)票號(hào)、收支單號(hào)
procedure UpdateCSH610(AObjType,ACustNo,ACurrNo,AInOut,ATypeNo,ABillNo,ABillType:Integer;ADate:TDateTime;AAmount:Double;AOrder,ARemark,AType:String);
var
AQuery:TADOQuery;
ABalance:Double;
S,ABill:String;
begin
if AObjType>=2 then Exit;
AQuery:=TADOQuery.Create(nil);
AQuery.Connection:=SYSDM.ADOC;
if AType='ADD' then
begin
ABill:=GetSeqNo(ADate);
if ABillType=0 then ABill:='0';
AQuery.Close;
AQuery.SQL.Clear;
AQuery.SQL.Add('select top 1 C610_008 from CSH610 where C610_001='+IntToStr(AObjType)+' and C610_002='+IntToStr(ACustNo)+' and C610_003='+IntToStr(ACurrNo)+' and ');
AQuery.SQL.Add(' ((C610_006='+GetDateString(ADate)+' and C610_011<'+ABill+') or (C610_006<'+GetDateString(ADate)+'))');
AQuery.SQL.Add('order by C610_006 desc,C610_011 desc');
AQuery.Open;
ABalance:=AQuery.FieldByName('C610_008').AsFloat;
case ATypeNo of
0:S:=GetDBString('COM00009010'); //銷(xiāo)售
1:S:=GetDBString('COM00009011'); //采購(gòu)
end;
case AInOut of
1:S:=S+GetDBString('COM00009012'); //發(fā)票
2:S:=S+GetDBString('COM00009013'); //退貨
end;
if ABillType in [0,3] then S:=ARemark;
AQuery.Close;
AQuery.SQL.Clear;
AQuery.SQL.Add('select * from CSH610 where C610_001 is null');
AQuery.Open;
AQuery.Append;
AQuery.FieldByName('C610_001').Value:=AObjType; //對(duì)象類(lèi)型(0=客戶(hù),1=員工)
AQuery.FieldByName('C610_002').Value:=ACustNo; //對(duì)象編號(hào)
AQuery.FieldByName('C610_003').Value:=ACurrNo; //幣別編號(hào)
AQuery.FieldByName('C610_004').Value:=ATypeNo; //債權(quán)債務(wù)(0=債權(quán),1=債務(wù))
AQuery.FieldByName('C610_005').Value:=AInOut; //收支類(lèi)型(0=期初,1=收入,2=支出)
AQuery.FieldByName('C610_006').Value:=ADate; //收支日期
AQuery.FieldByName('C610_007').Value:=AAmount; //收支金額 銷(xiāo)售發(fā)票和采購(gòu)發(fā)票都等于0
AQuery.FieldByName('C610_008').Value:=ABalance; //收支余額
AQuery.FieldByName('C610_009').Value:=S; //摘要說(shuō)明
AQuery.FieldByName('C610_010').Value:=AOrder; //相關(guān)單號(hào)
AQuery.FieldByName('C610_011').AsString:=ABill; //順序單號(hào)
AQuery.FieldByName('C610_012').Value:=ABillType;//單據(jù)類(lèi)型(0=期初單號(hào),1=銷(xiāo)售發(fā)票,2=采購(gòu)發(fā)票,3=收支單)
AQuery.Post;
if AType='DEL' then AAmount:=AAmount*-1;
if AInOut=2 then AAmount:=AAmount*-1;
//更新后面記錄的余額字段
AQuery.Close;
AQuery.SQL.Clear;
AQuery.SQL.Add('update CSH610 set C610_008=C610_008+'+FloatToStr(AAmount));
AQuery.SQL.Add('where C610_001='+IntToStr(AObjType)+' and C610_002='+IntToStr(ACustNo)+' and ');
AQuery.SQL.Add(' C610_003='+IntToStr(ACurrNo)+' and ');
AQuery.SQL.Add(' ((C610_006='+GetDateString(ADate)+' and C610_011>='+ABill+') or (C610_006>'+GetDateString(ADate)+'))');
AQuery.ExecSQL;
end else
if AType='DEL' then
begin
//刪除對(duì)應(yīng)銷(xiāo)售發(fā)票的債權(quán)債務(wù)帳本
//根據(jù)順序編號(hào):ABillNo來(lái)刪除:ABillNo無(wú)法獲得準(zhǔn)確的值
//根據(jù)ACode來(lái)刪除,一張發(fā)票可以對(duì)應(yīng)多個(gè)債權(quán)債務(wù)帳本,無(wú)法確認(rèn)
AQuery.Close;
AQuery.SQL.Clear;
AQuery.SQL.Add('delete from CSH610 where C610_010='+''''+AOrder+'''');
AQuery.ExecSQL;
if AType='DEL' then AAmount:=AAmount*-1;
if AInOut=2 then AAmount:=AAmount*-1;
//更新相同用戶(hù),相同幣別,相同交易類(lèi)型后面的余額字段
AQuery.Close;
AQuery.SQL.Clear;
AQuery.SQL.Add('update CSH610 set C610_008=C610_008+'+FloatToStr(AAmount));
AQuery.SQL.Add('where C610_001='+IntToStr(AObjType)+' and C610_002='+IntToStr(ACustNo)+' and ');
AQuery.SQL.Add(' C610_003='+IntToStr(ACurrNo)+' and ');
AQuery.SQL.Add(' ((C610_006='+GetDateString(ADate)+' and C610_011>='+IntToStr(ABillNo)+') or (C610_006>'+GetDateString(ADate)+'))');
AQuery.ExecSQL;
end;
AQuery.Close;
AQuery.Free;
end;
end.
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -