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


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

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

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/2/21 18:44:00 [显示全部帖子]

参考这里设计

 

http://www.foxtable.com/webhelp/scr/2403.htm

 

001、002、003这些转换成字母的代码,参考

 

Dim idx As Integer = 30
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
output.show(str)

[此贴子已经被作者于2018/2/21 18:56:39编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/3/2 9:14: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
                        drs(i)("订单号") = bh & 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)
                        '参考Excel 表达式IF(Row()>702,Char(INT((Row()-703)/676)+65),"")&IF(Row()>26,Char(Mod((Row()-1)/26-1,26)+65),"")&CHAR(Mod(Row()-1,26)+65)'
                    End If
                Next
            End If
        End If
End Select

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/3/4 20:35:00 [显示全部帖子]

以下是引用Darcylau在2018/3/4 20:20:00的发言:
版主,您好!
感谢你的回复,可是测试了,增加行时,订单号并没有自动输入,是空白的。
您看是否需要我把项目发给您,您给看看。
谢谢!

 

1、你的代码写在datacolchanged事件,你需要输入【编制日】的值,才会计算编号的。

 

2、如果想增加行,立马填入,你可以在DataRowAdded事件,写代码 e.DataRow("编制日") = Date.Today


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/3/5 8:53:00 [显示全部帖子]

用5楼代码,同时,删除默认值函数date(),在DataRowAdded事件,写代码 e.DataRow("编制日") = Date.Today

 

如果还有问题,请上传具体实例说明。


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | 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


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | 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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | 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


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/3/6 10:11:00 [显示全部帖子]

你这个是不可能的事。请上传你做的项目具体说明

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/3/6 14:48:00 [显示全部帖子]

以下是引用Darcylau在2018/3/6 14:36:00的发言:
老师,您好!
我把项目里所有的图片和备注列文件都删除了,压缩项目后还有80多M, 上传的后老是显示服务器错误,请问是不是文件太大了。
怎么传给您呢?

 

单独新建一个项目,弄好表格,输入数据,填入代码,然后发上来说明。


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/3/6 17:25:00 [显示全部帖子]

修改datacolchanging事件

 

    Case "传单日","编制日","确认日"
        If e.NewValue > Date.Today()
            e.Cancel = True
        End If

 

改成

 

    Case "传单日","编制日","确认日"
        If e.NewValue > Date.Today().adddays(1)
            e.Cancel = True
        End If


 回到顶部
总数 11 1 2 下一页