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


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

主题:高效流水账

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


加好友 发短信
等级:超级版主 帖子:107147 积分:544978 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/3/26 15:10:00 [只看该作者]

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


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


加好友 发短信
等级:狐精 帖子:3094 积分:20656 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By:2021/3/26 16:12:00 [只看该作者]

老师,修改了一下,累计对了,但是本年不对,本年至统计上报周期前4位的年度,上报周期是按照年月来编号的

Select Case  e.DataCol.Name
    Case "合同编码","上报周期","上月完成产值","本年完成产值"
        Dim  dr As  DataRow
        Dim  mr As  DataRow = e.DataRow
        'Dim d1 As String = Format(Date.Today,"yyyy")    '1月上报上一年12月,2月上报1月
        'Dim s1 As String = mr("上报周期")
        'Dim d2 As String = s1.SubString(0,4)
        Dim  drs As  List(of DataRow)
        dr = e.DataTable.Find("[上报周期] < '" & mr("上报周期") &  "' And [合同编码] = '" &  mr("合同编码") &  "'", "[上报周期] Desc")
        If dr Is Nothing Then
            dr = e.DataTable.SQLFind("[上报周期] < '" & mr("上报周期") &  "' And [合同编码] = '" &  mr("合同编码") &  "'", "[上报周期] Desc")
            If dr Is Nothing Then
                'mr("本年完成产值") = e.DataTable.SQLCompute("sum(上月完成产值)","[上报周期] < '" & mr("上报周期") &  "' And [合同编码] = '" &  mr("合同编码") &  "'")
                mr("本年完成产值") = e.NewValue
                mr("累计完成产值") = mr("本年完成产值") + mr("上月完成产值")
                mr("剩余产值") = mr("合同金额") + mr("变更金额") - mr("累计完成产值")
                dr = mr
            Else
                mr("本年完成产值") = e.DataTable.SQLCompute("sum(上月完成产值)","[上报周期] < '" & mr("上报周期") &  "' And [合同编码] = '" &  mr("合同编码") &  "'")
                mr("累计完成产值") = mr("本年完成产值") + dr("累计完成产值")
                mr("剩余产值") = mr("合同金额") + mr("变更金额") - mr("累计完成产值")
            End If
        End If
        drs = e.DataTable.Select("[上报周期] >='" & dr("上报周期") &  "' And [合同编码] = '" &  dr("合同编码") &  "'", "[上报周期]")
        For  i As  Integer = 1 To drs.Count - 1
            drs(i)("本年完成产值") = drs(i-1)("本年完成产值") + drs(i)("上月完成产值")
            drs(i)("累计完成产值") = drs(i-1)("累计完成产值") + drs(i)("上月完成产值")
            drs(i)("剩余产值") = drs(i)("合同金额") + drs(i)("变更金额") - drs(i)("累计完成产值")
        Next
        If  e.DataCol.Name = "上报周期" AndAlso e.OldValue IsNot Nothing AndAlso e.OldValue <> e.NewValue Then
            dr = e.DataTable.Find("[上报周期] < '" & mr("上报周期") &  "' And [合同编码] = '" &  mr("合同编码") &  "'", "[上报周期] Desc")
            If  dr Is Nothing Then
                dr = e.DataTable.Find("[上报周期] = '" & e.OldValue &  "'", "[上报周期]")
                If dr IsNot Nothing Then
                    dr("本年完成产值") = e.DataTable.SQLCompute("sum(上月完成产值)","[上报周期] < '" & mr("上报周期") &  "' And [上报周期] = '" &  e.OldValue &  "'")
                    dr("累计完成产值") = dr("本年完成产值")+ dr("上月完成产值")
                    dr("剩余产值") = dr("合同金额") + dr("变更金额") - dr("累计完成产值")
                End If
            End If
            If  dr IsNot Nothing Then
                drs = e.DataTable.Select("[上报周期] >=' " & dr("上报周期") &  "' And [合同编码] = '" &  dr("合同编码") &  "'", "[上报周期]")
               
                For i As Integer = 1 To drs.Count - 1
                    drs(i)("本年完成产值") = drs(i-1)("本年完成产值") + drs(i)("上月完成产值")
                    drs(i)("累计完成产值") = drs(i-1)("累计完成产值") + drs(i)("上月完成产值")
                    drs(i)("剩余产值") = drs(i)("合同金额") + drs(i)("变更金额") - drs(i)("累计完成产值")
                Next
            End If
        End If
End Select

 


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

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


加好友 发短信
等级:超级版主 帖子:107147 积分:544978 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/3/26 16:38:00 [只看该作者]

意思是本年1月统一设置为0?那就判断上报周期列为01结尾的直接赋值0 即可

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


加好友 发短信
等级:狐精 帖子:3094 积分:20656 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By:2021/3/26 16:50:00 [只看该作者]

1.正常情况下,第1次上报时,本年完成产值= 上月完成产值,但有可能他有几个月没报,本年完成产值就需要手动录入,本年完成产值不等于上月完成产值

2.1月上报12月的,我修改了一下表结构,本年对了,累计有不对了。

请老师看看。

 

 

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


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


加好友 发短信
等级:超级版主 帖子:107147 积分:544978 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/3/26 22:19:00 [只看该作者]

试了一下,太麻烦了,搞不定。

1、本年完成产值和累计完成产值要分开分别计算,不能放到一起计算,也就是要2段Select Case 。

2、其次建议按季度一次性加载一个季度的数据进行计算,然后做季结。否则加载不全,会导致计算不准,因为本年完成产值和累计完成产值是数据列,帮助的是表达式列

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


