Foxtable(狐表)用户栏目专家坐堂 → 统计数据代码出错问题


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

主题:统计数据代码出错问题

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


加好友 发短信
等级:二尾狐 帖子:503 积分:4002 威望:0 精华:0 注册:2016/6/7 7:45:00
统计数据代码出错问题  发帖心情 Post By:2017/2/14 8:46:00 [显示全部帖子]

For Each dr As DataRow In DataTables("合同表").Select("")
    '第一季度应返数量
    Dim dt1 As DataTable=DataTables("批发表")
    Dim dt2 As DataTable=DataTables("入库表")
   
    Dim y As Integer = 2016 '指定年份
    Dim q As Integer = 1 '指定季度
    Dim dt3 As New Date(y, 3 * (q - 1) + 1, 1) '获取该季度的第一天
    Dim dt4 As New Date(y, 3 * q, Date.DaysInMonth(y,3 * q)) '获取该季度的最后一天
    Dim Filter As String
    Filter = "日期 >= #" & dt3 & "# And 日期 <= #" & dt4 & "#"
   
    Dim YFSL1 As Double = dt1.Compute("sum(数量)", "高开编号 = '" & dr("财务编号") & "'","Filter")
    Dim YFSL2 As Double = dt1.Compute("sum(数量)", "返利编号 = '" & dr("财务编号") & "'","Filter")
    Dim YFSL3 As Double = dt2.Compute("sum(数量)", "高开编号 = '" & dr("财务编号") & "'","Filter")
    Dim YFSL4 As Double = dt2.Compute("sum(数量)", "返利编号 = '" & dr("财务编号") & "'","Filter")
    dr("第一季度应返数量") = YFSL1 + YFSL2+ YFSL3+ YFSL4
   
    '第一季度应返金额
    Dim YFJE1 As Double = dt1.Compute("sum(返利应返金额)", "返利编号 = '" & dr("财务编号") & "'",Filter)
    Dim YFJE2 As Double = dt1.Compute("sum(高开应返金额)", "高开编号 = '" & dr("财务编号") & "'",Filter)
    Dim YFJE3 As Double = dt2.Compute("sum(返利应返金额)", "返利编号 = '" & dr("财务编号") & "'",Filter)
    Dim YFJE4 As Double = dt2.Compute("sum(高开应返金额)", "高开编号 = '" & dr("财务编号") & "'",Filter)
    dr("第一季度应返金额") = YFJE1 + YFJE2+ YFJE3+ YFJE4
   
Next

 

 

 

以上代码,我想统计第一季度数据,结果出错,提示如下:

 

 


图片点击可在新窗口打开查看此主题相关图片如下:qq截图20170214084351.png
图片点击可在新窗口打开查看

 

请老师帮忙改一下。


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


加好友 发短信
等级:二尾狐 帖子:503 积分:4002 威望:0 精华:0 注册:2016/6/7 7:45:00
  发帖心情 Post By:2017/2/14 10:07:00 [显示全部帖子]

For Each dr As DataRow In DataTables("合同表").Select("")
    Dim dt1 As DataTable=DataTables("批发表")
    Dim dt2 As DataTable=DataTables("入库表")
    Dim dt3 As DataTable=DataTables("合同表")
    Dim dt4 As DataTable=DataTables("收缴表")
    
    '第一季度应返数量
    Dim YFSL1 As Double = dt1.SqlCompute("sum(数量)", "高开编号 = '" & dr("财务编号") & "' and month(单据日期) in (1,2,3)" )
    Dim YFSL2 As Double = dt1.SqlCompute("sum(数量)", "返利编号 = '" & dr("财务编号") & "' and month(单据日期) in (1,2,3)" )
    Dim YFSL3 As Double = dt2.SqlCompute("sum(数量)", "高开编号 = '" & dr("财务编号") & "' and month(单据日期) in (1,2,3)" )
    Dim YFSL4 As Double = dt2.SqlCompute("sum(数量)", "返利编号 = '" & dr("财务编号") & "' and month(单据日期) in (1,2,3)" )
    dr("第一季度应返数量") = YFSL1 + YFSL2+ YFSL3+ YFSL4
    
    '第一季度应返金额
    Dim YFJE1 As Double = dt1.SqlCompute("sum(返利应返金额)", "返利编号 = '" & dr("财务编号") &"' And month(单据日期) In (1,2,3)" )
    Dim YFJE2 As Double = dt1.SqlCompute("sum(高开应返金额)", "高开编号 = '" & dr("财务编号") & "' and month(单据日期) in (1,2,3)" )
    Dim YFJE3 As Double = dt2.SqlCompute("sum(返利应返金额)", "返利编号 = '" & dr("财务编号") & "' and month(单据日期) in (1,2,3)" )
    Dim YFJE4 As Double = dt2.SqlCompute("sum(高开应返金额)", "高开编号 = '" & dr("财务编号") & "' and month(单据日期) in (1,2,3)" )
    dr("第一季度应返金额") = YFJE1 + YFJE2+ YFJE3+ YFJE4
    
           
