Foxtable(狐表)用户栏目专家坐堂 → 求一种提取的解决方案


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

主题:求一种提取的解决方案

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


加好友 发短信
等级:二尾狐 帖子:576 积分:4731 威望:0 精华:0 注册:2014/7/3 15:28:00
求一种提取的解决方案  发帖心情 Post By:2016/3/20 18:04:00 [只看该作者]

最近在做一个物流系统,其中有个“商品库存”表,关联一个“商品入库”表,(采用二级编码关联)另外有一个“商品出库”表(数据来源是导入外部数据),“商品库存”表里面的库存数量等于:

Select Case e.DataCol.name
    Case "二级编码","初始数据"
        e.DataRow("库存数量") = e.DataRow("初始数据")
        If e.DataRow.IsNull("二级编码") = False Then
           
                 e.DataRow("库存数量") = e.DataRow("初始数据") + DataTables("商品入库").Compute("sum(入库数量)", "二级编码 = '" &e.DataRow("二级编码") & "'") - DataTables("商品出库").Compute("sum(商品数量)", "二级编码 = '" &e.DataRow("二级编码") & "'") 

            End If
End Select

 

问题是现在“商品出库”表里面的二级编码有些是包含其他二级编码的:比如二级编码A001,A002 ,A003,A004,A005,其中A005由A001+A002组成,求当“商品出库”表里的行有A001,A002,A003,A004,A005行的时候,“商品库存”表里面对应的A001,A002,A003,A004,A005商品怎么减去数量。

 

我的思路是:1,“商品库存”表里面没有二级编码A005,当“商品出库”表里面出现A005的时候,“商品出库”表里面自动增加成A001,A002两行;出库数量=A005的出库数量,请求代码怎样写,请求老师指教,或许是更好的方法。

               其实就是仓库中常用到的BOM的问题,求救。

[此贴子已经被作者于2016/3/20 19:27:52编辑过]

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


加好友 发短信
等级:二尾狐 帖子:576 积分:4731 威望:0 精华:0 注册:2014/7/3 15:28:00
  发帖心情 Post By:2016/3/20 21:11:00 [只看该作者]

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目1.table


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/3/20 23:09:00 [只看该作者]

汗,你这样做就不对,数量平分么?看看人家的bom如何设计

 

http://foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=48218&skin=0

 

 


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


加好友 发短信
等级:二尾狐 帖子:576 积分:4731 威望:0 精华:0 注册:2014/7/3 15:28:00
  发帖心情 Post By:2016/3/21 12:32:00 [只看该作者]

红袍老师没有明白我的意思,我的意思是A005是一个套件,商品出库的数据是导入外部EXCEL表的数据,当导入时遇到有二级编码=A005的时候,商品出库里面的行自动删除A005行,而变成里面的子件A001和A002两行,商品出库表里面的两行商品数量=A001*系数5*A005的商品数量和A002*系数10*A005的商品数量。

那个BOM表不能解决我的问题,我是要导入外部数据,每天都有2000多行,请老师指教是否可行。

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目1.table


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/3/21 12:47:00 [只看该作者]

比如,库存就可以这样计算

 

Select Case e.DataCol.name
    Case "二级编码","初始数据"
        If e.DataRow.IsNull("二级编码") = False Then
            Dim drs As List(Of DataRow) = DataTables("BOM").Select("子件 = '" & e.DataRow("二级编码") & "'")
            If drs.count = 0 Then
                e.DataRow("库存数量") = e.DataRow("初始数据") + DataTables("商品入库").Compute("sum(入库数量)", "二级编码 = '" &e.DataRow("二级编码") & "'") - DataTables("商品出库").Compute("sum(商品数量)", "二级编码 = '" &e.DataRow("二级编码") & "'")
            Else
                Dim sum As Double = 0
                For Each dr As DataRow In drs
                    sum += DataTables("商品出库").Compute("sum(商品数量)", "二级编码 = '" & dr("二级编码") & "'") * dr("系数")
                Next
                sum += DataTables("商品出库").Compute("sum(商品数量)", "二级编码 = '" &e.DataRow("二级编码") & "'")
                e.DataRow("库存数量") = e.DataRow("初始数据") + DataTables("商品入库").Compute("sum(入库数量)", "二级编码 = '" &e.DataRow("二级编码") & "'") - sum
            End If
        Else
            e.DataRow("库存数量") = e.DataRow("初始数据")
        End If
End Select


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


加好友 发短信
等级:二尾狐 帖子:576 积分:4731 威望:0 精华:0 注册:2014/7/3 15:28:00
  发帖心情 Post By:2016/3/21 13:22:00 [只看该作者]

红袍老师,这样的话,就变成了商品出库A005出现的时候,只有A001数据减去了,A002没有变,而A005第二次出现的时候,就不再计算了


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/3/21 14:21:00 [只看该作者]

库存表,重置列可以计算啊。

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/3/21 14:26:00 [只看该作者]

 出库表那里,DataColChanged事件

 

Select Case e.DataCol.Name
    Case "二级编码","商品数量"
        Dim bms As String = DataTables("bom").GetComboListString("子件", "二级编码 = '" &e.DataRow("二级编码") & "'")
        DataTables("商品库存").DataCols("二级编码").RaiseDataColChanged("二级编码 in ('" & bms.Replace("|", "','") & "')")
End Select


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


加好友 发短信
等级:二尾狐 帖子:576 积分:4731 威望:0 精华:0 注册:2014/7/3 15:28:00
  发帖心情 Post By:2016/3/21 15:54:00 [只看该作者]

谢谢红袍老师,这样基本上解决了80%的问题,我现在做一个BOM表,和一个商品库存表,隐藏商品库存表里面的A005行就基本达到要求了,可是假如BOM表里面的二级编码A001和子件A001相同时,系数为2,假如商品出库A001是100,那么商品库存表里面的A001则会变成100*2+100,这是什么原因啊

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/3/21 15:59:00 [只看该作者]

Dim drs As List(Of DataRow) = DataTables("BOM").Select("子件 = '" & e.DataRow("二级编码") & "'")

改成

 

Dim drs As List(Of DataRow) = DataTables("BOM").Select("子件 = '" & e.DataRow("二级编码") & "' and 二级编码 <> 子件")


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