以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  [求助]请老师帮助  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=54644)

--  作者:爱相随
--  发布时间:2014/8/1 10:59:00
--  [求助]请老师帮助
老师,以下代码是自动生成编号的代码,是根据登录单位+年度+月份+000三位数组成的代码,修改后不得行,提示标注红色的代码有错,请老师帮助一下,谢谢!!
Select e.DataCol.Name
    Case "DWJM","ND","ZJY"
        If e.DataRow.IsNull("DWJM") OrElse e.DataRow.IsNull("ND") OrElse e.DataRow.IsNull("ZJY") Then
            e.DataRow("JHBH") = Nothing
        Else
            Dim bh As String = e.DataRow("DWJM") & "-" & e.DataRow("ND") & "-" & e.DataRow("ZJY") & "-" \'生成编号的前缀
            If e.DataRow("JHBH").StartsWith(bh) = False \'如果单据编号前缀不符
                Dim max As String
                Dim idx As Integer
                Dim flt As String
                flt = "DWJM = \'"& e.DataRow("DWJM") & "\'" And "ND = \'"& e.DataRow("ND") & "\'" And "ZJY = \'"& e.DataRow("ZJY") & "\'" And [_Identify] <> " & e.DataRow("_Identify")
                max = e.DataTable.Compute("Max(JHBH)",flt) \'取得该月的相同工程代码的最大单据编号
                If max > "" Then \'如果存在最大单据编号
                    idx = CInt(max.Substring(12,3)) + 1 \'获得最大单据编号的后四位顺序号,并加1
                Else
                    idx = 1 \'否则顺序号等于1
                End If
                e.DataRow("JHBH") = bh & Format(idx,"000")
            End If
        End If
End Select

--  作者:有点甜
--  发布时间:2014/8/1 11:01:00
--  
flt = "DWJM = \'"& e.DataRow("DWJM") & "\' And ND = \'" & e.DataRow("ND") & "\' And ZJY = \'" & e.DataRow("ZJY") & "\' And [_Identify] <> " & e.DataRow("_Identify")
--  作者:Bin
--  发布时间:2014/8/1 11:02:00
--  
 flt = "DWJM = \'"& e.DataRow("DWJM") & "\' And ND = \'"& e.DataRow("ND") & "\' And ZJY = \'" & e.DataRow("ZJY") & "\' And [_Identify] <> " & e.DataRow("_Identify")
--  作者:爱相随
--  发布时间:2014/8/1 11:12:00
--  
老师,在增加第二条记录时,提示以下信息,是什么意思呢??,是长度不够吗?
.NET Framework 版本:2.0.50727.3053
Foxtable 版本:2014.5.12.1
错误所在事件:表,ZJJHB,DataColChanged
详细错误信息:
Exception has been thrown by the target of an invocation.
Index and length must refer to a location within the string.
Parameter name: length

[此贴子已经被作者于2014-8-1 11:12:21编辑过]

--  作者:有点甜
--  发布时间:2014/8/1 11:13:00
--  
 idx = CInt(max.Substring(bh.length,3)) + 1 \'获得最大单据编号的后四位顺序号,并加1
--  作者:爱相随
--  发布时间:2014/8/1 11:23:00
--  
老师,下面的代码中,我要自动获得是哪一张单号的数据填列不完整,怎么增加代码呢??
If User.IsRole("录入人") Then
    For Each r As Row In Tables("ZJJHB").GetCheckedRows       
        If Tables("ZJJHB").current.IsNull("KSMC") OrElse Tables("ZJJHB").current.IsNull("SQJE") OrElse Tables("ZJJHB").current.IsNull("SBSM") Then
            MessageBox.Show("数据填列不完整,不允许上报,请检查!.")
        Else
            Tables("ZJJHB").Current("SBR") = User.Name
            Tables("ZJJHB").Current.Save()
        End If      
    Next
Else
    MessageBox.show("你非数据填报人,无上报权限!")
End If

--  作者:爱相随
--  发布时间:2014/8/1 11:25:00
--  
真的很麻烦各位老师了,水平太差,但又实在想学,。。。。以我这种水平能不能做这项工作啊。。。,
[此贴子已经被作者于2014-8-1 11:26:00编辑过]

--  作者:有点甜
--  发布时间:2014/8/1 11:26:00
--  
If User.IsRole("录入人") Then
    For Each r As Row In Tables("ZJJHB").GetCheckedRows      
        If r.IsNull("KSMC") OrElse r.IsNull("SQJE") OrElse r.IsNull("SBSM") Then
            MessageBox.Show(r("单号") & "数据填列不完整,不允许上报,请检查!.")
        Else
            r("SBR") = User.Name
            r.Save()
        End If     
    Next
Else
    MessageBox.show("你非数据填报人,无上报权限!")
End If
[此贴子已经被作者于2014-8-1 11:26:06编辑过]

--  作者:爱相随
--  发布时间:2014/8/1 11:40:00
--  
我要把是哪一单据号填列不完整显示出来,怎么设呢?老师提供的上面的代码显示不出单据号。
If User.IsRole("录入人") Then
    For Each r As Row In Tables("ZJJHB").GetCheckedRows       
       If r.IsNull("KSMC") OrElse r.IsNull("SQJE") OrElse r.IsNull("SBSM") Then
            MessageBox.Show("单据号 ("JHBH") 数据填列不完整,不允许上报,请检查!.")
        Else
            r("SBR") = User.Name
            r.Save()        
        End If      
    Next
Else
    MessageBox.show("你非数据填报人,无上报权限!")
End If

--  作者:有点甜
--  发布时间:2014/8/1 11:41:00
--  
 MessageBox.Show("单据号 " & r("JHBH") & " 数据填列不完整,不允许上报,请检查!.")