以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  随姓名自动生成下次起号  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=113306)

--  作者:飞过海洋
--  发布时间:2018/1/12 22:28:00
--  随姓名自动生成下次起号

老师:

    请您给写个代码:如果同一姓名发生售出张数,那么下次的售出起号自动在上次止号的数据上加1,得到本日本行的售出起号.

如下图:

 


图片点击可在新窗口打开查看此主题相关图片如下:2018.png
图片点击可在新窗口打开查看
[此贴子已经被作者于2018/1/12 22:30:21编辑过]

--  作者:有点蓝
--  发布时间:2018/1/12 22:39:00
--  
If e.DataCol.Name = "售出张数"
    If e.NewValue > 0
        Dim dr As DataRow = e.DataTable.Find("售出日期 < #" & e.DataRow("售出日期") & "# and 售出止号 is not null","售出日期 desc")
        If dr IsNot Nothing Then
            e.DataRow("售出起号") = dr("售出止号") + 1
            e.DataRow("售出起号") = dr("售出止号") + e.NewValue
        End If
    End If
End If

--  作者:sjx71
--  发布时间:2018/1/12 23:05:00
--  
在DataColChanged 事件内写以下程序试试

Select Case e.DataCol.Name
    Case "姓名","售出日期","售出张数"
        Dim dr As DataRow = e.DataRow
        If dr.IsNull("姓名") = False AndAlso dr.IsNull("售出日期") = False Then
            Dim dr1 As DataRow = e.DataTable.find("售出日期 < #" & dr("售出日期") & "# And 姓名 = \'" & dr("姓名") & "\'","售出日期 DESC")
            If dr IsNot Nothing Then
                If dr1.Isnull("售出止号") = False Then
                    dr("售出起号") = dr1("售出止号") + 1
                    If dr("售出张数") > 0 Then
                        dr("售出止号") = dr1("售出止号") + dr("售出张数")
                    End If
                End If
            End If
        End If
End Select

--  作者:飞过海洋
--  发布时间:2018/1/12 23:13:00
--  
以下是引用有点蓝在2018/1/12 22:39:00的发言:
If e.DataCol.Name = "售出张数"
    If e.NewValue > 0
        Dim dr As DataRow = e.DataTable.Find("售出日期 < #" & e.DataRow("售出日期") & "# and 售出止号 is not null","售出日期 desc")
        If dr IsNot Nothing Then
            e.DataRow("售出起号") = dr("售出止号") + 1
            e.DataRow("售出起号") = dr("售出止号") + e.NewValue
        End If
    End If
End If

老师:我把您的代码加在我的代码后面,无效啊,请看一下:

Select Case e.DataCol.Name
   
    Case "明细账_领入张数","明细账_售出张数","明细账_废票","明细账_上年结转张数","明细账_退票张数","明细账_今日领入张数"
       
        Dim dr As DataRow
        Dim mr As DataRow=e.DataRow
        Dim drs As List(of DataRow)
        dr = e.DataTable.Find("[_SortKey] < " & mr("_SortKey") & " And [姓名] = \'" & mr("姓名") & "\'", "[_SortKey] Desc")
        If dr Is Nothing Then \'如果没有上一行,说明本行就是同产品的第一行
            mr("明细账_结存张数") = mr("明细账_上年结转张数")+mr("明细账_今日领入张数")+mr("明细账_退票张数")  - mr("明细账_售出张数") -mr("明细账_废票")
            dr = mr
        End If
        drs = e.DataTable.Select("[_SortKey] >= " & dr("_SortKey") & " And [姓名] = \'" & dr("姓名") & "\'")
        For i As Integer = 1 To drs.Count - 1 \'重算余下行的余额
            drs(i)("明细账_结存张数") = drs(i-1)("明细账_结存张数")  +drs(i)("明细账_上年结转张数") +drs(i)("明细账_今日领入张数") +drs(i)("明细账_退票张数")  - drs(i)("明细账_售出张数") -drs(i)("明细账_废票")
        Next
