以文本方式查看主题

-  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=173389)

--  作者:edisontsui
--  发布时间:2021/11/27 9:00:00
--  beforebuild 事件
If CurrentTable.name = "IL接头任务单"
    Dim tbl As Table = Tables("IL接头任务单")
    If e.Book.TempLate = "IL接头任务单" Then  \'TempLate是指模板文件的名称
        Dim WWC As String = "未完成核对"
        Dim cnt As Integer = tbl.DataTable.GetValues( "销售订单号","完成核对 = \'" & WWC & "\'",Tables("IL接头任务单").filter).count  
        If cnt > 0 
            messagebox.show("本页面存在 " & cnt & " 个未完成核对的行, 请完成核对后再使用此按钮!")
        End If
    End If
End If


上面的代码是放在 beforebuild 事件里面的,目的是在打印excel表格之前提出必要的警告,但是执行之后,出现下面的message:

.NET Framework 版本:4.0.30319.42000
Foxtable 版本:2021.5.29.1
错误所在事件:Excel报表,BeforeBuild
详细错误信息:
[票号] = \'211201IL10\' And [票号日期] >= #2021-12-01# And [票号日期] < #2021-12-02# And [订单完成] = \'未完成\' 不是有效的 Sort 字符串项。


问题1:这些列名并没有在代码里面出现,如何消除这个message呢?
问题2:如果还有“未完成核对”的行,就不允许打印此excel报表,还有其他方法可以实现吗?谢谢。



--  作者:有点蓝
--  发布时间:2021/11/27 9:35:00
--  
参数用错位置了:http://www.foxtable.com/webhelp/topics/2747.htm

GetValues(ColumnName,Filter,Sort)

ColumnName:列名称,从此列中提取不重复的值。
Filter:     可选参数,指定一个条件表达式,只返回符合此条件的值;请参考表达式的运算符和函数 和 条件表达式
Sort:       可选参数,指定排序列,如果省略,则根据取值列排序,通常无需设置。


If CurrentTable.name = "IL接头任务单"
    Dim tbl As Table = Tables("IL接头任务单")
    If e.Book.TempLate = "IL接头任务单" Then  \'TempLate是指模板文件的名称
        Dim WWC As String = "完成核对 = \'" & WWC & "\'"
if Tables("IL接头任务单").filter > "" then
WWC = WWC & " and " & Tables("IL接头任务单").filter
end if
        Dim cnt As Integer = tbl.DataTable.GetValues( "销售订单号",WWC).count  
        If cnt > 0 
            messagebox.show("本页面存在 " & cnt & " 个未完成核对的行, 请完成核对后再使用此按钮!")
        End If
    End If
End If

--  作者:edisontsui
--  发布时间:2021/11/29 10:00:00
--  
If CurrentTable.name = "IL接头任务单"
    Dim tbl As Table = Tables("IL接头任务单")
    If e.Book.TempLate = "IL接头任务单" Then  \'TempLate是指模板文件的名称
        Dim WWC As String = "完成核对 = \'" & WWC & "\'"
        If Tables("IL接头任务单").filter > "" Then
            WWC = WWC & " and " & Tables("IL接头任务单").filter
        End If
        Dim cnt As Integer = tbl.DataTable.GetValues( "销售订单号",WWC).count  
        If cnt > 0 
            messagebox.show("本页面存在 " & cnt & " 个未完成核对的行, 请完成核对后再使用此按钮!")
        End If
    End If
End If

上述代码执行结果还是不对。我希望从“完成核对”这个数据列里面找出“未完成核对” (=WWC)这个值的行数。请问要怎样修改代码。

--  作者:有点蓝
--  发布时间:2021/11/29 10:32:00
--  
Dim WWC As String = "完成核对 = \'" & WWC & "\'"
改为
Dim WWC As String = "完成核对 = \'未完成核对\'"
--  作者:edisontsui
--  发布时间:2021/11/29 10:49:00
--  
谢谢。
如1楼所示问题2:如果还有“未完成核对”的行,现在就会有警告出来了,但是最终还是允许打印此 excel 报表的。是否有其他方法能够不允许打印此 excel 报表呢?

--  作者:有点蓝
--  发布时间:2021/11/29 11:04:00
--  
报表事件没有办法取消打印。不要使用菜单的报表生成功能,自己做按钮生成报表:http://www.foxtable.com/webhelp/topics/1145.htm
--  作者:edisontsui
--  发布时间:2021/11/30 10:09:00
--  
If e.Book.TempLate = "直身开料任务单" Then  \'TempLate是指模板文件的名称
    If CurrentTable.name = "直身开料单" Then
        Tables("直身开料单").Sort = "生产票号,型号,长度 Desc"
        For r As Integer = 0 To Tables("直身开料单").rows.count - 1
        Dim dr As Row = Tables("直身开料单").Rows(r)
            If dr("开料顺序号") IsNot Nothing Then
            Else
                dr("开料顺序号") = r+1
            End If
        Next 
    End If
End If

上面代码放在 Beforebuild 事件里面,希望它在执行表格打印之前自动排序并填入开料顺序号。执行之后发现,排序它是完成了,但是没有完成填入开料顺序号的工作。请教是什么原因?

--  作者:有点蓝
--  发布时间:2021/11/30 10:19:00
--  
没有完成填入开料顺序号的工作】是指foxtable的表格没有排序?还是execl报表没有排序?这个代码不会影响execl报表的
--  作者:edisontsui
--  发布时间:2021/11/30 10:58:00
--  
"直身开料单" 里面的排序是按代码完成了,但是,在 "直身开料单" 里面填写 "开料顺序号" 则没有填写,当然,最后打印出的 excel 表格也没有出现 开料顺序号。我希望是这个代码填写完 开料顺序号 后,把开料顺序号也打印在 excel 表格里面。
--  作者:有点蓝
--  发布时间:2021/11/30 11:33:00
--  
调试一下
msgbox(e.Book.TempLate)
If e.Book.TempLate = "直身开料任务单" Then  \'TempLate是指模板文件的名称
msgbox(CurrentTable.name)
    If CurrentTable.name = "直身开料单" Then
        Tables("直身开料单").Sort = "生产piao号,型号,长度 Desc"
        For r As Integer = 0 To Tables("直身开料单").rows.count - 1
        Dim dr As Row = Tables("直身开料单").Rows(r)
            If dr("开料顺序号") IsNot Nothing Then
            Else
                dr("开料顺序号") = r+1
            End If
msgbox(dr("开料顺序号"))
        Next 
    End If
End If