Foxtable(狐表)用户栏目专家坐堂 → 求助:如何用消费明细中的数据,写入入库出库表中的出库数量后自动计算库存。


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

主题:求助:如何用消费明细中的数据,写入入库出库表中的出库数量后自动计算库存。

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


加好友 发短信
等级:九尾狐 帖子:2472 积分:17346 威望:0 精华:0 注册:2013/1/31 0:03:00
求助:如何用消费明细中的数据,写入入库出库表中的出库数量后自动计算库存。  发帖心情 Post By:2014/7/8 23:33:00 [显示全部帖子]

按照帮助中做的现金流水账 改成了入库出库及库存计算
现在项目中有一消费明细表、入库出库表。
期待在消费明细表中
 一旦选择了某个物品后 输入 数量  自动计算价格后  
及时将这个数据写入入库出库表中的商品名及出库数量 同时自动计算库存数

入库出库表中字段依次为:
物品名称 物品编码 物品规格 入库  入库时间 出库 出库时间 库存
消费明细表中字段依次为:
餐桌编号 订单编号 消费物品 物品规格 消费数量  物品单价 累计消费  消费时间


期待消费明细每增加一行记录就对应在入库出库中写入一行数据
将【消费明细】中的【消费物品】等于【入库出库】中的【物品名称】
将【消费明细】中的【消费数量】等于【入库出库】中的【出库】
将【消费明细】中的【消费时间】等于【入库出库】中的【出库时间】

经过摸索:在消费明细表中DATACOLCHANGED事件中加入如下代码:
Select Case e.DataCol.Name
    Case "消费数量"
        Tables("入库出库").AddNew
        Dim a As Row = Tables("入库出库").Current
        a("物品名称")=e.DataRow("消费物品")
        a("出库")=e.DataRow("消费数量")
        a("出库时间")=e.DataRow("消费时间")        
End Select

运行测试达到初步效果。



图片点击可在新窗口打开查看此主题相关图片如下:221.jpg
图片点击可在新窗口打开查看
入库出库表
代码如下:
Select Case e.DataCol.Name
    Case "物品名称","入库","出库"
        If e.DataCol.Name = "物品名称" Then
            If e.NewValue Is Nothing Then
                e.DataRow("物品编码") = Nothing
                e.DataRow("入库") = Nothing
                e.DataRow("物品规格") = Nothing
                e.DataRow("出库")=Nothing
            Else
                
Dim dr1 As DataRow
dr1 = DataTables("物品信息").Find("[物品名称] = '" & e.NewValue & "'")
                If dr1 IsNot Nothing
                    e.DataRow("物品编码") = dr1("物品编码")
                    e.DataRow("物品规格") = dr1("规格")
                End If
            End If
        End If
        
        Dim dr As DataRow
        Dim mr As DataRow = e.DataRow
        Dim drs As List(of DataRow)
        dr = e.DataTable.Find("[_SortKey] < " & mr("_SortKey") & " And [物品名称] = '" & mr("物品名称") & "'", "[_SortKey] Desc")
        If dr Is Nothing Then
            mr("库存") = mr("入库") - mr("出库")
            dr = mr
        End If
        drs = e.DataTable.Select("[_SortKey] >= " & dr("_SortKey") & " And [物品名称] = '" & dr("物品名称") & "'", "[_SortKey]")
        For i As Integer = 1 To drs.Count - 1
            drs(i)("库存") = drs(i-1)("库存") + drs(i)("入库") - drs(i)("出库")
        Next
        If e.DataCol.Name = "物品名称" AndAlso e.OldValue IsNot Nothing AndAlso e.OldValue <> e.NewValue Then
            dr = e.DataTable.Find("[_SortKey] < " & mr("_SortKey") & " And [物品名称] = '" & e.OldValue & "'", "[_SortKey] Desc")
            If dr Is Nothing Then
                dr = e.DataTable.Find("[物品名称] = '" & e.OldValue & "'", "[_SortKey]")
                If dr IsNot Nothing Then
                    dr("库存") = dr("入库") - dr("出库")
                End If
            End If
            If dr IsNot Nothing Then
                drs = e.DataTable.Select("[_SortKey] >= " & dr("_SortKey") & " And [物品名称] = '" & dr("物品名称") & "'", "[_SortKey]")
                For i As Integer = 1 To drs.Count - 1
                    drs(i)("库存") = drs(i-1)("库存") + drs(i)("入库") - drs(i)("出库")
                Next
            End If
        End If
End Select


