Office中国论坛/Access中国论坛

标题: 【Access小品】并驾齐驱--双列报表 [打印本页]

作者: todaynew    时间: 2011-11-30 18:52
标题: 【Access小品】并驾齐驱--双列报表
本帖最后由 todaynew 于 2011-11-30 18:59 编辑

  版友简希望能在一张报表上分左右两个区域打印统一数据源的报表,这个问题稍有些复杂。其基本的算法就是将记录分出页来,比如说每20行为一页,只要能分出这样的页来,就可以用mod计算出左右两个查询。同样的道理,也可在此基础上分出三列或者更多的并列的页面了。分出若干的查询后便只是做几个子报表,以及报表的美化了,这不是本问题的重点。本例的视频是实例完善前录制的,更新后的实例,对报表进行了进一步美化。

      分页可以用一个自定义函数来进行计算,也就是计算记录的顺序号处于第几页:

Function p(num As Long, row As Long) As Long
'参数:num--记录的顺序号,row--页的记录总数
Dim i As Long
For i = 1 To 1000
    If num <= i * row Then
        p = i
        Exit For
    End If
Next
End Function


  [attach]47496[/attach]



  
作者: 简    时间: 2011-11-30 20:43
老汉,我看了,原来你是采用子报表的方式。

我想提两点问题,你是采用挨个选择客户来进行打印的,如果客户单位较多,这种方式是个好方法。但我这里有个情况,客户单位近二十个,可不可以在报表中对客户分组,并且不同客户不同页的方式来进行打印呢,这样一气呵成,也能提高效率。

还有个问题,在生成报表时,序号可以根据客户单位的不同,从1开始,自动编号呢。比如说,中国银行,其明细记录的序号从1开始,12345……,然后建设银行,其明细记录的序号也是按12345……自动编号呢~~~
作者: todaynew    时间: 2011-11-30 21:00
本帖最后由 todaynew 于 2011-11-30 21:04 编辑
简 发表于 2011-11-30 20:43
老汉,我看了,原来你是采用子报表的方式。

我想提两点问题,你是采用挨个选择客户来进行打印的,如果客 ...


1、不选择客户即可分客户全部一次性打印。

2、将子报表中的【销售序号】字段的控件来源,更换为count(这是我在查询中已经设计好的字段),即可显示出连续的序号。

3、给你留一个自学问题。目前是将所有记录不分年度或者月度进行报表输出的,但实际应用中统计报表是需要有统计期间的。那么,如果按年度(或者月度)分客户打印该如何处理呢?
作者: ycxchen    时间: 2011-12-1 09:11
类似报表分列的
作者: changweiren    时间: 2011-12-1 09:41
{:soso_e199:}
作者: asklove    时间: 2011-12-1 11:09
学习
作者: 简    时间: 2011-12-1 11:38
老汉,我把你这个运行在我的数据库上,由于我的记录非常多,一个月好几千条,运行时就非常慢,报表生成不出来,甚至于死机。我分析原因,应该在你的查询count和页字段上。因为几千条记录,这两个字段分析也要用很长的时间,如果记录少,都还好办。当然也有可能是我哪里没有设置好。我想问,有没有更简单,效率更高的方法呢?

还有一个问题,count的内容能不能转成文本型,这样我好根据count来隔行显示不同的颜色。还有根据count内容排序也有个问题,它是按1,10,111这样来排序的,能不能按12345……这样来排序呢。

作者: todaynew    时间: 2011-12-1 14:05
简 发表于 2011-12-1 11:38
老汉,我把你这个运行在我的数据库上,由于我的记录非常多,一个月好几千条,运行时就非常慢,报表生成不出 ...

你对count字段的想法似乎是矛盾的。

其实不必转为文本,用数字型更容易进行隔行显示的控制,只需要用count mod 2的值(为0或者为1)即可进行条件格式设置了。

关于计算速度问题,我在看看是否有优化的可能,一会告诉你。
作者: todaynew    时间: 2011-12-1 14:26
简 发表于 2011-12-1 11:38
老汉,我把你这个运行在我的数据库上,由于我的记录非常多,一个月好几千条,运行时就非常慢,报表生成不出 ...

[attach]47504[/attach]

在明细表中增加了一个count字段。目前的处理是在打印时先对该字段进行一个更新查询,然后再打印报表。这个速度可能依然会比较慢。

