以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  自定义函数  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=133366)

--  作者:kaituozhe
--  发布时间:2019/4/12 19:19:00
--  自定义函数

由资产负债表有很多种会计准则,希望每种会计准则的计算方法都在自定义函数中设置,以下自定义函数中的代码,但是在函数中怎么表示列名,黄色代码怎么修改?

\'小企业会计准则"
msgbox(0)
Dim filter As String =  "年度 = \'" & CurrentTable.Current("年度") & "\' And 期间 = \'" & CurrentTable.Current("期间") & "\'And 公司名称 = \'" & CurrentTable.Current("公司名称") & "\' And 会计准则 = \'" & CurrentTable.Current("会计准则") & "\'"
If DataTables.Contains("科目余额转换") = True Then
    Dim dt As DataTable = DataTables("科目余额转换")
msgbox(2)
    Select Case CurrentTable.DataTable.name
        Case "年度","期间"
msgbox(1)
            If CurrentTable.DataTable.find(filter & "and 资产项目 = \'固定资产净值\'") IsNot Nothing Then
                CurrentTable.DataTable.find(filter & "And 资产项目 = \'固定资产净值\'")("资产期初金额") = CurrentTable.DataTable.Compute("sum(资产期初金额)",filter & "and 资产项目 = \'固定资产原值\'") - CurrentTable.DataTable.Compute("sum(资产期初金额)",filter & "and 资产项目 = \'固定资产累计折旧\'")
                CurrentTable.DataTable.find(filter & "And 资产项目 = \'固定资产净值\'")("资产期末金额") = CurrentTable.DataTable.Compute("sum(资产期末金额)",filter & "and 资产项目 = \'固定资产原值\'") - CurrentTable.DataTable.Compute("sum(资产期末金额)",filter & "and 资产项目 = \'固定资产累计折旧\'")
            End If
           
            If CurrentTable.DataTable.find(filter & "and 资产项目 = \'无形资产净值\'") IsNot Nothing Then
                CurrentTable.DataTable.find(filter & "And 资产项目 = \'无形资产净值\'")("资产期初金额") = CurrentTable.DataTable.Compute("sum(资产期初金额)",filter & "and 资产项目 = \'无形资产原值\'") - CurrentTable.DataTable.Compute("sum(资产期初金额)",filter & "and 资产项目 = \'无形资产累计摊销\'")
                CurrentTable.DataTable.find(filter & "And 资产项目 = \'无形资产净值\'")("资产期末金额") = CurrentTable.DataTable.Compute("sum(资产期末金额)",filter & "and 资产项目 = \'无形资产原值\'") - CurrentTable.DataTable.Compute("sum(资产期末金额)",filter & "and 资产项目 = \'无形资产累计摊销\'")
            End If
            If CurrentTable.DataTable.find(filter & "and 资产项目 = \'流动资产合计\'") IsNot Nothing Then
                CurrentTable.DataTable.find(filter & "And 资产项目 = \'流动资产合计\'")("资产期初金额") = CurrentTable.DataTable.Compute("sum(资产期初金额)",filter & "and 资产项目 in (\'货币资金\',\'短期投资\',\'应收票据\',\'应收账款净值\',\'预付账款\',\'应收股利\',\'应收利息\',\'其他应收款净值\',\'存货\',\'待摊费用\',\'一年内到期的非流动资产\',\'其它流动资产\')")
                CurrentTable.DataTable.find(filter & "And 资产项目 = \'流动资产合计\'")("资产期末金额") = CurrentTable.DataTable.Compute("sum(资产期末金额)",filter & "and 资产项目 in (\'货币资金\',\'短期投资\',\'应收票据\',\'应收账款净值\',\'预付账款\',\'应收股利\',\'应收利息\',\'其他应收款净值\',\'存货\',\'待摊费用\',\'一年内到期的非流动资产\',\'其它流动资产\')")
            End If

end select


--  作者:有点蓝
--  发布时间:2019/4/12 20:23:00
--  
函数在什么地方使用的?按钮事件?表事件?
--  作者:kaituozhe
--  发布时间:2019/4/12 20:39:00
--  

按钮或表事件都可以

 


--  作者:有点蓝
--  发布时间:2019/4/12 20:46:00
--  
如果是表事件,把事件e参数传入函数,和正常表事件一样使用

如果是按钮事件,不需要判断列名,遍历所有行,或者当前行处理即可

--  作者:kaituozhe
--  发布时间:2019/4/12 21:18:00
--  
帮我修改一下吧,黄色的怎么修改?或者采用其他方法
--  作者:有点蓝
--  发布时间:2019/4/12 21:53:00
--  
需要在什么地方用?看4楼
--  作者:kaituozhe
--  发布时间:2019/4/12 21:55:00
--  
在表事件里
--  作者:有点蓝
--  发布时间:2019/4/12 22:29:00
--  
函数
dim e  = Args(0)
‘接着函数的处理和在表事件里面的用法完全一样
If e.DataCol.Name = "身份证号码" Then \'如果更改的是身份证号码列
    If e.DataRow.IsNull("身份证号码"Then \'身份证号码是否为空
        e.
DataRow("出生日期") = Nothing \'如果为空,则清除出生日期
    
Else
    
    \'否则从身份证号码列中提取出生日期
        e.
DataRow("出生日期") = ReadBirthday(e.DataRow("身份证号码"))
    End
 If
End
 
If

事件调用
Functions.Execute("函数名称",e)

--  作者:kaituozhe
--  发布时间:2019/9/1 21:03:00
--  
.NET Framework 版本:4.0.30319.42000
Foxtable 版本:2019.9.2.1
错误所在事件:自定义函数YiBuJiSuan
详细错误信息:
调用的目标发生了异常。
连接未关闭。 连接的当前状态为正在连接。

--  作者:kaituozhe
--  发布时间:2019/9/1 21:08:00
--  

Select Case e.DataCol.name
    Case "楼房编号"
        Dim st As Date = Date.Now \'将开始时间保存在变量st中
        Functions.AsyncEx ecute("YiBuJiSuan",e)

  MessageBox.Show("耗时: " & (Date.Now - st).TotalSeconds & "秒")

end select

执行上述代码时会9楼的提示