Next

我这是统计第一季度数据,现在合同表里有录入时间一列,我想重新改代码,加入,录入时间在第一季度的合同才统计以上数据,怎么改,请有点蓝老师帮忙。

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


加好友 发短信
等级:二尾狐 帖子:503 积分:4002 威望:0 精华:0 注册:2016/6/7 7:45:00
  发帖心情 Post By:2017/2/14 10:25:00 [显示全部帖子]

请有点蓝老师帮忙呀。

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


加好友 发短信
等级:二尾狐 帖子:503 积分:4002 威望:0 精华:0 注册:2016/6/7 7:45:00
  发帖心情 Post By:2017/2/14 10:48:00 [显示全部帖子]

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

 

麻烦有点蓝老师了,正常我的所有表都是外部数据表,而且批发及和入库表都有40万条数据。


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


加好友 发短信
等级:二尾狐 帖子:503 积分:4002 威望:0 精华:0 注册:2016/6/7 7:45:00
  发帖心情 Post By:2017/2/14 14:20:00 [显示全部帖子]

For Each dr As DataRow In DataTables("合同表").Select("")
    Dim dt1 As DataTable=DataTables("批发表")
    Dim dt2 As DataTable=DataTables("入库表")
    Dim y As Integer = cdate(dr("录入时间")).year '指定年份
    Dim q As Integer = Math.Ceiling(cdate(dr("录入时间")).Month / 3) '指定季度
    
    '第一季度应返数量
    Dim YFSL1 As Double = dt1.SqlCompute("sum(数量)", "高开编号 = '" & dr("财务编号") & "' and month(单据日期) in (1,2,3)" )
    Dim YFSL2 As Double = dt1.SqlCompute("sum(数量)", "返利编号 = '" & dr("财务编号") & "' and month(单据日期) in (1,2,3)" )
    Dim YFSL3 As Double = dt2.SqlCompute("sum(数量)", "高开编号 = '" & dr("财务编号") & "' and month(单据日期) in (1,2,3)" )
    Dim YFSL4 As Double = dt2.SqlCompute("sum(数量)", "返利编号 = '" & dr("财务编号") & "' and month(单据日期) in (1,2,3)" )
    dr("第一季度应返数量") = YFSL1 + YFSL2+ YFSL3+ YFSL4
    
    '第一季度应返金额
    Dim YFJE1 As Double = dt1.SqlCompute("sum(返利应返金额)", "返利编号 = '" & dr("财务编号") &"' And month(单据日期) In (1,2,3)" )
    Dim YFJE2 As Double = dt1.SqlCompute("sum(高开应返金额)", "高开编号 = '" & dr("财务编号") & "' and month(单据日期) in (1,2,3)" )
    Dim YFJE3 As Double = dt2.SqlCompute("sum(返利应返金额)", "返利编号 = '" & dr("财务编号") & "' and month(单据日期) in (1,2,3)" )
    Dim YFJE4 As Double = dt2.SqlCompute("sum(高开应返金额)", "高开编号 = '" & dr("财务编号") & "' and month(单据日期) in (1,2,3)" )
    dr("第一季度应返金额") = YFJE1 + YFJE2+ YFJE3+ YFJE4
    
    '以下代码是计算第一季度计提数量和金额
    If q = 1 Then
        Dim dt3 As New Date(y, 3 * (q - 1) + 1, 1) '获取该季度的第一天
        Dim dt4 As Date = dt3.AddMonths(1)
        Dim Filter As String
        Filter = "单据日期 >= #" & dt3 & "# And 单据日期 < #" & dt4 & "#"
        
        Dim JTSL1 As Double = dt1.Compute("sum(数量)", "高开编号 = '" & dr("财务编号") & "' and " & Filter)
        Dim JTSL2 As Double = dt1.Compute("sum(数量)", "返利编号 = '" & dr("财务编号") & "' and " & Filter)
        Dim JTSL3 As Double = dt2.Compute("sum(数量)", "高开编号 = '" & dr("财务编号") & "' and " & Filter)
        Dim JTSL4 As Double = dt2.Compute("sum(数量)", "返利编号 = '" & dr("财务编号") & "' and " & Filter)
        dr("第一季度计提数量") = JTSL1 + JTSL2+ JTSL3+ JTSL4
    End If
Next


有点色老师,我的代码如下,但第一季度计提数量全部是零。我分析可能是Filter的取值范围的问题,我想问一下:
Filter = "单据日期 >= #" & dt3 & "# And 单据日期 < #" & dt4 & "#"      
这句的取值范围是第一季度吗,也就是说,日期为1月1日至3月31日吗?



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


