Foxtable(狐表)用户栏目专家坐堂 → 高效流水账问题


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

主题:高效流水账问题

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


加好友 发短信
等级:二尾狐 帖子:567 积分:4595 威望:0 精华:0 注册:2014/7/3 15:28:00
高效流水账问题  发帖心情 Post By:2014/12/17 11:47:00 [只看该作者]

狐表中的自带高效流水账项目中表有:产品,出库,入库,库存列,通过代码可以求得相同产品的库存数量。

请问:

若是在上表修改为:产品,工序名称,生产数量,累计完成等列

现在需要求得相同产品中的相同工序的生产数量的累计完成数量

求问代码如何修改

Select Case e.DataCol.Name
    Case "产品","累计完成"
        Dim dr As DataRow
        Dim mr As DataRow = e.DataRow
        Dim drs As List(of DataRow)
        dr = e.DataTable.Find("[_SortKey] < " & mr("_SortKey") & " And [产品] = '" & mr("产品") & "'", "[_SortKey] Desc")
        If dr Is Nothing Then
            mr("累计完成") = mr("生产数量") 
            dr = mr
        End If
        drs = e.DataTable.Select("[_SortKey] >= " & dr("_SortKey") & " And [产品] = '" & dr("产品") & "'", "[_SortKey]")
        For i As Integer = 1 To drs.Count - 1
            drs(i)("累计完成") = drs(i-1)("累计完成") + drs(i)("生产数量") 
        Next
        If e.DataCol.Name = "产品" AndAlso e.OldValue IsNot Nothing AndAlso e.OldValue <> e.NewValue Then
            dr = e.DataTable.Find("[_SortKey] < " & mr("_SortKey") & " And [产品] = '" & e.OldValue & "'", "[_SortKey] Desc")
            If dr Is Nothing Then
                dr = e.DataTable.Find("[产品] = '" & e.OldValue & "'", "[_SortKey]")
                If dr IsNot Nothing Then
                    dr("累计完成") = dr("生产数量") 
                End If
            End If
            If dr IsNot Nothing Then
                drs = e.DataTable.Select("[_SortKey] >= " & dr("_SortKey") & " And [产品] = '" & dr("产品") & "'", "[_SortKey]")
                For i As Integer = 1 To drs.Count - 1
                    drs(i)("累计完成") = drs(i-1)("累计完成") + drs(i)("生产数量")                 Next
            End If
        End If
End Select

 

 

 

 

Dim Key As Decimal
Dim Index As Integer
Dim Filter As String
Dim r As Row
Index = Math.Min(e.OldIndex, e.NewIndex)
Key = e.Table.Rows(Index)("_SortKey")
r = e.Table.Rows(e.NewIndex)
Filter = "[_SortKey] >= " & Key & " And [产品] = '" & r("产品") & "'"
e.Table.DataTable.DataCols("生产数量").RaiseDataColChanged(Filter)

谢谢了


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/12/17 11:58:00 [只看该作者]

 加入工序名称条件即可

 

Select Case e.DataCol.Name
    Case "产品","累计完成"
        Dim dr As DataRow
        Dim mr As DataRow = e.DataRow
        Dim drs As List(of DataRow)
        dr = e.DataTable.Find("[_SortKey] < " & mr("_SortKey") & " And [产品] = '" & mr("产品") & "' and 工序名称 = '" & e.DataRow("工序名称") & "'", "[_SortKey] Desc")
        If dr Is Nothing Then
            mr("累计完成") = mr("生产数量")
            dr = mr
        End If
        drs = e.DataTable.Select("[_SortKey] >= " & dr("_SortKey") & " And [产品] = '" & dr("产品") & "' and 工序名称 = '" & e.DataRow("工序名称") & "'", "[_SortKey]")
        For i As Integer = 1 To drs.Count - 1
            drs(i)("累计完成") = drs(i-1)("累计完成") + drs(i)("生产数量")
        Next
        If e.DataCol.Name = "产品" AndAlso e.OldValue IsNot Nothing AndAlso e.OldValue <> e.NewValue Then
            dr = e.DataTable.Find("[_SortKey] < " & mr("_SortKey") & " And [产品] = '" & e.OldValue & "' and 工序名称 = '" & e.DataRow("工序名称") & "'", "[_SortKey] Desc")
            If dr Is Nothing Then
                dr = e.DataTable.Find("[产品] = '" & e.OldValue & "' and 工序名称 = '" & e.DataRow("工序名称") & "'", "[_SortKey]")
                If dr IsNot Nothing Then
                    dr("累计完成") = dr("生产数量")
                End If
            End If
            If dr IsNot Nothing Then
                drs = e.DataTable.Select("[_SortKey] >= " & dr("_SortKey") & " And [产品] = '" & dr("产品") & "' and 工序名称 = '" & e.DataRow("工序名称") & "'", "[_SortKey]")
                For i As Integer = 1 To drs.Count - 1
                    drs(i)("累计完成") = drs(i-1)("累计完成") + drs(i)("生产数量")      
          Next
            End If
        End If
