收款明细中,当收到来款时,求个复杂点的代码
(
要求如下:
根据付款单位记录自动在总表中的付款单位列找到该单位,然后在该单位的运费结算_已收列中按时间(车次列)先后填(补)足应收款(余款依次填入下条记录)。计算运费结算_应收未收的值,为0时则在运费结算_结清中确定。
[此贴子已经被作者于2008-12-19 0:50:30编辑过]
为什么要修改原始记录:应收费?
或者表达清楚1些 最好截图来表达。
[此贴子已经被作者于2008-12-18 22:40:38编辑过]
find的条件可以自已增加...(以上的应写得不够完善)
不对的:
1,填入已收列的金额不能大于本车次运费结清_税后运费列的值,
2,当已收列的金额等于运费_税后运费后,余下的金额依次填入該单位的下一车次,
比方说帮A拉了三车,税后运费分别是3000,4000,5000,现在A付来10000元,现在要把10000元按运输时间顺序(附件中是按车次顺序)将前两车填或补够3000,4000,第三车填入余下的 。
[此贴子已经被作者于2008-12-19 0:42:45编辑过]
'''
If e.DataCol.Name = "付款单位" Then
Dim T As String
Dim mny,sum As Double
Dim Da As DataTable = DataTables("总表")
mny = e.DataRow("金额")
if mny <=0 then
MessageBox.Show("请输入金额!", "提示")
Else
T = "发货单位 = '" & e.NewValue & "'"
if Da.Find(T) isNot nothing then
for each dr As DataRow in Da.select(T)
sum = Da.Compute("Sum(运费结算_已收)",T)
if sum = mny
Exit For
end if
if mny - sum >= dr("运费结算_应收费")
dr("运费结算_已收") = dr("运费结算_应收费")
Else
dr("运费结算_已收") = mny - sum
End if
Next
end if
end if
end if
[此贴子已经被作者于2008-12-19 12:58:20编辑过]
代码放到DataColChanging中,奇怪,不填充,我按你设定的数据类型将总表的运费结算_已收和收款明细表的金额列改为双精度小数一样不填充。
T = "付款单位 = '" & e.NewValue & "'"
这句错了,改后成了,但还有个问题:如原来运费结算_已收中已有预付款就不按足额填充了。
[此贴子已经被作者于2008-12-20 9:39:45编辑过]
'''
If e.DataCol.Name = "付款单位" Then
Dim T As String
Dim mny,sum As Double
Dim Da As DataTable = DataTables("总表")
mny = e.DataRow("金额")
if mny <=0 then
MessageBox.Show("请输入金额!", "提示")
Else
T = "付款单位 = '" & e.NewValue & "'"
if Da.Find(T) isNot nothing then
for each dr As DataRow in Da.select(T)
sum = Da.Compute("Sum(运费结算_已收)",T)
if sum = mny
Exit For
end if
if mny - sum >= dr("运费结算_应收费")
dr("运费结算_已收") = dr("运费结算_应收费")
mny=mny + sum
End if
Else
dr("运费结算_已收") = mny - sum
End if
Next
end if
end if
end if
这样好点,如果金额填完所有记录还有余额时能提示就更完善了。
[此贴子已经被作者于2008-12-20 12:19:04编辑过]
这个应该比较完美了,不过也心淡,罢了
'''
If e.DataCol.Name = "付款单位" Then
Dim T As String
Dim mny,sum,sm As Double
Dim Da As DataTable = DataTables("总表")
if e.DataRow("金额") <=0 then
MessageBox.Show("请输入金额!", "提示")
Else
T = "[发货单位] = '" & e.NewValue & "' and [运费结算_结清] = False"
if Da.Find(T) isNot nothing then
sum = Da.Compute("Sum(运费结算_已收)",T)
sm= Da.Compute("Sum(运费结算_应收费)",T)
mny = e.DataRow("金额") +sum
if mny > sm then
MessageBox.Show("金额超出应付款项:" & (mny-sm) &"!", "提示")
end if
for each dr As DataRow in Da.select(T)
if mny <=0 then
exit for
else
if mny >= dr("运费结算_应收费")
dr("运费结算_已收") = dr("运费结算_应收费")
dr("运费结算_结清") = True
else
dr("运费结算_已收") = mny
end if
mny =mny- dr("运费结算_应收费")
end if
next
end if
end if
end if
[此贴子已经被作者于2008-12-20 22:53:49编辑过]