图片点击可在新窗口打开查看此主题相关图片如下:222.jpg
图片点击可在新窗口打开查看
物品入库表 代码如下:
Select Case e.DataCol.Name
    Case "物品名称"
        If e.DataCol.Name = "物品名称" Then
            If e.NewValue Is Nothing Then
                e.DataRow("物品编码") = Nothing
                e.DataRow("物品名称") = Nothing
                e.DataRow("助记码") = Nothing
                e.DataRow("入库日期")=Nothing
            Else
                Dim a1 As DataRow = DataTables("入库出库").Find("[物品名称] = '" & e.NewValue & "'")
                Dim dr As DataRow
                dr = DataTables("物品信息").Find("[物品名称] = '" & e.NewValue & "'")
                If dr IsNot Nothing
                    e.DataRow("物品名称") = dr("物品名称")
                    e.DataRow("物品编码") = dr("物品编码")
                    e.DataRow("助记码") = dr("助记码")
                    e.DataRow("入库日期") = Date.now()
                    e.DataRow("当前库存")=DataTables("入库出库").Compute("sum(库存)","[物品名称] = '" & e.NewValue & "'")
                    'a1("库存")
                End If
            End If
        End If
End Select

Select Case e.DataCol.Name
    Case "数量"
        Tables("入库出库").AddNew
        Dim a As Row = Tables("入库出库").Current
        a("物品名称")=e.DataRow("物品名称")
        a("入库")=e.DataRow("数量")
        a("入库时间")=e.DataRow("入库日期")
        e.DataRow("当前库存")=DataTables("入库出库").Compute("sum(库存)","[物品名称] = '" & e.NewValue & "'")
End Select

 红色部分代码错误 求纠正为只显示当前物品名称末尾库存数,而不是所有的库存数相加。

图片点击可在新窗口打开查看此主题相关图片如下:223.jpg
图片点击可在新窗口打开查看

消费明细图  代码如下:
If e.DataCol.Name = "消费物品" Then
    If e.NewValue Is Nothing Then
        e.DataRow("消费数量") = Nothing
        e.DataRow("物品单价") = Nothing
        e.DataRow("物品规格") = Nothing
        e.DataRow("消费时间")=Nothing
    Else       
        Dim dr As DataRow
        dr = DataTables("物品信息").Find("[物品名称] = '" & e.NewValue & "'")
        If dr IsNot Nothing
            e.DataRow("物品单价") = dr("物品单价")
            e.DataRow("物品规格") = dr("规格")
            'e.DataRow("消费数量") = 1           
        End If
    End If   
End If


Select Case e.DataCol.Name
    Case "消费数量"
        e.DataRow("累计消费")=e.DataRow("消费数量")*e.DataRow("物品单价")
        Dim 变量名 As WinForm.Label = Forms("餐桌管理").Controls("Label16")
        变量名.Text = "当前桌号为:【" & Vars("桌号") & "】   共消费【" & Tables("订单表.消费明细").Compute("sum(累计消费)") & "】元"
       ‘以下红色代码写法合理不?求指导
        Tables("入库出库").AddNew
        Dim a As Row = Tables("入库出库").Current
        a("物品名称")=e.DataRow("消费物品")
        a("出库")=e.DataRow("消费数量")
        a("出库时间")=e.DataRow("消费时间")
End Select

[此贴子已经被作者于2014-7-9 1:05:49编辑过]

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


