Foxtable(狐表)用户栏目专家坐堂 → 科目末级判断


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

主题:科目末级判断

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


加好友 发短信
等级:小狐 帖子:373 积分:2682 威望:0 精华:0 注册:2020/7/24 10:30:00
科目末级判断  发帖心情 Post By:2022/8/4 15:50:00 [只看该作者]

老师,这个判断末级的好像有点问题。没有实现真正的末级判断。

If e.DataCol.Name = "科目代码" Then 
    If e.DataRow.IsNull("科目代码") Then
        e.DataRow("是否末级科目") = Nothing 
    Else 
        If e.DataTable.Find("科目代码 like '" & e.DataRow("科目代码") & "%' and 科目代码 <> '" & e.DataRow("科目代码") & "'") Is Nothing Then   
            e.DataRow("是否末级科目") = "末级"    
        Else  
            e.DataRow("是否末级科目") = "非末级"
        End If
    End If
End If


还有一种情况就是,现在的科目是“末级”属性,当我新增一条下级科目的时候,那么原先的“末级”科目应该变化为“非末级”,这个用“重置”按钮就可以了吗?

图片点击可在新窗口打开查看

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


加好友 发短信
等级:超级版主 帖子:111414 积分:567140 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/8/4 16:26:00 [只看该作者]

我测试没有问题, 请上传实例说明

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


加好友 发短信
等级:小狐 帖子:373 积分:2682 威望:0 精华:0 注册:2020/7/24 10:30:00
回复:(有点蓝)我测试没有问题, 请上传实例说明  发帖心情 Post By:2022/8/4 21:30:00 [只看该作者]

有点像递归函数判断的问题,不是很懂。

效果如下:

1012 其他货币资金 非末级
101201 银行汇piao 末级
101202 银行本piao 末级
101203 信用卡 末级
101204 信用证保证金 末级
101205 外埠存款 末级

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:会计科目.table



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


加好友 发短信
等级:超级版主 帖子:111414 积分:567140 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/8/4 21:46:00 [只看该作者]

测试没有问题。添加datacolchanged事件代码有,已有数据要重置一下列:

选中科目代码列,“日常工作”功能区“数据”功能组,单击下面的“重置列”按钮即可:


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


加好友 发短信
等级:小狐 帖子:373 积分:2682 威望:0 精华:0 注册:2020/7/24 10:30:00
回复:(有点蓝)测试没有问题。添加datacolchanged事...  发帖心情 Post By:2022/8/4 22:56:00 [只看该作者]

可以了,需要重置,每次新增一个科目层级都需要重置一下才能准确,这个在切换表的时候自动刷新的话,是不是要写在项目事件里面?

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


加好友 发短信
等级:超级版主 帖子:111414 积分:567140 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/8/4 23:25:00 [只看该作者]

如果更改代码后对原有的上级自动刷新的话,参考:
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:会计科目1.zip


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


加好友 发短信
等级:小狐 帖子:373 积分:2682 威望:0 精华:0 注册:2020/7/24 10:30:00
回复:(有点蓝)如果更改代码后对原有的上级自动刷新...  发帖心情 Post By:2022/8/5 15:22:00 [只看该作者]

太难了这个。


 If e.DataTable.Find("科目代码 like '" & e.DataRow("科目代码") & "%' and 科目代码 <> '" & e.DataRow("科目代码") & "'") Is Nothing Then 


 Dim s As String = Left(e.NewValue, e.NewValue.length - 2)


这两句代码怎么理解的?

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


加好友 发短信
等级:超级版主 帖子:111414 积分:567140 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/8/5 16:33:00 [只看该作者]

If e.DataTable.Find("科目代码 like '" & e.DataRow("科目代码") & "%' and 科目代码 <> '" & e.DataRow("科目代码") & "'") Is Nothing Then 
查找有没有以编辑数据的行(e.DataRow("科目代码"))的科目代码开头的科目代码,比如录入“01”。这句就是查询有没有“0101”,"010201"这种以01开头的编码。Is Nothing表示找不到,也就是没有以01开头的其它编码

Dim s As String = Left(e.NewValue, e.NewValue.length - 2)表示取单元格更改的数据去掉右边2个字符后的数据,比如,单元格输入“010203”,s变量就等于“0102”

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


加好友 发短信
等级:婴狐 帖子:44 积分:360 威望:0 精华:0 注册:2021/12/26 9:07:00
  发帖心情 Post By:2022/8/5 19:42:00 [只看该作者]

这种判断 会出Bug的!
第一个Bug:  比如 1012101 找到的上级科目是 10121 
第二个Bug:  比如  如果科目表中存在101210 ,不能处理101210 1012101 之间的上下级关系
[此贴子已经被作者于2022/8/5 19:46:55编辑过]

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


加好友 发短信
等级:超级版主 帖子:111414 积分:567140 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/8/6 8:57:00 [只看该作者]

要保证代码的长度是一致的,子码比父码多2位。不然就改为使用like判断,

 回到顶部