以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  求助记账凭证的Excel报表设计  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=9258)

--  作者:shixia
--  发布时间:2011/3/21 21:27:00
--  求助记账凭证的Excel报表设计
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:jzpz.rar

想实现每张记账凭证有六行,加一合计行,在记帐凭证字样下面插入日期和凭证号,每张A4纸打印4张记帐凭证。弄大半天没弄好,急用,只好发上求助。
[此贴子已经被作者于2011-3-21 21:27:54编辑过]

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

呵呵,为啥不上传数据表呢?

谁都不能一次做好的呀,都需要反复测试调整的。 

[此贴子已经被作者于2011-3-21 22:55:52编辑过]

--  作者:程兴刚
--  发布时间:2011/3/22 0:10:00
--  

我这里有直接填写凭证的代码,用的是专业报表,采用的是关联表设计方式,仅供参考!

Dim doc As New PrintDoc() \'定义一个报表
Doc.PageSetting.LeftMargin = 15 \'设置左边距
Doc.PageSetting.RightMargin = 15 \'设置右边距
Doc.PageSetting.TopMargin = 0 \'设置上边距
Doc.PageSetting.BottomMargin = 0 \'设置下边距

Dim rt As prt.RenderText \'定义一个文本对象
rt = New prt.RenderText() \'创建文本对象
rt.Text = Tables("记帐凭证").Current("凭证号").SubString(0,4) \'设置文本对象的内容
rt.Style.TextAlignHorz = prt.AlignHorzEnum.Center \'内容水平居中
rt.Style.TextAlignVert = prt.AlignVertEnum.Center \'内容垂直居中
rt.Width = 10 \'自动设置宽度
rt.x = "70mm"
rt.y = "32.5mm"
doc.Body.Children.Add(rt) \'将文本对象加入到报表
rt = New prt.RenderText() \'创建文本对象
rt.Text = Tables("记帐凭证").Current("凭证号").SubString(4,2) \'设置文本对象的内容
rt.Style.TextAlignHorz = prt.AlignHorzEnum.Center \'内容水平居中
rt.Style.TextAlignVert = prt.AlignVertEnum.Center \'内容垂直居中
rt.Width = 10 \'自动设置宽度
rt.x = "90mm"
rt.y = "32.5mm"
doc.Body.Children.Add(rt) \'将文本对象加入到报表
rt = New prt.RenderText() \'创建文本对象
rt.Text = format(Date.DaysInMonth(Val(Tables("记帐凭证").Current("凭证号").SubString(0,4)),(Tables("记帐凭证").Current("凭证号").SubString(4,2))),"00") \'设置文本对象的内容
rt.Style.TextAlignHorz = prt.AlignHorzEnum.Center \'内容水平居中
rt.Style.TextAlignVert = prt.AlignVertEnum.Center \'内容垂直居中
rt.Width = 10 \'自动设置宽度
rt.x = "107mm"
rt.y = "32.5mm"
doc.Body.Children.Add(rt) \'将文本对象加入到报表
rt = New prt.RenderText() \'创建文本对象
rt.Text = Tables("记帐凭证").Current("凭证号").SubString(7,7) \'设置文本对象的内容
rt.Style.TextAlignHorz = prt.AlignHorzEnum.Center \'内容水平居中
rt.Style.TextAlignVert = prt.AlignVertEnum.Center \'内容垂直居中
rt.Width = "19mm" \'自动设置宽度
rt.x = "160mm"
rt.y = 32.5
doc.Body.Children.Add(rt) \'将文本对象加入到报表
Dim drs As List(Of DataRow)
drs = DataTables("成本明细帐").Select("[项目名称] = \'" &  Tables("记帐凭证").Current("项目名称") & "\' And [凭证号]= \'" & Tables("记帐凭证").Current("凭证号") & "\'")
For i As Byte = 1 To 6
    rt = New prt.RenderText() \'创建文本对象
    rt.Style.Padding.left = 1 \'上边距25毫米
    If i = 6
        rt.Style.TextAlignHorz = prt.AlignHorzEnum.Center \'内容水平靠左
        rt.Style.Font = New Font("宋体", 10, FontStyle.Bold) \'设置字体
        rt.Text = "本凭证合计"
    Else
        rt.Style.TextAlignHorz = prt.AlignHorzEnum.left \'内容水平靠左
        If i> drs.Count
            rt.Text = "--"
        Else
            rt.Text = drs(i-1)("摘要") \'设置文本对象的内容
        End If
    End If
    rt.Style.TextAlignVert = prt.AlignVertEnum.Center \'内容垂直居中
    rt.Width = "42mm" \'自动设置宽度
    rt.Height = "7.2mm"
    rt.x = "7mm"
    rt.y = (i*7.8+47) & "mm"
    doc.Body.Children.Add(rt) \'将文本对象加入到报表
    rt = New prt.RenderText() \'创建文本对象
    rt.Style.Padding.left = 1 \'上边距25毫米
    If i = 6
        rt.Text = ""
    Else
        If i> drs.Count
            rt.Text = "--"
        Else
            rt.Text = drs(i-1)("科目") \'设置文本对象的内容
        End If
    End If
    rt.Style.TextAlignHorz = prt.AlignHorzEnum.Center \'内容水平居中
    rt.Style.TextAlignVert = prt.AlignVertEnum.Center \'内容垂直居中
    rt.Width = "28mm" \'自动设置宽度
    rt.Height = "7.2mm"
    rt.x = "50mm"
    rt.y = (i*7.8+47) & "mm"
    doc.Body.Children.Add(rt) \'将文本对象加入到报表
    rt = New prt.RenderText() \'创建文本对象
    rt.Style.Padding.left = 1 \'上边距25毫米
    If i = 6
        rt.Text = ""
    Else
        If i> drs.Count
            rt.Text = "--"
        Else
            rt.Text = drs(i-1)("费用类别") \'设置文本对象的内容
        End If
    End If
    rt.Style.TextAlignHorz = prt.AlignHorzEnum.Center \'内容水平居中
    rt.Style.TextAlignVert = prt.AlignVertEnum.Center \'内容垂直居中
    rt.Width = "28mm" \'自动设置宽度
    rt.Height = "7.2mm"
    rt.x = "80mm"
    rt.y = (i*7.8+47) & "mm"
    doc.Body.Children.Add(rt) \'将文本对象加入到报表
   
    rt = New prt.RenderText() \'创建文本对象
    rt.Style.Padding.left = 1 \'上边距25毫米
    If i = 6
        rt.Text = ""
    Else
        If i> drs.Count
            rt.Text = "--"
        Else
            If drs(i-1)("审核标记") = True
                rt.Text = "√" \'设置文本对象的内容
                If drs(i-1)("科目") = "应付款"
                    rt.x = "137mm"
                Else
                    rt.x = "97.7mm"
                End If
            Else
                rt.Text = "" \'设置文本对象的内容
            End If
        End If
    End If
    rt.Style.TextAlignHorz = prt.AlignHorzEnum.Center \'内容水平居中
    rt.Style.TextAlignVert = prt.AlignVertEnum.Center \'内容垂直居中
    rt.Width = "28mm" \'自动设置宽度
    rt.Height = "7.2mm"
    rt.y = (i*7.8+47) & "mm"
    doc.Body.Children.Add(rt) \'将文本对象加入到报表
    If i < 6
        For A As Byte = 1 To 10
           
            rt = New prt.RenderText() \'创建文本对象
            rt.Style.Padding.left = 1 \'上边距25毫米
            If i> drs.Count
                rt.Text = "-"
            Else
                rt.Text = GetDigit(drs(i-1)("金额"),A-3,"¥") \'设置文本对象的内容
                If drs(i-1)("科目") = "应付款"
                    rt.x = (175+A*-3.29) & "mm"
                Else
                    rt.x = (135.8+A*-3.29) & "mm"
                End If
            End If
            rt.Style.TextAlignHorz = prt.AlignHorzEnum.Center \'内容水平居中
            rt.Style.TextAlignVert = prt.AlignVertEnum.Center \'内容垂直居中
            rt.Width = "28mm" \'自动设置宽度
            rt.Height = "7.2mm"
            rt.y = (i*7.8+47) & "mm"
            doc.Body.Children.Add(rt) \'将文本对象加入到报
        Next
    End If
    IF i = 6
        Dim Multi As String = "已付款|应付款"
        Dim Values() As String
        Values = Multi.split("|")
        For Index As Integer = 0 To Values.Length - 1
            For A As Byte = 1 To 10
                rt = New prt.RenderText() \'创建文本对象
                rt.Style.Padding.left = 1 \'上边距25毫米
                rt.Text = GetDigit(DataTables("成本明细帐").Compute("Sum(金额)", "项目名称 = \'" &  Tables("记帐凭证").Current("项目名称") & "\' And 科目 = \'" & Values(Index) & "\' And 凭证号 = \'" & Tables("记帐凭证").Current("凭证号") & "\'"),A-3,"¥")
                If Values(Index) = "已付款"
                    rt.x = (135.8+A*-3.29) & "mm"
                Else
                    rt.x = (175+A*-3.29) & "mm"
                End If
                rt.Style.TextAlignHorz = prt.AlignHorzEnum.Center \'内容水平居中
                rt.Style.TextAlignVert = prt.AlignVertEnum.Center \'内容垂直居中
                rt.Width = "28mm" \'自动设置宽度
                rt.Height = "7.2mm"
                rt.y = (i*7.8+47) & "mm"
                doc.Body.Children.Add(rt) \'将文本对象加入到报
            Next
        Next
    End If