End Select
Select Case e.DataCol.Name
   
    Case "明细账_售出张数","明细账_售出金额"
        If e.NewValue <> e.OldValue Then
            e.DataTable.DataCols("摘要_日期").RaiseDataColChanged()
        End If
End Select

Select Case e.DataCol.name
    Case "明细账_领入起号","明细账_领入止号","明细账_领入张数","姓名","姓名","实物账_发出起号","实物账_发出止号","实物账_发出张数","明细账_今日领入张数","明细账_退票张数","实物账_退票张数","年","月","日","凭证_实物号","年","月","日","凭证_号","明细账_上年结转张数","实物账_上年结转张数","实物账部分_号","实物账部分_上年结转张数"
        Dim dr As DataRow = DataTables("实物账").Find("id2 = \'" & e.DataRow("_Identify") & "\'")
        If dr Is Nothing Then
            dr = DataTables("实物账").AddNew()
            dr("id2") = e.DataRow("_Identify")
        End If
        dr("实物账_发出起号") = e.DataRow("明细账_领入起号")
        dr("姓名") = e.DataRow("姓名")
        dr("年") = e.DataRow("年")
        dr("月") = e.DataRow("月")
        dr("日") = e.DataRow("日")
        dr("实物账_今日发出张数") = e.DataRow("明细账_今日领入张数")
        dr("实物账_退票张数") = e.DataRow("明细账_退票张数")
        dr("凭证_号") = e.DataRow("实物账部分_号")
        dr("引用部分") = e.DataRow("摘要_内容")  
End Select
If e.DataCol.Name = "售出张数"
    If e.NewValue > 0
        Dim dr As DataRow = e.DataTable.Find("售出日期 < #" & e.DataRow("售出日期") & "# and 售出止号 is not null","售出日期 desc")
        If dr IsNot Nothing Then
            e.DataRow("售出起号") = dr("售出止号") + 1
            e.DataRow("售出起号") = dr("售出止号") + e.NewValue
        End If
    End If
End If

[此贴子已经被作者于2018/1/12 23:20:23编辑过]

--  作者:飞过海洋
--  发布时间:2018/1/12 23:15:00
--  

 

[此贴子已经被作者于2018/1/12 23:18:33编辑过]

--  作者:飞过海洋
--  发布时间:2018/1/12 23:23:00
--  
以下是引用sjx71在2018/1/12 23:05:00的发言:
在DataColChanged 事件内写以下程序试试

Select Case e.DataCol.Name
    Case "姓名","售出日期","售出张数"
        Dim dr As DataRow = e.DataRow
        If dr.IsNull("姓名") = False AndAlso dr.IsNull("售出日期") = False Then
            Dim dr1 As DataRow = e.DataTable.find("售出日期 < #" & dr("售出日期") & "# And 姓名 = \'" & dr("姓名") & "\'","售出日期 DESC")
            If dr IsNot Nothing Then
                If dr1.Isnull("售出止号") = False Then
                    dr("售出起号") = dr1("售出止号") + 1
                    If dr("售出张数") > 0 Then
                        dr("售出止号") = dr1("售出止号") + dr("售出张数")
                    End If
                End If
            End If
        End If
End Select

老师:

我把您的代码加在我的代码后面,可数据没有反应啊

