以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  专业报表  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=192820)

--  作者:keli0917
--  发布时间:2024/7/24 22:59:00
--  专业报表
Dim tx1 As WinForm.TextBox = e.Form.Controls("TextBox1")
Dim tx2 As WinForm.TextBox = e.Form.Controls("TextBox2")
If tx1.text = "" Or tx1.text = "0"
    tx1.text = "1"
End If
If tx2.text = ""
    messagebox.show("请填写最后凭证数目","^_^")
    Return
End If
If val(tx2.text) > val(Forms("凭证序时簿专业报表打印").Controls("Label5").text.split(":")(1))
    messagebox.show("c超过了最大凭证数目","^_^")
    Return
End If

DataTables("凭证序时簿").LoadFilter = "凭证号 >= " & tx1.text & " And 凭证号 <= " & tx2.text & " "
DataTables("凭证序时簿").Load()
Tables("凭证序时簿").Filter = "凭证号 >= " & tx1.text & " And 凭证号 <= " & tx2.text & " "
\'Dim tbl As Table = Tables("凭证序时簿")

\'Dim cp As String = DataTables("凭证序时簿").GetComboListString("凭证号")
Dim doc As New PrintDoc \'定义一个报表
Dim cs As List(Of String) = DataTables("凭证序时簿").GetValues("凭证号")
For Each c As String In cs
    
    Dim r1 As Integer=0
    Dim n0 As Integer
    Dim drs As List(Of DataRow)
    drs = DataTables("凭证序时簿").Select("[凭证号] = " & CInt(c) )
    \'MessageBox.Show("当前凭证号总行数"& drs.count)
    If drs.count >=  6 Then
        n0= drs.count  Mod 6 \'计算余数
    Else
        n0 =0
    End If
    Dim n1 As Integer=drs.count \\6  + 1 \'\\整除,只返回结果的整数部分,例如:12\\8,等于1
    
    MessageBox.Show("凭证页数="& n1)
    For rr As Integer = 1 To n1 \'循环当前凭证号的每一页,如果要分3页才能打完一个凭证号,则N1=3
        
        r1=r1+6
        Dim sn As Integer = rr* 6
        
        \'  MessageBox.Show("r1:="& r1)
        
        For  k As Integer = (rr -1) *6   To drs.count - 1 
            
            Dim ra As New prt.RenderArea \'定义一个容器
            ra.SplitVertBehavior = prt.SplitBehaviorEnum.Never  \'禁止容器因为分页而被垂直分割
            Dim rt As New prt.RenderTable() \'定义一个表格对象
            Dim rt1 As New prt.RenderTable() \'定义一个表格对象
            Dim rt2 As New prt.RenderTable \'定义一个表格对象
            Dim rx As New prt.RenderText \'定义一个文本对象
            
            
            \' Dim dr As DataRow
            MessageBox.Show("k:="& k)
            If k = sn -1 Or k = drs.count -1   Then
                Exit For
            End If
            
            \'dr = drs(k)
            
            
            MessageBox.Show(11)
            If k = (rr -1) *6   Then   \'每页的首行
                \'加入标题
                
                rx.text = drs(k)("凭证字").Chars(0) & " " & drs(k)("凭证字").Chars(1) & " 凭 证"
                MessageBox.Show(12)
                rx.Style.FontBold = True \'字体加粗
                rx.Style.FontSize = 16 \'大体大小为16磅
                rx.Style.F
                rx.Style.TextAlignHorz = prt.AlignHorzEnum.Center \'水平居中排列
                rx.Style.Spacing.Bottom = 3 \'和下面的对象(表格)距离3毫米
                
                ra.Children.Add(rx) \'加入到容器中
            End If
            \'Dim tb As Table = tbl
            Dim m As Integer
            Dim Sum,sum1 As Double
            Dim sum2 As Integer
            
            Sum =  Tables("凭证序时簿").Compute("Sum(借方金额)","[顺序号] = " & drs(k)("顺序号"))
            Sum1 = Tables("凭证序时簿").Compute("Sum(贷方金额)","[顺序号] = " & drs(k)("顺序号"))
            Sum2 = Tables("凭证序时簿").Compute("Sum(附件数)","[顺序号] = " & drs(k)("顺序号"))
            
            rt.Cells(0,0).Text = "摘要"
            rt.Cells(0,1).Text = "科目名称"
            rt.Cells(0,2).Text = "币别"
            rt.Cells(0,3).Text = "原币金额"
            rt.Cells(0,4).Text = "汇率"
            rt.Cells(0,5).Text = "借方金额"
            rt.Cells(0,6).Text = "贷方金额"
            rt.Cells(7,0).Text = "合  计:"
            rt.Cells(7,1).Text =  CUMoney(sum)
            rt.Cells(7,1).SpanCols = 2
            rt.Cells(7,3).Text = sum
            rt.Cells(7,4).Text =  sum1
            rt1.Cells(1,0).Text = "  凭证类别: "& drs(k)("凭证字")
            rt1.Cells(1,2).Text = "        凭证号: "& drs(k)("凭证号")
            rt1.Cells(1,1).Text = Format(drs(k)("日期"),"yyyy年MM月dd日")
            rt1.Cells(0,2).Text = "        附件数: " & sum2 &" 张"
            \'rt.Cells(8,0).Text = "主管: " & drs(k)("会计主管")
            rt.Cells(8,2).Text = "审核: " & drs(k)("审核人")
            rt.Cells(8,4).Text = "制单: " & drs(k)("制单人")
            rt1.Rows.Count = 2 \'设置总行数
            rt1.Cols.Count = 3 \'设置总列数
            rt.Rows(0).Style.FontBold = True \'字体加粗
            rt.Rows(7).Style.FontBold = True
            ra.Children.Add(rt1) \'加入到容器中
            ra.Children.Add(rt) \'加入到容器中
            MessageBox.Show(33)
            \'  doc.Body.Children.Add(rt1)
            \'  doc.Body.Children.Add(rt) \'将表格对象加入到报表中
            For i As Integer = 0 To 7
                rt.rows(i).Style.GridLines.All = New prt.Linedef \'设置网格线
            Next
            rt.Rows.Count = 9 \'设置总行数
            rt.Cols.Count = 7 \'设置总列数
            rt.Height = 65 \'设置表格的高度为120毫米
            rt1.rows(0).Height= 5
            rt1.rows(1).Height= 5
            rt.rows(0).Height= 10
            rt.rows(7).Height= 8
            rt.rows(8).Height= 8
            rt.Cols(0).Width =40
            rt.Cols(2).Width =35
            \'  m=1
            MessageBox.Show(88)
            \' Tables("凭证序时簿").Filter ="[顺序号] = " & drs(k)("顺序号")
            
            \' For Each r As Row In Tables("凭证序时簿").Rows
            \'    If m<= 6 Then
            rt.Cells(m,0).Text = drs(k)("摘要")
            rt.Cells(m,1).Text = drs(k)("科目名称")
            rt.Cells(m,2).Text = drs(k)("币别")
            rt.Cells(m,3).Text =drs(k)("原币金额")
            rt.Cells(m,4).Text = drs(k)("汇率")
            rt.Cells(m,5).Text = drs(k)("借方金额")
            rt.Cells(m,6).Text = drs(k)("贷方金额")
            \'    m=m+1
            \'  End If
            \' Next
            
            rt1.Style.Spacing.Top = 6
            rt1.Cells(1,1).Style.TextAlignHorz=prt.AlignHorzEnum.Center
            rt1.Cells(1,1).Style.TextAlignVert = prt.AlignVertEnum.Top
            rt.Style.TextAlignHorz = prt.AlignHorzEnum.Center
            rt.Style.TextAlignVert = prt.AlignVertEnum.Center \'垂直居中
            
            
            
            
            rt.Style.F
            rt1.Style.F
            
            
            MessageBox.Show(99)
            \' Tables("凭证序时簿").Filter = ""
            \' Tables("凭证序时簿").DataTable.ReplaceFor("A",0,"")
            Doc.PageSetting.TopMargin = 20
            Doc.PageSetting.BottomMargin = 15
            doc.Body.Children.Add(ra)
            
        Next
    Next
    
    
Next
Doc.Preview() \'预览报表

--  作者:keli0917
--  发布时间:2024/7/24 23:00:00
--  
 \'加入标题
                
                rx.text = drs(k)("凭证字").Chars(0) & " " & drs(k)("凭证字").Chars(1) & " 凭 证"
                MessageBox.Show(12)

运行到加入标题以后就错了。麻烦帮忙修改一下。

--  作者:keli0917
--  发布时间:2024/7/24 23:13:00
--  
希望实现将tx1.text到tx2.text所有凭证号打印在一个报表中。每个凭证号有N1页,每个分页的凭证上分别要打印表头+6行数据。
--  作者:有点蓝
--  发布时间:2024/7/25 9:02:00
--  
提示什么错误?
--  作者:keli0917
--  发布时间:2024/7/25 9:42:00
--  
索引超出了数组界限。
--  作者:有点蓝
--  发布时间:2024/7/25 9:45:00
--  
说明这个drs(k)("凭证字")没有数据,或者数据不超过1个字符。应该加上判断

if drs(k).isnull("凭证字")=false andalso drs(k)("凭证字").length >= 2
rx.text = drs(k)("凭证字").Chars(0) & " " & drs(k)("凭证字").Chars(1) & " 凭 证"
end if