以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  求助:如何用消费明细中的数据,写入入库出库表中的出库数量后自动计算库存。  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=53483)

--  作者:李孝春
--  发布时间: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编辑过]

--  作者:Bin
--  发布时间:2014/7/9 8:31:00
--  
e.DataRow("当前库存")=DataTables("入库出库").Compute("sum(库存)","[物品名称] = \'" & e.NewValue & "\'")

改为

dim drr as datarow = DataTables("入库出库").FInd("[物品名称] = \'" & e.NewValue & "\'","_SortKey Desc")

if drr isnot nothing then
    e.DataRow("当前库存")=drr("库存")
end if




--  作者:blackzhu
--  发布时间:2014/7/9 8:51:00
--  
怎么又是当前行?难道你的出库入库永远只有一行?


  Dim a As Row = Tables("入库出库").Current

--  作者:李孝春
--  发布时间:2014/7/9 9:17:00
--  回复:(Bin)e.DataRow("当前库存")=DataTables("入库...
bin 老师 这个代码放在哪个事件中 我放在数据 增加行事件中运行没有出现效果  继续求解
--  作者:Bin
--  发布时间:2014/7/9 9:19:00
--  
替换你原来红色部分的代码,这个不是放在DataColChanged的吗? 怎么放到增加行事件去了?
--  作者:李孝春
--  发布时间:2014/7/9 9:20:00
--  回复:(blackzhu)怎么又是当前行?难道你的出库入库永...
朱老师  习惯了当前行操作

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

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

求解哦

--  作者:李孝春
--  发布时间:2014/7/9 9:23:00
--  回复:(Bin)替换你原来红色部分的代码,这个不是放在...
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

--  作者:Bin
--  发布时间:2014/7/9 9:24:00
--  
上例子吧.
--  作者:李孝春
--  发布时间:2014/7/9 9:36:00
--  回复:(Bin)上例子吧.
例子如下:
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:listview201407051625_201308090932.zip

麻烦你 BIN老师

--  作者:Bin
--  发布时间:2014/7/9 9:45:00
--  
测试没问题,可以获取库存啊