Foxtable(狐表)用户栏目专家坐堂 → 请给位大侠给看看。算晕了,


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

主题:请给位大侠给看看。算晕了,

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By: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

 


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/2/22 9:18:00 [显示全部帖子]

 没看懂你什么逻辑

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/2/22 9:25:00 [显示全部帖子]

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

 

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


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By: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

 


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/2/24 22:41:00 [显示全部帖子]

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

 

 


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/2/24 22:47:00 [显示全部帖子]

 认认真真看8楼,代码没问题。

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/2/24 22:55:00 [显示全部帖子]

1、你可以把代码写到datacolchanged事件,或者单独做一个按钮。

 

2、删除所有的销售数据,然后一行一行添加,添加一行执行一次代码。

 

3、我测试没问题。


 回到顶部