以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]专业报表套打  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=45686)

--  作者:石四
--  发布时间:2014/2/8 20:01:00
--  [求助]专业报表套打

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:多条件筛选.table

按客户/雇员/产品筛选,然后在命令窗口加入以下代码执行:

Dim doc As New PrintDoc
Dim rt As Prt.RenderTable
Dim rx As prt.RenderText
Dim tbl As Table = Tables("订单")
Dim Rows As List(Of DataRow)
Dim Datas As List(Of String) = tbl.DataTable.GetValues("客户",tbl.Filter)
doc.Pagesetting.LandScape = True
For Each Data As String In Datas
    rx = New prt.RenderText
    rx.Style.FontSize = 8
    rx.Text = Data
    rx.x = 117
    rx.y = 28
    doc.Body.Children.Add(rx)
   
    rt = New prt.RenderTable
    rt.Style.Font = Tables("订单").Font
    rt.Style.TextAlignVert = prt.AlignVertEnum.Center
    \'rt.Style.GridLines.All = New prt.LineDef(0.3,Color.LightGray)
    rt.Style.Spacing.Bottom = 5
    rt.CellStyle.Spacing.All = 2
    rt.Style.Font = tbl.Font
    If tbl.Filter = "" Then
        Rows = tbl.DataTable.Select("[客户] = \'" & Data & "\'")
    Else
        Rows = tbl.DataTable.Select("[客户] = \'" & Data & "\' And (" & tbl.Filter & ")")
    End If
    Dim ColNames As String() = New String(){"单价", "折扣","数量","金额"}
   
    For c As Integer = 0 To ColNames.Length - 1 \'逐列设置和填入内容
        rt.Width = "Auto"
        For i As Integer = 0 To 3
            rt.Cols(0).Width = 20  \'设置列宽
            rt.Cols(1).Width = 24  \'设置列宽
            rt.Cols(2).Width = 12 \'设置列宽
            rt.Cols(3).Width = 12 \'设置列宽
        Next
        For r As Integer = 0 To Rows.Count -1
            rt.Cells(r + 1, c).Text = Rows(r)(ColNames(c))
        Next
    Next
    rt.RowGroups(0,1).Header = prt.TableHeaderEnum.All
    doc.Body.Children.Add(rt)
Next
Doc.PageSetting.LeftMargin = 24 \'设置左边距
\'Doc.PageSetting.RightMargin = 10 \'设置右边距
Doc.PageSetting.TopMargin = 62 \'设置上边距
\'Doc.PageSetting.BottomMargin = 10 \'设置下边距
doc.PageSetting.Width = 210 \'纸张宽度为100毫米
doc.PageSetting.Height = 140 \'纸张高度为120毫米
doc.preview()

结果:

 


图片点击可在新窗口打开查看此主题相关图片如下:uuu.jpg
图片点击可在新窗口打开查看

 


在我的实际运用中,需要添加3段打印文本,以下代码打印了客户文本:

rx = New prt.RenderText
    rx.Style.FontSize = 8
    rx.Text = Data
    rx.x = 117
    rx.y = 28
    doc.Body.Children.Add(rx)

如果想打印雇员和产品文本,上面的代码如何改?

 

另说明实际运用中,只需按客户筛选,雇员和产品这两列内容都是相同的。

 


--  作者:有点甜
--  发布时间:2014/2/9 21:34:00
--  
 楼主,你的意思是想说,点击打印,雇员、产品也分别作为一段打印,结构类似客户

 还是想说,把雇员、产品、客户的打印在同一行里?

--  作者:石四
--  发布时间:2014/2/10 1:13:00
--  
以下是引用有点甜在2014-2-9 21:34:00的发言:
 楼主,你的意思是想说,点击打印,雇员、产品也分别作为一段打印,结构类似客户

 还是想说,把雇员、产品、客户的打印在同一行里?

雇员、产品也分别作为一段打印。

琢磨了好久,感觉不太好处理,只好把这个表拆分为销售表和销售明细表,用单号关联(本来想偷懒只用一个表方便统计,打印销售单用单号筛选的办法解决)

拆分成两个表并关联后,套打问题很好解决了。

现在转过来又得琢磨统计的问题,这种多对多的关联表如何统计?看了帮助文件,翻来翻去,看到用的事例都是一对多的关联。

[此贴子已经被作者于2014-2-10 1:15:09编辑过]