Next
rt = New prt.RenderText() \'创建文本对象
rt.Text = Tables("成本明细帐").Compute("Max(单据编号)", "项目名称 = \'" &  Tables("记帐凭证").Current("项目名称") & "\' And 凭证号 = \'" & Tables("记帐凭证").Current("凭证号") & "\'")
rt.Style.TextAlignHorz = prt.AlignHorzEnum.Center \'内容水平居中
rt.Style.TextAlignVert = prt.AlignVertEnum.Center \'内容垂直居中
rt.Width = "6mm" \'自动设置宽度
rt.x = "189mm"
rt.y = "76mm"
doc.Body.Children.Add(rt) \'将文本对象加入到报表
doc.Print() \'打印报表

 

 


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

--  作者:shixia
--  发布时间:2011/3/22 12:22:00
--  
专业报表太复杂,目前还没有学习,先用Excel报表应急吧,谢谢程版。上传参考数据
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:记帐凭证.rar

说明:凭证号一般有一又九分之一,一又分九之二,一是凭证号,九是分母数,二是分子数。
[此贴子已经被作者于2011-3-22 12:24:15编辑过]

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

呵呵,看这个,记得非细节区只能用直接引用。

 

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

 

另是记账,不是计帐,一字之差,害我始终得不出预期的结果,花了20分钟才找出原因。

 

