Foxtable(狐表)用户栏目专家坐堂 → 给定关键字不在字典中


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

主题:给定关键字不在字典中

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


加好友 发短信
等级:六尾狐 帖子:1303 积分:10071 威望:0 精华:0 注册:2013/11/8 15:27:00
给定关键字不在字典中  发帖心情 Post By:2015/12/20 19:23:00 [只看该作者]

测试总是出现错误,给定关键字不在字典中
仔细检查过,查不出哪里有问题,把里面的统计代码单独拿出来测试又是没问题的,求助

[此贴子已经被作者于2015/12/21 9:04:45编辑过]

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/12/20 20:02:00 [只看该作者]

执行那段代码报错?例子没有问题。


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


加好友 发短信
等级:六尾狐 帖子:1303 积分:10071 威望:0 精华:0 注册:2013/11/8 15:27:00
  发帖心情 Post By:2015/12/20 20:10:00 [只看该作者]

以下是引用大红袍在2015/12/20 20:02:00的发言:

执行那段代码报错?例子没有问题。



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


就是在这里选择的时候出错


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


加好友 发短信
等级:六尾狐 帖子:1303 积分:10071 威望:0 精华:0 注册:2013/11/8 15:27:00
  发帖心情 Post By:2015/12/20 20:16:00 [只看该作者]

我同样在统计表里进行这种筛选也是没问题的,到了图表就出现这种错误提示

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/12/20 21:31:00 [只看该作者]

Dim Filter As String '设置筛选条件
With e.Form.Controls("DW")
    If .Value IsNot Nothing Then
        Filter = "所属单位 = '" & .Value & "'"
    End If
End With
With e.Form.Controls("BMLX") '在前一筛选条件控制下设置第二项筛选条件,其内容根据第一列的变化而变化
    If .Value IsNot Nothing Then
        If Filter > "" Then
            Filter = Filter & " And "
        End If
        Filter = Filter & "部门类型 = '" & .Value & "'"
    End If
End With
With e.Form.Controls("BM") '在前一筛选条件控制下设置第二项筛选条件,其内容根据第一列的变化而变化
    If .Value IsNot Nothing Then
        If Filter > "" Then
            Filter = Filter & " And "
        End If
        Filter = Filter & "上级部门 = '" & .Value & "'"
    End If
End With


Dim b As New SQLCrossTableBuilder("损益总体比率","部门损益总账")  '定义变量利润表附表,并从部门损益总账统计数据
b.AddTable("部门损益总账","部门名称","部门档案","部门名称") '添加统计表
b.AddTable("部门损益总账","科目编号","科目档案","科目编码") '添加统计表
b.HGroups.Adddef("所属日期",DateGroupEnum.none)
b.HGroups.AddDef("所属日期", DateGroupEnum.Year, "年")
b.HGroups.AddDef("所属日期", "月")
b.HGroups.AddDef("所属单位") '添加所属单位列用于水平分组
b.HGroups.AddDef("上级部门","部门") '添加部门名称列用于水平分组,并将列名称重新命名为部门
b.HGroups.AddDef("部门类型") '添加部门类型列用于水平分组
b.VGroups.AddDef("一级科目") '添加一级科目名称列用于垂直分组
b.Totals.AddDef("借方发生","本月") '添加借方发生列用于统计
b.Totals.AddDef("借方发生","累计",True) '添加借方发生列用于统计且截止累计金额
b.Decimals = 0 '小数点取0位
b.Filter = Filter
b.Build '生成统计表
Dim dic As new Dictionary(of String, String) '循环每一列,把标题和列名存储在字典里,然后引用,哪里需要某列的列名,就直接引用标题,如dic("标题名")
For Each c As Col  In Tables("损益总体比率").cols
    dic.add(c.Caption, c.name)
Next

If dic.ContainsKey("销售费用_本月") = False Then
    DataTables("损益总体比率").dataCols.add("销售费用_本月", Gettype(Double))
    DataTables("损益总体比率").dataCols.add("销售费用_累计", Gettype(Double))
    dic.add("销售费用_本月", "销售费用_本月")
    dic.add("销售费用_累计", "销售费用_累计")
