以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  报表事件代码问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=113902)

--  作者:benwong2013
--  发布时间:2018/1/25 9:42:00
--  报表事件代码问题
系统有一个报表的清单,栏位分别为 序号,表单编号,此清单中会不断的加入表单;
附件中的表单会依照表单编号栏位的内容来命名文档,
现需要在报表事件中加入代码,希望只要取用此清单中有记录的表单编号进行输出的话,就会执行以下的代码,请问应该如何修改,谢谢!
If e.Book.TempLate = "laberNo-TM" Then
    Dim Bar As New BarCodeBuilder
    Bar.Symbology = Barpro.Symbology.Code39
    Bar.Code = e.DataRow("报告编号")
    Bar.BarRatio = 2
    Bar.BarHeight = 10
    Bar.QuietZoneWidth = 2
    Bar.AddCheckSum = False
    Bar.DisplayChecksum = False
    Bar.DisplayStartStopChar = False
    bar.SaveImage(ProjectPath & "Images\\BarCode.gif",900)

--  作者:有点甜
--  发布时间:2018/1/25 9:46:00
--  

1、目前你遇到什么问题?输出的结果有什么问题?

 

2、这个意思? If e.DataRow("报告编号") > "" then

[此贴子已经被作者于2018/1/25 9:46:17编辑过]

--  作者:benwong2013
--  发布时间:2018/1/25 9:56:00
--  
现在遇到的问题就是我想用户在使用清单中任何一个表单编号对应的模板的时候,能执行报表事件中的代码,生成条形码,所以想问一下如何修改,而不用每一个报表模板都要一段对应的代码
--  作者:有点甜
--  发布时间:2018/1/25 10:02:00
--  

1、你模板如何命名?命名规则是什么,举例说明。

 

2、试试 If e.DataRow Is Not Nothing AndAlso e.DataRow.DataTable.Name = "表A" AndAlso e.Book.TempLate = e.DataRow("第一列") Then


--  作者:benwong2013
--  发布时间:2018/1/25 10:10:00
--  
模板的命名和清单中表单编号的命名是一致的,如清单中表单编号为WI-001,那么对于的模板就是WI-001.xls
请问这个代码可以修改成这样嘛?
Dim bhs As List(Of String) = DataTables("表A").GetValues("表单编号")
For Each bh As String In bhs
If e.Book.TempLate = bh Then
    Dim Bar As New BarCodeBuilder
    Bar.Symbology = Barpro.Symbology.Code39
    Bar.Code = e.DataRow("报告编号")
    Bar.BarRatio = 2
    Bar.BarHeight = 10
    Bar.QuietZoneWidth = 2
    Bar.AddCheckSum = False
    Bar.DisplayChecksum = False
    Bar.DisplayStartStopChar = False
    bar.SaveImage(ProjectPath & "Images\\BarCode.gif",900)
end if
next



--  作者:有点甜
--  发布时间:2018/1/25 10:25:00
--  
If e.DataRow Is Not Nothing AndAlso e.DataRow.DataTable.Name = "表A" AndAlso e.Book.TempLate = e.DataRow("表单编号") Then
--  作者:benwong2013
--  发布时间:2018/1/25 15:48:00
--  
依照你的代码还是无法生成,另外我依照自己的代码,可以生成,但问题就是生成的是T_Report 表栏”当前记录编号“旧的数据,而不是执行报表事件出来的条码;
Dim bhs As List(Of String) = DataTables("B_Form").GetValues("表单编号")
For Each bh As String In bhs
    If e.DataRow IsNot Nothing AndAlso e.DataRow.DataTable.Name = "T_Report" AndAlso e.Book.TempLate = bh Then
        Dim Bar As New BarCodeBuilder
        Bar.Symbology = Barpro.Symbology.Code39
        Bar.Code = e.DataRow("当前表单编号")
        MessageBox.Show("当前表单编号:" & e.DataRow("当前表单编号") & "-" & bh)
        Bar.BarRatio = 2
        Bar.BarHeight = 10
        Bar.QuietZoneWidth = 2
        Bar.AddCheckSum = False
        Bar.DisplayChecksum = False
        Bar.DisplayStartStopChar = False
        bar.SaveImage(ProjectPath & "Images\\BarCode2.gif",300)
    End If
Next

图片点击可在新窗口打开查看此主题相关图片如下:qq截图20180125154040.png
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:qq截图20180125154543.png
图片点击可在新窗口打开查看

