Foxtable(狐表)用户栏目专家坐堂 → 库存先进先出


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

主题:库存先进先出

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


加好友 发短信
等级:婴狐 帖子:9 积分:139 威望:0 精华:0 注册:2017/8/22 14:04:00
库存先进先出  发帖心情 Post By:2017/8/29 20:57:00 [只看该作者]

老师帮我看看怎么做先进先出

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


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


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


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


加好友 发短信
等级:婴狐 帖子:9 积分:139 威望:0 精华:0 注册:2017/8/22 14:04:00
  发帖心情 Post By:2017/8/30 13:14:00 [只看该作者]

老师    这个跟我的想法有点出入
我需要的是类似这样的

    If e.DataRow("数量") IsNot Nothing Then
        Dim cr1 As DataRow = e.DataRow
        Dim cr2 As DataRow = DataTables("进").Find("商品编号 = '" & e.DataRow("商品编号") & "' And 库存状态 = '可出库'")
        If cr2 IsNot Nothing Then
            Dim br1 As Integer = DataTables("进").SQLCompute("Count(*)", "商品编号 = '" & e.DataRow("商品编号") & "' And 库存状态 = '可出库'")
            MessageBox.Show("找到记录共有:" & br1)
            Dim br2 As Double = DataTables("进").SQLCompute("Sum(库存)", "商品编号 = '" & e.DataRow("商品编号") & "' And 库存状态 = '可出库'")
            MessageBox.Show("剩余库存:" & br2)
            If br2 < e.DataRow("数量") Then
                MessageBox.show("该商品库存不足!")
            Else
                If cr2.DataRows(0).("库存") => e.DataRow("数量") Then ’按时间排序,要是搜索到的进货第一行的库存够此次的销售数量,那就减去销售数量
                    cr2.DataRows(0).("出库") = e.DataRow("数量") + cr2.DataRows(0).("出库")
                ElseIf cr2.DataRows(0).("库存") + cr2.DataRows(1).("库存") => e.DataRow("数量") Then'第一行+第二行才够此次销售
                    cr2.DataRows(0).("出库") = cr2.DataRows(0).("数量")
                    cr2.DataRows(1).("出库") = e.DataRow("数量") - cr2.DataRows(0).("数量") + cr2.DataRows(1).("出库")
’... ... 要N个进货单的数量才能抵扣此次销售数量
                End If
            End If
        End If
    End If

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


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

Select Case e.DataCol.name
    Case "商品编号", "数量"
        If e.DataRow("数量") IsNot Nothing Then
            Dim r As DataRow = e.DataRow
            Dim sum As Double = DataTables("进").compute("sum(库存)", "商品编号 = '" & e.DataRow("商品编号") & "' And 库存状态 = '可出库'")
            If sum < r("数量") Then
                msgbox("库存不够")
            Else
                Dim count As Integer = 0
                Dim drs As List(Of DataRow) = DataTables("进").Select("商品编号 = '" & e.DataRow("商品编号") & "' And 库存状态 = '可出库'", "日期, _Identify")
                Dim s As String = ""
                For i As Integer = 0 To drs.count - 1
                    Dim dr As DataRow = drs(i)
                    count += dr("库存")
                    Dim sy As Integer = count - r("数量")
                    s &= dr("进货单号") & ","
                    If sy >= 0 Then
                        dr("出库") = dr("数量") - sy
                        dr("库存") = sy
                        r("进货单号") = s.trim(",")
                        Exit For
                    Else
                        dr("出库") = dr("数量")
                        dr("库存") = 0
                    End If
                Next
            End If
        End If
End Select

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


加好友 发短信
等级:婴狐 帖子:9 积分:139 威望:0 精华:0 注册:2017/8/22 14:04:00
  发帖心情 Post By:2017/8/30 15:36:00 [只看该作者]

谢谢老师,完美解决
看了代码不下10余遍还是理解不了一些代码
Dim s As String = ""
    For i As Integer = 0 To drs.count - 1
    Dim dr As DataRow = drs(i)
    count += dr("库存")
    Dim sy As Integer = count - r("数量")
         s &= dr("进货单号") & ","
          If sy >= 0 Then
               dr("出库") = dr("数量") - sy
               dr("库存") = sy
               r("进货单号") = s.trim(",")
           Exit For