End If
If dic.ContainsKey("财务费用_本月") = False Then
    DataTables("损益总体比率").dataCols.add("财务费用_本月", Gettype(Double))
    DataTables("损益总体比率").dataCols.add("财务费用_累计", Gettype(Double))
    dic.add("财务费用_本月", "财务费用_本月")
    dic.add("财务费用_累计", "财务费用_累计")
End If
If dic.ContainsKey("其他业务成本_本月") = False Then
    DataTables("损益总体比率").dataCols.add("其他业务成本_本月", Gettype(Double))
    DataTables("损益总体比率").dataCols.add("其他业务成本_累计", Gettype(Double))
    dic.add("其他业务成本_本月", "其他业务成本_本月")
    dic.add("其他业务成本_累计", "其他业务成本_累计")
End If
If dic.ContainsKey("营业外支出_本月") = False Then
    DataTables("损益总体比率").dataCols.add("营业外支出_本月", Gettype(Double))
    DataTables("损益总体比率").dataCols.add("营业外支出_累计", Gettype(Double))
    dic.add("营业外支出_本月", "营业外支出_本月")
    dic.add("营业外支出_累计", "营业外支出_累计")
End If
If dic.ContainsKey("其他业务收入_本月") = False Then
    DataTables("损益总体比率").dataCols.add("其他业务收入_本月", Gettype(Double))
    DataTables("损益总体比率").dataCols.add("其他业务收入_累计", Gettype(Double))
    dic.add("其他业务收入_本月", "其他业务收入_本月")
    dic.add("其他业务收入_累计", "其他业务收入_累计")
End If
If dic.ContainsKey("营业外收入_本月") = False Then
    DataTables("损益总体比率").dataCols.add("营业外收入_本月", Gettype(Double))
    DataTables("损益总体比率").dataCols.add("营业外收入_累计", Gettype(Double))
    dic.add("营业外收入_本月", "营业外收入_本月")
    dic.add("营业外收入_累计", "营业外收入_累计")
End If
If dic.ContainsKey("主营业务收入_本月") = False Then
    DataTables("损益总体比率").dataCols.add("主营业务收入_本月", Gettype(Double))
    DataTables("损益总体比率").dataCols.add("主营业务收入_累计", Gettype(Double))
    dic.add("主营业务收入_本月", "主营业务收入_本月")
    dic.add("主营业务收入_累计", "主营业务收入_累计")
End If
If dic.ContainsKey("主营业务成本_本月") = False Then
    DataTables("损益总体比率").dataCols.add("主营业务成本_本月", Gettype(Double))
    DataTables("损益总体比率").dataCols.add("主营业务成本_累计", Gettype(Double))
    dic.add("主营业务成本_本月", "主营业务成本_本月")
    dic.add("主营业务成本_累计", "主营业务成本_累计")
End If
If dic.ContainsKey("营业费用_本月") = False Then
    dic.add("营业费用_本月", "营业费用_本月")
    dic.add("营业费用_累计", "营业费用_累计")
End If
If dic.ContainsKey("资产减值损失_本月") = False Then
    DataTables("损益总体比率").dataCols.add("资产减值损失_本月", Gettype(Double))
    DataTables("损益总体比率").dataCols.add("资产减值损失_累计", Gettype(Double))
    dic.add("资产减值损失_本月", "资产减值损失_本月")
    dic.add("资产减值损失_累计", "资产减值损失_累计")
End If
If dic.ContainsKey("其他支出_本月") = False Then
    dic.add("其他支出_本月", "其他支出_本月")
    dic.add("其他支出_累计", "其他支出_累计")