加好友 发短信
等级:二尾狐 帖子:503 积分:4002 威望:0 精华:0 注册:2016/6/7 7:45:00
  发帖心情 Post By:2017/2/14 14:29:00 [显示全部帖子]

找出问题了,是录入的时间为2016年,而单据日期为2017年,所以没有统计数量。

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


加好友 发短信
等级:二尾狐 帖子:503 积分:4002 威望:0 精华:0 注册:2016/6/7 7:45:00
  发帖心情 Post By:2017/2/14 16:09:00 [显示全部帖子]

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



For Each dr As DataRow In DataTables("合同表").Select("")
    Dim dt1 As DataTable=DataTables("批发表")
    Dim dt2 As DataTable=DataTables("入库表")
    Dim y As Integer = cdate(dr("录入时间")).year '指定年份
    Dim q As Integer = Math.Ceiling(cdate(dr("录入时间")).Month / 3) '指定季度
 
   '第一季度应返数量
    Dim YFSL1 As Double = dt1.SqlCompute("sum(数量)", "高开编号 = '" & dr("财务编号") & "' and month(单据日期) in (1,2,3)" )
    Dim YFSL2 As Double = dt1.SqlCompute("sum(数量)", "返利编号 = '" & dr("财务编号") & "' and month(单据日期) in (1,2,3)" )
    Dim YFSL3 As Double = dt2.SqlCompute("sum(数量)", "高开编号 = '" & dr("财务编号") & "' and month(单据日期) in (1,2,3)" )
    Dim YFSL4 As Double = dt2.SqlCompute("sum(数量)", "返利编号 = '" & dr("财务编号") & "' and month(单据日期) in (1,2,3)" )
    dr("第一季度应返数量") = YFSL1 + YFSL2+ YFSL3+ YFSL4
    
    '第一季度应返金额
    Dim YFJE1 As Double = dt1.SqlCompute("sum(返利应返金额)", "返利编号 = '" & dr("财务编号") &"' And month(单据日期) In (1,2,3)" )
    Dim YFJE2 As Double = dt1.SqlCompute("sum(高开应返金额)", "高开编号 = '" & dr("财务编号") & "' and month(单据日期) in (1,2,3)" )
    Dim YFJE3 As Double = dt2.SqlCompute("sum(返利应返金额)", "返利编号 = '" & dr("财务编号") & "' and month(单据日期) in (1,2,3)" )
    Dim YFJE4 As Double = dt2.SqlCompute("sum(高开应返金额)", "高开编号 = '" & dr("财务编号") & "' and month(单据日期) in (1,2,3)" )
    dr("第一季度应返金额") = YFJE1 + YFJE2+ YFJE3+ YFJE4
    
    '以下代码是计算第一季度计提数量
    If q = 1 Then
        Dim dt3 As New Date(y, 3 * (q - 1) + 1, 1) '获取该季度的第一天
        Dim dt4 As Date = dt3.AddMonths(1)
        Dim Filter As String
        Filter = "单据日期 >= #" & dt3 & "# And 单据日期 < #" & dt4 & "#"
        
        Dim JTSL1 As Double = dt1.Compute("sum(数量)", "高开编号 = '" & dr("财务编号") & "' and " & Filter)
        Dim JTSL2 As Double = dt1.Compute("sum(数量)", "返利编号 = '" & dr("财务编号") & "' and " & Filter)
        Dim JTSL3 As Double = dt2.Compute("sum(数量)", "高开编号 = '" & dr("财务编号") & "' and " & Filter)
        Dim JTSL4 As Double = dt2.Compute("sum(数量)", "返利编号 = '" & dr("财务编号") & "' and " & Filter)
        


         dr("第一季度计提数量") = JTSL1 + JTSL2+ JTSL3+ JTSL4
    End If
Next


红色代码我想实现:第一季度计提数量=合同表里财务编号是录入日期是第一季度的,在批发表和入库表对应返利编号和高开编号,并且单据日期是第一季度的数量和-收缴表对应财务编号,并且登记日期是第一季度的数量和

有点色老师帮忙改一下红色部分代码,弄了一下午,实在弄不出来了。

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


加好友 发短信
等级:二尾狐 帖子:503 积分:4002 威望:0 精华:0 注册:2016/6/7 7:45:00
  发帖心情 Post By:2017/2/14 16:31:00 [显示全部帖子]

我忘说了,现在上面红色的代码统计的数据也不是我要求的那样,给减了一部分,不知道是什么原因。而且,财务编号为201600004的,怎么弄也不统计。

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


