Foxtable(狐表)用户栏目专家坐堂 → 求解决一个麻烦点的跨表计算填入问题


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

主题:求解决一个麻烦点的跨表计算填入问题

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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/6/25 12:38:00 [显示全部帖子]

 参考代码

 

For Each dr As DataRow In DataTables("出库表").Select("")
    Dim sum As Double = dr("数量")
    For Each cdr As DataRow In DataTables("物料表").Select("物料编号 = '" & dr("物料编号") & "' and 名称 = '" & dr("名称") & "'", "fa piao号")
        Dim sysl As Double = cdr("项目A使用数量") + cdr("项目B使用数量") + cdr("项目C使用数量")
        If sum >= (cdr("数量")-sysl) Then
            'cdr("fa piao上剩余数量") = 0
            sum = sum - (cdr("数量")-sysl)
            cdr(dr("项目") & "使用数量") += cdr("数量")-sysl
        Else
            'cdr("fa piao上剩余数量") = cdr("数量")-sysl-sum
            cdr(dr("项目") & "使用数量") += sum
            Exit For
        End If
    Next
Next


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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/6/26 8:53:00 [显示全部帖子]

For Each dr As DataRow In DataTables("出库表").Select("")
    Dim sum As Double = dr("数量")
    For Each cdr As DataRow In DataTables("物料表").Select("物料编号 = '" & dr("物料编号") & "' and 名称 = '" & dr("名称") & "'", "fa piao号")
        Dim sysl As Double = cdr("项目A使用数量") + cdr("项目B使用数量") + cdr("项目C使用数量")
        If sum >= (cdr("数量")-sysl) Then
            'cdr("fa piao上剩余数量") = 0
            sum = sum - (cdr("数量")-sysl)
            cdr(dr("项目") & "使用数量") += cdr("数量")-sysl
        Else
            'cdr("fa piao上剩余数量") = cdr("数量")-sysl-sum
            cdr(dr("项目") & "使用数量") += sum
            sum = 0
            Exit For
        End If
    Next
    If sum = 0 Then
        dr("欠缺数量") = Nothing
    Else
        dr("欠缺数量") = sum
    End If
Next

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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/6/27 8:11:00 [显示全部帖子]

 回复10楼,我测试没问题,请上传实例测试。

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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/6/27 8:16:00 [显示全部帖子]

回复9楼,运行代码,可以得到数据,然后你删除即可

 

DataTables("出库表").LoadFilter = "数量 in (Select 数量*-1  from {出库表} )"
DataTables("出库表").Load


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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/6/27 10:45:00 [显示全部帖子]

Dim t As Table = Tables("入库材料表")
t.ResumeRedraw
t.StopRedraw
For Each dc As Col In t.Cols
    If dc.Name.Contains("HGQC") OrElse dc.name.Contains("L") Then
        t.DataTable.ReplaceFor(dc.name, Nothing)
    End If
Next
Dim temp = DataTables("入库材料表").DataCols("剩余数量").Expression
DataTables("入库材料表").DataCols("剩余数量").Expression = ""
For Each dr As DataRow In DataTables("出库统计表").Select("")
    Dim sum As Double = dr("实发数量")
    Dim drs = DataTables("入库材料表").Select("商品长代码 = '" & dr("商品长代码") & "' and 商品名称 = '" & dr("商品名称") & "'", "单据编号")
    For i As Integer = 1 To drs.Count-1
        If drs(i)("实收数量") = -drs(i-1)("实收数量") Then
            drs(i-1)("单位") = "对冲"
            drs(i)("单位") = "对冲"
            i += 1
        Else
            drs(i-1)("单位") = Nothing
        End If
    Next
   
    For Each cdr As DataRow In drs
        If cdr("单位") <> "对冲" Then
            Dim sysl As Double = 0
            For Each dc As Col In t.Cols
                If dc.Name.Contains("HGQC") OrElse dc.name.Contains("L") Then
                    sysl += cdr(dc.name)
                End If
            Next
            
            If cdr("实收数量")-sysl > 0 Then
                If sum >= (cdr("实收数量")-sysl) Then
                    sum = sum - (cdr("实收数量")-sysl)
                    cdr(dr("项目简码")) += cdr("实收数量")-sysl
                Else
                    cdr(dr("项目简码")) += sum
                    sum = 0
                    Exit For
                End If
            End If
        End If
    Next
    If sum = 0 Then
        dr("使用库存数量") = Nothing
    Else
        dr("使用库存数量") = sum
    End If
Next
DataTables("入库材料表").DataCols("剩余数量").Expression = temp
t.ResumeRedraw

 回到顶部