Foxtable(狐表)用户栏目专家坐堂 → [求助] 订单号按规则顺序输入


  共有4080人关注过本帖树形打印复制链接

主题:[求助] 订单号按规则顺序输入

帅哥哟,离线,有人找我吗?
Darcylau
  11楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:55 积分:439 威望:0 精华:0 注册:2017/6/5 21:39:00
  发帖心情 Post By:2018/3/5 13:01:00 [只看该作者]

感谢你的回复。
到180305AM后,下一个应该是180305AN, 可是变成了180305BN,继续180305BO、180305BP、180305BR.......180305BZ, 然后又跳会到180305BA, 右显示订单号重复。
应该是这串代码出了问题。 IIf(idx>702,Chr((idx-703)\676+65),"")&IIF(idx>26,Chr(((idx-1)/26-1) Mod 26 +65),"")&Chr((idx-1) Mod 26 +65),是吗?

 回到顶部
帅哥哟,离线,有人找我吗?
Darcylau
  12楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:55 积分:439 威望:0 精华:0 注册:2017/6/5 21:39:00
  发帖心情 Post By:2018/3/5 13:54:00 [只看该作者]

谢谢您的回复
当到180305AM时,下一个应该是180305AN,可是变成了180305BN,再是180305BO, 180305BP, 180305BR, ........ 180305BZ, 再有变回180305BA, 180305BB....180305BM, 下一个就提示订单重复。
应该是这个串代码 有问题IIf(idx>702,Chr((idx-703)\676+65),"")&IIF(idx>26,Chr(((idx-1)/26-1) Mod 26 +65),"")&Chr((idx-1) Mod 26 +65),是吗?

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  13楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/3/5 14:34:00 [只看该作者]

改成

 

Select Case e.DataCol.name
    Case "编制日"
        If e.DataRow.IsNull("编制日") Then
            e.DataRow("订单号") = Nothing
        Else
            Dim bh As String = Format(e.DataRow("编制日"),"yyMMdd") '取得编号的6位前缀
            If e.DataRow("订单号").StartsWith(bh) = False '如果编号的前6位不符
                Dim idx As Integer
                Dim drs As List(Of DataRow)
                drs = e.DataTable.Select("编制日 = #" & e.DataRow("编制日") & "#", "_Identify") '找出所有符合条件的行
                For i As Integer = 0 To drs.count-1
                    If drs(i)("_Identify")  =e.DataRow("_Identify")
                        idx = i + 1
                        Dim ac As Integer = 65
                        Dim str As String = ""
                        Do While True
                            idx = idx - 1
                            Dim m As Integer = idx Mod 26
                            idx = idx \ 26
                            str = str.Insert(0,chr(65+m))
                            If idx = 0 Then
                                Exit Do
                            End If
                        Loop
                       
                        drs(i)("订单号") = bh & str
                    End If
                Next
            End If
        End If
End Select


 回到顶部
帅哥哟,离线,有人找我吗?
Darcylau
  14楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:55 积分:439 威望:0 精华:0 注册:2017/6/5 21:39:00
  发帖心情 Post By:2018/3/5 18:08:00 [只看该作者]

感谢您,测试可以了。
其实我们编制日是想做成短日期时间格式,也就是增加行时,编制日为当天日期、当时时间。例如 2018-03-05 10:25。请问如何设置代码?

我们还有一个“入库时间”、“出库时间”,是手动输入的,也要短日期时间格式,是在列属性里面设置吗?如何设置呢?

谢谢您!

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  15楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/3/5 18:12:00 [只看该作者]

1、如果需要时间,列属性设置,参考 http://www.foxtable.com/webhelp/scr/0044.htm

 

2、如果自动填入,datarowadded事件,写代码

 

e.datarow("编制日") = Date.Now

[此贴子已经被作者于2018/3/5 18:12:06编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
Darcylau
  16楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:55 积分:439 威望:0 精华:0 注册:2017/6/5 21:39:00
  发帖心情 Post By:2018/3/5 23:00:00 [只看该作者]

感谢回复
可是按您所说的,增加行时,编制日并没有输入任何内容。
输入e.DataRow("编制日") = Date.Today,倒是自动输入日期,但没有时间。我把列属性的日期时间格式分别设置DateTime,DateLongTime,都还是不行。

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  17楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106430 积分:541297 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2018/3/5 23:06:00 [只看该作者]

e.DataRow("编制日") = Date.now

 回到顶部
帅哥哟,离线,有人找我吗?
Darcylau
  18楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:55 积分:439 威望:0 精华:0 注册:2017/6/5 21:39:00
  发帖心情 Post By:2018/3/6 8:18:00 [只看该作者]

感谢回复

可是按您所说的,datarowadded事件,写代码e.DataRow("编制日") = Date.now.  增加行时,编制日并没有输入任何内容。

如果输入e.DataRow("编制日") = Date.Today,倒是自动输入日期,但没有时间。我把列属性的日期时间格式分别设置DateTime,DateLongTime,都还是不行。

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  19楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/3/6 8:45:00 [只看该作者]

回复18楼,datarowadded事件输入e.DataRow("编制日") = Date.now肯定是没问题,请认真测试。

 

如果是订单号没有计算,修改代码,如

 

Select Case e.DataCol.name
    Case "编制日"
        If e.DataRow.IsNull("编制日") Then
            e.DataRow("订单号") = Nothing
        Else
            Dim bh As String = Format(e.DataRow("编制日"),"yyMMdd") '取得编号的6位前缀
            If e.DataRow("订单号").StartsWith(bh) = False '如果编号的前6位不符
                Dim idx As Integer
                Dim drs As List(Of DataRow)
                drs = e.DataTable.Select("编制日 >= #" & e.DataRow("编制日").Date & "# and 编制日 < #" & e.DataRow("编制日").Date.adddays(1) & "#", "_Identify") '找出所有符合条件的行
                For i As Integer = 0 To drs.count-1
                    If drs(i)("_Identify")  =e.DataRow("_Identify")
                        idx = i + 1
                        Dim ac As Integer = 65
                        Dim str As String = ""
                        Do While True
                            idx = idx - 1
                            Dim m As Integer = idx Mod 26
                            idx = idx \ 26
                            str = str.Insert(0,chr(65+m))
                            If idx = 0 Then
                                Exit Do
                            End If
                        Loop
                       
                        drs(i)("订单号") = bh & str
                    End If
                Next
            End If
        End If
End Select


 回到顶部
帅哥哟,离线,有人找我吗?
Darcylau
  20楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:55 积分:439 威望:0 精华:0 注册:2017/6/5 21:39:00
  发帖心情 Post By:2018/3/6 10:09:00 [只看该作者]

老师,您好!
应该是编制日没有自动输入才使得订单号没有自动计算。
我在datarowadded事件中写代码e.DataRow("编制日") = Date.now.  增加行时,编制日并没有输入任何内容。
您看看我是否发项目发给您看看?

 回到顶部
总数 26 上一页 1 2 3 下一页