凭证编号 欠款人 欠条金额 开具日期     操作人    操作日期 欠款差额 还款金额 还款日期   收款人 欠款余额
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.   

    用delphi自带的QR报表控件或者下载安装FR报表控件,只要关联控件和数据库字段就行,简易的报表实现还是很简单的。
      

  2.   

    select 字段 from 表1 inner join 表2 on 表1.编号=表2.欠条编号
      

  3.   

    至于报表控件很多,可以用第三方的,fastreport,reportmachine等
      

  4.   

    使用fastreport和cxGrid的打印组件都可以做。
    1.先做好查询,取出数据
    2.fastreport按照简单报表那样做,然后设置:SuppressRepeated := True;
      

  5.   

      这个报表 好像 要这种:
    ① 表示:凭证编号, 123456  表示: 项/字段①123  6
    ①  3456
    ①  3456
    ②123  6
    ②  3456
    ②  3456
     
    2楼 还要用两个 Update  好像能得到我要数据 
      大家再想想 . 
      

  6.   

    var Zm,Hm:integer;
    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 啊  
    有点糊涂了..呵呵    谁来给 淋 桶水
      

  7.   

    推荐FastReport,一直用他做报表的。
      

  8.   


                //余欠=Zm-Hm;
                 adoquery3.post;
                 adoquery2.Next;
               end;
             end;
          adoquery1.Next;
          // 就在这里  
          //加了 
          Zm:=0;Hm:=0;
          end;
      end;
        showmessage('OK');
    搞定. 就当散分吧!