Select Case e.DataCol.Name
   
    Case "明细账_领入张数","明细账_售出张数","明细账_废票","明细账_上年结转张数","明细账_退票张数","明细账_今日领入张数"
       
        Dim dr As DataRow
        Dim mr As DataRow=e.DataRow
        Dim drs As List(of DataRow)
        dr = e.DataTable.Find("[_SortKey] < " & mr("_SortKey") & " And [姓名] = \'" & mr("姓名") & "\'", "[_SortKey] Desc")
        If dr Is Nothing Then \'如果没有上一行,说明本行就是同产品的第一行
            mr("明细账_结存张数") = mr("明细账_上年结转张数")+mr("明细账_今日领入张数")+mr("明细账_退票张数")  - mr("明细账_售出张数") -mr("明细账_废票")
            dr = mr
        End If
        drs = e.DataTable.Select("[_SortKey] >= " & dr("_SortKey") & " And [姓名] = \'" & dr("姓名") & "\'")
        For i As Integer = 1 To drs.Count - 1 \'重算余下行的余额
            drs(i)("明细账_结存张数") = drs(i-1)("明细账_结存张数")  +drs(i)("明细账_上年结转张数") +drs(i)("明细账_今日领入张数") +drs(i)("明细账_退票张数")  - drs(i)("明细账_售出张数") -drs(i)("明细账_废票")
        Next
End Select
Select Case e.DataCol.Name
   
    Case "明细账_售出张数","明细账_售出金额"
        If e.NewValue <> e.OldValue Then
            e.DataTable.DataCols("摘要_日期").RaiseDataColChanged()
        End If
End Select

Select Case e.DataCol.name
    Case "明细账_领入起号","明细账_领入止号","明细账_领入张数","姓名","姓名","实物账_发出起号","实物账_发出止号","实物账_发出张数","明细账_今日领入张数","明细账_退票张数","实物账_退票张数","年","月","日","凭证_实物号","年","月","日","凭证_号","明细账_上年结转张数","实物账_上年结转张数","实物账部分_号","实物账部分_上年结转张数"
        Dim dr As DataRow = DataTables("实物账").Find("id2 = \'" & e.DataRow("_Identify") & "\'")
        If dr Is Nothing Then
            dr = DataTables("实物账").AddNew()
            dr("id2") = e.DataRow("_Identify")
        End If
        dr("实物账_发出起号") = e.DataRow("明细账_领入起号")
        dr("姓名") = e.DataRow("姓名")
        dr("年") = e.DataRow("年")
        dr("月") = e.DataRow("月")
        dr("日") = e.DataRow("日")
        dr("实物账_今日发出张数") = e.DataRow("明细账_今日领入张数")
        dr("实物账_退票张数") = e.DataRow("明细账_退票张数")
        dr("凭证_号") = e.DataRow("实物账部分_号")
        dr("引用部分") = e.DataRow("摘要_内容")  
End Select
Select Case e.DataCol.Name
    Case "姓名","售出日期","售出张数"
        Dim dr As DataRow = e.DataRow
        If dr.IsNull("姓名") = False AndAlso dr.IsNull("售出日期") = False Then
            Dim dr1 As DataRow = e.DataTable.find("售出日期 < #" & dr("售出日期") & "# And 姓名 = \'" & dr("姓名") & "\'","售出日期 DESC")
            If dr IsNot Nothing Then
                If dr1.Isnull("售出止号") = False Then
                    dr("售出起号") = dr1("售出止号") + 1
                    If dr("售出张数") > 0 Then
                        dr("售出止号") = dr1("售出止号") + dr("售出张数")
                    End If
                End If
            End If
        End If
End Select

 


--  作者:sjx71
--  发布时间:2018/1/13 1:01:00
--  
开始没注意字段名称 

把程序中的“售出张数” 换成“明细账_售出张数“
“售出起号” 换成“明细账_售出起号“
“售出止号” 换成“明细账_售出止号“

试试

--  作者:有点蓝
--  发布时间:2018/1/13 8:50:00
--  
上传具体实例测试
--  作者:飞过海洋
--  发布时间:2018/1/13 10:40:00
--  
以下是引用sjx71在2018/1/13 1:01:00的发言:
开始没注意字段名称 

把程序中的“售出张数” 换成“明细账_售出张数“
“售出起号” 换成“明细账_售出起号“
“售出止号” 换成“明细账_售出止号“

试试

 老师:

出现问题了,如果同一人名下次发生售出张数,下次的起号虽然增加1了,但以后就不变了.


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

--  作者:有点蓝
--  发布时间:2018/1/13 10:55:00
--  
上传具体实例测试