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


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

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

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


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

.Fill("select * fro m {财务数据源} where [_Identify] Is Null",False)
.AllowEdit = True

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


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

我回看月租收费窗口这样写,缴费情况表不是即时产生数据,要保存后才有数据显示,保存代码也简单,收款凭证删除DataSource代码后,保存代码我还没改,要象财务数据源表DoubleClick事件的收款凭证代码那样分别四种格式各自写代码,感觉累赘,如果红色代码没问题,我觉这方法更简洁。
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:小区车辆管理(0428).rar

密码:888888
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("住址_序号|40|住址_巷|60|住址_号|40|住址_房|40|姓名|50|固定电话|70|手机号码|75|车牌号码|75|备注|140|缴费_月租_起计日期|85|缴费_月租_止计日期|85|缴费_月租_缴费月数|40|缴费_月租_月租单价|40|缴费_月租_缴费金额|50")
    .SetHeaderRowHeight(0,0,45)
    .AddNew(10)
    .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 '如果是合计行
            Tables("月租收费_Table1").Cols("住址_巷").TextAlign = TextAlignEnum.Center
        End If
    Next

'打开目录树.下拉选项'
e.Form.Controls("Table1").Table.Cols("车牌号码").DropForm = "车牌目录树"
e.Form.Controls("Table1").Table.Cols("缴费_月租_起计日期").UsetBuildInEditor = True
e.Form.Controls("Table1").Table.Cols("缴费_月租_止计日期").UsetBuildInEditor = True
e.Form.Controls("lry").text = User.name
End With

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


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

下面代码使用其中一个即可,放到一起,第一句是没有任何作用的

    .DataSource = DataTables("缴费情况")
    .Fill("select * fro m {缴费情况} where [_Identify] Is Null",False)

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


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

  我又经过一天的修修改改,还是绕回来,因为只有这样写才得到我要的效果,也终于能说出我这样写所表达的意思:
  在窗口  .Fill("select * fro m {缴费情况} where [_Identify] Is Null",False)录入数据没保存前, 它.DataSource = DataTables("缴费情况")绑定的缴费情况表显示的数据是没保存前的数据,保存后窗口表执行DataSource属性把窗口上的数据完整保存或替代到缴费情况表上,不会象单纯用.DataSource方法保存数据直接影响后台数据,给多人同时操作,统计数据时带来错误,也不会象单纯用.Fill方法保存出现重复录入,删除窗口上已保存的某行数据后再保存,缴费情况表上依然存在等问题,它既满足保存录入要求,也满足绑定表特性,我觉得这方法可行。
[此贴子已经被作者于2021/4/29 13:52:40编辑过]

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


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

我还没把代码改回来,希望看到你的意见。

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


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

比如有一间房子,我们理解为数据库。房子只有一个出口,出口大小是固定的,所以如果入出库的东西多,搬进搬出肯定会有影响,有个先来后到,数据库数据的存储也是如此。

为了方便用户挑选货物,在房子四周摆了很多密封的货架,这个货架就是主表DataTables("xxx),一个货架对应一个datatable,货架可以放一种商品部分(按条件加载)也可以放全部(全部加载)物品。货架是密封的,用户也直接看不到里面的东西,所以在货架一边开了一个洞,这个洞就是Tables("表A),也就是界面看到的表格,编辑表格就是通过洞口拿放货架的物品。

但是有时候一个洞口不够用,甲在拿东西,乙也想拿,所以就在另外一边也开了一个洞口(.DataSource = DataTables("xxx")),2个洞口不管谁拿物品,都会影响对方,所以设置DataSource 就是一个副本,一个主表可以有N个副本,一个货架可以开N个洞口。

但是洞口太高,小孩子够不着,所以在货架旁边放一个显示器(就是Fill的作用)给小孩子看,可以通过摄像头实时查看货架里的物品。显示器有2种,一种只能看(.Fill("select * fro m {xxx}",true),等同于sqlquery查询表),避免熊孩子乱买东西,就是Fiil成一个查询表;一种可以挑选物品到购物车里(.Fill("select * fro m {xxx} ",False),等同于sqltable数据表),挑选显示器物品的时候是不会影响到货架里的货品的,大人也看不到货架里的一个玩具被熊孩子添加到购物车了,也就是Fill的表格编辑不会影响主表DataTables("xxx),只有在显示器里点击确定(保存)后,由工作人员即时从货架里把物品拿出来。

重复录入的原因就是因为做了重复的操作,比如通过显示器操作寄卖了10个苹果,确定(保存)后,工作人员就把10个苹果放到货架里了,但是你貌似不放心,又亲自把另外10个苹果直接塞到货架里了(遍历新增)

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


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

  用.Fill方法主要问题出现在修改后重新保存,它必须保证被修改数据不是作为判断的条件,如产品名称、规格,你把它俩都变了,又如何判断是否存在,既不存在,就作没有自动添加,同理删除已保存的数据,窗口上已不存在此数据,何来判断?也不会平白无辜地帮你删除数据,总得有指定条件,让程序作出判断才会删除吧?因此此方法不如绑定后台数据表方便,.DataSource方法唯一不好就是未保存便影响后台数据,这是企业要求数据及时、准确、连续所不许的,所以两者结合是很好的良配。
[此贴子已经被作者于2021/4/29 16:44:19编辑过]

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


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

还是没有理解。

.Fill方法是直接按原表数据保存的,正确的说是根据主键保存,而主键是无法更改的,肯定存在,不需要做任何判断。在.Fill里保存和在主表里编辑保存是完全一样的,按您这么说明主表也无法保存了?

把fill看做是一个主表一样用就行了

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


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

我昨天用.Fill方法保存数据,原来的代码无法保存,也就是说不能直接保存窗口上的数据:
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

必须通过定义财务数据源表的行引用

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


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

不能这样写:
    .Fill("select * fro m {财务数据源} where [_Identify] Is Null",False)
一定要改为这样吗?
Tables("窗口1_Table1").Fill("Select [_Identify],[摘要],[贷方科目],[明细科目],[金额] Fro m {财务数据源}",False)

[此贴子已经被作者于2021/4/29 17:29:20编辑过]

 回到顶部