要是e.DataRow("成本")怎么进行计算

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


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


                For i As Integer = 0 To drs.count - 1    '循环查找到的数据
                    Dim dr As DataRow = drs(i)            
                    count += dr("库存")                        '用count记录累加的库存
                    Dim sy As Integer = count - r("数量")     '如果累加库存减去数量
                    s &= dr("进货单号") & ","                  '用s记录进货单号
                    If sy >= 0 Then                              '如果累加库存大于数量,说明足够出库
                        dr("出库") = dr("数量") - sy           '数量减去剩余就是出库
                        dr("库存") = sy                         
                        r("进货单号") = s.trim(",")             '赋值
                        Exit For
                    Else                                                '库存不够的时候
                        dr("出库") = dr("数量")                  
                        dr("库存") = 0
                    End If
                Next


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


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

 成本也是同样计算,用一个变量记录每一行的成本,累加就是答案。

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


加好友 发短信
等级:婴狐 帖子:9 积分:139 威望:0 精华:0 注册:2017/8/22 14:04:00
  发帖心情 Post By:2017/8/30 15:58:00 [只看该作者]

好的  谢谢老师

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


加好友 发短信
等级:婴狐 帖子:9 积分:139 威望:0 精华:0 注册:2017/8/22 14:04:00
  发帖心情 Post By:2017/8/31 16:03:00 [只看该作者]

老师  我研究了一天   但还是没弄明白    调试都不对    您有空帮我看一下
Select Case e.DataCol.name
    Case "商品编号", "数量"
        If e.DataRow("数量") IsNot Nothing Then
            Dim r As DataRow = e.DataRow
            Dim sum As Double = DataTables("进").compute("sum(库存)", "商品编号 = '" & e.DataRow("商品编号") & "' And 库存状态 = '可出库'")
            If sum < r("数量") Then
                msgbox("库存不够")
            Else
                Dim count As Integer = 0
                Dim cb As Double '记录每条进货成本
                Dim cks As Integer '定义cks用记录每条进货单出库数量
                Dim cbs As Double '记录cb也就是成本的累加数
                Dim drs As List(Of DataRow) = DataTables("进").Select("商品编号 = '" & e.DataRow("商品编号") & "' And 库存状态 = '可出库'", "日期, _Identify")
                Dim s As String = "" '定义一个S变量,用于记录以后取得的原始入库单号
                For i As Integer = 0 To drs.count - 1 '循环查找
                    Dim dr As DataRow = drs(i)  '定义一个表,为查找到的所有行
                    count += dr("库存")         '用count记录累加的库存
                    Dim sy As Integer = count - r("数量")   '定义一个sy,等于累加库存扣除该次出库数量
                    s &= dr("进货单号") & ","
                    If sy >= 0 Then   '如果累加的库存可抵扣此次出库
                        dr("出库") = dr("数量") - sy   '最后一条进货单的数量 - sy 就是出库的数量
                        cks = sy '此次出库数
                        cb = cks * dr("单价") '最后一条进货单产生的成本
                        dr("库存") = sy
                        r("进货单号") = s.trim(",")
                    Else  '以时间排序,库存不足时的处理
                        cks = dr("库存") + sy '记录每一条的出库数
                        cb = cks * dr("单价") '核算成本
                        dr("出库") = dr("数量")   '证明可以直接出完
                        dr("库存") = 0
                    End If
                    cbs+ = cb '累计cb的数
                    r("成本") = cbs
                Next
            End If
        End If
End Select

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


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

Select Case e.DataCol.name
    Case "商品编号", "数量"
        If e.DataRow("数量") IsNot Nothing Then
            Dim r As DataRow = e.DataRow
            Dim sum As Double = DataTables("进").compute("sum(库存)", "商品编号 = '" & e.DataRow("商品编号") & "' And 库存状态 = '可出库'")
            If sum < r("数量") Then
                msgbox("库存不够")
            Else
                Dim count As Integer = 0
                Dim cb As Double = 0
                Dim drs As List(Of DataRow) = DataTables("进").Select("商品编号 = '" & e.DataRow("商品编号") & "' And 库存状态 = '可出库'", "日期, _Identify")
                Dim s As String = ""
                For i As Integer = 0 To drs.count - 1
                    Dim dr As DataRow = drs(i)
                    count += dr("库存")
                    Dim sy As Integer = count - r("数量")
                    s &= dr("进货单号") & ","
                    If sy >= 0 Then
                        dr("出库") = dr("数量") - sy
                        cb += dr("单价") * dr("出库")
                        dr("库存") = sy
                        r("进货单号") = s.trim(",")
                        r("成本") = cb
                        Exit For
                    Else
                        dr("出库") = dr("数量")
                        dr("库存") = 0
                        cb += dr("单价") * dr("出库")
                    End If
                Next
            End If
        End If
End Select

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