此主题相关图片如下:出库.jpg

此主题相关图片如下:库存.jpg

有如上图两个表,要从库存表中找出与出库表中 编码和批次号相同 的行,然后 实时库存(新)=实时库存(旧)-出库数量,代码该怎么写?
其中两表中编码和数量列肯定不为空,批次号可能为空。
较为简短的代码如何编写?
Dim n As Integer
n = 0
Dim drs As List(of DataRow)
Drs = DataTables("成品仓退料单_Table1").Select("材料编码 Is not null")
For Each dr As DataRow In drs
Dim gr As DataRow
If dr.IsNull("订单号") Then '判定操作的合法性,库存表必须有与之相对应的物料
Gr = DataTables("成品仓实时库存").find("订单号 is null and 材料编码 = '" & dr("材料编码") & "' And 单位 = '" & dr("单位") & "'")
Else
Gr = DataTables("成品仓实时库存").find("材料编码 = '" & dr("材料编码") & "' And 单位 = '" & dr("单位") & "' And 订单号 = '" & dr("订单号") & "'")
End If
If gr Is Nothing Then
MessageBox.Show("反审核后物料库存将小于零,禁止操作","警告", MessageBoxButtons.OK ,MessageBoxIcon.Warning)
n = n+1
Exit For
Else
Dim Ys As Double '判定操作的合法性,若有与之相对应的物料,运算后库存不能为负
Ys = gr("实时库存") - dr("数量")
If YS < 0 Then
MessageBox.Show("反审核后物料库存将小于,禁止操作","警告", MessageBoxButtons.OK ,MessageBoxIcon.Warning)
n = n + 1
Exit For
End If
End If
Next
If n <= 0 Then '判定操作的合法,进行真正运算
For Each dr2 As DataRow In drs
Dim gr2 As DataRow
If dr2.IsNull("订单号") Then
Gr2 = DataTables("成品仓实时库存").find("订单号 is null and 材料编码 = '" & dr2("材料编码") & "' And 单位 = '" & dr2("单位") & "'")
Else
Gr2 = DataTables("成品仓实时库存").find("材料编码 = '" & dr2("材料编码") & "' And 单位 = '" & dr2("单位") & "' And 订单号 = '" & dr2("订单号") & "'")
End If
gr2("实时库存") = gr2("实时库存") - dr2("数量")
Next
[此贴子已经被作者于2012-2-7 15:46:42编辑过]
一楼的案例其实是我设计进销存系统时的一个简化模型,他模拟的一个单据审核的操作,单据审核后,单据有效,系统即自动对库存进行相应的运算。
上面的代码其实才是我真正的案例,包含了操作合法性的判定,其实真正的关于运算的只有红色的那一部分。
不过时至今日,我还是经常搞不清什么时候用NOTHING,什么时候用IS NULL,都是试出来的。
还有查找条件有朝一日能不能这样写呢? FIND( A AND ( B OR C) )