End If
DataTables("损益总体比率").dataCols.add("营业费用_本月", Gettype(Double), "isnull(" & dic("销售费用_本月") & ",0)+isnull(" & dic("财务费用_本月") & ",0)") '通过Add方法,动态增加临时列,并给临时列设置表达式,表达式引用字典的方式同直接引用有所区别
DataTables("损益总体比率").dataCols.add("营业费用_累计", Gettype(Double), "isnull(" & dic("销售费用_累计") & ",0)+isnull(" & dic("财务费用_累计") & ",0)")
DataTables("损益总体比率").dataCols.add("其他支出_本月", Gettype(Double), "isnull(" & dic("其他业务成本_本月") & ",0)+isnull(" & dic("营业外支出_本月") & ",0)-isnull(" & dic("其他业务收入_本月") & ",0)-isnull(" & dic("营业外收入_本月") & ",0)")
DataTables("损益总体比率").dataCols.add("其他支出_累计", Gettype(Double), "isnull(" & dic("其他业务成本_累计") & ",0)+isnull(" & dic("营业外支出_累计") & ",0)-isnull(" & dic("其他业务收入_累计") & ",0)-isnull(" & dic("营业外收入_累计") & ",0)")
DataTables("损益总体比率").dataCols.add("利润_本月", Gettype(Double), "isnull(" & dic("主营业务收入_本月") & ",0)-isnull(" & dic("主营业务成本_本月") & ",0)-isnull(" & dic("资产减值损失_本月") & ",0)-[营业费用_本月]-[其他支出_本月]")

DataTables("损益总体比率").dataCols.add("利润_累计", Gettype(Double), "isnull(" & dic("主营业务收入_累计") & ",0)-isnull(" & dic("主营业务成本_累计") & ",0)-isnull(" & dic("资产减值损失_累计") & ",0)-[营业费用_累计]-[其他支出_累计]")
DataTables("损益总体比率").dataCols.add("利润率_本月", Gettype(Double))
DataTables("损益总体比率").dataCols.add("利润率_累计", Gettype(Double))
DataTables("损益总体比率").dataCols.add("毛利率_本月", Gettype(Double))
DataTables("损益总体比率").dataCols.add("毛利率_累计", Gettype(Double))
DataTables("损益总体比率").dataCols.add("费用率_本月", Gettype(Double))
DataTables("损益总体比率").dataCols.add("费用率_累计", Gettype(Double))
DataTables("损益总体比率").dataCols.add("打折率_本月", Gettype(Double))
DataTables("损益总体比率").dataCols.add("打折率_累计", Gettype(Double))
For Each c As Col In Tables("损益总体比率").Cols
    If c.Caption Like "*率_本月" Or  c.Caption Like "*率_累计"  Then
        c.DataCol.SetFormat("0.00%")
    End If
Next

With Tables("损益总体比率") '改变统计表的列的位置
    .Cols("所属日期").Move(1)
    .Cols("部门类型").Move(2)
    .Cols("利润_本月").Move(4)
    .Cols("利润_累计").Move(5)
    .Cols(dic("主营业务收入_本月")).Move(6)
    .Cols(dic("主营业务收入_累计")).Move(7)
    .Cols(dic("主营业务成本_本月")).Move(8)
    .Cols(dic("主营业务成本_累计")).Move(9)
    .Cols("营业费用_本月").Move(10)
    .Cols("营业费用_累计").Move(11)
    .Cols(dic("资产减值损失_本月")).Move(12)
    .Cols(dic("资产减值损失_累计")).Move(13)
    .Cols("其他支出_本月").Move(14)
    .Cols("其他支出_累计").Move(15)
End With
With Tables("损益总体比率") '设置各列的宽度
    .AutoSizeCols(15) '统一设置统计列的宽度
    .Cols("所属日期").PrintWidth = 20
    .Cols("所属单位").PrintWidth = 20
    .Cols("部门").PrintWidth = 35
    .Cols("部门类型").PrintWidth = 20
End With
With Tables("损益总体比率") '隐藏部分列
    .Cols(dic("销售费用_本月")).Visible = False
    .Cols(dic("销售费用_累计")).Visible = False
    .Cols(dic("财务费用_本月")).Visible = False
    .Cols(dic("财务费用_累计")).Visible = False
    .Cols(dic("其他业务收入_本月")).Visible = False
    .Cols(dic("其他业务收入_累计")).Visible = False
    .Cols(dic("其他业务成本_本月")).Visible = False
    .Cols(dic("其他业务成本_累计")).Visible = False
    .Cols(dic("营业外收入_本月")).Visible = False
    .Cols(dic("营业外收入_累计")).Visible = False
    .Cols(dic("营业外支出_本月")).Visible = False
    .Cols(dic("营业外支出_累计")).Visible = False
    .Cols(dic("主营业务收入_本月")).Visible = False
    .Cols(dic("主营业务收入_累计")).Visible = False
    .Cols(dic("主营业务成本_本月")).Visible = False
    .Cols(dic("主营业务成本_累计")).Visible = False
    .Cols("营业费用_本月").Visible = False
    .Cols("营业费用_累计").Visible = False
    .Cols(dic("资产减值损失_本月")).Visible = False
    .Cols(dic("资产减值损失_累计")).Visible = False
    .Cols("其他支出_本月").Visible = False
    .Cols("其他支出_累计").Visible = False
    .Cols("利润_本月").Visible = False
    .Cols("利润_累计").Visible = False
