以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]解决生成重复数据  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=78724)

--  作者:liuyixin662
--  发布时间:2015/12/15 18:51:00
--  [求助]解决生成重复数据

老师你好,麻烦修改一下如下代码.

 

以下代码反馈如下:

1.       不修改入库日期,修改其他列内容<应付款采购主表><应付款采购明细表>能正常生成不重复数据.(正确)

2.       当修改入库日期时原有的入库单号已变化(其他列内容不变), 原有的入库单号及相应的内容应清除,<应付款采购主表><应付款采购明细表>会生成重复数据,原有的入库单号”未被清除.(不正确)

 

材料入库主表DataColChanged事件

If e.DataCol.Name = "入库日期" Then

    If e.DataRow.IsNull("入库日期") Then

        e.DataRow("入库单号") = Nothing

    Else

        Dim d As Date = e.DataRow("入库日期")

        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 bh As String = Format(d,"yyyyMM") \'生成编号的前6,4位年,2位月.

        If e.DataRow("入库单号").StartsWith(bh) = False \'如果编号的前6位不符

            Dim max As String

            Dim idx As Integer

            max = e.DataTable.Compute("Max(入库单号)","入库日期 >= #" & fd & "# And 入库日期 <= #" & ld & "# And [_Identify] <> " & e.DataRow("_Identify")) \'取得该月的最大编号

            If max > "" Then \'如果存在最大编号

                idx = CInt(max.Substring(7,3)) + 1 \'获得最大编号的后三位顺序号,并加1

            Else

                idx = 1 \'否则顺序号等于1

            End If

            e.DataRow("入库单号") =  bh  & "-" & Format(idx,"000")

        End If

    End If

End If

If e.DataCol.Name = "供应商名称" Then \'

    Dim dr As DataRow

    dr = DataTables("供应商信息表").Find("供应商名称 = \'" & e.DataRow("供应商名称") & "\'" )

    If dr IsNot Nothing \'如果找到, 则设置各列内容

        e.DataRow("供应商编号")= dr("供应商编号")

    End If

End If

Select Case e.DataCol.name

    Case "入库单号"

        Dim dr As DataRow = DataTables("材料入库主表").Find("入库单号 = \'" & e.OldValue & "\'")

        If dr Is Nothing Then

            dr = DataTables("应付款采购主表").AddNew()

            dr("入库单号") = e.DataRow("入库单号")

            dr("供应商名称") = e.DataRow("供应商名称")

            dr("仓库名称") = e.DataRow("仓库名称")

            dr("入库日期") = e.DataRow("入库日期")

            dr("录入人") = e.DataRow("录入人")

            dr("入库类型") = e.DataRow("入库类型")

        Else

            dr("入库单号") = e.NewValue

        End If

    Case "入库单号","供应商名称","仓库名称","入库日期","录入人","入库类型"

        Dim dr As DataRow = DataTables("应付款采购主表").Find("入库单号 = \'" & e.DataRow("入库单号") & "\'")

        If dr IsNot Nothing Then

            dr(e.DataCol.Name) = e.DataRow(e.DataCol.Name)

        End If

End Select

Select Case e.DataCol.Name

    Case "审核人","审核日期","供应商名称","供应商编号","入库类型","仓库名称","备注","入库日期"

        Dim Filter As String = "[入库单号] = \'" & e.DataRow("入库单号") & "\'"

        Dim nm As String = e.DataCol.Name

        DataTables("材料入库明细表").ReplaceFor(nm, e.DataRow(nm), Filter)

End Select

 

 

 材料入库明细表DataColChanged事件

  Select Case e.DataCol.name

    Case "入库单号"

        Dim bh As String = e.DataRow("入库单号")

        Dim max As String

        Dim idx As Integer

        max = e.DataTable.Compute("Max(入库明细号)","入库明细号 like \'" & bh & "-%\' and [_Identify] <> " & e.DataRow("_Identify"))

        If max > "" Then \'如果存在最大编号

            idx = CInt(max.Substring(bh.length+1)) + 1 \'获得最大编号的后三位顺序号,并加1

        Else

            idx = 1 \'否则顺序号等于1

        End If

        e.DataRow("入库明细号") = bh & Format(idx,"-000")

        Dim dr As DataRow = DataTables("材料入库明细表").Find("入库明细号 = \'" & e.NewValue & "\'")

       

        If dr Is Nothing Then

            dr = DataTables("应付款采购明细表").AddNew()

            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("采购订单明细号")

            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("供应商编号")

            dr("录入人") = e.DataRow("录入人")

            dr("含税金额调整") = e.DataRow("含税金额调整")

            dr("不含税金额") = e.DataRow("不含税金额")

            dr("不含税单价") = e.DataRow("不含税单价")

            dr("含税金额") = e.DataRow("含税金额")

        Else

            dr("入库明细号") = e.OldValue

        End If

    Case "材料_大类","材料_中类","材料_小类","材料名称","规格型号","计量单位","数量","含税单价","材料编号","采购订单明细号","税率","送货单号码","供应商名称","仓库名称","入库类型","供应商编号","录入人","含税金额调整","不含税单价","不含税金额","入库明细号","含税金额"

        Dim dr As DataRow = DataTables("应付款采购明细表").Find("入库明细号 = \'" & e.DataRow("入库明细号") & "\'" )

        If dr IsNot Nothing Then

            dr(e.DataCol.Name) = e.DataRow(e.DataCol.Name)

        End If

End Select


--  作者:大红袍
--  发布时间:2015/12/15 19:57:00
--  

Dim dr As DataRow = DataTables("应付款采购主表").Find("入库单号 = \'" & e.OldValue & "\'")

If dr Is Nothing Then
    dr = DataTables("应付款采购主表").AddNew()
   

-----------------

 

Dim dr As DataRow = DataTables("应付款采购明细表").Find("入库明细号 = \'" & e.NewValue & "\'")
If dr Is Nothing Then
    dr = DataTables("应付款采购明细表").AddNew
   

 


--  作者:大红袍
--  发布时间:2015/12/15 19:57:00
--  

不会做就上传具体例子。


--  作者:liuyixin662
--  发布时间:2015/12/15 22:53:00
--  
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:生成表(入库日期修改时会产生重复数据).zip


--  作者:大红袍
--  发布时间:2015/12/16 0:38:00
--  
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:库存表.zip


--  作者:liuyixin662
--  发布时间:2015/12/16 12:36:00
--  

老师你好,我试了一下还不行,截图给你,麻烦你了.


--  作者:liuyixin662
--  发布时间:2015/12/16 12:37:00
--  

图片点击可在新窗口打开查看此主题相关图片如下:入库日期未修改前(正常).png
图片点击可在新窗口打开查看

--  作者:liuyixin662
--  发布时间:2015/12/16 12:37:00
--  

图片点击可在新窗口打开查看此主题相关图片如下:入库日期(修改为1月16日明细表原来行未能删除).png
图片点击可在新窗口打开查看

--  作者:liuyixin662
--  发布时间:2015/12/16 12:37:00
--  

图片点击可在新窗口打开查看此主题相关图片如下:入库日期(修改为2月16日,原来的2个未删除).png
图片点击可在新窗口打开查看

--  作者:liuyixin662
--  发布时间:2015/12/16 12:42:00
--  
应付款采购主表生成的数据正常