以文本方式查看主题

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

--  作者:edisontsui
--  发布时间:2022/12/14 10:23:00
--  beforebuild
If CurrentTable.name = "SBG对账单" Then
    Dim tbl As Table = Tables("SBG对账单")
    If e.Book.TempLate = "开具发票项目" Then \'TempLate是指模板文件的名称
        Dim cnt As Integer = tbl.DataTable.GetValues("页码", Tables("SBG对账单").filter).count \'统计某列筛选后含有多少个不同的页码, 加上 Tables("接头BOM").filter 就是进行筛选的意思,不加,就是所有数据 
        If cnt > 1 Then 
            messagebox.show("本页面存在 " & cnt & " 个不同的页码, 请重新筛选后再使用此按钮!")
        Else
            \'不起作用?
            Dim a As Row = Tables("SBG对账单").Current
            If a.isnull("同年月序号") Then
                MessageBox.Show("存在 同年月序号 为空值的行!")
                Tables("SBG对账单").Filter = "[同年月序号] is null"
            End If
        End If
    End If
End If

上面的代码,我希望在运行报表之前提醒还有同年月序号 为空值的行,但是这些代码无效。请教是哪里的问题呢?谢谢。

--  作者:有点蓝
--  发布时间:2022/12/14 10:42:00
--  
调试
msgbox(CurrentTable.name)
If CurrentTable.name = "SBG对账单" Then
    Dim tbl As Table = Tables("SBG对账单")
msgbox(e.Book.TempLate)
    If e.Book.TempLate = "开具fa piao项目" Then \'TempLate是指模板文件的名称
        Dim cnt As Integer = tbl.DataTable.GetValues("页码", Tables("SBG对账单").filter).count \'统计某列筛选后含有多少个不同的页码, 加上 Tables("接头BOM").filter 就是进行筛选的意思,不加,就是所有数据 
msgbox("cnt =" & cnt )
        If cnt > 1 Then 
            messagebox.show("本页面存在 " & cnt & " 个不同的页码, 请重新筛选后再使用此按钮!")
        Else
msgbox(1)
            \'不起作用?
            Dim a As Row = Tables("SBG对账单").Current
msgbox(a.isnull("同年月序号"))
            If a.isnull("同年月序号") Then
                MessageBox.Show("存在 同年月序号 为空值的行!")
                Tables("SBG对账单").Filter = "[同年月序号] is null"
            End If
        End If
    End If
End If

--  作者:edisontsui
--  发布时间:2022/12/29 8:51:00
--  
If CurrentTable.name = "生产计划" Then
    If e.Book.TempLate = "物料标签-腾龙" Then \'TempLate是指模板文件的名称
        Dim a As Row = Tables("生产计划").Current
        If a.isnull("操作员3") Then
            MessageBox.Show("此行的操作员为空值,不允许打印标签!")
        Else
            If a("生产日期") < Date.Today.AddDays( - 2) AndAlso User.Group = "生产" Then
                MessageBox.Show("生产车间如果需要打印2天之前的标签,请找管理员处理!") 
            End If 
        End If
    End If
End If

请教的问题:上述两个条件中任何一个没有满足,都会出现警告,但是报表也照样打印。我希望,如果任何一个条件没有满足,就不允许打印报表,要怎样修改代码?谢谢。

--  作者:有点蓝
--  发布时间:2022/12/29 9:03:00
--  
报表事件没有退出的功能,换种方式,写代码先判断再生成报表,类似:http://www.foxtable.com/webhelp/topics/1145.htm

        Dim a As Row = Tables("生产计划").Current
        If a.isnull("操作员3") Then
            MessageBox.Show("此行的操作员为空值,不允许打印标签!")
return
        Else
            If a("生产日期") < Date.Today.AddDays( - 2) AndAlso User.Group = "生产" Then
                MessageBox.Show("生产车间如果需要打印2天之前的标签,请找管理员处理!") 
return
            End If 
        End If
‘下面开始生成报表
Dim Book As New XLS.Book(ProjectPath & "Attachments\\出库单.xls")
Dim
 fl As String = ProjectPath & "Reports\\出库单.xls"
Book
.Build() \'生成细节区
Book
.Sheets(0).Rows.RemoveAt(0\'删除第一行,Excel报表的第一行通常是标记行
Book
.Save(fl) \'保存工作簿
Dim
 Proc As New Process \'打开工作簿
Proc
.File = fl
Proc
.Start()

--  作者:edisontsui
--  发布时间:2022/12/29 10:28:00
--  
这个方法有效,好。谢谢。