End With

Dim t As Table = Tables("损益总体比率")
Dim g As Subtotalgroup '以下为设置自定义汇总模式,b.Subtotal = True 不适用通过表达式生成的列
Dim cs As String = ""
For Each c As Col In Tables("损益总体比率").cols
    If c.IsNumeric Then
        cs &= c.name & ","
    End If
Next
t.SubtotalGroups.Clear()
t.GroupAboveData = False
t.TreeVisible = False
t.SpillNode = False

g = New Subtotalgroup
g.Aggregate = AggregateEnum.Sum
g.GroupOn = "部门类型"
g.TotalOn = cs.trim(",")
g.Caption = "{0} 小计"
t.SubtotalGroups.Add(g)

g = New Subtotalgroup
g.Aggregate = AggregateEnum.Sum
g.GroupOn = "*"
g.TotalOn = cs.trim(",")
g.Caption = "总计"
t.SubtotalGroups.Add(g)

t.Subtotal()
Dim r As Row
For i As Integer = 0 To t.Rows.Count(True) - 1
    r = t.Rows(i,True)
    If r.IsGroup And (r(dic("主营业务收入_本月")) = 0 Or r(dic("主营业务收入_本月")) Is Nothing) Then
        r("利润率_本月") = 0
        r("利润率_累计") = 0
        r("毛利率_本月") = 0
        r("毛利率_累计") = 0
        r("费用率_本月") = 0
        r("费用率_累计") = 0
        r("打折率_本月") = 0
        r("打折率_累计") = 0
    Else
        r("利润率_本月") = r("利润_本月")/r(dic("主营业务收入_本月"))
        r("利润率_累计") = r("利润_累计")/r(dic("主营业务收入_累计"))
        r("毛利率_本月") = (r(dic("主营业务收入_本月"))-r(dic("主营业务成本_本月")))/r(dic("主营业务收入_本月"))
        r("毛利率_累计") = (r(dic("主营业务收入_累计"))-r(dic("主营业务成本_累计")))/r(dic("主营业务收入_累计"))
        r("费用率_本月") = r("营业费用_本月")/r(dic("主营业务收入_本月"))
        r("费用率_累计") = r("营业费用_累计")/r(dic("主营业务收入_累计"))
        r("打折率_本月") = r(dic("资产减值损失_本月"))/r(dic("主营业务收入_本月"))
        r("打折率_累计") = r(dic("资产减值损失_累计"))/r(dic("主营业务收入_累计"))
    End If
Next

Dim Chart As WinForm.Chart '定义一个图表变量
Dim Series As WinForm.ChartSeries '定义一个图系变量
Chart= e.Form.Controls("毛利率同期") ' 引用窗口中的图表
Chart.SeriesList.Clear() '清除图表原来的图系
chart.AxisX.ClearValueLabel
chart.AxisY.ClearValueLabel
For Each Year As String In DataTables("损益总体比率").GetValues("年", filter)
    Series = Chart.SeriesList.Add() '每年一个图系
    Series.Text = Year  '指定图系名称为年份
    Series.Length = 12  '指定图系的数据点数,1年12个月
    Chart.AxisX.Min = 1  '指定X轴的最小值,也就是从1月开始
    Chart.AxisX.Max = 12 ''指定X轴的最大值,一年只有12个月
    For Month As Integer = 1 To 12 '逐月设置坐标
        Series.X(Month) = Month      '指定水平坐标为月份
        Chart.AxisX.SetValueLabel(1, "一月份")
        Chart.AxisX.SetValueLabel(2, "二月份")
        Chart.AxisX.SetValueLabel(3, "三月份")
        Chart.AxisX.SetValueLabel(4, "四月份")
        Chart.AxisX.SetValueLabel(5, "五月份")
        Chart.AxisX.SetValueLabel(6, "六月份")
        Chart.AxisX.SetValueLabel(7, "七月份")
        Chart.AxisX.SetValueLabel(8, "八月份")
        Chart.AxisX.SetValueLabel(9, "九月份")
        Chart.AxisX.SetValueLabel(10, "十月份")
        Chart.AxisX.SetValueLabel(11, "十一月份")
        Chart.AxisX.SetValueLabel(12, "十二月份")
        Dim r1 As DataRow = DataTables("损益总体比率").Find("年 = " & Year & " And  月 = " & Month)'找出对应年月的行
        If r1 IsNot Nothing '如果找到对应年月的行
            Series.Y(Month) = r1("毛利率_本月") '指定数量作为垂直坐标
        End If
    Next
