Foxtable(狐表)用户栏目专家坐堂 → 先进先出 还是弄不明白,数据总是对不上


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

主题:先进先出 还是弄不明白,数据总是对不上

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


加好友 发短信
等级:五尾狐 帖子:1062 积分:9781 威望:0 精华:0 注册:2012/3/13 5:23:00
先进先出 还是弄不明白,数据总是对不上  发帖心情 Post By:2016/3/8 21:10:00 [只看该作者]

所以换了个思路。

 

执行 在打开程序前 openproject 的事件

想实现下面的功能,

 

rukudan  进货表

weixin     出货表1

wx          出货表2

 

weixin表的 cb列

 

1 查询当前行的 时间 ,并且汇总weixin表当前行之前的yifu 列,

2 在wx表里找到时间早于(weixin)当前的行的列, 并且汇总符合条件行的 yifu列

3 在rukuan表 计算(weixin表)当前行的排名并且计算 成本(cb)列

测试程序中没有时间列,所以可以用其他类代替

 

wx表的cb列 原里和weixin表一样

 

 

场景:

rukudan                                                weixin                                                                             wx

 

name    shuliang    price    id                     name       yifu       cb                  time                          name       yifu         cb                 time             

 

aa           10           100     1                       aa           2          100*2           01-02                        aa               6      100 *6              01-03 

aa            5            30       2                       aa           6     2*100+4*30      01-04                        aa               3    2*30+1*(0)     01-05

   

 黄色部分是 按照上面的逻辑计算后正常能够得到值。

 

希望各位大侠,前辈多多指教,已经研究快一个月了,头都大了几次了,也想过放弃,不过相信狐表的团队的力量,所以有来骚扰你们了,还请多多包涵

 

 

 

  

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

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

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/3/8 21:57: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") & "' and [_Identify] < " & r("_Identify"))

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

 


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


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

没有时间,根本就不能对比两个表的先后顺序。

 

比较先后,就加上比如红色的条件即可

 

Dim rks1 As Double = DataTables("weixin").sqlCompute("sum(shuliang)", "name = '" & r("name") & "'")

Dim cks As Double = DataTables("wx").sqlCompute("sum(shuliang)", "name = '" & r("name") & "' and [_Identify] < " & r("_Identify"))


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


加好友 发短信
等级:五尾狐 帖子:1062 积分:9781 威望:0 精华:0 注册:2012/3/13 5:23:00
  发帖心情 Post By:2016/3/9 22:29:00 [只看该作者]


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

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

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

 

我按您的代码做了好多次了啊,但是数据总是对不上啊,

我又找不出原因,所以这不是又要麻烦您了么

 

上面的图我解释一下啊,

 

入库单 是入库的数量, 一共入库100多个

weixin那个截图是销售,出库的,一共出去了21个  第5,6行的利润算不出来

wx 也是销售 的            出库的 , 一共出去了8个  

 

问题1

这两个加起来一共出了29件。 为什么第5.6 行的lirun算不出来呢?

问题2

cb值代表的是什么呢? 成本么? 比销售价格还高?

cbs 是代表什么呢?按我的理解应该也是成本啊? 但是怎么会出,3,呢(wx表)

 

 

实在是找不出原因才上论坛的。还请多关照啊。

 

[此贴子已经被作者于2016/3/9 22:34:13编辑过]

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


加好友 发短信 一级勋章
等级:狐仙 帖子:9879 积分:57634 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2016/3/10 7:55:00 [只看该作者]

没有时间判断排序 何来的先进先出呀

 回到顶部