hur.cn - 华软网

 热门搜索

关于交叉报表分页打印?

  作者:未知    来源:网络    更新时间:2018/4/16
我作了个交叉报表,行为姓名A(用1,2,3表示),可变列为B,值为C,格式为:
姓名     B1    B2    B3     B4.....
1        C11   C12   C13    C14....
2        C21   C22   C23    C24...
3        C31   C32   C33    C34....
.
.
因为B为可变列,所以在一页纸中不能显示完,要换页再显示余下的值,可这样会出现一个问题,这样打印出来的页面很乱,我想实现下面这样:
第一页:
姓名     B1    B2    B3     B4........
1        C11   C12   C13    C14......
2        C21   C22   C23    C24...
3        C31   C32   C33    C34....

第二页:
姓名     B4    B5    B6     B7........
1        C41   C42   C43    C44......
2        C51   C52   C53    C54...
3        C61   C62   C63    C64....
可不知怎样实现,请大家帮下!谢了!

------华软网友回答------
up
------华软网友回复------
更正下:
我作了个交叉报表,行为姓名A(用1,2,3表示),可变列为B,值为C,格式为:
姓名 B1 B2 B3 B4.....
1 C11 C12 C13 C14....
2 C21 C22 C23 C24...
3 C31 C32 C33 C34....
.
.
因为B为可变列,所以在一页纸中不能显示完,要换页再显示余下的值,可这样会出现一个问题,这样打印出来的页面很乱,我想实现下面这样:
第一页:
姓名 B1 B2 B3 B4........
1 C11 C12 C13 C14......
2 C21 C22 C23 C24...
3 C31 C32 C33 C34....

第二页:
姓名 B5 B6 B7 B8........
1 C41 C42 C43 C44......
2 C51 C52 C53 C54...
3 C61 C62 C63 C64....
可不知怎样实现,请大家帮下!谢了!
你们都是怎样处理的呀,如果一页宽打印不下可变列,自动换页很乱的。
------华软网友回复------
再单独建一个专门供打印的DW,就固定4列或5列,打印前把交叉表的内容SETITEM到该打印用DW后用该DW打印即可
------华软网友回复------
关注 + 友情UP
------华软网友回复------
关注,我的也没有解决,就是你这个问题!
友情关注!
------华软网友回复------
问题是怎样固定取列的问题了,不知去怎样实现,最好能给些代码参考下。
并且换页时第一列是相同的呀,如姓名字段,当变长列换页时,姓名还是要显示在第一列!
能再说具体点吗》?》

------华软网友回复------
我也遇到了问题,友情关注!
------华软网友回复------
麻烦各位高手指点下,这问题想了很久也想不到怎么解决,比较急,谢了!我再加50分上去。
------华软网友回复------
提供一个思路,应该可行的:
取每个字段的宽度,求出总和, 然后与纸张大小及左右边距进行计算, 

if 总和 > 纸张宽度 - 左边距 - 右边距 then
   平均差值 = (总和 - (纸张宽度 - 左边距 - 右边距))/列数
   每列宽度分别减去一个平均差值 
end if

这样运算以后,各列应该能够在一页内显示出来(根据实际测试调整一下平均差值的计算方法) 




------华软网友回复------
我没试过,不知道crosstab风格的DW是否动态调整列的宽度及自动对齐各列的位置, 如果是grid风格的,我以前试过这样做
------华软网友回复------
可这样调整了每列的宽度会造成数据显示问题,字段内容可能会看不到,因为字段宽度太短了。
我是想“动态字段”换页时,保留上页的第一个字段姓名。
显示效果这样
姓名       B1       B2       B3      B4 ...
A1         A11      A12      A13     A14 ...
A2         A21      A22      A23     A24 ...
A3         A31      A32      A33     A34...

当换页时
显示这样,保留姓名段:
姓名       B5       B6       B7      B8 ...
A1         A51      A52      A53     A54 ...
A2         A61      A62      A63     A64 ...
A3         A71      A72      A73     A74...
谁有好的办法吗》?谢了?!
------华软网友回复------
友情关注

------华软网友回复------
不能在一个DW上实现这种效果,多做一个DW用类似balloonman2002的方法吧
------华软网友回复------
哪有相关的资料或例程参考下吗?真的不知怎样去拆分开字段,还要取有第一个字段姓名。

------华软网友回复------
有人帮助解答下吗?你们遇到此情况怎样处理的呀??

------华软网友回复------
还是没有解答呀??
你们是怎样处理这问题的了》》
------华软网友回复------
//将交叉表的staticmode打开
dw_rep.modify('datawindow.crosstab.staticmode=yes')

//根据你的需要,把不再打印的列隐藏。这个算法你慢慢写了,我也没现成的,给一段代码你参考,我是用来修改表头用的。
ls_cccode = dw_rep.describe('t_2.text')
SELECT cinvcname INTO :ls_ccname FROM inventoryclass
WHERE cinvccode = :ls_cccode
using sqlca;
dw_rep.modify("t_ccname.text='"+ls_ccname+"'")

do
i=i+1
ls_col1='t_2_'+string(i)
ls_col2='t_ccname_'+string(i)
ls_cccode=dw_rep.describe(ls_col1+'.text')
SELECT cinvcname INTO :ls_ccname FROM inventoryclass
WHERE cinvccode = :ls_cccode
using sqlca;
dw_rep.modify(ls_col2+".text='"+ls_ccname+"'")
loop until ls_cccode='!'

//将交叉表的staticmode打开
dw_rep.modify('datawindow.crosstab.staticmode=yes')

------华软网友回复------
我不小心把最后的代码复制错了,应该是:

//将交叉表的staticmode关闭
dw_rep.modify('datawindow.crosstab.staticmode=no')
------华软网友回复------
这个问题我们公司的程序解决了,就是用的balloonman2002的方法,只是确实在程序上需要做大量的处理,写很多的脚本,我也一直没有完全看懂,不过我加快速度尽快把它搞明白。
------华软网友回复------
回复人: balloonman2002(Blog.csdn.net/balloonman2002 - 抵制日货) ( ) 信誉:213  2005-5-25 20:54:07  得分: 0     
再单独建一个专门供打印的DW,就固定4列或5列,打印前把交叉表的内容SETITEM到该打印用DW后用该DW打印即可

---------------------------------------------
是可行的。 
 

------华软网友回复------
我可以给你一个打印对象。能够实现此功能。
------华软网友回复------
tigi(流星雨),发到我邮箱行吗》
我想看下怎样实现!
kingxx2000@163.com

------华软网友回复------
tigi(流星雨),发到我邮箱,好吗?
我也遇到这样的问题
到现在还没有解决呢
我的邮箱是yuzhongfeixia@hotmail.com
谢谢拉!
------华软网友回复------
tigi(流星雨),你有发到我邮箱吗》》
怎么没收到的?还有什么方法吗》
------华软网友回复------
定义三个实例量,页ii_page,每页显示的项目数ii_num,原交叉数据窗口语法is_syntax
创建一个项目数据窗口(d_items)Select Distinct Item From ....
在cb_preview上写Script:
Integer li_k
String ls_condition

ls_condition = ' Where '
For li_k = 1 To ii_num
If li_k <> 1 Then ls_condition += " Or "
ls_condition = ls_condition + "Item = '" + dw_items.Object.Item[(ii_page - 1) * ii_num + li_k] + "'"
Next

dw_cross.SetSQLSelect(is_syntax + ls_condition)
dw_cross.Retrieve()

ii_page ++

在下一页按钮cb_NextPage中写上类似的Script,但要判断一下是否所有项目均已经显示完毕。      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。