End Select

 


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


加好友 发短信
等级:二尾狐 帖子:567 积分:4595 威望:0 精华:0 注册:2014/7/3 15:28:00
  发帖心情 Post By:2014/12/17 12:00:00 [只看该作者]

谢谢老师

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


加好友 发短信
等级:二尾狐 帖子:567 积分:4595 威望:0 精华:0 注册:2014/7/3 15:28:00
  发帖心情 Post By:2014/12/17 13:49:00 [只看该作者]

通过测试,以上代码:

连续行的相同产品,相同工序可以实现累计完成值,但是一旦中间有一行是相同的产品,不同工序的时候,就变成了相同产品的累加了,而不是相同产品各个工序的累加了


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/12/17 14:06:00 [只看该作者]

 

Select Case e.DataCol.Name
    Case "产品","累计完成"
        Dim dr As DataRow
        Dim mr As DataRow = e.DataRow
        Dim drs As List(of DataRow)
        dr = e.DataTable.Find("[_SortKey] < " & mr("_SortKey") & " And [产品] = '" & mr("产品") & "' and 工序名称 = '" & e.DataRow("工序名称") & "'", "[_SortKey] Desc")
        If dr Is Nothing Then
            mr("累计完成") = mr("生产数量")
            dr = mr
        End If
        drs = e.DataTable.Select("[_SortKey] >= " & dr("_SortKey") & " And [产品] = '" & dr("产品") & "' and 工序名称 = '" & e.DataRow("工序名称") & "'", "[_SortKey]")
        For i As Integer = 1 To drs.Count - 1
            drs(i)("累计完成") = drs(i-1)("累计完成") + drs(i)("生产数量")
        Next
        If e.DataCol.Name = "产品" AndAlso e.OldValue IsNot Nothing AndAlso e.OldValue <> e.NewValue Then
            dr = e.DataTable.Find("[_SortKey] < " & mr("_SortKey") & " And [产品] = '" & e.OldValue & "' and 工序名称 = '" & e.DataRow("工序名称") & "'", "[_SortKey] Desc")
            If dr Is Nothing Then
                dr = e.DataTable.Find("[产品] = '" & e.OldValue & "' and 工序名称 = '" & e.DataRow("工序名称") & "'", "[_SortKey]")
                If dr IsNot Nothing Then
                    dr("累计完成") = dr("生产数量")
                End If
            End If
            If dr IsNot Nothing Then
                drs = e.DataTable.Select("[_SortKey] >= " & dr("_SortKey") & " And [产品] = '" & dr("产品") & "' and 工序名称 = '" & e.DataRow("工序名称") & "'", "[_SortKey]")
                For i As Integer = 1 To drs.Count - 1
                    drs(i)("累计完成") = drs(i-1)("累计完成") + drs(i)("生产数量")
                Next
            End If
        End If
    Case "工序名称"
        Dim dr As DataRow
        Dim mr As DataRow = e.DataRow
        Dim drs As List(of DataRow)
        dr = e.DataTable.Find("[_SortKey] < " & mr("_SortKey") & " And [产品] = '" & mr("产品") & "' and 工序名称 = '" & e.DataRow("工序名称") & "'", "[_SortKey] Desc")
        If dr Is Nothing Then
            mr("累计完成") = mr("生产数量")
            dr = mr
        End If
        drs = e.DataTable.Select("[_SortKey] >= " & dr("_SortKey") & " And [产品] = '" & dr("产品") & "' and 工序名称 = '" & e.DataRow("工序名称") & "'", "[_SortKey]")
        For i As Integer = 1 To drs.Count - 1
            drs(i)("累计完成") = drs(i-1)("累计完成") + drs(i)("生产数量")
        Next
        If e.DataCol.Name = "工序名称" AndAlso e.OldValue IsNot Nothing AndAlso e.OldValue <> e.NewValue Then
            dr = e.DataTable.Find("[_SortKey] < " & mr("_SortKey") & " And [产品] = '" & e.DataRow("产品") & "' and 工序名称 = '" & e.OldValue & "'", "[_SortKey] Desc")
            If dr Is Nothing Then
                dr = e.DataTable.Find("[产品] = '" & e.DataRow("产品") & "' and 工序名称 = '" & e.OldValue & "'", "[_SortKey]")
                If dr IsNot Nothing Then
                    dr("累计完成") = dr("生产数量")
                End If
            End If
            If dr IsNot Nothing Then
                drs = e.DataTable.Select("[_SortKey] >= " & dr("_SortKey") & " And [产品] = '" & dr("产品") & "' and 工序名称 = '" & e.DataRow("工序名称") & "'", "[_SortKey]")
                For i As Integer = 1 To drs.Count - 1
                    drs(i)("累计完成") = drs(i-1)("累计完成") + drs(i)("生产数量")
                Next
            End If
        End If
       
End Select

 


 回到顶部