以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  添加单据  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=169255)

--  作者:采菊东篱下
--  发布时间:2021/6/9 0:40:00
--  添加单据
我在窗口的菜单按钮里做一个增加单据按钮,这样写窗口中的表为空表了,可表头上的控件不为空,依然是原来的数据,就算这样写,也是把已保存的控件数值改为空,自动生成的凭证号变成1,这样不符合添加单据要求,我想在不关闭窗口基础上在单据窗口菜单中添加新单,不是不断串改已保存单据控件数据。

图片点击可在新窗口打开查看此主题相关图片如下:0609.png
图片点击可在新窗口打开查看
图中没有设窗口表头控件上的变量为空,新添的单据把财务数据源表里的转账数据全自动改为控件上的最新数据,全乱了!我看过帮助及视频教程中的单据录入,它介绍通过关联表录入数据保存到表上,但关联表不用保存已直接录入后台数据,这与实现需要保存、审核流程不符,因此单据录入还是要通过窗口的动态表录入后保存到表上。
Select Case e.StripItem.Name
    Case "新增凭证" \'保存代
        e.Form.Controls("ComboBox3").Value = Nothing
        e.Form.Controls("dh").Value = Nothing
        e.Form.Controls("dh1").Value = Nothing
        e.Form.Controls("rq").Value = Nothing
        e.Form.Controls("TextBox1").Value = Nothing
        e.Form.Controls("TextBox2").Value = Nothing
        Tables("收款凭证_Table1").AddNew
        Tables("收款凭证_Table1").Filter = "[凭证号] Is Null"
        For i As Integer = Tables("收款凭证_Table1").Rows.count - 1 To 0 Step -1
            Tables("收款凭证_Table1").Rows(i).Delete
        Next
        Tables("收款凭证_Table1").AddNew(10)
End Select
[此贴子已经被作者于2021/6/9 13:36:01编辑过]

--  作者:有点蓝
--  发布时间:2021/6/9 8:36:00
--  
Select Case e.StripItem.Name
    Case "新增凭证" \'保存代
        e.Form.Controls("ComboBox3").Value = Nothing
        e.Form.Controls("dh").Value = Nothing
        e.Form.Controls("dh1").Value = Nothing
        e.Form.Controls("rq").Value = Nothing
        e.Form.Controls("TextBox1").Value = Nothing
        e.Form.Controls("TextBox2").Value = Nothing
        dataTables("收款凭证_Table1").deletefor( "[凭证号] Is Null")
dataTables("收款凭证_Table1").loadfilter = "1=2"
dataTables("收款凭证_Table1").load
        Tables("收款凭证_Table1").AddNew(10)
End Select

--  作者:采菊东篱下
--  发布时间:2021/6/9 9:07:00
--  
这样写也是把已保存的控件数值改为空,自动生成的凭证号变成1,要再点一次新增才变为空,因为自动生成编号代码是:
e.Sender.WriteValue()
Dim yzdh As WinForm.TextBox = e.Form.Controls("dh")\'dh是单号控件
Dim di As String = yzdh.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 idx 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 dts As Integer = DataTables("财务数据源").Compute("Count([会计科目])","[字号] = \'" & s & "\' And [日期] >= #" & fd & "# And [日期] <= #" & ld & "# And [凭证号] = \'" & di & "\'")
    If dts = 0 Then
        Max0 = DataTables("财务数据源").Compute("Max(凭证号)",flt) \'取得该月的相同工程代码的最大单据编号
        If Max0 > "" Then \'如果存在最大单据编号
            idx = CInt(Max0) + 1 \'获得最大单据编号的后四位顺序号,并加1
        Else
            idx = 1 \'否则顺序号等于1
        End If
        di = idx
        yzdh.Value = di
    End If
End If

另外我还设了一个单号,防止保存时生成重复号,因此,当窗口不是新打开的窗口,保存控件上的数据,只会是修改原控件单号,不生成新单号:
Dim yzdh1 As WinForm.TextBox = e.Form.Controls("dh1")\'dh是单号控件
Dim di1 As String = yzdh1.Value \'di单号控件中的变量
Dim max1 As String
Dim idx1 As Integer
If s.length > 2 Then
    s = s.SubString(0,2)
    Dim flt As String = "[字号] = \'" & s & "\' And [日期] >= #" & fd & "# And [日期] <= #" & ld & "#"
    Dim dts As Integer = DataTables("财务数据源").Compute("Count([会计科目])","[字号] = \'" & s & "\' And [日期] >= #" & fd & "# And [日期] <= #" & ld & "# And [凭证号] = \'" & di & "\'")
    If dts = 0 Then
        Dim bh As String = (e.Form.Controls("TextBox2").text).SubString(0,2) & "-" & Format(d,"yyyyMM") & "-" \'生成编号的前缀
        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
End If
[此贴子已经被作者于2021/6/9 11:26:20编辑过]

--  作者:有点蓝
--  发布时间:2021/6/9 9:15:00
--  
如果这些控件都是绑定的,不需要手工清空

Select Case e.StripItem.Name
    Case "新增凭证" \'保存代
        dataTables("收款凭证_Table1").deletefor( "[凭证号] Is Null")
dataTables("收款凭证_Table1").loadfilter = "1=2"
dataTables("收款凭证_Table1").load
        Tables("收款凭证_Table1").AddNew(10)
End Select

--  作者:采菊东篱下
--  发布时间:2021/6/9 9:23:00
--  
你这样写表上是没问题,控件上的数据没变,控件上的数据没绑定表的,全要手动选定。
--  作者:有点蓝
--  发布时间:2021/6/9 9:36:00
--  
Select Case e.StripItem.Name
    Case "新增凭证" \'保存代
systemready = false
        e.Form.Controls("ComboBox3").Value = Nothing
        e.Form.Controls("dh").Value = Nothing
        e.Form.Controls("dh1").Value = Nothing
        e.Form.Controls("rq").Value = Nothing
        e.Form.Controls("TextBox1").Value = Nothing
        e.Form.Controls("TextBox2").Value = Nothing
systemready = true
        dataTables("收款凭证_Table1").deletefor( "[凭证号] Is Null")
dataTables("收款凭证_Table1").loadfilter = "1=2"
dataTables("收款凭证_Table1").load
        Tables("收款凭证_Table1").AddNew(10)
End Select