Foxtable(狐表)用户栏目专家坐堂 → 会计凭证的设计和录入


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

主题:会计凭证的设计和录入

美女呀,离线,留言给我吧!
采菊东篱下
  71楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10368 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2021/4/26 15:26:00 [只看该作者]

红色代码的定义有问题的,它是窗口上动态生成,动态绑定到财务数据源上的表,执行代码后直接把财务数据源上的日期、凭证号、安日期生成单号辅助列、字号全改为一样了!
Select Case e.StripItem.Name
    Case "保存" '保存代
        If e.Form.Controls("rq").text = "" Then
            messagebox.show("请选择日期")
            Return
        ElseIf Tables("收款凭证_Table1").Compute("Count([贷方科目])") = 0 Then
            Return
        End If
        For Each dt As DataRow In Tables("收款凭证_Table1").DataTable.Select("[贷方科目] Is not null")
            Dim Parts() As String = dt("明细科目").Split("-")
            dt("日期") = e.Form.Controls("rq").text
            dt("凭证号") = e.Form.Controls("dh").text
            dt("安日期生成单号辅助列") = e.Form.Controls("dh1").text
            dt("附件张数") = e.Form.Controls("TextBox1").text
            dt("录入员") = e.Form.Controls("lry").text
            dt("会计科目") = dt("贷方科目") & "-" & dt("明细科目")
            dt("字号") = "收"
            dt("借或贷") = "贷"
            dt("贷方金额") =  dt("金额")
            dt("操作人姓名") = User.Name & " " & Date.Now
            If Parts.length > 0 Then
                dt("二级科目") = Parts(0)
                If Parts.length > 1 Then
                    dt("三级科目") = Parts(1)
                    If Parts.length > 2 Then
                        dt("四级科目") = Parts(2)
                        If Parts.length > 3 Then
                            dt("五级科目") = Parts(3)
                        End If
                    End If
                End If
            End If
            dt.Save
        Next
        'DataTables("财务数据源").LoadOrder = "日期,字号,[借或贷] = '借',凭证号"
        'DataTables("财务数据源").Save()
        DataTables("财务数据源").load
        Dim r As DataRow = DataTables("财务数据源").SQLFind("[字号] = '收' And [日期] = #" & e.Form.Controls("rq").Value & "# And [安日期生成单号辅助列] = '" & e.Form.Controls("dh1").text & "' And [借或贷] = '借'")
        If r Is Nothing Then
            r = DataTables("财务数据源").addnew
        End If
        r("日期") = e.Form.Controls("rq").text
        r("凭证号") = e.Form.Controls("dh").text
        r("借或贷") = "借"
        r("安日期生成单号辅助列") = e.Form.Controls("dh1").text
        r("附件张数") = e.Form.Controls("TextBox1").text
        r("录入员") = e.Form.Controls("lry").text
        r("字号") = "收"
        r("操作人姓名") = User.Name & " " & Date.Now
        r("会计科目") = e.Form.Controls("ComboBox3").Value
        Dim Parts0() As String = r("会计科目").Split("-")
        If Parts0.length > 0 Then
            r("借方科目") = Parts0(0)
            If Parts0.length > 1 Then
                r("二级科目") = Parts0(1)
                If Parts0.length > 2 Then
                    r("二级科目") = Parts0(2)
                End If
            End If
        End If
        r("借方金额") = Tables("收款凭证_Table1").Compute("Sum(金额)")
        r.save
        Dim drs As List(Of DataRow) = DataTables("财务数据源").Select("[字号] = '收' And [日期] = #" & e.Form.Controls("rq").Value & "# And [安日期生成单号辅助列] = '" & e.Form.Controls("dh1").text & "' And [借或贷] = '贷'")
        Dim zheyao As String = ""
        For c As Integer = 0 To drs.count - 1
            zheyao = zheyao & drs(c)("摘要") & ","
        Next
        r("摘要") = zheyao.TrimEnd(",")
        For i As Integer = DataTables("财务数据源").DataRows.count - 1 To 0 Step -1
            Dim tr As DataRow = DataTables("财务数据源").DataRows(i)
            If tr.Isnull("日期") Then
                tr.delete
            End If
        Next
        DataTables("财务数据源").LoadOrder = "日期,字号,[借或贷] = '借',凭证号"
        DataTables("财务数据源").Save()
        DataTables("财务数据源").load
[此贴子已经被作者于2021/4/26 15:43:37编辑过]

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


加好友 发短信
等级:超级版主 帖子:106209 积分:540168 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/4/26 15:36:00 [只看该作者]

有什么问题?窗口表是怎么绑定数据表的?

这句代码去掉,既是错的,也根本没有用处
DataTables("财务数据源").LoadOrder = "日期,[借或贷] = '借',凭证号"

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  73楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10368 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2021/4/26 15:39:00 [只看该作者]

