凭证编号 欠款人 欠条金额 开具日期 操作人 操作日期 欠款差额 还款金额 还款日期 收款人 欠款余额
1001 钟 2000 2009-2-20 蒋 2009-2-21 2000 0 2000
1001 钟 2000 1000 2009-3-1 蒋 1000
1001 钟 1000 1000 2009-3-5 蒋 0
1002 地 2581 2009-3-5 李 2009-3-6 2581 2581
1002 2581 2581 2009-4-0 李 0
格式如上
表 2
CREATE TABLE [dbo].[欠条明细表] (
[id] [bigint] IDENTITY (1, 1) NOT NULL ,
[欠条编号] [bigint] NULL ,
[付款金额] [money] NULL ,
[付款日期] [datetime] NULL ,
[操作人] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[操作日期] [datetime] NULL
) ON [PRIMARY]
表1
CREATE TABLE [dbo].[欠条表] (
[编号] [bigint] IDENTITY (1, 1) NOT NULL ,
[债务人] [nvarchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[所在地] [nvarchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[欠款金额] [money] NULL ,
[开具日期] [datetime] NULL ,
[担保人] [nvarchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[实收金额] [money] NULL ,
[已结清] [bit] NULL ,
[结清日期] [datetime] NULL ,
[操作人] [nvarchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[操作日期] [datetime] NULL ,
[有效] [bit] NULL ,
[对帐截止日期] [datetime] NULL
) ON [PRIMARY]表1.编号=表2.欠条编号大家 帮帮忙 想个办法 或给个算法 再或者一点点意件.
1.先做好查询,取出数据
2.fastreport按照简单报表那样做,然后设置:SuppressRepeated := True;
① 表示:凭证编号, 123456 表示: 项/字段①123 6
① 3456
① 3456
②123 6
② 3456
② 3456
2楼 还要用两个 Update 好像能得到我要数据
大家再想想 .
begin
Zm:=0;
Hm:=0;
adoquery3.close;
adoquery3.SQL.Clear;
adoquery3.SQL.add('Delete from 欠条明细报表 ');
adoquery3.ExecSQL; adoquery3.close;
adoquery3.SQL.Clear;
adoquery3.SQL.add('select * from 欠条明细报表 order by ID,凭证编号,还款日期 asc');
adoquery3.Open; adoquery1.close;
adoquery1.SQL.Clear;
adoquery1.SQL.add('select * from 欠条表 ');
adoquery1.Open;
if adoquery1.RecordCount>0 then
begin
while not adoquery1.Eof do
begin
adoquery3.append;
//欠条信息
adoquery3.Fieldbyname('凭证编号').AsString:=adoquery1.Fieldbyname('编号').AsString;
adoquery3.Fieldbyname('欠款人').AsString:=adoquery1.Fieldbyname('债务人').AsString;
adoquery3.Fieldbyname('欠条金额').AsInteger:=adoquery1.Fieldbyname('欠款金额').AsInteger;
adoquery3.Fieldbyname('开具日期').Asdatetime:=adoquery1.Fieldbyname('开具日期').Asdatetime;
adoquery3.Fieldbyname('操作人').AsString:=adoquery1.Fieldbyname('操作人').AsString;
adoquery3.Fieldbyname('余欠金额').AsInteger:=adoquery1.Fieldbyname('欠款金额').AsInteger;
adoquery3.post;
Zm:=adoquery1.Fieldbyname('欠款金额').AsInteger;
//showmessage('Zm'+Inttostr(Zm));
adoquery2.close;
adoquery2.SQL.Clear;
adoquery2.SQL.add('select * from 欠条明细表 where 欠条编号='''+Trim(adoquery1.Fieldbyname('编号').AsString)+''' order by 付款日期 asc');
adoquery2.Open;
if adoquery1.RecordCount>0 then
begin
while not adoquery2.Eof do
begin Hm:=Hm+adoquery2.Fieldbyname('付款金额').AsInteger;
adoquery3.append;
adoquery3.Fieldbyname('凭证编号').AsString:=adoquery1.Fieldbyname('编号').AsString;
adoquery3.Fieldbyname('欠款人').AsString:=adoquery1.Fieldbyname('债务人').AsString;
adoquery3.Fieldbyname('还款金额').AsInteger:=adoquery2.Fieldbyname('付款金额').AsInteger;
adoquery3.Fieldbyname('还款日期').AsString:=adoquery2.Fieldbyname('付款日期').AsString;
adoquery3.Fieldbyname('收款人').AsString:=adoquery2.Fieldbyname('操作人').AsString;
adoquery3.Fieldbyname('余欠金额').AsInteger:=Zm-Hm;
//showmessage('Hm'+Inttostr(Hm));
//欠条还款 信息
//余欠=Zm-Hm;
adoquery3.post;
adoquery2.Next;
end;
end;
adoquery1.Next;
end;
end;
showmessage('OK');为什么 这个数据不对啊 .---- adoquery3.Fieldbyname('余欠金额').AsInteger:=Zm-Hm;
假如还完了钱
到最后 Zm-Hm 不是等于 0 啊
有点糊涂了..呵呵 谁来给 淋 桶水
//余欠=Zm-Hm;
adoquery3.post;
adoquery2.Next;
end;
end;
adoquery1.Next;
// 就在这里
//加了
Zm:=0;Hm:=0;
end;
end;
showmessage('OK');
搞定. 就当散分吧!