Foxtable(狐表)用户栏目专家坐堂 → 出入库与生产指令的关系


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

主题:出入库与生产指令的关系

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


加好友 发短信
等级:六尾狐 帖子:1490 积分:9656 威望:0 精华:0 注册:2014/12/18 16:12:00
出入库与生产指令的关系  发帖心情 Post By:2019/8/17 13:52:00 [只看该作者]

'自动更新生产指令的已入库数量
If e.DataCol.name = "入库数量"
    If e.DataRow("指令单号") = ""
    Else
        For Each dr As DataRow In DataTables("生产指令").DataRows
            If dr("指令单号") = e.DataRow("指令单号") And dr("产品代号") = e.DataRow("物料编号") Then
                dr("已入库数量") = e.DataRow("入库数量") + dr("已入库数量") - e.OldValue
                Exit For
            Else
                Continue For
            End If
        Next
    End If
End If

上述代码的目的是:如果“出入库”里面有"入库数量"的变动,就要将“生产指令”里面“已入库数量”进行累计(加或减)。在执行的时候,大部分情况下“已入库数量”的累计结果都是正确的,但是偶尔会发生错误,而且错误的数据偏差很大,不知道是什么原因。那么这段代码是否存在bug呢?谢谢。

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


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

我觉得这样比较合理一点

If e.DataCol.name = "入库数量"
    If e.OldValue <> e.NewValue then
dim dr as DataRow = DataTables("生产指令").Find("指令单号='" & e.DataRow("指令单号") & "' and 产品代号='" & e.DataRow("物料编号") & "'")
        if dr isnot nothing then
              dr("已入库数量") = e.NewValue + dr("已入库数量") - e.OldValue
          end if
    End If
End If

不过由于表事件模式没有事务控制机制,所以还是会产生误差的。个人建议还是不要使用直接增减库存的方式,而是通过统计获取实时库存。

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


加好友 发短信
等级:六尾狐 帖子:1490 积分:9656 威望:0 精华:0 注册:2014/12/18 16:12:00
  发帖心情 Post By:2019/8/17 14:52:00 [只看该作者]

请问“直接增减库存的方式”和“统计获取实时库存”是什么意思?上述例子中,是不是用关联表和表达式来更新“生产指令”里面的“已入库数量”比较好?

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


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

统计,顾名思义,就是通过分组统计,如:http://www.foxtable.com/webhelp/topics/2305.htm



来获取实时库存。

直接增减就是直接改库存数量。

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


加好友 发短信
等级:六尾狐 帖子:1490 积分:9656 威望:0 精华:0 注册:2014/12/18 16:12:00
  发帖心情 Post By:2019/8/17 15:18:00 [只看该作者]

我用了你给的代码,还是一样出错:它会把“出入库”里面的“批号”一列的数据(比如:20180825)也一起加到“生产指令”的“已入库数量”里面去。这是为什么?

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


加好友 发短信
等级:六尾狐 帖子:1490 积分:9656 威望:0 精华:0 注册:2014/12/18 16:12:00
  发帖心情 Post By:2019/8/17 15:27:00 [只看该作者]

我似乎找到原因了。是下面这句的影响:
If e.DataCol.name = "入库数量" OrElse e.DataCol.name = "出库数量" OrElse e.DataCol.name = "批号" 

我将 OrElse e.DataCol.name = "出库数量" OrElse e.DataCol.name = "批号" 分开另一段来写,就没事了。看看今后情况会怎样再说。谢谢。

 回到顶部