以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]打印的代码 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=46337) |
||||
-- 作者:zyys2813 -- 发布时间:2014/2/21 10:41:00 -- [求助]打印的代码 下面的代码实现: 1.提取批签发不重复列表,打印 2.提取通关单不重重列表,打印 (注:表中的批签发都有,通关单有的没有) 问题:打印完批签发后,如果没有通关单也会打印一张空白,但只打印同时有批签发和通关单的一行时,不会有空白.如何修改? 另外:如果打印多行时,先打印所有批签发,再打印通关单,如何实现同一行的批签发和通关单挨着打印? Dim tb As Table = Tables("出库查询_出库副表")
If tb.Current
Is Nothing Then \'如果表为空 MessageBox.Show("请按领取单位和出库时间查询!") Else Dim cnt As Integer = DataTables("出库").GetValues("领取单位",Tables("出库查询_出库副表").Filter).count \'列出table 不同项列表 If Cnt >1 Then \'如果不是同一领取单位 MessageBox.Show("请分领取单位打印!") Else Dim Customers As List(Of String) Customers
= Tables("出库查询_出库副表").DataTable.GetValues("批签发",Tables("出库查询_出库副表").Filter) If
Customers.Count
>0 Then For Each Customer As String In Customers Dim doc As New PrintDoc Dim rm As New prt.RenderImage rm.image = getimage("D:\\用户目录\\Documents\\Scanned
Documents\\"& Customer &".JPG") rm.y = 10 rm.x = 10 rm.Width = "130%Parent" \'设置尺寸为容器(页面)尺寸 rm.Height = "Auto" \'高度由图片大小自动决定 rm.Style.ImageAlign.KeepAspectRatio
= True \'保持比例 doc.Body.Children.Add(rm) \'将图片对象加入报表 Doc.Preview()
\'预览 \'Doc.Print() Next End If Dim Customer2s As List(Of String) Customer2s
= Tables("出库查询_出库副表").DataTable.GetValues("通关单",Tables("出库查询_出库副表").Filter) If
Customer2s.Count
>0 Then For Each Customer2 As String In Customer2s Dim doc2 As New PrintDoc Dim rm2 As New prt.RenderImage rm2.image = getimage("D:\\用户目录\\Documents\\Scanned
Documents\\"& Customer2 &".JPG") rm2.y = 10 rm2.x = 10 rm2.Width = "130%Parent" \'设置尺寸为容器(页面)尺寸 rm2.Height = "Auto" \'高度由图片大小自动决定 rm2.Style.ImageAlign.KeepAspectRatio
= True \'保持比例 doc2.Body.Children.Add(rm2) \'将图片对象加入报表 Doc2.Preview()
\'预览 \'Doc.Print() Next End If End If End If
|
||||
-- 作者:Bin -- 发布时间:2014/2/21 10:44:00 -- 能否上个例子呢? |
||||
-- 作者:zyys2813 -- 发布时间:2014/2/21 11:34:00 -- 例子
|
||||
-- 作者:zyys2813 -- 发布时间:2014/2/21 11:34:00 -- 图片不上传了,只预览就行 |
||||
-- 作者:Bin -- 发布时间:2014/2/21 11:49:00 -- 未能直观的理解你的需求,根据你的描述. 第一个问题可以每次打印前判断一下是否用单 第二个问题,你不要分开循环,而是在第一个循环里每次查找出对应的值来循环打印
|
||||
-- 作者:zyys2813 -- 发布时间:2014/2/21 12:08:00 -- 第一个问题,我判断了,没起作用 Dim Customer2s As List(Of String) Customer2s = Tables("出库查询_出库副表").DataTable.GetValues("通关单",Tables("出库查询_出库副表").Filter) If Customer2s.Count >0 Then |
||||
-- 作者:Bin -- 发布时间:2014/2/21 14:08:00 -- 不会不起作用的哦,你可以利用messagebox.show调试一下即可知道 http://www.foxtable.com/help/topics/1485.htm |
||||
-- 作者:zyys2813 -- 发布时间:2014/2/21 14:35:00 -- 老师好,又重做了一下,问题没有解决 我仔细试了一下, 规律是:查询后的行,批签发和通关单都不为空的情况下,批签发和通关单各打印一张,正常; 查询后的行,只要有一行或者全部行中的通关单为空的情况下,先打印完批签发,出一张空白,然后再打印通关单(如果有的话). 另外:不重复循环,不第二个问题也没解决,是我的思路不对吧,代码出下: Dim tb As Table = Tables("出库查询_出库副表") If tb.Current Is Nothing Then \'如果表为空 MessageBox.Show("请按领取单位和出库时间查询!") Else Dim cnt As Integer = DataTables("出库").GetValues("领取单位",Tables("出库查询_出库副表").Filter).count \'列出table 不同项列表 If Cnt >1 Then \'如果不是同一领取单位 MessageBox.Show("请分领取单位打印!") Else Dim cs As List(Of String) cs = Tables("出库查询_出库副表").DataTable.GetValues("批签发",Tables("出库查询_出库副表").Filter) Dim c2s As List(of String) c2s = Tables("出库查询_出库副表").DataTable.GetValues("通关单",Tables("出库查询_出库副表").Filter) cs.AddRange(c2s) If cs.Count >0 Then For Each c As String In cs Dim doc As New PrintDoc Dim rm As New prt.RenderImage rm.image = getimage("E:\\My Pictures\\"& c &".JPG") rm.y = 10 rm.x = 10 rm.Width = "130%Parent" \'设置尺寸为容器(页面)尺寸 rm.Height = "Auto" \'高度由图片大小自动决定 rm.Style.ImageAlign.KeepAspectRatio = True \'保持比例 doc.Body.Children.Add(rm) \'将图片对象加入报表 Doc.Preview() \'预览 \'Doc.Print() Next End If End If End If
[此贴子已经被作者于2014-2-21 14:38:01编辑过]
|
||||
-- 作者:Bin -- 发布时间:2014/2/21 14:37:00 -- 建议您用这个方法: http://www.foxtable.com/help/topics/1485.htm 先找出是哪一行不安预期御座,然后分析原因,搞不定,贴出代码,并告诉我们运行到哪一步出问题。
|
||||
-- 作者:zyys2813 -- 发布时间:2014/2/21 14:39:00 -- 我试过了,代码没有错误,完全执行完了,就是多一张空白 |