以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  汇总模式和非汇总模式打印的结果不一样  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=9263)

--  作者:lihe60
--  发布时间:2011/3/22 16:43:00
--  汇总模式和非汇总模式打印的结果不一样

运行表“明细账”的窗口“采购明细账”,日期分别输入“2011-01-01”和“2011-06-30”。

查询1和查询2的代码唯一的差别就是“查询1”多了一段汇总,其他是一样的。

先点击按钮“查询1”,再按“打印”不能运行

再点击按钮“查询2”,再按“打印”却能运行

查询1不能打印,求解决代码。


--  作者:lihe60
--  发布时间:2011/3/22 16:44:00
--  
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目20.rar


--  作者:狐狸爸爸
--  发布时间:2011/3/22 16:57:00
--  

呵呵,不知道怎么测试你这个文件,打开先提示几个表不存在。

进去之后按查询1或者查询2结果都是出现一个窗口,关闭这个窗口后啥也没有了,按打印就出现一个页面,都是一条线而已。


--  作者:狐狸爸爸
--  发布时间:2011/3/22 17:03:00
--  
你不如单独用一个表,分别在汇总模式和非汇总模式下,用你的打印代码进行打印,看看打印代码是否正常,我测试你的代码不管是汇总模式还是非汇总模式,都OK
--  作者:lihe60
--  发布时间:2011/3/23 8:29:00
--  

贺老师,你再看一下。

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目20.rar

[此贴子已经被作者于2011-3-23 8:38:08编辑过]

--  作者:狐狸爸爸
--  发布时间:2011/3/23 8:37:00
--  

呵呵,我昨天看过才发帖的,没办法测试。

示例文件应该简单明了,至少能够顺利打开,能够再现问题。


--  作者:lihe60
--  发布时间:2011/3/23 8:39:00
--  
贺老师,刚才附件没有传上去,现已传上。
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目20.rar


--  作者:狐狸爸爸
--  发布时间:2011/3/23 9:06:00
--  

Dim h,i,m,l,r,colscount As Integer
Dim colname As String
Dim tb As Table=Tables("" & e.Form.name & "_table1")
Dim cr As Row=Tables("打印设置").Rows(0) \'打印设置表第一行
Dim doc As New PrintDoc \'定义一个报表
Dim rt As New prt.RenderTable() \'定义一个表格对象
Dim rs As New prt.RenderText() \'定义一个文本对象
Dim rs1 As New prt.RenderText() \'定义一个文本对象
\'设置纸张方向
If vars("横向打印")=True
    Doc.PageSetting.Landscape = True \'横向打印
Else
    Doc.PageSetting.Landscape = False \'纵向打印
End If

m=vars("左边距")
l=vars("右边距")

Doc.PageSetting.LeftMargin = 10 \'设置左边距
Doc.PageSetting.RightMargin = 10 \'设置右边距

rt.Style.GridLines.All = New prt.LineDef \'将网格线类型设为默认类型
rt.Rows.Count = Tb.Rows.Count
r = Tb.Rows.Count \'设置行数
\'表可见列数
colscount=0
M=0
For Each cl As col In tb.cols
    If cl.visible=True
        colscount=colscount+1
        l = cr(cl.name)
        rt.Cols(M).Width = l
        M=M+1
    End If
Next
rt.Cols.Count =colscount \'设置列数
For n As Integer = 0 To tb.rows.count(True)-1 Step 1
    Dim dr As Row=tb.rows(n,True)
    m=0
    For Each cl As col In tb.cols
        If cl.visible=True And n=0
            rt.Style.TextAlignHorz = prt.AlignHorzEnum.Center \'文本内容水平居中
            rt.Style.TextAlignVert = prt.AlignVertEnum.Center
            rt.Cells(0,m).Text =cl.name
            If cl.IsNumeric
                If dr.IsNull(cl.name)= False
                    rt.Cells(n+1,m).Style.TextAlignVert = prt.AlignVertEnum.Center
                    rt.Cells(n+1,m).Style.TextAlignHorz = prt.AlignHorzEnum.right
                    If Isnumeric(dr(cl.name).Tostring) Then
                       rt.Cells(n+1,m).Text = Format(dr(cl.name),"#,##0.00")
                    Else
                        rt.Cells(n+1,m).Text = dr(cl.name).Tostring
                    End If
                End If
            End If
            If cl.IsString
                rt.Cells(n+1,m).Style.TextAlignVert = prt.AlignVertEnum.Center
                rt.Cells(n+1,m).Style.TextAlignHorz = prt.AlignHorzEnum.left
                rt.Cells(n+1,m).Text =dr(cl.name)
            End If
            m=m+1
        End If
        If cl.visible=True And n<>0
            If cl.IsNumeric
                If dr.IsNull(cl.name) = False
                    rt.Cells(n+1,m).Style.TextAlignVert = prt.AlignVertEnum.Center
                    rt.Cells(n+1,m).Style.TextAlignHorz = prt.AlignHorzEnum.right
                    If Isnumeric(dr(cl.name).Tostring) Then
                       rt.Cells(n+1,m).Text = Format(dr(cl.name),"#,##0.00")
                    Else
                        rt.Cells(n+1,m).Text = dr(cl.name).Tostring
                    End If
                End If
            End If
            If cl.IsString Or cl.Isdate
                rt.Cells(n+1,m).Style.TextAlignHorz = prt.AlignHorzEnum.left
                rt.Cells(n+1,m).Style.TextAlignVert = prt.AlignVertEnum.Center
                rt.Cells(n+1,m).Text =dr(cl.name)
            End If
            m=m+1
        End If
    Next
Next

rt.RowGroups(0, tb.HeaderRows).Header = prt.TableHeaderEnum.All \'利用行组功能设置表头
tb.AutoSizeRows()

doc.Body.Children.Add(rs) \'将文本对象加入到表格中
doc.Body.Children.Add(rs1) \'将文本对象加入到表格中
doc.Body.Children.Add(rt) \'将表格对象加入到报表中
rs = New prt.RenderText() \'再次定义一个文本对象
rs1 = New prt.RenderText() \'再次定义一个文本对象
doc.Body.Children.Add(rs) \'将文本对象加入到表格中
doc.Body.Children.Add(rs1) \'将文本对象加入到表格中
Doc.Preview() \'预览报表


--  作者:狐狸爸爸
--  发布时间:2011/3/23 10:04:00
--  
不改代码也可以,就得等下次更新