加好友 发短信
等级:九尾狐 帖子:2472 积分:17346 威望:0 精华:0 注册:2013/1/31 0:03:00
回复:(Bin)e.DataRow("当前库存")=DataTables("入库...  发帖心情 Post By:2014/7/9 9:17:00 [显示全部帖子]

bin 老师 这个代码放在哪个事件中 我放在数据 增加行事件中运行没有出现效果  继续求解

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


加好友 发短信
等级:九尾狐 帖子:2472 积分:17346 威望:0 精华:0 注册:2013/1/31 0:03:00
回复:(blackzhu)怎么又是当前行?难道你的出库入库永...  发帖心情 Post By:2014/7/9 9:20:00 [显示全部帖子]

朱老师  习惯了当前行操作

因为是希望物品入库表中数量发生变动后 新增入库出库表中 一条记录  入库记录
将当前物品入库中的物品名称 入库时间 数量对应到入库出库表中的物品名称  入库  入库时间

现在想实现物品入库中的库存 只要当物品入库中数量发生变化之后 自动同步计算库存 也就是调取入库出库中的该商品名称下的库存数

求解哦

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


加好友 发短信
等级:九尾狐 帖子:2472 积分:17346 威望:0 精华:0 注册:2013/1/31 0:03:00
回复:(Bin)替换你原来红色部分的代码,这个不是放在...  发帖心情 Post By:2014/7/9 9:23:00 [显示全部帖子]

bin老师 已经更改代码如下  但是实际运行中当我在物品入库中输入数量 不会及时计算库存 或者是调取入库出库中对应商品的库存数量!
但是入库出库表中对应的入库数据时正确显示的 库存数量也是计算正确的


Select Case e.DataCol.Name
    Case "物品名称"
        If e.DataCol.Name = "物品名称" Then
            If e.NewValue Is Nothing Then
                e.DataRow("物品编码") = Nothing
                e.DataRow("物品名称") = Nothing
                e.DataRow("助记码") = Nothing
                e.DataRow("入库日期")=Nothing
            Else
                Dim a1 As DataRow = DataTables("入库出库").Find("[物品名称] = '" & e.NewValue & "'")
                Dim dr As DataRow
                dr = DataTables("物品信息").Find("[物品名称] = '" & e.NewValue & "'")
                If dr IsNot Nothing
                    e.DataRow("物品名称") = dr("物品名称")
                    e.DataRow("物品编码") = dr("物品编码")
                    e.DataRow("助记码") = dr("助记码")
                    e.DataRow("入库日期") = Date.now()
                    e.DataRow("操作人员") = user.Name
                    Dim drr As DataRow = DataTables("入库出库").FInd("[物品名称] = '" & e.NewValue & "'","_SortKey Desc")
                    If drr IsNot Nothing Then
                    e.DataRow("当前库存")=drr("库存")
                    End If                    'a1("库存")
                End If
            End If
        End If
End Select

Select Case e.DataCol.Name
    Case "数量"
        If e.DataRow.IsNull("数量") Then
        Else
            Tables("入库出库").AddNew
            Dim a As Row = Tables("入库出库").Current
            a("物品名称")=e.DataRow("物品名称")
            a("入库")=e.DataRow("数量")
            a("入库时间")=e.DataRow("入库日期")
        End If
        Dim drr As DataRow = DataTables("入库出库").FInd("[物品名称] = '" & e.NewValue & "'","_SortKey Desc")
        If drr IsNot Nothing Then
            e.DataRow("当前库存")=drr("库存")
        End If
End Select

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


加好友 发短信
等级:九尾狐 帖子:2472 积分:17346 威望:0 精华:0 注册:2013/1/31 0:03:00
回复:(Bin)上例子吧.  发帖心情 Post By:2014/7/9 9:36:00 [显示全部帖子]

例子如下:
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:listview201407051625_201308090932.zip

麻烦你 BIN老师

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


加好友 发短信
等级:九尾狐 帖子:2472 积分:17346 威望:0 精华:0 注册:2013/1/31 0:03:00
回复:(Bin).[upload=png,qq截图20140709094606.png...  发帖心情 Post By:2014/7/9 10:01:00 [显示全部帖子]

读取库存没有问题 我现在是想在数量变动后 自动同步更新库存 而不是新增物品名称后显示的库存 呵呵

图片点击可在新窗口打开查看此主题相关图片如下:2211.jpg
图片点击可在新窗口打开查看
[此贴子已经被作者于2014-7-9 10:04:10编辑过]

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


加好友 发短信
等级:九尾狐 帖子:2472 积分:17346 威望:0 精华:0 注册:2013/1/31 0:03:00
回复:(blackzhu)以下是引用李孝春在2014-7-9 9:20:...  发帖心情 Post By:2014/7/9 10:10:00 [显示全部帖子]

库存只有某个商品最后一条记录的库存数才是准确的汇总数据 呵呵

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


加好友 发短信
等级:九尾狐 帖子:2472 积分:17346 威望:0 精华:0 注册:2013/1/31 0:03:00
回复:(Bin)输入数量后,自动增加到库存里面去是吧?i...  发帖心情 Post By:2014/7/9 10:20:00 [显示全部帖子]

BIN老师  将你所提供的思路代码  写成如下 问题圆满解决 谢谢

If e.DataCol.name="数量" AndAlso e.DataRow.isnull("物品名称")=False Then
    Dim drr As DataRow = DataTables("入库出库").FInd("[物品名称] = '" & e.DataRow("物品名称") & "'","_SortKey Desc")
    If drr IsNot Nothing Then
        e.DataRow("当前库存")=drr("库存") 
    End If
End If

 回到顶部