Foxtable(狐表)用户栏目专家坐堂 → 增加一行数据的代码,执行无效


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

主题:增加一行数据的代码,执行无效

帅哥,在线噢!
有点蓝
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:105958 积分:538865 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/8/13 16:21:00 [显示全部帖子]

    If dr221 IsNot Nothing Then
        If e.newvalue > dr221("库存数量") Then 
dim n as double = e.newvalue - dr221("库存数量")
            e.DataRow("出库数量") = dr221("库存数量")
            Dim dra As Row = Tables("出入库").AddNew()
……
            dra("数量") = n
        End If
    End If
End If

 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:105958 积分:538865 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/8/15 9:00:00 [显示全部帖子]

调试

msgbox(dr221 IsNot Nothing )
    If dr221 IsNot Nothing Then
msgbox("e.newvalue=" & e.newvalue )
msgbox("库存数量=" & dr221("库存数量") )
        If e.newvalue * (-1) > dr221("库存数量") Then 
msgbox(1)
            Dim q1 As Double = e.newvalue * (-1) - dr221("库存数量")
msgbox("q1 =" & q1 )
            e.DataRow("出库数量") = dr221("库存数量") * (-1)
msgbox("出库数量 =" & e.DataRow("出库数量"))
            Dim dra As Row = Tables("出入库").AddNew()
msgbox(2)
            dra("出入库单号") = e.DataRow("出入库单号")

 回到顶部
帅哥,在线噢!
有点蓝
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:105958 积分:538865 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/8/15 15:36:00 [显示全部帖子]

以下是引用edisontsui在2022/8/15 15:01:00的发言:
            Dim Filter3 As String = "[物料编号] = '" & ctn(s-1) & "'"
            Dim drs3 As List(Of DataRow) = DataTables("出入库2").Select(Filter3)
            For Each dr3 As DataRow In drs3
                dr3("准备删除") = True
            Next

在执行上面代码之前,我们已经对“出入库2”进行过一次筛选了,但是执行上述代码后,它会把筛选之前的有关数据都列出来。那么要如何修改上面代码,让它只对筛选出的画面上的数据进行处理呢? 我把DataTables("出入库2").Select(Filter3) 代为 Tables("出入库2").Select(Filter3),但是系统不允许我这样改。谢谢。

            Dim Filter3 As String = "[物料编号] = '" & ctn(s-1) & "'"
if Tables("出入库2").filter > "" then
Filter3 = Filter3  & " and " & Tables("出入库2").filter
end if
            Dim drs3 As List(Of DataRow) = DataTables("出入库2").Select(Filter3)

 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:105958 积分:538865 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/8/15 15:37:00 [显示全部帖子]

以下是引用edisontsui在2022/8/15 15:29:00的发言:
If e.DataCol.Name = "出库数量" Then
    Dim dr221 As DataRow = DataTables("批号表").Find("物料编号 = " & "'" & e.DataRow("物料编号") & "' and 批号 = '" & e.DataRow("批号") & "'  and 库位代号 = '" & e.DataRow("库位代号") & "' ") 
msgbox(dr221 IsNot Nothing) - false 
    If dr221 IsNot Nothing Then


批号表的库存是是 5 个的,我在“出入库2” 之 "出库数量" 输入 -10,上面代码执行时,只在第一个 msgbox 出现 false 这个提示,其他 msgbox 没有出现提示,当前行直接接受 newvalue (即-10). 也没有新增数据行。批号表的数量5也会被扣减掉。

第一个 msgbox 出现 false 】说明没有查询到符合条件的数据,检查条件
msgbox("物料编号 = " & "'" & e.DataRow("物料编号") & "' and 批号 = '" & e.DataRow("批号") & "'  and 库位代号 = '" & e.DataRow("库位代号") & "' ")

 回到顶部
帅哥,在线噢!
有点蓝
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:105958 积分:538865 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/8/16 11:21:00 [显示全部帖子]

没看懂,请截图,或者上传实例说明

 回到顶部
帅哥,在线噢!
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:105958 积分:538865 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/8/16 13:34:00 [显示全部帖子]

怎么测试?

 回到顶部
帅哥,在线噢!
有点蓝
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:105958 积分:538865 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/8/16 16:00:00 [显示全部帖子]

这种只能单机使用,多人并发的话是完全无法计算库存的。

个人的建议是不要实时计算库存的变化,而是通过统计来获取可用库存,也就是:可用库存 = 入库合计 - 出库合计

 回到顶部
帅哥,在线噢!
有点蓝
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:105958 积分:538865 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/8/16 16:05:00 [显示全部帖子]

如果要做,改为使用select获取批号表里这个物料的所有批号数据,然后循环判断:如果当前批号的数量足够,就退出循环,否则继续计算取洗衣歌批号数量。

用法和这里的类似:http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=179260&skin=0

 回到顶部
帅哥,在线噢!
有点蓝
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:105958 积分:538865 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/8/17 14:04:00 [显示全部帖子]

这种逻辑不合理,会导致事件互相冲突。应该是一次查询所有此批号的数据,然后遍历处理

 回到顶部
帅哥,在线噢!
有点蓝
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:105958 积分:538865 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/8/17 17:00:00 [显示全部帖子]

还是建议不要做这种库存的加减处理,多测试几次数据就会非常的混乱。

还是改为find,然后利用事件的循环触发来解决问题,主要是查询的时候判断库存数量大于0
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:问题求助.zip



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