以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  我觉得还是代码有问题,还请各位大师指教  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=82143)

--  作者:jinzhengbe
--  发布时间:2016/3/12 14:19:00
--  我觉得还是代码有问题,还请各位大师指教
我在wx里就有一个商品的数据,三行,也对不上,还请各位指点一下
原文http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=81918&replyID=&skin=1

在上面的基础上有添加时间。测试过还是不行,还是请各位大侠继续指点

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


[此贴子已经被作者于2016/3/12 14:20:51编辑过]

--  作者:大红袍
--  发布时间:2016/3/14 14:26:00
--  

 微调就是答案啊

 

Dim r As Row = Tables("wx").Current

Dim rks As Double = DataTables("rukudan").sqlCompute("sum(shuliang)", "name = \'" & r("name") & "\'")

Dim rks1 As Double \' = DataTables("weixin").sqlCompute("sum(shuliang)", "name = \'" & r("name") & "\' and time < #" & r("time") & "#"")

Dim cks As Double = DataTables("wx").sqlCompute("sum(shuliang)", "name = \'" & r("name") & "\' and time < #" & r("time") & "#")

If cks + rks1 > rks Then
   
    msgbox("无法出库,库存不足")
   
Else
   
    Dim count As Integer = 0
   
    Dim drs As List(Of DataRow) = DataTables("rukudan").Select("name = \'" & r("name") & "\'", "_Identify")
   
    For i As Integer = 0 To drs.count - 1
       
        Dim dr As DataRow = drs(i)
        count += dr("shuliang")
       
        Dim sy As Integer = count - (cks + rks1)

        If sy >= 0 Then
           
            Dim cb, cbs As Double
           
            count = 0
           
            For j As Integer = i To drs.count - 1
               
                dr = drs(j)
               
                If j = i Then
                   
                    count += sy
                   
                    cb = sy * dr("price")
                   
                Else
                   
                    count += dr("shuliang")
                   
                    cb = dr("shuliang") * dr("price")
                   
                    sy = dr("shuliang")
                   
                End If
               
                If count >= r("shuliang") Then
                   
                    cbs += (r("shuliang") - (count - sy)) * dr("price")
                   
                    r("cb")=cb
                   
                    r("cbs")=cbs
                   
                    r("bb") = count
                   
                    \' msgbox(cbs & count)
                   
                    r("lirun") = r("shuliang") * r("price") - cbs
                   
                    Exit For
                   
                Else
                   
                    cbs += cb
                   
                End If
               
            Next
           
            Exit For
           
        End If
       
    Next
  
End If


--  作者:jinzhengbe
--  发布时间:2016/3/19 19:38:00
--  

大红袍大师,非常感谢一直以来的大力支持,经过测试,对于上面的代码有下列问题

还望继续指点

 

1  如果进货的 数量为  10  ,5 , 3 这样

   同时 出货的数量 也一样为 10. 5, 3 这样的话

   程序的代码 正常没有问题。

 

2 假如进货数量不变

   出货的数量为  5,6 ,7 这样的话

   除了 第一个5的 利润可以结算  其他两个 6, 7 的利润算不出来。

 

3 还是进货数量不变 

   出货的数量为 3  3  6

   也是只能算出第一个3 的利润, 其他 3  和 6 的利润也是算不出来

 

 

 

 请问这种情况应该怎么处理? 因为,出货的数量基本上不会和 进货的数量和顺序一致。

 

不知道是不是我之前没有说清楚,这里我再说明一下程序的要点

 

以上面的进货顺序为例

第一次进货 10个  每个单价10

第二次进货 5个    每个单价15

 

那么出货的时候我计算成本的时候

应该是前 10 的进货成本都 按10计算

 

场景1

销售数量顺序如下

 3  的lirun  = (3*卖价)  -  (3*10)

 7  的lirun = (7*卖价)  -   (7*10)

 3  的lirun =  (3*卖价)  -(3*15) 

 

场景2

销售数量顺序如下

 6  的lirun  = (6*卖价)  -  (6*10)

 5  的lirun  = (5*卖价)  -   (4*10)  -  (1*15 ) 

 3  的lirun=  (3*卖价)  -(3*15) 

 


--  作者:大红袍
--  发布时间:2016/3/21 0:46:00
--  
计算,没,问,题。
--  作者:大红袍
--  发布时间:2016/3/21 0:47:00
--  
自己认真测试啊。
--  作者:jinzhengbe
--  发布时间:2016/3/21 18:02:00
--  
大师啊,我要是不测试,我能几次三番的留言么?

这个问题还是算了吧,我放弃了。


--  作者:大红袍
--  发布时间:2016/3/21 21:18:00
--  

之前还有的save代码你没加上啊

 

DataTables("rukudan").save
DataTables("wx").save

 

Dim r As Row = Tables("wx").Current

Dim rks As Double = DataTables("rukudan").sqlCompute("sum(shuliang)", "name = \'" & r("name") & "\'")

Dim rks1 As Double \' = DataTables("weixin").sqlCompute("sum(shuliang)", "name = \'" & r("name") & "\' and time < #" & r("time") & "#"")

Dim cks As Double = DataTables("wx").sqlCompute("sum(shuliang)", "name = \'" & r("name") & "\' and time < #" & r("time") & "#")

If cks + rks1 > rks Then
   
    msgbox("无法出库,库存不足")
   
Else
   
    Dim count As Integer = 0
   
    Dim drs As List(Of DataRow) = DataTables("rukudan").Select("name = \'" & r("name") & "\'", "_Identify")
   
    For i As Integer = 0 To drs.count - 1
       
        Dim dr As DataRow = drs(i)
        count += dr("shuliang")

        Dim sy As Integer = count - (cks + rks1)
        If sy >= 0 Then
           
            Dim cb, cbs As Double
           
            count = 0
           
            For j As Integer = i To drs.count - 1
               
                dr = drs(j)
               
                If j = i Then
                   
                    count += sy
                   
                    cb = sy * dr("price")
                   
                Else
                   
                    count += dr("shuliang")
                   
                    cb = dr("shuliang") * dr("price")
                   
                    sy = dr("shuliang")
                   
                End If
               
                If count >= r("shuliang") Then
                   
                    cbs += (r("shuliang") - (count - sy)) * dr("price")
                   
                    r("cb")=cb
                   
                    r("cbs")=cbs
                   
                    r("bb") = count
                   
                    \' msgbox(cbs & count)
                   
                    r("lirun") = r("shuliang") * r("price") - cbs
                   
                    Exit For
                   
                Else
                   
                    cbs += cb
                   
                End If
               
            Next
           
            Exit For
           
        End If
       
    Next
  
End If

 

 

[此贴子已经被作者于2016/3/21 21:18:45编辑过]