加好友 发短信
等级:狐精 帖子:3094 积分:20656 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By:2021/3/29 9:23:00 [只看该作者]

老师,我把上报周期年月分两列,写两段S  elect Case ,结果正确了,但是我实际不想把上报周期年月分开,这个怎么修改呢?

 

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

 

就上报周期为202011,202012,202101。。。。。。。

这种怎么判断?

Select Case  e.DataCol.Name
    Case "上报周期","上月完成产值"
        Dim dr As DataRow
        Dim mr As DataRow = e.DataRow
        Dim s1 As String = e.DataRow("上报周期").SubString(0,4)
        Dim s2 As String = e.DataRow("上报周期").SubString(4,2)
        Dim drs As List(of DataRow)
        If mr("上月完成产值") <> Nothing Then
            dr = e.DataTable.Find("[合同编码] = '" &  mr("合同编码") & "' and [上报周期年] = '" & mr("上报周期年") &  "' And  [上报周期月] < '" & mr("上报周期月") &  "'", "[_Identify] Desc")
            If dr Is Nothing Then
                dr = e.DataTable.SQLFind("[合同编码] = '" &  mr("合同编码") & "' and [上报周期年] = '" & mr("上报周期年") &  "' And [上报周期月] < '" & mr("上报周期月") &  "'", "[_Identify] Desc")
                If dr Is Nothing Then
                    mr("本年完成产值") = e.NewValue
                    dr = mr
                Else
                    mr("本年完成产值") = e.DataTable.SQLCompute("Sum(上月完成产值)","[合同编码] = '" &  mr("合同编码") &  "' and [上报周期年] = '" & mr("上报周期年") &  "'")
                End If
            End If
            drs = e.DataTable.Select("[合同编码] = '" &  mr("合同编码") &  "' And [上报周期年] = '" & mr("上报周期年") &  "' And [上报周期月] >='" & dr("上报周期月") &  "'", "[_Identify]")
            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("[合同编码] = '" &  mr("合同编码") &  "' And [上报周期年] = '" & mr("上报周期年") &  "' And  [上报周期月] < '" & mr("上报周期月") &  "'", "[_Identify] Desc")
                If  dr Is Nothing Then
                    dr = e.DataTable.Find("[上报周期年] = '" & mr("上报周期年") &  "' And  [上报周期月] = '" & mr("上报周期月") &  "'", "[_Identify]")
                    If dr IsNot Nothing Then
                        dr("本年完成产值") = e.DataTable.SQLCompute("Sum(上月完成产值)","[合同编码] = '" &  mr("合同编码") &  "'[上报周期月] = '" & mr("上报周期月") &  "'")
                    End If
                End If
                If  dr IsNot Nothing Then
                    drs = e.DataTable.Select("[合同编码] = '" &  mr("合同编码") &  "' And [上报周期年] = '" & mr("上报周期年") &  "' And  [上报周期月] >=' " & dr("上报周期月") &  "'", "[_Identify]")
                    For i As Integer = 1 To drs.Count - 1
                        drs(i)("本年完成产值") = drs(i-1)("本年完成产值") + drs(i)("上月完成产值")
                    Next
                End If
            End If
        End If
End Select

[此贴子已经被作者于2021/3/29 9:25:26编辑过]

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


加好友 发短信
等级:超级版主 帖子:107147 积分:544978 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/3/29 10:48:00 [只看该作者]

建议还是分开,不然不好判断。如果只是为了显示,可以增加一个上报周期列显示

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


加好友 发短信
等级:狐精 帖子:3094 积分:20656 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By:2021/3/29 13:39:00 [只看该作者]

其实不用那么复杂,直接用sqlFind就,配合排序就可以搞定,之前想得太复杂了,上报后的数据不会删除页不会修改,代码这样就可以了

'计算本年完成产值
Select Case  e.DataCol.Name
    Case "上报周期年","上报周期月","上月完成产值"
        Dim dr As DataRow = e.DataRow
        Dim ds As DataRow
        If dr("上月完成产值") <> Nothing Then
            ds = e.DataTable.SQLFind("[合同编码] = '" &  dr("合同编码") & "' and [上报周期年] = '" & dr("上报周期年") &  "' And [上报周期月] < '" & dr("上报周期月") &  "' And [_Identify] < '" & dr("_Identify") & "'", "[_Identify] Desc")
            If ds Is Nothing Then
                dr("本年完成产值") = e.NewValue
            Else
                dr("本年完成产值") = ds("本年完成产值") + dr("上月完成产值")
            End If
        End If
End Select
'计算累计完成产值及剩余产值
Select Case  e.DataCol.Name
    Case "本年完成产值"
        Dim dr As DataRow = e.DataRow
        Dim ds As DataRow
        If dr("本年完成产值") <> Nothing Then
            ds = e.DataTable.SQLFind("[合同编码] = '" & dr("合同编码") & "' And [_Identify] < '" & dr("_Identify") & "'", "[_Identify] Desc")
            If ds Is Nothing Then
                dr("累计完成产值") = ds("本年完成产值") + dr("上月完成产值")
                dr("剩余产值") = dr("合同金额") + dr("变更金额") - dr("累计完成产值")
            Else
                dr("累计完成产值") = ds("累计完成产值") + dr("上月完成产值")
                dr("剩余产值") = dr("合同金额") + dr("变更金额") - dr("累计完成产值")
            End If
        End If
End Select


 回到顶部
总数 18 上一页 1 2