以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  请给位大侠给看看。算晕了,  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=81205)

--  作者:jinzhengbe
--  发布时间:2016/2/21 10:52:00
--  请给位大侠给看看。算晕了,
里面有两个窗口,分别是微信查询和销售查询 还有一个入库查询要用

想要按照先进先出的原则,分别计算两个表的利润。都是从相同的入库表扣库存

就相当于,一个老板有两个销售店,统一进货。

想要解决的问题。

如果只有一个店,先进先出的问题已经解决

两个店的话,想先算出当前卖出的是(两个店所有卖出的第几个商品)

然后根据这个数量 算出当前的进货价格 和lirun

微信查询和销售查询窗口的afterload里 我试着写了下代码,但是结果好像总是不对,

所以还请各位大侠指点一下。非常感谢。




[此贴子已经被作者于2016/2/21 10:54:18编辑过]

--  作者:jinzhengbe
--  发布时间:2016/2/21 10:55:00
--  

 

[此贴子已经被作者于2016/2/24 22:13:55编辑过]

--  作者:大红袍
--  发布时间:2016/2/21 11:51: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") & "\'")

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

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 - r("shuliang"))
       
        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
   
End If

 


--  作者:jinzhengbe
--  发布时间:2016/2/22 1:00:00
--  


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

 

ff这个商品 入库情况如上图



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

 

1  在其中一个店里销售后,如上图,发现。1, 2 的部分,会有误差,

2 最后一个商品 的lirun算不出来是怎么回事(图片上3的部分,正常应该盛一个才对)

3 销售查询窗口,发现所有的利润 又是从头开始计算。而不是去掉weixin这个部分

 

请问怎么改才能把误差改回来?
 


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

 

这个是实际应该有的利润,用excel做的,手动一个一个算的。

 


 

[此贴子已经被作者于2016/2/24 22:49:02编辑过]

--  作者:大红袍
--  发布时间:2016/2/22 9:18:00
--  
 没看懂你什么逻辑
--  作者:大红袍
--  发布时间:2016/2/22 9:25:00
--  

代码测试没问题。你自己加上msgbox结合你的逻辑判断。

 

别人根本不知道ni到底想做什么。


--  作者:jinzhengbe
--  发布时间:2016/2/22 17:06:00
--  
场景如下

进货
10个 每个进货单价20元

20个 每个进货单价 30元

15个  每个进货单价50元

假如销售价格为100元

第一次 卖出8个   每个利润80   利润合计 640

第二次 卖出10个 利润应该为 80*2 + 70*8 利润合计 720(系统算出740)

第三次 卖出 17个 利润应该为 12*70 + 50*5 合计1090(系统算出1070)
如果再卖10个 系统算不出利润
卖9个的话能算出利润450(没问题)
单独再卖一个的话 还是不显示利润
所以想问高手们应该怎么考虑


--  作者:大红袍
--  发布时间:2016/2/22 18:07:00
--  

去掉datacolchanged事件的代码,然后用下面的代码测试。我测试正确。

 

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

DataTables("rukudan").Save
DataTables("weixin").Save
DataTables("wx").Save

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

If cks + rks1 > rks Then
   
    msgbox("无法出库,库存不足")
   
Else
   
    Dim count As Integer = 0
   
    Dim drs As List(Of DataRow) = DataTables("rukudan").Select("name = \'" & r("name") & "\'", "_Sortkey")
   
    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 - r("shuliang"))
       
        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
                   
                    r("lirun") = r("shuliang") * r("price") - cbs
                    msgbox(r("lirun"))
                   
                    Exit For
                   
                Else
                   
                    cbs += cb
                   
                End If
               
            Next
           
            Exit For
           
        End If
       
    Next
   
End If

 


--  作者:jinzhengbe
--  发布时间:2016/2/24 22:38:00
--  

测试了一下,还是有问题,

 

场景如下。

商品名 qq

 

入库

10* 20  单个利润  80


30* 60  单个利润  40

 

第3次入库


30* 30  单个利润  70

 

利润总和应为800+1200+2100=4100

 

 

这里需要说明一下的是,是要按照进货的顺序销售产品,并计算成本

所以下面的销售的lirun计算方法应该为

第一行 8*80

第二行 2*80+8*40

第三行 20*40

第4行  20*40

但是系统计算的结果如下,不知道是哪个部分的问题

 

 

销售(我们只计算yifu列,不是shuliang(条件为 if jiesuan=1 yifu=shuliang)

 

 


此主题相关图片如下:捕获.png
按此在新窗口浏览图片

 

第一次入库后,销售了4次

数量分别为

8

10  (这里应该是 第一个入库的80*2+第二次入库的40*8) 应该为480 ,系统显示400 感觉上应该是如果当前买到第几个就按照当前所在的进货批次的利润计算,而不是把上次进货剩余的商品的利润也算上

20

2    (最后一个,数据不计算) 发现只要是包含最后一个商品的话,系统就不能计算利润

 

这个之后系统有入库30(单个利润为70)

然后销售 后面剩下的行。

除了第5行 lirun均不显示。

 

是不是我设置的公式有问题,还是我的问题没有说明白?请各位前辈多多指点

 

 


 


--  作者:大红袍
--  发布时间:2016/2/24 22:41:00
--  

 代码没有问题啊。销售的时候,没添加一行,就计算一次啊,按照顺序销售啊。