Foxtable(狐表)用户栏目专家坐堂 → 求助,如何实现物品调取,从原来库点调取后,原来库存减少,同时在新库点增加对应数量!


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

主题:求助,如何实现物品调取,从原来库点调取后,原来库存减少,同时在新库点增加对应数量!

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


加好友 发短信
等级:九尾狐 帖子:2472 积分:17346 威望:0 精华:0 注册:2013/1/31 0:03:00
求助,如何实现物品调取,从原来库点调取后,原来库存减少,同时在新库点增加对应数量!  发帖心情 Post By:2014/9/18 20:42:00 [只看该作者]

求助:

 求助,如何实现物品调取,从原来库点调取后,原来库存减少,同时在新库点增加对应数量!


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

 

点物品调度后弹出物品调库管理

选择原库地点  对应的是设备库存的入库地点

原库数量自动等于设备库存表中的当前库存数

当选择了新的调入地点后,当前原库点对应出库相应数量的商品,同时新增一个入库数据到调入底单。

 

不知道这样的思路合理不合理,求解

 

求指导 求更加合理化的设计思路和代码写法


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/9/18 20:45:00 [只看该作者]

用代码,做一个出库和一个入库操作。


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


加好友 发短信
等级:九尾狐 帖子:2472 积分:17346 威望:0 精华:0 注册:2013/1/31 0:03:00
回复:(有点甜)用代码,做一个出库和一个入库操作。...  发帖心情 Post By:2014/9/18 21:25:00 [只看该作者]

我采用了一个表行改变时间增加出库 然后再窗体关闭前增加入库 基本可以实现我的要求

 

但是现在又一个问题出现:

设备库存表中有一个当前库存 入库地点  出库地点  入库数量  出库数量 五个字段

 

门店调取表中有一个原库地点 调入地点 原库数量  调取数量 当前库存

 

原库数量我想实现在原库地点输入内容后 且设备名称不为空的情况下 实现筛选结果为当前所选择的原库地点和设备名称对应的库存为多少

 

当调入地点和调取数量有内容后  当前库存则等于调入地点对应设备名称的当前库存

 

下面是实现代码  但是运行时候报错 

Select Case e.DataCol.Name
    Case "设备名称"
If e.DataRow("原库地点")<>"" Then
Dim dr As DataRow
dr = DataTables("设备库存").Find("[出库地点] = '" & e.datarow("原库地点") & "'","[设备名称] = '" & e.datarow(“设备名称”) & "'")
If dr IsNot Nothing
e.DataRow("原库数量")=dr("当前库存")
end if
end if
end selcet

 

出现下列错误

.NET Framework 版本:2.0.50727.5483
Foxtable 版本:2014.9.16.1
错误所在事件:表,门店调取,DataColChanged
详细错误信息:
调用的目标发生了异常。
[设备名称] = 苹果5S国行白色16G 不是有效的排序字符串项。


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/9/18 21:29:00 [只看该作者]

dr = DataTables("设备库存").Find("[出库地点] = '" & e.DataRow("原库地点") & "' and [设备名称] = '" & e.DataRow("设备名称") & "'")

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


加好友 发短信
等级:五尾狐 帖子:1085 积分:8220 威望:0 精华:4 注册:2012/3/31 18:08:00
  发帖心情 Post By:2014/9/18 21:37:00 [只看该作者]

在DataTable查找符合条件的行,如果找到的话,返回找到的行,否则返回Nothing。
如果有多个符合条件的行,默认返回第一个,也可以指定返回第几个符合条件的行。

语法:

Find(Filter,Sort,Index)

Filter: 条件表达式,请参考表达式的运算符和函数条件表达式
Sort: 可选参数,指定排序方式。
Index: 可选参数,指定返回第几个符合条件的行,0表示第一行。

示例一:

Dim dr As DataRow
dr =
DataTables("产品").Find("产品编号 = '03'") '找出编号为03的产品
With DataTables(
"订单")
dr = .Find(
"产品 = 'PD01'","日期") '找出第一次订购PD01产品的记录
dr = .Find(
"产品 = 'PD01'","日期",1) '找出第二次订购PD01产品的记录
End With

示例二:

有的时候,我们需要查找倒数第几行数据,例如最近一次订购某产品的记录。
可以参考下面的代码:

Dim dr As DataRow
With DataTables("订单")
dr
= .Find("产品 = 'PD01'","日期 Desc")
'找出最后一次订购PD01产品的记录
dr = .Find("产品 = 'PD01'","日期 Desc",1) '找出倒数第二次订购PD01产品的记录
End With


‘以上帮助里的,说的很明白,第二个参数是SORT 排序 用的,这里只能指定一个字段,可以用DESC 逆序排列,你上面的条件写错了。。。

dr = DataTables("设备库存").Find("[出库地点] = '" & e.datarow("原库地点") & "' and [设备名称] = '" & e.datarow(“设备名称”) & "'")


这样写看看对不。。如果要逆序可以加上排序字段


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


加好友 发短信
等级:九尾狐 帖子:2472 积分:17346 威望:0 精华:0 注册:2013/1/31 0:03:00
回复:(有点甜)dr = DataTables("设备库存").Find("...  发帖心情 Post By:2014/9/18 22:05:00 [只看该作者]

谢谢有点甜老师  现在设备库存表又出问题了



图片点击可在新窗口打开查看此主题相关图片如下:234.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
                e.DataRow("设备内存") = Nothing
            Else
                Dim dr1 As DataRow
                dr1 = DataTables("设备信息").Find("[设备名称] = '" & e.NewValue & "'")
                If dr1 IsNot Nothing
                    e.DataRow("设备品牌") = dr1("设备品牌")
                    e.DataRow("设备版本") = dr1("设备版本")
                    e.DataRow("设备型号") = dr1("设备型号")
                    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


[此贴子已经被作者于2014-9-18 23:31:04编辑过]

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


加好友 发短信
等级:九尾狐 帖子:2472 积分:17346 威望:0 精华:0 注册:2013/1/31 0:03:00
回复:(unverse)在DataTable查找符合条件的行,如果...  发帖心情 Post By:2014/9/18 22:06:00 [只看该作者]

谢谢图片点击可在新窗口打开查看

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/9/18 22:25:00 [只看该作者]

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
                e.DataRow("设备内存") = Nothing
            Else
                Dim dr1 As DataRow
                dr1 = DataTables("设备信息").Find("[设备名称] = '" & e.NewValue & "'")
                If dr1 IsNot Nothing
                    e.DataRow("设备品牌") = dr1("设备品牌")
                    e.DataRow("设备版本") = dr1("设备版本")
                    e.DataRow("设备型号") = dr1("设备型号")
                    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("设备名称") & "' and 入库地点 = '" & e.DataRow("入库地点") & "'", "[_SortKey] Desc")
        If dr Is Nothing Then
            mr("当前库存") = mr("入库数量") - mr("出库数量")
            dr = mr
        End If
        drs = e.DataTable.Select("[_SortKey] >= " & dr("_SortKey") & " And [设备名称] = '" & dr("设备名称") & "' and 入库地点 = '" & e.DataRow("入库地点") & "'", "[_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 & "' and 入库地点 = '" & e.DataRow("入库地点") & "'", "[_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("设备名称") & "' and 入库地点 = '" & e.DataRow("入库地点") & "'", "[_SortKey]")
                For i As Integer = 1 To drs.Count - 1
                    drs(i)("当前库存") = drs(i-1)("当前库存") + drs(i)("入库数量") - drs(i)("出库数量")
                Next
            End If
        End If
        If e.DataCol.Name = "入库地点" AndAlso e.OldValue IsNot Nothing AndAlso e.OldValue <> e.NewValue Then
            dr = e.DataTable.Find("[_SortKey] < " & mr("_SortKey") & " And [设备名称] = '" & e.DataRow("设备名称") & "' 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("设备名称") & "' and 入库地点 = '" & e.DataRow("入库地点") & "'", "[_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


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


加好友 发短信
等级:九尾狐 帖子:2472 积分:17346 威望:0 精华:0 注册:2013/1/31 0:03:00
回复:(有点甜)Select Case e.DataCol.Name &n...  发帖心情 Post By:2014/9/19 0:34:00 [只看该作者]

有点甜老师 代码运行后出现如下错误 继续求助

图片点击可在新窗口打开查看此主题相关图片如下:123.jpg
图片点击可在新窗口打开查看
出库的时候 当前库存直接等于出库数量的-数   没有实现正确计算
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:黔源科技.zip


想实现是对应入库地点 对应设备名称的 最后一行数据当前库存  减去出库数量  计算成新的当前库存

附上门店调取表事件代码
Select Case e.DataCol.Name
    Case "设备名称"
        Tables("设备库存").AddNew
        Dim a As Row = Tables("设备库存").Current
        a("设备名称")=e.DataRow("设备名称")
        a("设备型号")=e.DataRow("设备型号")
        a("设备颜色")=e.DataRow("设备颜色")
        a("设备版本")=e.DataRow("设备版本")
        a("设备内存")=e.DataRow("设备内存")
        a("出库时间")=e.DataRow("调取时间")
        a("出库地点")=e.DataRow("原库地点")
        a("设备品牌")=e.DataRow("设备品牌")
        If e.DataRow("原库地点") IsNot Nothing  Then
            Dim dr As DataRow
            dr = DataTables("设备库存").Find("[入库地点] = '" & e.DataRow("原库地点") & "' and [设备名称] = '" & e.DataRow("设备名称") & "'" ,"[_SortKey] Desc")
            If dr IsNot Nothing
                e.DataRow("原库数量")=dr("当前库存")
            End If
        End If
    Case "调取数量"
         Tables("设备库存").Current("出库数量")=e.DataRow("调取数量")
    Case "调入地点"
        If e.DataRow("调取数量") IsNot Nothing Then
            Dim dr As DataRow
            dr = DataTables("设备库存").Find("[入库地点] = '" & e.DataRow("调入地点") & "' and [设备名称] = '" & e.DataRow("设备名称") & "'","[_SortKey] Desc")
            If dr IsNot Nothing
                e.DataRow("当前库存")=dr("当前库存")+e.DataRow("调取数量")
            End If
        End If
End Select


物品调取窗体关闭前代码
Dim blm As WinForm.TextBox = e.Form.Controls("TextBox1")
If blm.text <>"" Then
    Tables("门店调取").Save()    
    Tables("设备库存").AddNew
    Dim a As Row = Tables("设备库存").Current
    Dim b As Row = Tables("门店调取").Current
    a("设备名称")=b("设备名称")
    a("设备型号")=b("设备型号")
    a("设备颜色")=b("设备颜色")
    a("设备版本")=b("设备版本")
    a("设备内存")=b("设备内存")
    a("入库时间")=b("调取时间")
    a("入库地点")=b("调入地点")
    a("设备品牌")=b("设备品牌")
    a("入库数量")=b("调取数量")
    'b("当前库存")=a("当前库存")    
Else  '反之
    Tables("门店调取").Current.Delete
    Tables("设备库存").Current.Delete
End If '结束



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


加好友 发短信
等级:九尾狐 帖子:2472 积分:17346 威望:0 精华:0 注册:2013/1/31 0:03:00
回复:(李孝春)回复:(有点甜)Select Case e.Data...  发帖心情 Post By:2014/9/19 9:15:00 [只看该作者]

继续求解  望各位老师鼎力指导  谢谢

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