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


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

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

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


加好友 发短信
等级:八尾狐 帖子:1881 积分:10368 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2021/6/12 16:54:00 [显示全部帖子]

始终保存一下增加一行借方数据

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


加好友 发短信
等级:八尾狐 帖子:1881 积分:10368 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2021/6/12 18:02:00 [显示全部帖子]

不修改任何数据,直接点两下保存,都会添加一行借方数据。

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


加好友 发短信
等级:八尾狐 帖子:1881 积分:10368 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2021/6/12 21:06:00 [显示全部帖子]

再加一个条件,删除原来的借方数据重新生成新行,已经解决重复录入问题了。
[此贴子已经被作者于2021/6/12 21:22:59编辑过]

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


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

我想把修改日期或删除单号后缺失的凭证号重新自动补上,现在Select语句报错:
e.Sender.WriteValue()
Dim yzdh As WinForm.TextBox = e.Form.Controls("dh")'dh是单号控件
Dim yzdh1 As WinForm.TextBox = e.Form.Controls("dh1")'dh是单号控件
Dim di As String = yzdh.Value 'di单号控件中的变量
Dim di1 As String = yzdh1.Value 'di单号控件中的变量
Dim d As Date  = e.Sender.Value
Dim y As Integer = d.Year
Dim m As Integer = d.Month
Dim Days As Integer = Date.DaysInMonth(y,m)
Dim fd As Date = New Date(y,m,1) '获得该月的第一天
Dim ld As Date = New Date(y,m,Days) '获得该月的最后一天
Dim Max0 As String
Dim max1 As String
Dim idx As Integer
Dim idx1 As Integer
Dim s As String = e.Form.Controls("TextBox2").text
If s.length > 2 Then
    s = s.SubString(0,2)
    Dim flt As String = "[字号] = '" & s & "' And [日期] >= #" & fd & "# And [日期] <= #" & ld & "#"
    Dim bh As String = s & "-" & Format(d,"yyyyMM") & "-" '生成编号的前缀
    Dim dts As Integer = DataTables("财务数据源").Compute("Count([会计科目])","[字号] = '" & s & "' And [日期] >= #" & fd & "# And [日期] <= #" & ld & "# And [凭证号] = '" & di & "'")
    If e.Sender.value IsNot Nothing And dts = 0 Then
        Dim kh As String
        Dim cmd As New SQLCommand
        cmd.CommandText = "Select DISTINCT MIN(凭证号) FR OM {财务数据源} Where 凭证号 NOT IN (SELECT DISTINCT 凭证号 FR OM {财务数据源} Where 日期 BETWEEN #" & fd & "# And #" & ld & "# Group By 字号 HAVING 字号 = '" & s & "')"
        kh = cmd.ExecuteScalar()
        If kh > 0 Then
            di = kh
            yzdh.Value = di
            idx1 = CInt(kh)
            di1 = bh & Format(idx1,"00000")
            yzdh1.Value = di1
        Else
            Max0 = DataTables("财务数据源").Compute("Max(凭证号)",flt) '取得该月的相同工程代码的最大单据编号
            If Max0 > "" Then '如果存在最大单据编号
                idx = CInt(Max0) + 1 '获得最大单据编号的后四位顺序号,并加1
            Else
                idx = 1 '否则顺序号等于1
            End If
            di = idx
            yzdh.Value = di
            Dim dts1 As Integer = DataTables("财务数据源").Compute("Count([会计科目])","[字号] = '" & s & "' And [日期] >= #" & fd & "# And [日期] <= #" & ld & "# And [安日期生成单号辅助列] = '" & di1 & "'")
            If e.Sender.value IsNot Nothing And dts1 = 0 Then
                max1 = DataTables("财务数据源").Compute("Max(安日期生成单号辅助列)",flt) '取得该月的相同工程代码的最大单据编号
                If max1 > "" Then '如果存在最大单据编号
                    idx1 = CInt(max1.Substring(10,5)) + 1 '获得最大单据编号的后五位顺序号,并加1
                Else
                    idx1 = 1 '否则顺序号等于1
                End If
                di1 = bh & Format(idx1,"00000")
                yzdh1.Value = di1
            End If
            messageBox.show(yzdh1.Value)
        End If
    End If
End If
[此贴子已经被作者于2021/6/15 11:30:08编辑过]

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


加好友 发短信
等级:八尾狐 帖子:1881 积分:10368 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2021/6/15 12:15:00 [显示全部帖子]

在财务数据源表中因为有借、贷方凭证号,肯定会出现重复凭证号的,这DISTINCT不能省略吧?

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


加好友 发短信
等级:八尾狐 帖子:1881 积分:10368 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2021/6/15 21:51:00 [显示全部帖子]


图片点击可在新窗口打开查看此主题相关图片如下:0615.png
图片点击可在新窗口打开查看