它应该加上[字号] = "收" And  [凭证号] = e.Form.Controls("dh").text 两个条件
For Each dt As DataRow In Tables("收款凭证_Table1").DataTable.Select("[字号] = '收' And [日期] = #" & e.Form.Controls("rq").text & "# And  [凭证号] = '" & e.Form.Controls("dh").text & "' And [贷方科目] Is not null")
但这两个条件在窗口的不同控件上,不在窗口的表里,这样定义行得通吗?另这不是用代码绑定在窗口的表上吗?执行 DataTables("财务数据源").Save()时金额没自动保存。

[此贴子已经被作者于2021/5/2 19:04:08编辑过]

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  74楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10368 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2021/4/26 15:42:00 [只看该作者]

DataTables("财务数据源").LoadOrder = "日期,字号,[借或贷] = '借',凭证号"
这代码有用,财务数据源是分页加载表,加上它安日期、字号、先借、后贷、凭证号排列,显示才正常。

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  75楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10368 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2021/4/26 15:48:00 [只看该作者]

窗口是这样绑定财务数据源表的:
If e.Form.Controls("ComboBox2").text = e.form.controls("combobox2").items(0) And e.Sender.text = e.form.controls("combobox1").items(0) Then
    With Tables("收款凭证_Table1")
        For i As Integer = .Rows.count - 1 To 0 Step -1
            .Rows(i).Delete
        Next
        .DataSource = DataTables("财务数据源")
        .Fill("select * fro m {财务数据源} where [_Identify] Is Null",False)
        .SetColVisibleWidth("摘要|300|贷方科目|100|明细科目|250|金额|100")
        .AddNew(10)
        .Cols("贷方科目").DropForm = "科目"
        .Cols("金额").GrandTotal = True
        .GrandTotal = True
        '设合计二字居中方法一
        'For Each cl As Col In Tables("月租收费_Table1").Cols '设所有列的数据居中
        'cl.TextAlign = TextAlignEnum.Center
        'Next
        '设合计二字居中方法二
        Dim r As Row
        For i As Integer = 0 To .Rows.Count(True) - 1 'Count加上参数True
            r = .Rows(i,True) 'Rows也需要加上参数True
            If r.Level Then '如果是合计行
                .Cols("摘要").TextAlign = TextAlignEnum.Center
            End If
        Next
    End With

以下代码省略

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


加好友 发短信
等级:超级版主 帖子:106209 积分:540168 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/4/26 16:00:00 [只看该作者]

以下是引用采菊东篱下在2021/4/26 15:39:00的发言:
它应该加上[字号] = "收" And  [凭证号] = e.Form.Controls("dh").text 两个条件
For Each dt As DataRow In Tables("收款凭证_Table1").DataTable.Select("[字号] = '收' And  [凭证号] = '" & e.Form.Controls("dh").text & "' And [贷方科目] Is not null")
但这两个条件在窗口的不同控件上,不在窗口的表里,这样定义行得通吗?另这不是用代码绑定在窗口的表上吗?执行 DataTables("财务数据源").Save()时金额没自动保存。

定义没有问题。

DataTables("财务数据源").Save()保存的是主表,不是窗口表。

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


加好友 发短信
等级:超级版主 帖子:106209 积分:540168 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/4/26 16:01:00 [只看该作者]

以下是引用采菊东篱下在2021/4/26 15:42:00的发言:
DataTables("财务数据源").LoadOrder = "日期,字号,[借或贷] = '借',凭证号"
这代码有用,财务数据源是分页加载表,加上它安日期、字号、先借、后贷、凭证号排列,显示才正常。

排序不是条件,不要乱用

DataTables("财务数据源").LoadOrder = "日期,字号,[借或贷],凭证号"

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  78楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10368 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2021/4/26 16:05:00 [只看该作者]

Tables("收款凭证_Table1").DataTable
窗口上的表绑定了财务数据源,它相当于DataTables("财务数据源")吗?如果相当,为何执行DataTables("财务数据源").Save(),窗口中的金额没自动保存到财务数据源表的金额列中?

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


加好友 发短信
等级:超级版主 帖子:106209 积分:540168 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/4/26 16:21:00 [只看该作者]

Tables("收款凭证_Table1").fill(......之后,窗口表就是一个独立的表,虽然数据都来自同一个内部数据库表,但是Tables("收款凭证_Table1")表和DataTables("财务数据源")表之间的操作是互相独立的,互不影响。DataTables("财务数据源").Save()并不会保存窗口表更改的数据

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  80楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10368 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2021/4/26 21:32:00 [只看该作者]

我要实现先借,后贷顺序怎实现?
DataTables("财务数据源").LoadOrder = "日期,字号,[借或贷],凭证号"

 回到顶部