Foxtable(狐表)用户栏目专家坐堂 → 自定义函数


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

主题:自定义函数

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


加好友 发短信
等级:九尾狐 帖子:2234 积分:15278 威望:0 精华:0 注册:2015/7/18 10:10:00
  发帖心情 Post By:2017/7/1 7:19:00 [只看该作者]

如例子中的表C,我想实现对相关合计行的计算,流动资产合计、非流动资产合计、流动负债合计、非流动负债合计、负债合计、净资产合计、负债和净资产合计
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:自定义函数.foxdb


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


加好友 发短信
等级:九尾狐 帖子:2234 积分:15278 威望:0 精华:0 注册:2015/7/18 10:10:00
  发帖心情 Post By:2017/7/1 7:22:00 [只看该作者]

希望用自定义函数的形式实现,因为行的位置会经常发生变动

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


加好友 发短信
等级:超级版主 帖子:106680 积分:542589 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2017/7/1 9:22:00 [只看该作者]

表事件

Select Case e.DataCol.name
    Case "第一列"
        e.DataRow("第二列") = Functions.Execute("chushu", "表A", "项目编号", "开piao金额",e.DataRow("第一列"))
End Select


函数

Dim biaoming As String  = Args(0)
Dim biaoziduan As String  = Args(1)
Dim quzhiziduan As String  = Args(2)
Dim quzhiziduanzhi As String  = Args(3)

Dim quzhi As Double
quzhi = DataTables(biaoming).Compute("sum(" & quzhiziduan & ")",biaoziduan & " = '" & quzhiziduanzhi &"'")
Return quzhi

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


加好友 发短信
等级:九尾狐 帖子:2234 积分:15278 威望:0 精华:0 注册:2015/7/18 10:10:00
  发帖心情 Post By:2017/7/1 9:39:00 [只看该作者]

我是想解决表C中的问题


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


加好友 发短信
等级:超级版主 帖子:106680 积分:542589 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2017/7/1 10:10:00 [只看该作者]

11楼的项目没有看到表C有什么东西。

5楼问题看懂13楼的代码,一样的东西

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


加好友 发短信
等级:九尾狐 帖子:2234 积分:15278 威望:0 精华:0 注册:2015/7/18 10:10:00
  发帖心情 Post By:2017/7/1 11:03:00 [只看该作者]

刚才发错了,这个例子的C表中

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:自定义函数.foxdb


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


加好友 发短信
等级:超级版主 帖子:106680 积分:542589 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2017/7/1 13:56:00 [只看该作者]

不需要使用函数,DataColChanged事件


'''
Select Case e.DataCol.Name
    Case "资产期初数","资产期末数"
        Dim str As String = "货币资金,短期投资,财政应返还额度,应收在院病人医疗款,应收医疗款,其他应收款,预付账款,待摊费用,存货,一年内到期的长期债权投资"
        Dim str2 As String = "长期资产,固定资产原价,在建工程,固定资产清理,无形资产原价,长期待摊费用,待处理财产损溢"
        
        
        Dim dict As new Dictionary(of String,String)
        dict.Add("资产项目 = '流动资产合计'",str)
        dict.Add("资产项目 = '非流动资产合计'",str2)
        
        
        Dim dictB As new Dictionary(of String,String)
        dictB.Add("资产项目 = '流动资产合计'","减:坏账准备")
        dictB.Add("资产项目 = '非流动资产合计'","减:累计折旧,减:累计摊销")
        
        For Each key As String In dict.Keys
            Dim value As String = dict(key)
            If value.Contains(e.DataRow("资产项目")) Then
                Dim dr As DataRow = e.DataTable.Find(key)
                If dr IsNot Nothing Then
                    dr(e.DataCol.Name) = e.DataTable.Compute("sum(" & e.DataCol.Name & ")","资产项目 in ('" & value.replace(",","','") & "')") - e.DataTable.Compute("sum(" & e.DataCol.Name & ")","资产项目 in ('" & dictB(key).replace(",","','") & "')")
                End If
                Exit For
            End If
        Next
        Dim dr2 As DataRow = e.DataTable.Find("资产项目 = '资产总计'")
        If dr2 IsNot Nothing Then
            dr2(e.DataCol.Name) = e.DataTable.Compute("sum(" & e.DataCol.Name & ")","资产项目 in ('流动资产合计','非流动资产合计')") 
        End If
        
    Case "负债期初数","负债期末数"
        Dim str3 As String = "短期借款,应缴款项,应付piao据,应付账款,预收医疗款,应付职工薪酬,应付福利费,应付社会保障费,应交税费,其他应付款,预提费用,一年内到期的长期负债"
        Dim str4 As String = "长期借款,长期应付款"
        Dim str5 As String = "事业基金,专用基金,待冲基金,财政补助结转(余),科教项目结转(余),本期结余,未弥补亏损"
        Dim dict As new Dictionary(of String,String)
        dict.Add("负债及所有者权益 = '流动负债合计'",str3)
        dict.Add("负债及所有者权益 = '非流动负债合计'",str4)
        dict.Add("负债及所有者权益 = '净资产合计'",str5)
        For Each key As String In dict.Keys
            Dim value As String = dict(key)
            If value.Contains(e.DataRow("负债及所有者权益")) Then
                Dim dr As DataRow = e.DataTable.Find(key)
                If dr IsNot Nothing Then
                    dr(e.DataCol.Name) = e.DataTable.Compute("sum(" & e.DataCol.Name & ")","负债及所有者权益 in ('" & value.replace(",","','") & "')")
                End If
                Exit For
            End If
        Next
        Dim dr2 As DataRow = e.DataTable.Find("负债及所有者权益 = '负债和净资产总计'")
        If dr2 IsNot Nothing Then
            dr2(e.DataCol.Name) = e.DataTable.Compute("sum(" & e.DataCol.Name & ")","负债及所有者权益 in ('流动负债合计','非流动负债合计','净资产合计')") 
        End If
End Select

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


加好友 发短信
等级:九尾狐 帖子:2234 积分:15278 威望:0 精华:0 注册:2015/7/18 10:10:00
  发帖心情 Post By:2017/7/1 14:11:00 [只看该作者]

17楼的代码求合计已经没有问题了,减:坏账准备、累计折旧、累计摊销还不行,如例子中的资产负债

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:自定义函数.foxdb


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


加好友 发短信
等级:超级版主 帖子:106680 积分:542589 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2017/7/1 15:09:00 [只看该作者]

            If value.Contains(e.DataRow("资产项目")) Then

改为
            If value.Contains(e.DataRow("资产项目")) OrElse dictB(key).Contains(e.DataRow("资产项目")) Then

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


加好友 发短信
等级:九尾狐 帖子:2234 积分:15278 威望:0 精华:0 注册:2015/7/18 10:10:00
  发帖心情 Post By:2017/7/1 18:15:00 [只看该作者]

表A中我把第六列的中国人复制到第七列,为什么我以第六列中国人前面的空格,复制到第七列后就不见了,怎么办?

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