Next
Chart.AxisX.AnnoWithLabels = True '启用字符标示
Chart.TopMost = True '不同图表间切换
Chart.SeriesList(0).DataLabelText = "{#YVAL}" '显示数据标记的值
Chart.SeriesList(0).TooltipText = "{#YVAL}" '停在数据标记上时是否显示值
Chart.SeriesList(0).LineColor = Color.Red '设置连接线的颜色
Chart.SeriesList(0).LineThickNess = 2 '设置连接线的粗细
Chart.SeriesList(0).MarkShape = MarkShapeEnum.Dot '设置数据点的形状
Chart.SeriesList(0).MarkSize = 10 '设置数据点的大小
Chart.SeriesList(0).MarkColor = Color.Green '设置数据点的颜色
Chart.SeriesList(0).LinePattern = LinePatternEnum.Solid '设置连接线的类型
If Chart.SeriesList.count = 2 Then
    Chart.SeriesList(1).DataLabelText = "{#YVAL}"
    Chart.SeriesList(1).TooltipText = "{#YVAL}"
    Chart.SeriesList(1).LineColor = Color.Green
    Chart.SeriesList(1).LineThickNess = 2
    Chart.SeriesList(1).MarkShape = MarkShapeEnum.Dot
    Chart.SeriesList(1).MarkSize = 10
    Chart.SeriesList(1).MarkColor = Color.Red
    Chart.SeriesList(1).LinePattern = LinePatternEnum.Solid
End If
Chart.LegendVisible = True '显示图列
Chart.LegendCompass= CompassEnum.South '图列显示在南方(底端)


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


加好友 发短信
等级:六尾狐 帖子:1303 积分:10071 威望:0 精华:0 注册:2013/11/8 15:27:00
  发帖心情 Post By:2015/12/20 22:07:00 [只看该作者]

能说下为什么要这样改吗
[此贴子已经被作者于2015/12/20 22:07:58编辑过]

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


加好友 发短信
等级:六尾狐 帖子:1303 积分:10071 威望:0 精华:0 注册:2013/11/8 15:27:00
  发帖心情 Post By:2015/12/20 22:37:00 [只看该作者]

谢谢大红袍,帮我改这么多


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/12/20 23:37:00 [只看该作者]

以下是引用lgj716330在2015/12/20 22:07:00的发言:
能说下为什么要这样改吗
[此贴子已经被作者于2015/12/20 22:07:58编辑过]

 

因为你数据不完整的时候,不会生成那些列,但是你后面的代码都用到了这些列,所以必须把这些列动态生成出来。


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


加好友 发短信
等级:六尾狐 帖子:1303 积分:10071 威望:0 精华:0 注册:2013/11/8 15:27:00
  发帖心情 Post By:2015/12/21 8:52:00 [只看该作者]

哦,原来如此,谢谢

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


加好友 发短信
等级:六尾狐 帖子:1303 积分:10071 威望:0 精华:0 注册:2013/11/8 15:27:00
  发帖心情 Post By:2016/1/24 11:43:00 [只看该作者]

紧急求助

用一般用户进入项目后,提示错误,但用开发者进去没有问题
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目2 (1).foxdb


 回到顶部
总数 16 1 2 下一页