当修改dh控件的凭证号,dh1自动生成以凭证号结尾的安日期生成单号的辅助号,我这样写红色标注代码报错。
Dim ydh1 As String = Forms("收款凭证").Controls("dh1").text
Dim d As Date  = e.Form.Controls("rq").Value
Dim y As Integer = d.Year
Dim m As Integer = d.Month
Dim Days As Integer = Date.DaysInMonth(y,m)
Dim fd As Date = New Date(y,m,1) '获得该月的第一天
Dim ld As Date = New Date(y,m,Days) '获得该月的最后一天
Dim s As String = e.Form.Controls("TextBox2").text
If s.length > 2 Then
    s = s.SubString(0,2)
    If e.Sender.Value = e.NewValue Then
        Dim cmd As New SQLCommand
        cmd.CommandText = "Select count(*) Fro m {财务数据源} Where [字号] = '" & s & "' And [日期] >= #" & fd & "# And [日期] <= #" & ld & "# And [凭证号] = '" & e.NewValue & "'"
        If cmd.ExecuteScalar > 0 Then
            e.Cancel = True
        Else
            Dim bh As String = s & "-" & Format(d,"yyyyMM") & "-" '生成编号的前缀
            Dim idx1 As Integer = CInt(e.NewValue)
            ydh1 = bh & Format(idx1,"00000")
            MessageBox.Show(ydh1)
        End If
    End If
End If


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


加好友 发短信
等级:八尾狐 帖子:1881 积分:10368 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2021/6/16 13:59:00 [显示全部帖子]

如144楼截图,rq控件的Validating事件,原来的代码是这样的:
Dim ydh As String = Forms("收款凭证").Controls("dh").text
Dim ydh1 As String = Forms("收款凭证").Controls("dh1").text
If ydh > "" And ydh1 > "" Then
        Dim y As Integer = cint(ydh1.substring(3,4))
        Dim m As Integer = cint(ydh1.substring(7,2))
        Dim Days As Integer = Date.DaysInMonth(y,m)
        Dim fd As Date = New Date(y,m,1) '获得该月的第一天
        Dim ld As Date = New Date(y,m,Days) '获得该月的最后一天
        If e.sender.value < fd OrElse e.sender.value > ld Then
            e.cancel = True '如果是,取消操作
            MessageBox.Show("修改的日期不能超出已保存单号所属月份","提示")
        End If
End If
只要ydh和ydh1不为空就执行判断,我的要求是有时选错了日期,在还没保存前,允许ydh和ydh1变,只有财务数据源表中已经保存了ydh和ydh1的数据,这两个控件的数才不允许变化,我把代码改为下面这样,结果不管财务数据源表有没有数据这两个控件的数据都没变!头痛!
Dim ydh As String = Forms("收款凭证").Controls("dh").text
Dim ydh1 As String = Forms("收款凭证").Controls("dh1").text
If ydh > "" And ydh1 > "" Then
    Dim s As String = e.Form.Controls("TextBox2").text
    If s.length > 2 Then
        s = s.SubString(0,2)
        Dim y As Integer = cint(ydh1.substring(3,4))
        Dim m As Integer = cint(ydh1.substring(7,2))
        Dim Days As Integer = Date.DaysInMonth(y,m)
        Dim fd As Date = New Date(y,m,1) '获得该月的第一天
        Dim ld As Date = New Date(y,m,Days) '获得该月的最后一天
        Dim cmd As New SQLCommand
        cmd.CommandText = "Select count(*) Fr om {财务数据源} Where [字号] = '" & s & "' And [日期] >= #" & fd & "# And [日期] <= #" & ld & "# And [安日期生成单号辅助列] = '" & ydh1 & "'"
        If cmd.ExecuteScalar > 0 And e.sender.value < fd OrElse e.sender.value > ld Then
            e.cancel = True '如果是,取消操作
            MessageBox.Show("修改的日期不能超出已保存单号所属月份","提示")
        End If
    End If
End If

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


加好友 发短信
等级:八尾狐 帖子:1881 积分:10368 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2021/6/16 14:48:00 [显示全部帖子]

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:收款凭证0616.foxdb

1、dh控件执行代码后我要取消效果,但不需要不让离开控件效果。
2、rq控件先选当前月份日数,再改选2020年12月份日数,又重选回今年1月日数,这样切换几次,dh和dh1控件上的数据没随之改变,我的要求是在未保存前,它们可随意切换,保存后这两个值都不能改变。

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


加好友 发短信
等级:八尾狐 帖子:1881 积分:10368 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2021/6/16 17:03:00 [显示全部帖子]


你的方法
1、不要到Validating事件处理,到enter事件判断,不能改的直接设置为只读(这个自己处理),在Validating事件不能取消输入,它依然把修改的数字写进去了,如果自动变为只读,那我想把它改为另一个号就不能操作了,这办法行不通,我要求取消操作,允许离开控件。
2、添加一个标签记录窗口状态,rq控件先选当前月份日数,再改选2020年12月份日数,又重选回今年1月日数,这样切换几次,dh和dh1控件上的数据没随之改变,我的要求是在未保存前,它们可随意切换,保存后这两个值都不能改,没解决。

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


加好友 发短信
等级:八尾狐 帖子:1881 积分:10368 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2021/6/16 17:22:00 [显示全部帖子]

未保存就是指定字号、日期、凭证号,财务数据源表上不存在的数据。

 回到顶部