以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 复杂流水号 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=93239) |
||||||||||||||||||||||||||||||||||||||||||
-- 作者:ming8604 -- 发布时间:2016/11/23 16:00:00 -- 复杂流水号 两张表第一张为供应商资料表,第二张为订单表。两张表关联是供应商编号,设置第二张流水编号自动生成。每次添加新订单时,自动生成。 流水编号的规则,CN是默认,年限,四位流水编号(年),用户组(登录用户所在组),最后是供应商名字。 因为规则过于复杂,改了好多次都失败了。让我初学者无从下手。
|
||||||||||||||||||||||||||||||||||||||||||
-- 作者:有点蓝 -- 发布时间:2016/11/23 16:38:00 -- DataColChanged事件代码 Select e.DataCol.Name Case "订单时间","供应商编号" If e.DataRow.IsNull("订单时间") OrElse e.DataRow.IsNull("供应商编号") Then e.DataRow("编号") = Nothing Else Dim d As Date = e.DataRow("订单时间") Dim y As Integer = d.Year Dim y2 As String = cstr(y).SubString(2,2) Dim bh As String = "CN-" & y2 & "-" \'生成编号的前缀 Dim fd As Date = New Date(y,1,1) \'获得该月的第一天 Dim ld As Date = New Date(y+1,1,1) \'获得该月的最后一天 Dim dr As DataRow = DataTables("供应商资料").Find("供应商编号=\'" & e.DataRow("供应商编号") & "\'") If dr IsNot Nothing Then If e.DataRow("编号").StartsWith(bh) = False OrElse e.DataRow("编号").EndsWith("-" & User.Group & " " & dr("供应商名称")) = False \'如果单据编号前缀不符 Dim max As String Dim idx As Integer Dim flt As String flt = "订单时间 >= #" & fd & "# And 订单时间 <= #" & ld & "# And [_Identify] <> " & e.DataRow("_Identify") max = e.DataTable.SQLCompute("Max(Left(编号,10))",flt) \'取得该月的相同工程代码的最大单据编号 If max > "" Then \'如果存在最大单据编号 idx = CInt(max.Substring(6,4)) + 1 \'获得最大单据编号的后四位顺序号,并加1 Else idx = 1 \'否则顺序号等于1 End If e.DataRow("编号") = bh & Format(idx,"0000") & "-" & User.Group & " " & dr("供应商名称") e.DataRow.Save End If End If End If End Select |
||||||||||||||||||||||||||||||||||||||||||
-- 作者:ming8604 -- 发布时间:2016/12/29 19:11:00 -- 多谢,指导~ \'#\' 附近有语法错误。 自动生成的编号那出现的错误。 以前都可以的。但是重定向云数据库之后,就会出现这个错误了。麻烦看看,到底怎么回事。。 表属性的datacolchanged事件 e.DataRow("endDate") = e.DataRow("startDate").AddDays(180) Select e.DataCol.Name Case "Date","Supplier" If e.DataRow.IsNull("Date") OrElse e.DataRow.IsNull("Supplier") Then e.DataRow("PCN") = Nothing Else Dim d As Date = e.DataRow("Date") Dim y As Integer = d.Year Dim y2 As String = cstr(y).SubString(2,2) Dim bh As String = "PCN-" & y2 & "-" \'生成PCN的前缀 Dim fd As Date = New Date(y,1,1) \'获得该月的第一天 Dim ld As Date = New Date(y+1,1,1) \'获得该月的最后一天 Dim dr As DataRow = DataTables("vendor").Find("Supplier=\'" & e.DataRow("Supplier") & "\'") If dr IsNot Nothing Then If e.DataRow("PCN").StartsWith(bh) = False OrElse e.DataRow("PCN").EndsWith("-" & User.Group & " " & dr("Supplier")) = False \'如果单据PCN前缀不符 Dim max As String Dim idx As Integer Dim flt As String flt = "Date >= #" & fd & "# And Date <= #" & ld & "# And [_Identify] <> " & e.DataRow("_Identify") max = e.DataTable.SQLCompute("Max(Left(PCN,11))",flt) \'取得该月的相同工程代码的最大单据PCN If max > "" Then \'如果存在最大单据PCN idx = CInt(max.Substring(7,4)) + 1 \'获得最大单据PCN的后四位顺序号,并加1 Else idx = 1 \'否则顺序号等于1 End If e.DataRow("PCN") = bh & Format(idx,"0000") & "-" & User.Group & " " & dr("name") e.DataRow.Save End If End If End If End Select |
||||||||||||||||||||||||||||||||||||||||||
-- 作者:cbt -- 发布时间:2016/12/29 19:24:00 -- 把 # 改成 \' 单引号 试试 |
||||||||||||||||||||||||||||||||||||||||||
-- 作者:有点色 -- 发布时间:2016/12/29 23:44:00 --
sqlserver数据库的日期要用单引号包裹起来,而不是#号。
|