如果想根本性解决这个问题,就需要在数据的录入和编辑页面来处理count字段。也就是说在录入或者修改数据时,对当前记录的count字段进行更新查询。这个方法是将count字段的处理时间前移到录入修改过程中,并且由于只是对当前的一条记录做这个工作,因此上便不会有慢的感觉了,在打印输出的时候也不再需要对该字段进行处理了。具体的实现方法,你自己摸索着做一下。
作者: 简    时间: 2011-12-1 23:12
todaynew 发表于 2011-12-1 14:05
你对count字段的想法似乎是矛盾的。

其实不必转为文本,用数字型更容易进行隔行显示的控制,只需要用c ...

用数字型是可以进行隔行显示,但有个问题,数字型在排序上,是按照1,11,111,1111这样的顺序来排列的,而不是按照1,2,3,4,5……的顺序,这样一来,使得隔行显示就失效了,会出现两行或三行是同一种颜色的情况。
作者: 简    时间: 2011-12-1 23:15
todaynew 发表于 2011-12-1 14:26
在明细表中增加了一个count字段。目前的处理是在打印时先对该字段进行一个更新查询,然后再打印报表。 ...

感觉有点棘手,似乎要双列打印,必须用子报表,不用子报表,就得不出我想要的打印样式似的,而子报表在大量记录的面前,显得有点力不顺心。

我再摸索下来看看。
作者: todaynew    时间: 2011-12-2 13:16
简 发表于 2011-12-1 23:12
用数字型是可以进行隔行显示,但有个问题,数字型在排序上,是按照1,11,111,1111这样的顺序来排列的, ...

你搞反了吧?呵呵

字符型数据才可能按照1,11,111,1111这样的顺序来排列。数字型数据是按照1、2、3、4、5排列的。
作者: 简    时间: 2011-12-4 07:41
todaynew 发表于 2011-12-2 13:16
你搞反了吧?呵呵

字符型数据才可能按照1,11,111,1111这样的顺序来排列。数字型数据是按照1、2、3、 ...

郁闷啊,我还是无法实现。我再问问,你那count得出来的结果类型到底是数字型还是字符型呢?
作者: 简    时间: 2011-12-4 07:50

老汉,你这个空表格是如何显示出来的呢。当没有数据时,我这显示出来是空白一片,只显示出标题栏,显示不出表格。
呵呵,玄机在哪里呢?

我还想问,如果第一列有数据,但第二列没有数据,我想让第二列部分显示为空白,即第二列不显示出标题栏和表格,这又如何处理呢?


[attach]47522[/attach]
作者: 简    时间: 2011-12-5 12:47

[attach]47536[/attach]

请问老汉,在没有数据时,如何显示这个空表格呢。我设计出来,显示的是空白一片,只有标题栏。

还有,当第二列没有数据时,就不显示表格和标题栏,这点又如何处理呢?
作者: bpchan    时间: 2011-12-5 14:20
学习!!
作者: todaynew    时间: 2011-12-6 12:15
本帖最后由 todaynew 于 2011-12-6 12:19 编辑
简 发表于 2011-12-5 12:47
请问老汉,在没有数据时,如何显示这个空表格呢。我设计出来,显示的是空白一片,只有标题栏。

还 ...


没道理,呵呵。
当第二列没有数据是,你总不可能去换一种规格的纸张打印吧?纸还是原来的大小,也没有节省。而从美观的角度看,隐藏掉第二列页面岂不成了阴阳面孔了?
不是不能隐藏一部分的问题,是这种隐藏会使处理复杂化,而这种复杂的处理又没有什么意义和价值。要从整体来考虑局部,这个思维的方法我已经给你讲过很多次了,呵呵。
作者: 简    时间: 2011-12-6 19:42
那你还没有告诉我,当数据为空时,你是怎么显示出空表格的呢。
作者: todaynew    时间: 2011-12-8 12:09
简 发表于 2011-12-6 19:42
那你还没有告诉我,当数据为空时,你是怎么显示出空表格的呢。

在报表上预先铺设了表格边框。
你可以复制一下报表,然后把主报表中的两个子报表删除掉,就能看明白处理方法了。
作者: nncchh    时间: 2015-7-20 16:22
学习学习,谢谢分享!
作者: nncchh    时间: 2015-7-20 16:22
学习学习,谢谢分享!
作者: fjh    时间: 2016-4-7 08:46
access的报表功能太弱,先下载下来学习看看。
作者: jack2001    时间: 2017-8-15 22:30
ddddddddddddddd
作者: 灰太郎    时间: 2018-1-1 18:16
2222222222222222222




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3