以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 选单问题 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=171025) |
|
-- 作者:采菊东篱下 -- 发布时间:2021/8/14 17:13:00 -- 选单问题 有两个表,一个出纳数据记账源、一个财务数据源,现我想做一个点击收、付款凭证窗品中的金额列单元格或点后台数据源表中的金额列单元格都能弹出共用的选单窗口,选单窗口中的表绑定出纳数据记账源表,并添加未选余额、本次外币录入金额、本次录入金额三列临时列,通过在选单窗口中的本次外币录入金额、本次录入金额输入数据后,双击或回车把数据录入收、付款凭证金额。 我在会计选出纳账数据窗口中的AfterLoad事件写入: If e.Form.DropTable IsNot Nothing Then Select Case e.Form.DropTable.Name Case "财务数据源" Tables("会计选出纳账数据_Table1").SetColVisibleWidth("日期|60|出纳入账顺序号|40|摘要|250|会计科目|80|明细科目|150|币种|50|借方_外币金额|80|借方_金额|80|贷方_外币金额|80|贷方_金额|80") Dim ckb As DataTable = e.Form.Controls("Table1").Table.DataTable If ckb.DataCols.Contains("未选余额") = False And ckb.DataCols.Contains("本次外币录入金额") = False And ckb.DataCols.Contains("本次录入金额") = False Then ckb.DataCols.add("未选余额", Gettype(Double)) ckb.DataCols.add("本次外币录入金额", Gettype(Double)) ckb.DataCols.add("本次录入金额", Gettype(Double)) End If With Tables("会计选出纳账数据_Table1") .Cols("未选余额").Width = 80 .Cols("本次外币录入金额").Width = 80 .Cols("本次录入金额").Width = 80 End With With DataTables("会计选出纳账数据_Table1") .DataCols("借方_外币金额").SetFormat("#,###.##") .DataCols("借方_金额").SetFormat("#,###.##") .DataCols("贷方_外币金额").SetFormat("#,###.##") .DataCols("贷方_金额").SetFormat("#,###.##") .DataCols("未选余额").SetFormat("#,###.##") .DataCols("本次外币录入金额").SetFormat("#,###.##") .DataCols("本次录入金额").SetFormat("#,###.##") End With End Select Else Select Case e.Form.DropDownBox.Form.Name Case "出纳录入收款数据" If Forms("出纳录入收款数据").Controls("ComboBox1").text = Forms("出纳录入收款数据").Controls("ComboBox1").Items(0) Then Tables("会计选出纳账数据_Table1").SetColVisibleWidth("日期|60|出纳入账顺序号|40|摘要|250|会计科目|80|明细科目|150|借方_金额|80") ElseIf Forms("出纳录入收款数据").Controls("ComboBox1").text = Forms("出纳录入收款数据").Controls("ComboBox1").Items(1) Then Tables("会计选出纳账数据_Table1").SetColVisibleWidth("日期|60|出纳入账顺序号|40|摘要|250|会计科目|80|明细科目|150|币种|50|借方_外币金额|80|借方_金额|80") End If Dim ckb As DataTable = e.Form.Controls("Table1").Table.DataTable If ckb.DataCols.Contains("未选余额") = False And ckb.DataCols.Contains("本次外币录入金额") = False And ckb.DataCols.Contains("本次录入金额") = False Then ckb.DataCols.add("未选余额", Gettype(Double)) ckb.DataCols.add("本次外币录入金额", Gettype(Double)) ckb.DataCols.add("本次录入金额", Gettype(Double)) End If With Tables("会计选出纳账数据_Table1") .Cols("未选余额").Width = 80 .Cols("本次外币录入金额").Width = 80 .Cols("本次录入金额").Width = 80 End With With DataTables("会计选出纳账数据_Table1") .DataCols("借方_外币金额").SetFormat("#,###.##") .DataCols("借方_金额").SetFormat("#,###.##") .DataCols("未选余额").SetFormat("#,###.##") .DataCols("本次外币录入金额").SetFormat("#,###.##") .DataCols("本次录入金额").SetFormat("#,###.##") End With Case "出纳录入支出数据" If Forms("出纳录入支出数据").Controls("ComboBox1").text = Forms("出纳录入支出数据").Controls("ComboBox1").Items(0) Then Tables("会计选出纳账数据_Table1").SetColVisibleWidth("日期|60|出纳入账顺序号|40|摘要|250|会计科目|80|明细科目|150|贷方_金额|80") ElseIf Forms("出纳录入支出数据").Controls("ComboBox1").text = Forms("出纳录入支出数据").Controls("ComboBox1").Items(1) Then Tables("会计选出纳账数据_Table1").SetColVisibleWidth("日期|60|出纳入账顺序号|40|摘要|250|会计科目|80|明细科目|150|币种|50|贷方_外币金额|80|贷方_金额|80") End If Dim ckb As DataTable = e.Form.Controls("Table1").Table.DataTable If ckb.DataCols.Contains("未选余额") = False And ckb.DataCols.Contains("本次外币录入金额") = False And ckb.DataCols.Contains("本次录入金额") = False Then ckb.DataCols.add("未选余额", Gettype(Double)) ckb.DataCols.add("本次外币录入金额", Gettype(Double)) ckb.DataCols.add("本次录入金额", Gettype(Double)) End If With Tables("会计选出纳账数据_Table1") .Cols("未选余额").Width = 80 .Cols("本次外币录入金额").Width = 80 .Cols("本次录入金额").Width = 80 End With With DataTables("会计选出纳账数据_Table1") .DataCols("贷方_外币金额").SetFormat("#,###.##") .DataCols("贷方_金额").SetFormat("#,###.##") .DataCols("未选余额").SetFormat("#,###.##") .DataCols("本次外币录入金额").SetFormat("#,###.##") .DataCols("本次录入金额").SetFormat("#,###.##") End With End Select End If DropDownClosed事件中写入: If e.Selected Then \'如果选择了值 Dim tbl As Table = Tables("会计选出纳账数据_Table1") If tbl.Current IsNot Nothing Then Select Case e.Form.DropTable.Name Case "财务数据源" If Tables("财务数据源").Current("字号") = "现收" Or Tables("财务数据源").Current("字号") = "银收" Then e.Form.DropDownBox.Value = tbl.Current("本次录入金额") Tables("财务数据源_Table1").Current("外币金额") = tbl.Current("本次外币录入金额") Tables("财务数据源_Table1").Current("借方金额") = tbl.Current("本次录入金额") Tables("财务数据源_Table1").Current("外币借方金额") = tbl.Current("本次外币录入金额") ElseIf Tables("财务数据源").Current("字号") = "现付" Or Tables("财务数据源").Current("字号") = "银付" Then e.Form.DropDownBox.Value = tbl.Current("本次录入金额") Tables("财务数据源_Table1").Current("外币金额") = tbl.Current("本次外币录入金额") Tables("财务数据源_Table1").Current("贷方金额") = tbl.Current("本次录入金额") Tables("财务数据源_Table1").Current("外币贷方金额") = tbl.Current("本次外币录入金额") End If If e.Form.DropTable IsNot Nothing Then \'如果是通过表下拉的 e.Form.DropTable.FinishEditing() Else \'如果是通过窗口下拉的 e.Form.DropDownBox.WriteValue() End If End Select End If Select Case e.Form.DropDownBox.Form.Name Case "收款凭证" If Forms("收款凭证").Controls("ComboBox1").text = Forms("收款凭证").Controls("ComboBox1").Items(0) Then e.Form.DropDownBox.Value = tbl.Current("本次录入金额") ElseIf Forms("收款凭证").Controls("ComboBox1").text = Forms("收款凭证").Controls("ComboBox1").Items(1) Then e.Form.DropDownBox.Value = tbl.Current("本次录入金额") Tables("收款凭证_Table1").Current("外币金额") = tbl.Current("本次外币录入金额") End If If e.Form.DropTable IsNot Nothing Then \'如果是通过表下拉的 e.Form.DropTable.FinishEditing() Else \'如果是通过窗口下拉的 e.Form.DropDownBox.WriteValue() End If Case "付款凭证" If Forms("付款凭证").Controls("ComboBox1").text = Forms("付款凭证").Controls("ComboBox1").Items(0) Then e.Form.DropDownBox.Value = tbl.Current("本次录入金额") ElseIf Forms("付款凭证").Controls("ComboBox1").text = Forms("付款凭证").Controls("ComboBox1").Items(1) Then e.Form.DropDownBox.Value = tbl.Current("本次录入金额") Tables("付款凭证_Table1").Current("外币金额") = tbl.Current("本次外币录入金额") End If If e.Form.DropTable IsNot Nothing Then \'如果是通过表下拉的 e.Form.DropTable.FinishEditing() Else \'如果是通过窗口下拉的 e.Form.DropDownBox.WriteValue() End If End Select End If 总是提示:不存在会计选出纳账数据_Table1 .NET Framework 版本:4.0.30319.17929 Foxtable 版本:2021.5.29.1 错误所在事件:AfterLoad 详细错误信息: Object reference not set to an instance of an object. 及: .NET Framework 版本:4.0.30319.17929 Foxtable 版本:2021.5.29.1 错误所在事件:DropDownClosed 详细错误信息: Object reference not set to an instance of an object. 关闭窗口,却又看到我要实现的窗口,主要原因是出纳数据记账源目前未录入数据,它是空表,请教应如何消除空表的报错? [此贴子已经被作者于2021/8/14 17:14:17编辑过]
|
|
-- 作者:有点蓝 -- 发布时间:2021/8/14 17:22:00 -- 请先调试,然后指出是哪一句代码出错? 1、窗口名称不是:会计选出纳账数据 2、窗口表控件名称不是:Table1 3、这个窗口表表类型不是副本,或者sqltable。而是normal表:http://www.foxtable.com/webhelp/topics/1905.htm
|
|
-- 作者:采菊东篱下 -- 发布时间:2021/8/14 20:53:00 -- AfterLoad事件: With Tables("会计选出纳账数据_Table1") Dim cmd As New SQLCommand Dim dt As DataTable cmd.CommandText = "Select 日期,出纳入账顺序号,摘要,会计科目,明细科目,币种,借方_外币金额,借方_金额,贷方_外币金额,贷方_金额 fr om {出纳数据记账源} Where [核对] = False Or [核对] Is Null" dt = cmd.ExecuteReader() .DataSource = dt Dim ckb As DataTable = e.Form.Controls("Table1").Table.DataTable If ckb.DataCols.Contains("未选余额") = False And ckb.DataCols.Contains("本次外币录入金额") = False And ckb.DataCols.Contains("本次录入金额") = False Then ckb.DataCols.add("未选余额", Gettype(Double)) ckb.DataCols.add("本次外币录入金额", Gettype(Double)) ckb.DataCols.add("本次录入金额", Gettype(Double)) End If DataTables("会计选出纳账数据_Table1").DataCols("借方_外币金额").SetFormat("#,###.##") DataTables("会计选出纳账数据_Table1").DataCols("借方_金额").SetFormat("#,###.##") DataTables("会计选出纳账数据_Table1").DataCols("贷方_外币金额").SetFormat("#,###.##") DataTables("会计选出纳账数据_Table1").DataCols("贷方_金额").SetFormat("#,###.##") DataTables("会计选出纳账数据_Table1").DataCols("未选余额").SetFormat("#,###.##") DataTables("会计选出纳账数据_Table1").DataCols("本次外币录入金额").SetFormat("#,###.##") DataTables("会计选出纳账数据_Table1").DataCols("本次录入金额").SetFormat("#,###.##") If e.Form.DropTable IsNot Nothing Then Select Case e.Form.DropTable.Name Case "财务数据源" .SetColVisibleWidth("日期|60|出纳入账顺序号|40|摘要|250|会计科目|80|明细科目|150|币种|50|借方_外币金额|80|借方_金额|80|贷方_外币金额|80|贷方_金额|80|未选余额|80|本次外币录入金额|80|本次录入金额|80") Case "收款凭证_Table1" If Forms("收款凭证").Controls("ComboBox2").text = Forms("收款凭证").Controls("ComboBox2").Items(0) Then .SetColVisibleWidth("日期|60|出纳入账顺序号|40|摘要|250|会计科目|80|明细科目|150|借方_金额|80|未选余额|80|本次录入金额|80") ElseIf Forms("收款凭证").Controls("ComboBox2").text = Forms("收款凭证").Controls("ComboBox2").Items(1) Then .SetColVisibleWidth("日期|60|出纳入账顺序号|40|摘要|250|会计科目|80|明细科目|150|币种|50|借方_外币金额|80|借方_金额|80|未选余额|80|本次外币录入金额|80|本次录入金额|80") End If Case "付款凭证_Table1" If Forms("付款凭证").Controls("ComboBox2").text = Forms("付款凭证").Controls("ComboBox2").Items(0) Then .SetColVisibleWidth("日期|60|出纳入账顺序号|40|摘要|250|会计科目|80|明细科目|150|贷方_金额|80|未选余额|80|本次录入金额|80") ElseIf Forms("付款凭证").Controls("ComboBox2").text = Forms("付款凭证").Controls("ComboBox2").Items(1) Then .SetColVisibleWidth("日期|60|出纳入账顺序号|40|摘要|250|会计科目|80|明细科目|150|币种|50|贷方_外币金额|80|贷方_金额|80|未选余额|80|本次外币录入金额|80|本次录入金额|80") End If End Select .AutoSizeRows .SetHeaderRowHeight(20) End If End With DropDownClosed事件 If e.Selected Then \'如果选择了值 Dim tbl As Table = Tables("会计选出纳账数据_Table1") If tbl.Current IsNot Nothing Then Select Case e.Form.DropTable.Name Case "财务数据源" With Tables("财务数据源") If .Current("字号") = "现收" Or .Current("字号") = "银收" And (tbl.Current.IsNull("本次录入金额") = False Or tbl.Current.IsNull("本次外币录入金额") = False) Then e.Form.DropDownBox.Value = tbl.Current("本次录入金额") .Current("外币金额") = tbl.Current("本次外币录入金额") .Current("借方金额") = tbl.Current("本次录入金额") .Current("外币借方金额") = tbl.Current("本次外币录入金额") ElseIf .Current("字号") = "现付" Or .Current("字号") = "银付" And (tbl.Current.IsNull("本次录入金额") = False Or tbl.Current.IsNull("本次外币录入金额") = False) Then e.Form.DropDownBox.Value = tbl.Current("本次录入金额") .Current("外币金额") = tbl.Current("本次外币录入金额") .Current("贷方金额") = tbl.Current("本次录入金额") .Current("外币贷方金额") = tbl.Current("本次外币录入金额") End If If e.Form.DropTable IsNot Nothing Then \'如果是通过表下拉的 e.Form.DropTable.FinishEditing() Else \'如果是通过窗口下拉的 e.Form.DropDownBox.WriteValue() End If End With Case "收款凭证_Table1" If Forms("收款凭证").Controls("ComboBox1").text = Forms("收款凭证").Controls("ComboBox1").Items(0) And tbl.Current.IsNull("本次录入金额") = False Then e.Form.DropDownBox.Value = tbl.Current("本次录入金额") ElseIf Forms("收款凭证").Controls("ComboBox1").text = Forms("收款凭证").Controls("ComboBox1").Items(1) And tbl.Current.IsNull("本次录入金额") = False And tbl.Current.IsNull("本次外币录入金额") = False Then e.Form.DropDownBox.Value = tbl.Current("本次录入金额") Tables("收款凭证_Table1").Current("外币金额") = tbl.Current("本次外币录入金额") End If If e.Form.DropTable IsNot Nothing Then \'如果是通过表下拉的 e.Form.DropTable.FinishEditing() Else \'如果是通过窗口下拉的 e.Form.DropDownBox.WriteValue() End If Case "付款凭证_Table1" If Forms("付款凭证").Controls("ComboBox1").text = Forms("付款凭证").Controls("ComboBox1").Items(0) And tbl.Current.IsNull("本次录入金额") = False Then e.Form.DropDownBox.Value = tbl.Current("本次录入金额") ElseIf Forms("付款凭证").Controls("ComboBox1").text = Forms("付款凭证").Controls("ComboBox1").Items(1) And tbl.Current.IsNull("本次录入金额") = False And tbl.Current.IsNull("本次外币录入金额") = False Then e.Form.DropDownBox.Value = tbl.Current("本次录入金额") Tables("付款凭证_Table1").Current("外币金额") = tbl.Current("本次外币录入金额") End If If e.Form.DropTable IsNot Nothing Then \'如果是通过表下拉的 e.Form.DropTable.FinishEditing() Else \'如果是通过窗口下拉的 e.Form.DropDownBox.WriteValue() End If End Select End If End If 问题解决了。 [此贴子已经被作者于2021/8/15 19:36:45编辑过]
|
|
-- 作者:采菊东篱下 -- 发布时间:2021/8/15 22:40:00 -- 能不能在财务数据源表如果会计科目不是1001 库存现金或1002 银行存款就不显示下拉窗口,或下拉窗口没数据显示?我红色代码这样写好象不对。 With Tables("会计选出纳账数据_Table1") Dim cmd As New SQLCommand Dim dt As DataTable cmd.CommandText = "Select 日期,出纳入账顺序号,安日期生成单号辅助列,摘要,会计科目,明细科目,币种,借方_外币金额,借方_金额,贷方_外币金额,贷方_金额 fr om {出纳数据记账源} Where [核对] = False Or [核对] Is Null" dt = cmd.ExecuteReader() .DataSource = dt Dim ckb As DataTable = e.Form.Controls("Table1").Table.DataTable If ckb.DataCols.Contains("未选余额") = False And ckb.DataCols.Contains("本次外币录入金额") = False And ckb.DataCols.Contains("本次录入金额") = False Then ckb.DataCols.add("未选余额", Gettype(Double)) ckb.DataCols.add("本次外币录入金额", Gettype(Double)) ckb.DataCols.add("本次录入金额", Gettype(Double)) End If DataTables("会计选出纳账数据_Table1").DataCols("借方_外币金额").SetFormat("#,###.##") DataTables("会计选出纳账数据_Table1").DataCols("借方_金额").SetFormat("#,###.##") DataTables("会计选出纳账数据_Table1").DataCols("贷方_外币金额").SetFormat("#,###.##") DataTables("会计选出纳账数据_Table1").DataCols("贷方_金额").SetFormat("#,###.##") DataTables("会计选出纳账数据_Table1").DataCols("未选余额").SetFormat("#,###.##") DataTables("会计选出纳账数据_Table1").DataCols("本次外币录入金额").SetFormat("#,###.##") DataTables("会计选出纳账数据_Table1").DataCols("本次录入金额").SetFormat("#,###.##") If e.Form.DropTable IsNot Nothing Then Select Case e.Form.DropTable.Name Case "财务数据源" If Tables("财务数据源").Current("会计科目") = "1001 库存现金" Or Tables("财务数据源").Current("会计科目") = "1002 银行存款" Then .SetColVisibleWidth("日期|60|出纳入账顺序号|50|安日期生成单号辅助列|100|摘要|250|会计科目|80|明细科目|150|币种|50|借方_外币金额|80|借方_金额|80|贷方_外币金额|80|贷方_金额|80|未选余额|80|本次外币录入金额|80|本次录入金额|80") End If Case "收款凭证_Table1" If Forms("收款凭证").Controls("ComboBox2").text = Forms("收款凭证").Controls("ComboBox2").Items(0) Then .SetColVisibleWidth("日期|60|出纳入账顺序号|50|安日期生成单号辅助列|100|摘要|250|会计科目|80|明细科目|150|借方_金额|80|未选余额|80|本次录入金额|80") ElseIf Forms("收款凭证").Controls("ComboBox2").text = Forms("收款凭证").Controls("ComboBox2").Items(1) Then .SetColVisibleWidth("日期|60|出纳入账顺序号|50|安日期生成单号辅助列|100|摘要|250|会计科目|80|明细科目|150|币种|50|借方_外币金额|80|借方_金额|80|未选余额|80|本次外币录入金额|80|本次录入金额|80") End If Case "付款凭证_Table1" If Forms("付款凭证").Controls("ComboBox2").text = Forms("付款凭证").Controls("ComboBox2").Items(0) Then .SetColVisibleWidth("日期|60|出纳入账顺序号|50|安日期生成单号辅助列|100|摘要|250|会计科目|80|明细科目|150|贷方_金额|80|未选余额|80|本次录入金额|80") ElseIf Forms("付款凭证").Controls("ComboBox2").text = Forms("付款凭证").Controls("ComboBox2").Items(1) Then .SetColVisibleWidth("日期|60|出纳入账顺序号|50|安日期生成单号辅助列|100|摘要|250|会计科目|80|明细科目|150|币种|50|贷方_外币金额|80|贷方_金额|80|未选余额|80|本次外币录入金额|80|本次录入金额|80") End If End Select .AutoSizeRows .SetHeaderRowHeight(45) End If End With
|
|
-- 作者:有点蓝 -- 发布时间:2021/8/15 22:54:00 -- "财务数据源"prepareedit事件 If e.IsFocusCell Then If e.Col.Name = "某下拉窗口列" AndAlso (e.Row("会计科目") = "1001 库存现金" orelse e.Row("会计科目") = "1002 银行存款") Then e.Col.DropForm = "某下拉窗口" Else e.Col.DropForm = Nothing End If End If |
|
-- 作者:采菊东篱下 -- 发布时间:2021/8/15 23:14:00 -- 这样写连当前行会计科目为空的下拉窗口都没了,不行。 |
|
-- 作者:采菊东篱下 -- 发布时间:2021/8/15 23:45:00 -- 改为这样可以了: If e.IsFocusCell Then If e.Col.Name = "金额" AndAlso (e.Row("会计科目") = "1001 库存现金" OrElse e.Row("会计科目") = "1002 银行存款") Then e.Col.DropForm = "会计选出纳账数据" ElseIf e.Col.Name = "金额" AndAlso (e.Row("会计科目") <> "1001 库存现金" OrElse e.Row("会计科目") <> "1002 银行存款") Then e.Col.DropForm = Nothing End If End If |
|
-- 作者:采菊东篱下 -- 发布时间:2021/8/16 11:55:00 -- 我想计算当前表中的未选余额(注:弹出的选单表) 这样写在DropDownOpened事件中报错 Dim dr As Row = CurrentTable.Current If e.Form.DropTable IsNot Nothing Then Select Case e.Form.DropTable.Name Case "财务数据源" dr("未选余额") = DataTables("出纳数据记账源").Compute("Sum(借方_金额)", "[出纳入账顺序号] =\'" & dr("出纳入账顺序号") & "\'And [安日期生成单号辅助列] = \'" & dr("安日期生成单号辅助列") & "\'") _ - DataTables("财务数据源").Compute("Sum(金额)", "[出纳入账顺序号] =\'" & dr("出纳入账顺序号") & "\'And [出纳账安日期生成单号辅助列] = \'" & dr("安日期生成单号辅助列") & "\' And [借或贷] = \'" & dr("借或贷") & "\'") Case "收款凭证_Table1" dr("未选余额") = DataTables("出纳数据记账源").Compute("Sum(借方_金额)", "[出纳入账顺序号] =\'" & dr("出纳入账顺序号") & "\'And [安日期生成单号辅助列] = \'" & dr("安日期生成单号辅助列") & "\'") _ - Tables("收款凭证_Table1").Compute("Sum(金额)") Case "付款凭证_Table1" dr("未选余额") = DataTables("出纳数据记账源").Compute("Sum(借方_金额)", "[出纳入账顺序号] =\'" & dr("出纳入账顺序号") & "\'And [安日期生成单号辅助列] = \'" & dr("安日期生成单号辅助列") & "\'") _ - Tables("付款凭证_Table1").Compute("Sum(金额)") End Select End If |
|
-- 作者:有点蓝 -- 发布时间:2021/8/16 13:45:00 -- Dim dr As Row = CurrentTable.Current if dr isnot nothing then If e.Form.DropTable IsNot Nothing Then
|
|
-- 作者:采菊东篱下 -- 发布时间:2022/4/8 17:32:00 --
|