图片点击可在新窗口打开查看


--  作者:yangming
--  发布时间:2011/3/22 14:57:00
--  

贺老师都做好了,我只做了第二行的显示,还是看贺老师的吧,呵

 

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

[此贴子已经被作者于2011-3-22 14:59:39编辑过]

--  作者:狐狸爸爸
--  发布时间:2011/3/22 15:07:00
--  
呵呵,好久不见杨版了。
--  作者:lihe60
--  发布时间:2011/3/22 16:47:00
--  
以下是引用程兴刚在2011-3-22 0:10:00的发言:

我这里有直接填写凭证的代码,用的是专业报表,采用的是关联表设计方式,仅供参考!

Dim doc As New PrintDoc() \'定义一个报表
Doc.PageSetting.LeftMargin = 15 \'设置左边距
Doc.PageSetting.RightMargin = 15 \'设置右边距
Doc.PageSetting.TopMargin = 0 \'设置上边距
Doc.PageSetting.BottomMargin = 0 \'设置下边距

Dim rt As prt.RenderText \'定义一个文本对象
rt = New prt.RenderText() \'创建文本对象
rt.Text = Tables("记帐凭证").Current("凭证号").SubString(0,4) \'设置文本对象的内容
rt.Style.TextAlignHorz = prt.AlignHorzEnum.Center \'内容水平居中
rt.Style.TextAlignVert = prt.AlignVertEnum.Center \'内容垂直居中
rt.Width = 10 \'自动设置宽度
rt.x = "70mm"
rt.y = "32.5mm"
doc.Body.Children.Add(rt) \'将文本对象加入到报表
rt = New prt.RenderText() \'创建文本对象
rt.Text = Tables("记帐凭证").Current("凭证号").SubString(4,2) \'设置文本对象的内容
rt.Style.TextAlignHorz = prt.AlignHorzEnum.Center \'内容水平居中
rt.Style.TextAlignVert = prt.AlignVertEnum.Center \'内容垂直居中
rt.Width = 10 \'自动设置宽度
rt.x = "90mm"
rt.y = "32.5mm"
doc.Body.Children.Add(rt) \'将文本对象加入到报表
rt = New prt.RenderText() \'创建文本对象
rt.Text = format(Date.DaysInMonth(Val(Tables("记帐凭证").Current("凭证号").SubString(0,4)),(Tables("记帐凭证").Current("凭证号").SubString(4,2))),"00") \'设置文本对象的内容
rt.Style.TextAlignHorz = prt.AlignHorzEnum.Center \'内容水平居中
rt.Style.TextAlignVert = prt.AlignVertEnum.Center \'内容垂直居中
rt.Width = 10 \'自动设置宽度
rt.x = "107mm"
rt.y = "32.5mm"
doc.Body.Children.Add(rt) \'将文本对象加入到报表
rt = New prt.RenderText() \'创建文本对象
rt.Text = Tables("记帐凭证").Current("凭证号").SubString(7,7) \'设置文本对象的内容
rt.Style.TextAlignHorz = prt.AlignHorzEnum.Center \'内容水平居中
rt.Style.TextAlignVert = prt.AlignVertEnum.Center \'内容垂直居中
rt.Width = "19mm" \'自动设置宽度
rt.x = "160mm"
rt.y = 32.5
doc.Body.Children.Add(rt) \'将文本对象加入到报表
Dim drs As List(Of DataRow)
drs = DataTables("成本明细帐").Select("[项目名称] = \'" &  Tables("记帐凭证").Current("项目名称") & "\' And [凭证号]= \'" & Tables("记帐凭证").Current("凭证号") & "\'")
For i As Byte = 1 To 6
    rt = New prt.RenderText() \'创建文本对象
    rt.Style.Padding.left = 1 \'上边距25毫米
    If i = 6
        rt.Style.TextAlignHorz = prt.AlignHorzEnum.Center \'内容水平靠左
        rt.Style.Font = New Font("宋体", 10, FontStyle.Bold) \'设置字体
        rt.Text = "本凭证合计"
    Else
        rt.Style.TextAlignHorz = prt.AlignHorzEnum.left \'内容水平靠左
        If i> drs.Count
            rt.Text = "--"
        Else
            rt.Text = drs(i-1)("摘要") \'设置文本对象的内容
        End If
    End If
    rt.Style.TextAlignVert = prt.AlignVertEnum.Center \'内容垂直居中
    rt.Width = "42mm" \'自动设置宽度
    rt.Height = "7.2mm"
    rt.x = "7mm"
    rt.y = (i*7.8+47) & "mm"
    doc.Body.Children.Add(rt) \'将文本对象加入到报表
    rt = New prt.RenderText() \'创建文本对象
    rt.Style.Padding.left = 1 \'上边距25毫米
    If i = 6
        rt.Text = ""
    Else
        If i> drs.Count
            rt.Text = "--"
        Else
            rt.Text = drs(i-1)("科目") \'设置文本对象的内容
        End If
    End If
    rt.Style.TextAlignHorz = prt.AlignHorzEnum.Center \'内容水平居中
    rt.Style.TextAlignVert = prt.AlignVertEnum.Center \'内容垂直居中
    rt.Width = "28mm" \'自动设置宽度
    rt.Height = "7.2mm"
    rt.x = "50mm"
    rt.y = (i*7.8+47) & "mm"
    doc.Body.Children.Add(rt) \'将文本对象加入到报表
    rt = New prt.RenderText() \'创建文本对象
    rt.Style.Padding.left = 1 \'上边距25毫米
    If i = 6
        rt.Text = ""
    Else
        If i> drs.Count
            rt.Text = "--"
        Else
            rt.Text = drs(i-1)("费用类别") \'设置文本对象的内容
        End If
    End If
    rt.Style.TextAlignHorz = prt.AlignHorzEnum.Center \'内容水平居中
    rt.Style.TextAlignVert = prt.AlignVertEnum.Center \'内容垂直居中
    rt.Width = "28mm" \'自动设置宽度
    rt.Height = "7.2mm"
    rt.x = "80mm"
    rt.y = (i*7.8+47) & "mm"
    doc.Body.Children.Add(rt) \'将文本对象加入到报表
   
    rt = New prt.RenderText() \'创建文本对象
    rt.Style.Padding.left = 1 \'上边距25毫米
    If i = 6
        rt.Text = ""
    Else
        If i> drs.Count
            rt.Text = "--"
        Else
            If drs(i-1)("审核标记") = True
                rt.Text = "√" \'设置文本对象的内容
                If drs(i-1)("科目") = "应付款"
                    rt.x = "137mm"
                Else
                    rt.x = "97.7mm"
                End If
            Else
                rt.Text = "" \'设置文本对象的内容
            End If
        End If
    End If
    rt.Style.TextAlignHorz = prt.AlignHorzEnum.Center \'内容水平居中
    rt.Style.TextAlignVert = prt.AlignVertEnum.Center \'内容垂直居中
    rt.Width = "28mm" \'自动设置宽度
    rt.Height = "7.2mm"
    rt.y = (i*7.8+47) & "mm"
    doc.Body.Children.Add(rt) \'将文本对象加入到报表
    If i < 6
        For A As Byte = 1 To 10
           
            rt = New prt.RenderText() \'创建文本对象
            rt.Style.Padding.left = 1 \'上边距25毫米
            If i> drs.Count
                rt.Text = "-"
            Else
                rt.Text = GetDigit(drs(i-1)("金额"),A-3,"¥") \'设置文本对象的内容
                If drs(i-1)("科目") = "应付款"
                    rt.x = (175+A*-3.29) & "mm"
                Else
                    rt.x = (135.8+A*-3.29) & "mm"
                End If
            End If
            rt.Style.TextAlignHorz = prt.AlignHorzEnum.Center \'内容水平居中
            rt.Style.TextAlignVert = prt.AlignVertEnum.Center \'内容垂直居中
            rt.Width = "28mm" \'自动设置宽度
            rt.Height = "7.2mm"
            rt.y = (i*7.8+47) & "mm"
            doc.Body.Children.Add(rt) \'将文本对象加入到报
        Next
    End If
    IF i = 6
        Dim Multi As String = "已付款|应付款"
        Dim Values() As String
        Values = Multi.split("|")
        For Index As Integer = 0 To Values.Length - 1
            For A As Byte = 1 To 10
                rt = New prt.RenderText() \'创建文本对象
                rt.Style.Padding.left = 1 \'上边距25毫米
                rt.Text = GetDigit(DataTables("成本明细帐").Compute("Sum(金额)", "项目名称 = \'" &  Tables("记帐凭证").Current("项目名称") & "\' And 科目 = \'" & Values(Index) & "\' And 凭证号 = \'" & Tables("记帐凭证").Current("凭证号") & "\'"),A-3,"¥")
                If Values(Index) = "已付款"
                    rt.x = (135.8+A*-3.29) & "mm"
                Else
                    rt.x = (175+A*-3.29) & "mm"
                End If
                rt.Style.TextAlignHorz = prt.AlignHorzEnum.Center \'内容水平居中
                rt.Style.TextAlignVert = prt.AlignVertEnum.Center \'内容垂直居中
                rt.Width = "28mm" \'自动设置宽度
                rt.Height = "7.2mm"
                rt.y = (i*7.8+47) & "mm"
                doc.Body.Children.Add(rt) \'将文本对象加入到报
            Next
        Next
    End If
