以文本方式查看主题
- Foxtable(狐表) (http://www.foxtable.com/bbs/index.asp)
-- 专家坐堂 (http://www.foxtable.com/bbs/list.asp?boardid=2)
---- 求助记账凭证的Excel报表设计 (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=9258)
|
-- 作者:shixia
-- 发布时间:2011/3/21 21:27:00
-- 求助记账凭证的Excel报表设计
想实现每张记账凭证有六行,加一合计行,在记帐凭证字样下面插入日期和凭证号,每张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报表应急吧,谢谢程版。上传参考数据
说明:凭证号一般有一又九分之一,一又分九之二,一是凭证号,九是分母数,二是分子数。
[此贴子已经被作者于2011-3-22 12:24:15编辑过]
|
-- 作者:狐狸爸爸
-- 发布时间:2011/3/22 14:36:00
--
呵呵,看这个,记得非细节区只能用直接引用。
另是记账,不是计帐,一字之差,害我始终得不出预期的结果,花了20分钟才找出原因。
|
-- 作者:yangming
-- 发布时间:2011/3/22 14:57:00
--
贺老师都做好了,我只做了第二行的显示,还是看贺老师的吧,呵
[此贴子已经被作者于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
--
我这个(下面附件),在选定一张凭证号所在的所有行时,可以达到楼主要求。
要全选后连续打印,不得要领······ 要通过复杂的计算吧。
楼主的表记录(分子、分母)的内容不全,你像招工吗?呵呵。 你那个分子、分母没有意义吧,用一个分录序号即可。
另外,狐爸看看,报表事件中,为何要做个隐身“标记”【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编辑过]
|