以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  编号问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=86887)

--  作者:jamhuton
--  发布时间:2016/6/28 12:43:00
--  编号问题

If e.DataCol.Name = "订舱日期" Then
    If e.DataRow.IsNull("订舱日期") Then
        e.DataRow("订舱编号") = Nothing
    Else
        Dim bh As String = Format(e.DataRow("订舱日期"),"yyyyMMdd") \'取得订舱编号的8位前缀
        If e.DataRow("订舱编号").StartsWith(bh) = False \'如果订舱编号的前8位不符
            Dim  max As String
            Dim  idx As  Integer
            max = e.DataTable.Compute("Max(订舱编号)","订舱日期 = #" & e.DataRow("订舱日期") & "# And [_Identify] <> " & e.DataRow("_Identify")) \'取得该天的最大订舱编号
            If  max > "" Then \'如果存在最大订舱编号
                idx = CInt(max.Substring(9,3)) + 1  \'获得最大订舱编号的后三位顺订舱编号,并加1
            Else
图片点击可在新窗口打开查看此主题相关图片如下:1.png
图片点击可在新窗口打开查看
                idx = 1 \'否则顺订舱编号等于1
            End  If
            e.DataRow("订舱编号") = bh & "-内贸" & Format(idx,"000")
         End If
    End  If
 End  If

--  作者:jamhuton
--  发布时间:2016/6/28 12:44:00
--  

If e.DataCol.Name = "订舱日期" Then
    If e.DataRow.IsNull("订舱日期") Then
        e.DataRow("订舱编号") = Nothing
    Else
        Dim bh As String = Format(e.DataRow("订舱日期"),"yyyyMMdd") \'取得订舱编号的8位前缀
        If e.DataRow("订舱编号").StartsWith(bh) = False \'如果订舱编号的前8位不符
            Dim  max As String
            Dim  idx As  Integer
            max = e.DataTable.Compute("Max(订舱编号)","订舱日期 = #" & e.DataRow("订舱日期") & "# And [_Identify] <> " & e.DataRow("_Identify")) \'取得该天的最大订舱编号
            If  max > "" Then \'如果存在最大订舱编号
                idx = CInt(max.Substring(9,3)) + 1  \'获得最大订舱编号的后三位顺订舱编号,并加1
            Else
                idx = 1 \'否则顺订舱编号等于1
            End  If
            e.DataRow("订舱编号") = bh & "-内贸" & Format(idx,"000")
         End If
    End  If
 End  If
这个代码出错在哪里,才会形成所有的编号变成一样了。

--  作者:yinyb36
--  发布时间:2016/6/28 13:04:00
--  

If e.DataCol.Name = "订舱日期" Then
    If e.DataRow.IsNull("订舱日期") Then
        e.DataRow("订舱编号") = Nothing
    Else
        Dim bh As String = Format(e.DataRow("订舱日期"),"yyyyMMdd") \'取得订舱编号的8位前缀
        If e.DataRow("订舱编号").StartsWith(bh) = False \'如果订舱编号的前8位不符
            Dim  max As String
            Dim  idx As  Integer
            max = e.DataTable.Compute("Max(订舱编号)","订舱日期 = #" & e.DataRow("订舱日期") & "# And [_Identify] <> " & e.DataRow("_Identify")) \'取得该天的最大订舱编号
            If  max > "" Then \'如果存在最大订舱编号
                idx = CInt(max.Substring(12)) + 1  \'获得最大订舱编号的后三位顺订舱编号,并加1
            Else
                idx = 1 \'否则顺订舱编号等于1
            End  If
            e.DataRow("订舱编号") = bh & "-内贸" & Format(idx,"000")
         End If
    End  If
 End  If
这个代码出错在哪里,才会形成所有的编号变成一样了。

--  作者:jamhuton
--  发布时间:2016/6/28 13:26:00
--  
貌似也不对,关键我要想把红色【内贸】加进去,所以才出现问题的。
--  作者:douglas738888
--  发布时间:2016/6/28 13:52:00
--  
设置代码列,列的内容就是“内贸”

采用这种格式会好些
Select e.DataCol.Name
    Case "代码".....