Next
rt = New prt.RenderText() \'创建文本对象
rt.Text = Tables("成本明细帐").Compute("Max(单据编号)", "项目名称 = \'" &  Tables("记帐凭证").Current("项目名称") & "\' And 凭证号 = \'" & Tables("记帐凭证").Current("凭证号") & "\'")
rt.Style.TextAlignHorz = prt.AlignHorzEnum.Center \'内容水平居中
rt.Style.TextAlignVert = prt.AlignVertEnum.Center \'内容垂直居中
rt.Width = "6mm" \'自动设置宽度
rt.x = "189mm"
rt.y = "76mm"
doc.Body.Children.Add(rt) \'将文本对象加入到报表
doc.Print() \'打印报表

 

 


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

代码这么长,头都要晕掉的。

 


--  作者:mr725
--  发布时间:2011/3/22 18:06:00
--  
以下是引用狐狸爸爸在2011-3-22 15:07:00的发言:
呵呵,好久不见杨版了。

不小心··· 真的是呀。


--  作者:mr725
--  发布时间:2011/3/22 18:19:00
--  

我这个(下面附件),在选定一张凭证号所在的所有行时,可以达到楼主要求。

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:记帐凭证.rar

 

要全选后连续打印,不得要领······ 要通过复杂的计算吧。

 

楼主的表记录(分子、分母)的内容不全,你像招工吗?呵呵。 你那个分子、分母没有意义吧,用一个分录序号即可。

 

另外,狐爸看看,报表事件中,为何要做个隐身“标记”【e.Book.Marks.Add("号")  模板在H3中】下面代码才可以得出结果呢。

e.Book.Marks("字号") = "凭证号:" & Tables("记帐凭证").current("凭证号") & " 第" &  e.Book.Marks("号")+1 & "/" & Tables("记帐凭证").current("分母") & "页"
        e.Book.Marks("号") = e.Book.Marks("号")+1  \'没有这个,上面代码不显示???


[此贴子已经被作者于2011-3-22 18:24:05编辑过]