Foxtable(狐表)用户栏目专家坐堂 → 求大神祝我,数学高手


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

主题:求大神祝我,数学高手

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


加好友 发短信
等级:婴狐 帖子:46 积分:355 威望:0 精华:0 注册:2015/9/21 20:43:00
  发帖心情 Post By:2015/10/9 12:23:00 [只看该作者]

还有大红袍哥哥  这段代码计算不对啊 
图片点击可在新窗口打开查看此主题相关图片如下:共计.png
图片点击可在新窗口打开查看
图片右侧是订单表  杜芳 订购 铁岭九三的一共为2个订单,分别是160和200,订单明细中 该合同一共有行,(图片左侧),4车的提油总数为160,根据第一个订单中 应该单价是5470而不是5570
另外刚才少说了一个条件 还得区别品种,,因为一级 和 三级是不同的

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


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

Select Case e.DataCol.Name
    Case "客户名称", "提货地点", "提油数量", "品种"
        If e.DataRow.IsNull("客户名称") OrElse e.DataRow.IsNull("提货地点") Then
            e.DataRow("单价") = Nothing
        Else
            Dim psum As Double = e.DataTable.Compute("sum(提油数量)", "_Identify < " & e.DataRow("_Identify") & " and 客户名称 = '" & e.DataRow("客户名称") & "' and 提货地点 = '" & e.DataRow("提货地点") & "' and 品种 = '" & e.DataRow("品种") & "'")
            Dim drs As List(Of DataRow) = DataTables("订单").Select("客户名称 = '" & e.DataRow("客户名称") & "' and 提货地点 = '" & e.DataRow("提货地点") & "' and 产品名称 = '" & e.DataRow("品种") & "'", "订单日期")
            Dim sum As Double = 0
           
            For Each dr As DataRow In  drs
                sum += dr("数量")
                If sum >= psum Then
                    e.DataRow("单价") = dr("单价")
                    Exit For
                End If
            Next
        End If
End Select


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


加好友 发短信
等级:婴狐 帖子:46 积分:355 威望:0 精华:0 注册:2015/9/21 20:43:00
  发帖心情 Post By:2015/10/9 12:50:00 [只看该作者]

大红袍哥哥,你这个数量是按照【提油数量】来计算的,他们都是整数,我如果按照【实际提油数量】来计算,带小数点 可以吗 ,是不是就把代码中【提油数量】替换为【实际提油数量】就可以呢

其实 我觉得你这种在订单明细表中计算单价的方式有误,  如果 这个订单为200吨,单价5450, 这个订单明细中 分别为100,80,30  这三个数量,,那么 100的 单价是5450,80的单价是5450,那个30的 
只有其中20是5450,而剩下的10又是一个单价了,,这种问题 你这段代码好像解决不了吧
[此贴子已经被作者于2015/10/9 12:54:06编辑过]

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


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

Select Case e.DataCol.Name
    Case "客户名称", "提货地点", "提油数量", "品种", "实际提油数量"
        If e.DataRow.IsNull("客户名称") OrElse e.DataRow.IsNull("提货地点") OrElse e.DataRow.IsNull("实际提油数量") Then
            e.DataRow("单价") = Nothing
        Else
            Dim psum As Double = e.DataTable.Compute("sum(实际提油数量)", "_Identify < " & e.DataRow("_Identify") & " and 客户名称 = '" & e.DataRow("客户名称") & "' and 提货地点 = '" & e.DataRow("提货地点") & "' and 品种 = '" & e.DataRow("品种") & "'")
            Dim drs As List(Of DataRow) = DataTables("订单").Select("客户名称 = '" & e.DataRow("客户名称") & "' and 提货地点 = '" & e.DataRow("提货地点") & "' and 产品名称 = '" & e.DataRow("品种") & "'", "订单日期")
            Dim sum As Double = 0
            Dim zj As Double = 0
            Dim sl As Double = 0
            For i As Integer = 0 To drs.count - 1
                Dim dr = drs(i)
                sum += dr("数量")
                If sum >= psum Then
                    If sum - psum >= e.DataRow("实际提油数量") Then
                        e.DataRow("单价") = ((e.DataRow("实际提油数量")-sl) * dr("单价") + zj) / e.DataRow("实际提油数量")
                        Exit For
                    Else
                        sl += dr("数量")
                        zj += dr("数量") * dr("单价")
                    End If
                End If
            Next
        End If