给你个参考 这段代码编出来的是例如:P16001-110001Z-DQ201-01
Select e.DataCol.Name
    Case "系统编号_工程专业","系统编号_年份日期","设计编号_电压等级","设计编号_设计阶段","图纸编号_专业类别","图纸编号_顺序编号"
        If e.DataRow.IsNull("系统编号_工程专业") OrElse e.DataRow.IsNull("系统编号_年份日期") OrElse e.DataRow.IsNull("设计编号_电压等级") OrElse e.DataRow.IsNull("设计编号_设计阶段") OrElse e.DataRow.IsNull("图纸编号_专业类别") OrElse e.DataRow.IsNull("图纸编号_顺序编号") Then
            e.DataRow("图签图号") = Nothing
        Else
            Dim d As Date = e.DataRow("系统编号_年份日期")
            d = new Date(d.Year, 1,1)
            Dim max As Integer
            Dim flt As String
            flt = "系统编号_工程专业 = \'"& e.DataRow("系统编号_工程专业") & "\' And 系统编号_年份日期 >= #" & d & "# and 系统编号_年份日期 < #" & d.AddYears(1) & "# And [_Identify] <> " & e.DataRow("_Identify")
            max = e.DataTable.Compute("Max(系统编号_顺序编号)",flt) \'取得该月的相同工程代码的最大单据编号
            e.DataRow("系统编号_顺序编号") = max + 1
            flt = "系统编号_工程专业 = \'"& e.DataRow("系统编号_工程专业") & "\' And 设计编号_电压等级 = \'" & e.DataRow("设计编号_电压等级") & "\' And 系统编号_年份日期 >= #" & d & "# and 系统编号_年份日期 < #" & d.AddYears(1) & "# And [_Identify] <> " & e.DataRow("_Identify")
            max = e.DataTable.Compute("Max(设计编号_工程编号)",flt) \'取得该月的相同工程代码的最大单据编号
            e.DataRow("设计编号_工程编号") = max + 1
            flt = "系统编号_工程专业 = \'"& e.DataRow("系统编号_工程专业") & "\' and 图纸编号_专业类别 = \'" & e.DataRow("图纸编号_专业类别") & "\' and 设计编号_电压等级 = \'" & e.DataRow("设计编号_电压等级") & "\' And 系统编号_年份日期 >= #" & d & "# and 系统编号_年份日期 < #" & d.AddYears(1) & "# And [_Identify] <> " & e.DataRow("_Identify")
            max = e.DataTable.Compute("Max(设计编号_工程编号)",flt) \'取得该月的相同工程代码的最大单据编号
            \'e.DataRow("分册顺序号") = max + 1
            e.DataRow("图签图号") = e.DataRow("系统编号_工程专业") & format(d, "yy") & format(e.DataRow("系统编号_顺序编号"), "000-") & e.DataRow("设计编号_电压等级") & format(e.DataRow("设计编号_工程编号"), "000") & e.DataRow("设计编号_设计阶段") & "-" & e.DataRow("图纸编号_专业类别") & Format(e.DataRow("图纸编号_分册编号"), "00-") & Format(e.DataRow("图纸编号_顺序编号"),"00")
        End If
End Select


--  作者:大红袍
--  发布时间:2016/6/28 14:43:00
--  

If e.DataCol.Name = "订舱日期" Then
    If e.DataRow.IsNull("订舱日期") Then
        e.DataRow("订舱编号") = Nothing
    Else
        Dim bh As String = Format(e.DataRow("订舱日期"),"yyyyMMdd") & "-内贸" \'取得订舱编号的8位前缀
        If e.DataRow("订舱编号").StartsWith(bh) = False \'如果订舱编号的前8位不符
            Dim  max As String
            Dim  idx As  Integer
            max = e.DataTable.Compute("Max(订舱编号)","订舱日期 = #" & e.DataRow("订舱日期") & "# And [_Identify] <> " & e.DataRow("_Identify")) \'取得该天的最大订舱编号
            If  max > "" Then \'如果存在最大订舱编号
                idx = CInt(max.Substring(bh.length,3)) + 1  \'获得最大订舱编号的后三位顺订舱编号,并加1
            Else

                idx = 1 \'否则顺订舱编号等于1
            End  If
            e.DataRow("订舱编号") = bh & Format(idx,"000")
         End If
    End  If
 End  If


--  作者:jamhuton
--  发布时间:2016/6/28 15:25:00
--  
感觉这个代码是没有问题,可能是其他代码引起这个生成的编号出现问题,整列都变成最后一次生成的编号
--  作者:大红袍
--  发布时间:2016/6/28 15:30:00
--  
 上传foxtable实例说明问题。