加好友 发短信
等级:二尾狐 帖子:503 积分:4002 威望:0 精华:0 注册:2016/6/7 7:45:00
  发帖心情 Post By:2017/2/14 16:43:00 [显示全部帖子]

有点色老师帮忙呀,弄了一大下午了。

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


加好友 发短信
等级:二尾狐 帖子:503 积分:4002 威望:0 精华:0 注册:2016/6/7 7:45:00
  发帖心情 Post By:2017/2/15 8:03:00 [显示全部帖子]

有点色老师,实在没有办法,我在批发表和入库表里分别增加了高开录入时间和返利录入时间,用表属性DataColChanged事件依据财务编码分别提取两个录入时间,以下是我的代码:

 

批发表和入库表DataColChanged事件代码:

 

If e.DataCol.Name = "返利编号" Then 
    Dim dr As DataRow
    dr = DataTables("合同表").Find("财务编号 = '" & e.DataRow("返利编号") & "'" )
        If dr IsNot Nothing 
        e.DataRow("返利录入时间")= dr("录入时间")
    End If
End If

If e.DataCol.Name = "高开编号" Then 
     Dim dr As DataRow
    dr = DataTables("合同表").Find("财务编号 = '" & e.DataRow("高开编号") & "'" )
        If dr IsNot Nothing 
        e.DataRow("高开录入时间")= dr("录入时间")
       
    End If
End If

 

 

第一季度按钮代码:

 

For Each dr As DataRow In DataTables("合同表").Select("")
    Dim dt1 As DataTable=DataTables("批发表")
    Dim dt2 As DataTable=DataTables("入库表")
    Dim dt3 As DataTable=DataTables("收缴表")
   
    '第一季度应返数量
    Dim YFSL1 As Double = dt1.SqlCompute("sum(数量)", "高开编号 = '" & dr("财务编号") & "' and month(单据日期) in (1,2,3)" )
    Dim YFSL2 As Double = dt1.SqlCompute("sum(数量)", "返利编号 = '" & dr("财务编号") & "' and month(单据日期) in (1,2,3)" )
    Dim YFSL3 As Double = dt2.SqlCompute("sum(数量)", "高开编号 = '" & dr("财务编号") & "' and month(单据日期) in (1,2,3)" )
    Dim YFSL4 As Double = dt2.SqlCompute("sum(数量)", "返利编号 = '" & dr("财务编号") & "' and month(单据日期) in (1,2,3)" )
    dr("第一季度应返数量") = YFSL1 + YFSL2+ YFSL3+ YFSL4
   
    '第一季度应返金额
    Dim YFJE1 As Double = dt1.SqlCompute("sum(返利应返金额)", "返利编号 = '" & dr("财务编号") &"' And month(单据日期) In (1,2,3)" )
    Dim YFJE2 As Double = dt1.SqlCompute("sum(高开应返金额)", "高开编号 = '" & dr("财务编号") & "' and month(单据日期) in (1,2,3)" )
    Dim YFJE3 As Double = dt2.SqlCompute("sum(返利应返金额)", "返利编号 = '" & dr("财务编号") & "' and month(单据日期) in (1,2,3)" )
    Dim YFJE4 As Double = dt2.SqlCompute("sum(高开应返金额)", "高开编号 = '" & dr("财务编号") & "' and month(单据日期) in (1,2,3)" )
    dr("第一季度应返金额") = YFJE1 + YFJE2+ YFJE3+ YFJE4
   
    '以下代码是计算第一季度计提数量
    Dim JTSL1 As Double = dt1.SqlCompute("sum(数量)", "高开编号 = '" & dr("财务编号") & "' and month(高开录入时间) in (1,2,3)" )
    Dim JTSL2 As Double = dt1.SqlCompute("sum(数量)", "返利编号 = '" & dr("财务编号") & "' and month(返利录入时间) in (1,2,3)" )
    Dim JTSL3 As Double = dt2.SqlCompute("sum(数量)", "高开编号 = '" & dr("财务编号") & "' and month(高开录入时间) in (1,2,3)" )
    Dim JTSL4 As Double = dt2.SqlCompute("sum(数量)", "返利编号 = '" & dr("财务编号") & "' and month(返利录入时间) in (1,2,3)" )
    Dim JTSL5 As Double = dt3.SqlCompute("sum(收缴数量)", "财务编号 = '" & dr("财务编号") & "' and month(登记时间) in (1,2,3)" )
   
   
    dr("第一季度计提数量") = JTSL1 + JTSL2+ JTSL3+ JTSL4-JTSL5
   
Next

 

在批发表和入库表中增加录入时间列是为了红色这段代码。我不想用在批发表和入库表中增加录入时间列的方法来计算,能不能不在批发表和入库表中增加录入时间列的方式,代码怎么写,请有点色老师帮忙。


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