以文本方式查看主题
- Foxtable(狐表) (http://foxtable.com/bbs/index.asp)
-- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2)
---- 这个表达式这么写 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=9220)
|
-- 作者:佛光普照
-- 发布时间:2011/3/15 20:10:00
-- 这个表达式这么写
各位帮帮忙,这个表达式如何写,实际余额等于入库金额减付款金额;欠票金额等于入库金额减开票金额
|
-- 作者:佛光普照
-- 发布时间:2011/3/15 20:11:00
--
|
-- 作者:佛光普照
-- 发布时间:2011/3/15 20:31:00
--
其次要求能根据采购单位变动实际余额与欠票余额
|
-- 作者:mr725
-- 发布时间:2011/3/15 22:02:00
--
把你这张表像当主表,再建立一个或两个明细表,用主表(以单据编号)关联这一两个明细表来反映入库、付款;开票、欠票情况,可能会更好些的···
|
-- 作者:狐狸爸爸
-- 发布时间:2011/3/15 22:08:00
--
其实你用表达式列不是更好:
1、删除实际金额列,增加一个表达式列,名称为实际金额,表达式为[入库金额] - ISNULL([付款金额],0)
2、同样欠票金额也改为表达式性,表达式为:[入库金额] - ISNULL([开票金额],0)
|
-- 作者:狐狸爸爸
-- 发布时间:2011/3/15 22:13:00
--
晕倒,原来你是用流水账,这样吧,来两段:
Select Case e.DataCol.Name Case "采购单位","入库金额","付款金额" Dim dr As DataRow Dim mr As DataRow = e.DataRow Dim drs As List(of DataRow) dr = e.DataTable.Find("[_SortKey] < " & mr("_SortKey") & " And [采购单位] = \'" & mr("采购单位") & "\'", "[_SortKey] Desc") If dr Is Nothing Then \'如果没有上一行,说明本行就是同产品的第一行 mr("实际余额") = mr("入库金额") - mr("付款金额") dr = mr End If drs = e.DataTable.Select("[_SortKey] >= " & dr("_SortKey") & " And [采购单位] = \'" & dr("采购单位") & "\'") For i As Integer = 1 To drs.Count - 1 \'重算余下行的余额 drs(i)("实际余额") = drs(i-1)("实际余额") + drs(i)("入库金额") - drs(i)("付款金额") Next End Select
Select Case e.DataCol.Name Case "采购单位","入库金额","开票金额" Dim dr As DataRow Dim mr As DataRow = e.DataRow Dim drs As List(of DataRow) dr = e.DataTable.Find("[_SortKey] < " & mr("_SortKey") & " And [采购单位] = \'" & mr("采购单位") & "\'", "[_SortKey] Desc") If dr Is Nothing Then \'如果没有上一行,说明本行就是同产品的第一行 mr("欠票金额") = mr("入库金额") - mr("开票金额") dr = mr End If drs = e.DataTable.Select("[_SortKey] >= " & dr("_SortKey") & " And [采购单位] = \'" & dr("采购单位") & "\'") For i As Integer = 1 To drs.Count - 1 \'重算余下行的余额 drs(i)("欠票金额") = drs(i-1)("欠票金额") + drs(i)("入库金额") - drs(i)("开票金额") Next End Select
|
-- 作者:佛光普照
-- 发布时间:2011/3/16 17:27:00
--
非常谢谢!
|
-- 作者:佛光普照
-- 发布时间:2011/3/16 20:17:00
--
现在出现一个问题,只有付款金额或开票金额手工输入数字后,实际余额和欠票金额才会计算,有没有办法解决!
|
-- 作者:狐狸爸爸
-- 发布时间:2011/3/16 22:02:00
--
原因在于入库金额是一个表达式列,而表达式列的变化时不会触发DataColChanged事件的
不过很好解决,入库金额有入库数量和单价计算得出,所以可以将代码改为:
Select Case e.DataCol.Name Case "采购单位","付款金额","入库数量","单价" Dim dr As DataRow Dim mr As DataRow = e.DataRow Dim drs As List(of DataRow) dr = e.DataTable.Find("[_SortKey] < " & mr("_SortKey") & " And [采购单位] = \'" & mr("采购单位") & "\'", "[_SortKey] Desc") If dr Is Nothing Then \'如果没有上一行,说明本行就是同产品的第一行 mr("实际余额") = mr("入库金额") - mr("付款金额") dr = mr End If drs = e.DataTable.Select("[_SortKey] >= " & dr("_SortKey") & " And [采购单位] = \'" & dr("采购单位") & "\'") For i As Integer = 1 To drs.Count - 1 \'重算余下行的余额 drs(i)("实际余额") = drs(i-1)("实际余额") + drs(i)("入库金额") - drs(i)("付款金额") Next End Select
Select Case e.DataCol.Name Case "采购单位","开票金额","入库数量","单价" Dim dr As DataRow Dim mr As DataRow = e.DataRow Dim drs As List(of DataRow) dr = e.DataTable.Find("[_SortKey] < " & mr("_SortKey") & " And [采购单位] = \'" & mr("采购单位") & "\'", "[_SortKey] Desc") If dr Is Nothing Then \'如果没有上一行,说明本行就是同产品的第一行 mr("欠票金额") = mr("入库金额") - mr("开票金额") dr = mr End If drs = e.DataTable.Select("[_SortKey] >= " & dr("_SortKey") & " And [采购单位] = \'" & dr("采购单位") & "\'") For i As Integer = 1 To drs.Count - 1 \'重算余下行的余额 drs(i)("欠票金额") = drs(i-1)("欠票金额") + drs(i)("入库金额") - drs(i)("开票金额") Next End Select
|
-- 作者:佛光普照
-- 发布时间:2011/3/17 21:12:00
--
太感谢!
|