End Select

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


加好友 发短信
等级:婴狐 帖子:46 积分:355 威望:0 精华:0 注册:2015/9/21 20:43:00
  发帖心情 Post By:2015/10/9 16:08:00 [只看该作者]

大红袍哥哥  你看看我的截图,你这个其实也对,关键就是图片高亮的部分 电脑好像取得类似与平均数之类的,,在 现实中这样算是不对的  所以 能不能单独做一个表,或者 在客户表加一个列 【客户油款】,用来记录每个客户的油款,因为 我们现实中的做法是 例如 杜芳这个客户,把他同一个【提货地点】的同一个品种的【实际提油数量】,同一个【品种】的和, 然后查找杜芳这个客户所有对应【提货地点】,对应品种【品种】的订购数量总和,例如有5个儿这样订单,分别为100*5520,100*5530,100*5540,100*5550,100*5560 例如,这个订购数量和是500,实际提油和是450,那么他的款项计算公式就是 100*5520+100*5530+100*5540+100*5550+【50】*5560,是这样的  这样就不会出现刚才图片中高亮的部分问题啦 ,而且 钱数也准确
图片点击可在新窗口打开查看此主题相关图片如下:uuu.png
图片点击可在新窗口打开查看

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


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

明细表加一列金额列,直接给金额列赋值。不求平均单价就好啊。


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


加好友 发短信
等级:婴狐 帖子:46 积分:355 威望:0 精华:0 注册:2015/9/21 20:43:00
  发帖心情 Post By:2015/10/9 16:19:00 [只看该作者]

代码是怎样的呢,那我还需要实际金额这一列吗

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


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

 e.DataRow("单价") = ((e.DataRow("实际提油数量")-sl) * dr("单价") + zj) / e.DataRow("实际提油数量")

改成

 

  e.DataRow("实际金额") = (e.DataRow("实际提油数量")-sl) * dr("单价") + zj


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


加好友 发短信
等级:婴狐 帖子:46 积分:355 威望:0 精华:0 注册:2015/9/21 20:43:00
  发帖心情 Post By:2015/10/9 16:23:00 [只看该作者]

这还需要增加一个金额列吗?

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


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

整体代码要改一下

 

Select Case e.DataCol.Name
    Case "客户名称", "提货地点", "提油数量", "品种", "实际提油数量"
        If e.DataRow.IsNull("客户名称") OrElse e.DataRow.IsNull("提货地点") OrElse e.DataRow.IsNull("实际提油数量") Then
            e.DataRow("单价") = Nothing
        Else
            Dim psum As Double = e.DataTable.Compute("sum(实际提油数量)", "_Identify < " & e.DataRow("_Identify") & " and 客户名称 = '" & e.DataRow("客户名称") & "' and 提货地点 = '" & e.DataRow("提货地点") & "' and 品种 = '" & e.DataRow("品种") & "'")
            Dim drs As List(Of DataRow) = DataTables("订单").Select("客户名称 = '" & e.DataRow("客户名称") & "' and 提货地点 = '" & e.DataRow("提货地点") & "' and 产品名称 = '" & e.DataRow("品种") & "'", "订单日期")
            Dim sum As Double = 0
            Dim zj As Double = 0
            Dim sl As Double = 0
            For i As Integer = 0 To drs.count - 1
                Dim dr = drs(i)
                sum += dr("数量")
                If sum >= psum Then
                    If sum - psum >= e.DataRow("实际提油数量") Then
                        e.DataRow("单价") = ((e.DataRow("实际提油数量")-sl) * dr("单价") + zj) / e.DataRow("实际提油数量")
                        Exit For
                    Else
                        Dim temp As Double = iif(sum-psum-sl<dr("数量"), sum-psum-sl, dr("数量"))
                        sl += temp
                        zj += temp * dr("单价")
                    End If
                End If
            Next
        End If
End Select


 回到顶部
总数 28 上一页 1 2 3 下一页