以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 求个复杂点的代码 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=1437) |
||||
-- 作者:号子 -- 发布时间:2008/12/18 19:29:00 -- 求个复杂点的代码 收款明细中,当收到来款时,求个复杂点的代码 (
要求如下: 根据付款单位记录自动在总表中的付款单位列找到该单位,然后在该单位的运费结算_已收列中按时间(车次列)先后填(补)足应收款(余款依次填入下条记录)。计算运费结算_应收未收的值,为0时则在运费结算_结清中确定。 [此贴子已经被作者于2008-12-19 0:50:30编辑过]
|
||||
-- 作者:gdtgl -- 发布时间:2008/12/18 22:34:00 -- 为什么要修改原始记录:应收费? 或者表达清楚1些 最好截图来表达。 [此贴子已经被作者于2008-12-18 22:40:38编辑过]
|
||||
-- 作者:号子 -- 发布时间:2008/12/18 23:04:00 -- 晕,错了,是已收 |
||||
-- 作者:gdtgl -- 发布时间:2008/12/19 0:01:00 -- 表"收款明细" DataColChanging中的代码: If e.DataCol.Name = "付款单位" Then Dim dr As DataRow = DataTables("总表").Find("发货单位 = \'" & e.NewValue & "\' ") dr("运费结算_已收") = e.datarow("金额") if dr("运费结算_应收未收") = 0 then dr("运费结算_结清") = true end if end if |
||||
-- 作者:gdtgl -- 发布时间:2008/12/19 0:04:00 -- find的条件可以自已增加...(以上的应写得不够完善) |
||||
-- 作者:号子 -- 发布时间:2008/12/19 0:30:00 -- 不对的: 1,填入已收列的金额不能大于本车次运费结清_税后运费列的值, 2,当已收列的金额等于运费_税后运费后,余下的金额依次填入該单位的下一车次, 比方说帮A拉了三车,税后运费分别是3000,4000,5000,现在A付来10000元,现在要把10000元按运输时间顺序(附件中是按车次顺序)将前两车填或补够3000,4000,第三车填入余下的 。 [此贴子已经被作者于2008-12-19 0:42:45编辑过]
|
||||
-- 作者:ybil -- 发布时间:2008/12/19 12:22:00 -- \'\'\' 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编辑过]
|
||||
-- 作者:号子 -- 发布时间:2008/12/20 9:18:00 -- 代码放到DataColChanging中,奇怪,不填充,我按你设定的数据类型将总表的运费结算_已收和收款明细表的金额列改为双精度小数一样不填充。 [此贴子已经被作者于2008-12-20 9:39:45编辑过]
|
||||
-- 作者:号子 -- 发布时间:2008/12/20 10:31:00 -- \'\'\' 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编辑过]
|
||||
-- 作者:don -- 发布时间:2008/12/20 22:45:00 -- 这个应该比较完美了,不过也心淡,罢了 \'\'\' 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编辑过]
|