Foxtable(狐表)用户栏目专家坐堂 → 负库存销售问题


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

主题:负库存销售问题

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


加好友 发短信
等级:幼狐 帖子:175 积分:1652 威望:0 精华:0 注册:2015/6/10 13:50:00
负库存销售问题  发帖心情 Post By:2017/5/12 10:53:00 [只看该作者]

            With DataTables("库存")
                dd = .Find("[商品名称] = '" & e.DataRow("商品名称") & "'","业务日期 Desc",1) '找出倒数第二次订购PD01产品的记录
                If dd Is Nothing Then
                    MessageBox.Show("当前产品没有库存","提示",MessageBoxButtons.OK)
                    e.DataRow("数量") = 0
                    If dd("库存_数量") - e.DataRow("数量") >= 0 Then
                        dt("出库_数量") = e.DataRow("数量")
                    Else
                        MessageBox.Show("输入数量超过库存数量:" & dd("库存_数量") & ",请重新输入","提示",MessageBoxButtons.OK)
                        e.DataRow("数量") = 0
                    End If
                End If
            End With     

上面代码当产品未录入库存数据时,会把销售数量设置为0 ,数量列默认值是1 
执行时出现
Exception has been thrown by the target of an invocation.
Object reference not set to an instance of an object.

该如何解决?      
[此贴子已经被作者于2017/5/12 10:54:37编辑过]

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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/5/12 11:01:00 [只看该作者]

查不到dd的时候,你不能使用 dd("库存_数量") 的值的

 

With DataTables("库存")
    dd = .Find("[商品名称] = '" & e.DataRow("商品名称") & "'","业务日期 Desc",1) '找出倒数第二次订购PD01产品的记录
    If dd Is Nothing Then
        MessageBox.Show("当前产品没有库存","提示",MessageBoxButtons.OK)
        e.DataRow("数量") = 0
    Else
        If dd("库存_数量") - e.DataRow("数量") >= 0 Then
            dt("出库_数量") = e.DataRow("数量")
        Else
            MessageBox.Show("输入数量超过库存数量:" & dd("库存_数量") & ",请重新输入","提示",MessageBoxButtons.OK)
            e.DataRow("数量") = 0
        End If
    End If
End With


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


加好友 发短信
等级:幼狐 帖子:175 积分:1652 威望:0 精华:0 注册:2015/6/10 13:50:00
  发帖心情 Post By:2017/5/12 11:26:00 [只看该作者]

   Case "数量"
        Dim dt As DataRow        '否则在库存表查找同名的产品行,将找到的行赋值给变量dt
        dt = DataTables("库存").Find("[销售关联列] = '" & e.DataRow("_Identify") & "'")
        If dt IsNot Nothing Then '如果找到了同名的产品行,也就是dt不是Nothing
            Dim dd As DataRow
            With DataTables("库存")
                dd = .Find("[商品名称] = '" & e.DataRow("商品名称") & "'","业务日期 Desc",1) '找出倒数第二次订购PD01产品的记录
                If dd Is Nothing Then
                    MessageBox.Show("当前产品没有库存","提示",MessageBoxButtons.OK)
                    e.DataRow("数量") = 0
                Else
                    If dd("库存_数量") - e.DataRow("数量") >= 0 Then
                        dt("出库_数量") = e.DataRow("数量")
                    Else
                        MessageBox.Show("输入数量超过库存数量:" & dd("库存_数量") & ",请重新输入","提示",MessageBoxButtons.OK)
                        e.DataRow("数量") = 0
                    End If
                End If
            End With
        End If
        e.DataRow("金额") = e.DataRow("单价") * e.DataRow("数量")
上面代码为什么在连续销售同一个产品时,不再判断负库存销售的情况?
而在销售产品1,再销售产品2,再销售产品1时就没问题
[此贴子已经被作者于2017/5/12 11:31:56编辑过]

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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/5/12 11:33:00 [只看该作者]

你为什么要写第一个判断?

 

Case "数量"
    Dim dd As DataRow
    With DataTables("库存")
        dd = .Find("[商品名称] = '" & e.DataRow("商品名称") & "'","业务日期 Desc",1) '找出倒数第二次订购PD01产品的记录
        If dd Is Nothing Then
            MessageBox.Show("当前产品没有库存","提示",MessageBoxButtons.OK)
            e.DataRow("数量") = 0
        Else
            If dd("库存_数量") - e.DataRow("数量") >= 0 Then
                dd("出库_数量") = e.DataRow("数量")
            Else
                MessageBox.Show("输入数量超过库存数量:" & dd("库存_数量") & ",请重新输入","提示",MessageBoxButtons.OK)
                e.DataRow("数量") = 0
            End If
        End If
    End With
    e.DataRow("金额") = e.DataRow("单价") * e.DataRow("数量")

[此贴子已经被作者于2017/5/12 11:33:50编辑过]

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


加好友 发短信
等级:幼狐 帖子:175 积分:1652 威望:0 精华:0 注册:2015/6/10 13:50:00
  发帖心情 Post By:2017/5/12 11:50:00 [只看该作者]

谢谢
应该是日期排序出问题了,换别的列排序就解决了。同一个订单明细日期都是一样的,
第一个判断是重复了,复制前面输入商品时的判断。


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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/5/12 11:57:00 [只看该作者]

加入多个列判断呗

 

dd = .Find("[商品名称] = '" & e.DataRow("商品名称") & "'","业务日期 Desc, _Identify desc",1) '找出倒数第二次订购PD01产品的记录


 回到顶部