老师你好,麻烦修改一下如下代码.
以下代码反馈如下:
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