[此贴子已经被作者于2018/1/25 15:48:40编辑过]

--  作者:benwong2013
--  发布时间:2018/1/25 15:56:00
--  
看到了,报表事件的代码是发生在我报表生成之前,造成系统在报表生成的时候只读取了之前条码的图片,请问如何处理?


Dim fr As DataRow = DataTables("B_CSlist").SQLFind("姓名 = \'" & User.Name & "\'")
Dim bhs As List(Of String) = DataTables("LocalItem").GetValues("表单编号")
For Each bh As String In bhs
    If bh IsNot Nothing Then
        Dim nr As DataRow = DataTables("T_TFRecord").addnew
        nr("报告编号") = Tables("T_Report").Current("报告编号")
        nr("表单编号") = bh
        Dim bg As String = nr("报告编号").SubString(3,9)
        Dim max As String
        Dim idx As Integer
        Max = DataTables("T_TFRecord").SQLCompute("Max(记录流水编号)","Substring(记录流水编号,1,9) = \'"& bg &"\'")
        If Max > "" Then
            idx = CInt(max.Substring(9,3) + 1)
        Else
            idx = 1
        End If
        nr("记录流水编号") = bg & Format(idx,"000")
        Dim hrs As List(Of DataRow) = DataTables("LocalItem").Select("表单编号 = \'"& bh &"\'")
        For Each hr As DataRow In hrs
            hr("记录流水编号") = nr("记录流水编号")
            If nr.Isnull("任务编号") Then
                nr("任务编号") = hr("任务编号")
            Else
                nr("任务编号") = nr("任务编号") & "," & hr("任务编号")
            End If
            Dim tr As DataRow = DataTables("T_Item").Find("任务编号 = \'" & hr("任务编号") & "\'")
            tr("内测标识") = True
            tr("开单状态") = True
            If tr.IsNull("记录流水编号") Then
                tr("记录流水编号") = hr("记录流水编号")
            Else
                tr("记录流水编号") = tr("记录流水编号") & "," & hr("记录流水编号")
            End If
            tr.save()
            nr.Save()
        Next
        Tables("T_Report").Current("当前表单编号") = nr("记录流水编号")
        Tables("T_Report").Current.save
        If FileSys.FileExists(ProjectPath & "Attachments\\" & bh & ".xls") Then
            Dim sb As String = ""
            Dim drs As List(Of DataRow) = DataTables("B_FormEQ").SQLSelect("表单编号 = \'"& bh &"\' And 实验室编号 = \'"& fr("区域") &"\'")
            For Each dr As DataRow In drs
                sb = sb & "/" & dr("设备类型")& ":" & dr("设备编号")
            Next
            Dim Book As New XLS.Book(ProjectPath & "Attachments\\" & bh & ".xls")
            book.Marks.add("设备编号",sb)
            Dim fl As String = ProjectPath & "Reports\\" & Tables("T_Report").current("报告编号")& "&" & bh & ".xls"
            Book.Build() \'生成细节区
            Book.Save(fl) \'保存工作簿
            Dim Proc As New Process \'打开工作簿
            Proc.File = fl
            Proc.Start()
        Else
            MessageBox.Show("未找到编号为【" & bh & "】的表单")
        End If
    End If
Next
e.Form.close

--  作者:benwong2013
--  发布时间:2018/1/25 16:00:00
--  
搞定,应该是代码执行过程中先后的问题,我调整了一下生成的方式;
--  作者:有点甜
--  发布时间:2018/1/25 16:07:00
--  

如果不会做,实例发上来

 

msgbox(e.Book.TempLate)
msgbox(e.DataRow.DataTable.name)
msgbox(e.DataRow("当前表单编号"))
If e.DataRow IsNot Nothing AndAlso e.DataRow.DataTable.Name = "T_Report" AndAlso e.Book.TempLate = e.DataRow("当前表单编号") Then
    Dim Bar As New BarCodeBuilder
    Bar.Symbology = Barpro.Symbology.Code39
    Bar.Code = e.DataRow("当前表单编号")
    Bar.BarRatio = 2
    Bar.BarHeight = 10
    Bar.QuietZoneWidth = 2
    Bar.AddCheckSum = False
    Bar.DisplayChecksum = False
    Bar.DisplayStartStopChar = False
    bar.SaveImage(ProjectPath & "Images\\BarCode2.gif",300)
End If