0

我最近有一个问题让我有些头疼。我希望我能在您的帮助下找到解决方案。

我有一个观点:嵌入在表单中的“vwTest”。这是一个可编辑的视图。该视图有 3 列:数字、成本、差异。所有 3 列的默认值都有一些字段名称,这些字段名称存在于名为“fmTest”的表单中,字段名称为:Number、Cost、Difference。

在主窗体(包含视图)上有一个字段(计算),称为:TotalValue。

该视图有 2 个操作:AddLine 和 DeleteLine。

我想做的是:

假设 TotalValue = 5000

  • 用户完成视图的第一行:

号码 | 成本 | 区别


1 | 50 | 4950 => 第 3 列值自动计算为 5000(TotalValue)和 50(第 2 列的值)之间的差值

  • 用户完成视图的第二行:

2 | 60 | 4890 => 自动计算的第 3 列值作为视图中最后 3 列值与 60(第 2 列的当前值)之间的差值

我认为这就像一个递归算法。

TotalValue 的值是存在的,它是一个 Number 类型的字段。

希望能找到解决办法,解决这个问题!我非常感谢您的帮助和时间!

4

1 回答 1

0

每次保存后,您必须遍历属于“此”主文档的所有条目并重新计算总数。我假设,“行”是对主文档的响应文档,并且嵌入式视图由主文档的 unid 分类......

Dim ses as New NotesSession
Dim db as NotesDatabase
Dim viewEmbedded as NotesView
Dim viwNav as NotesViewNavigator
Dim ve as NotesViewEntry
Dim docLine as NotesDocument
Dim docMain as NotesDocument

Dim dblTotal as Double

Set db = ses.CurrentDatabase
Set docMain = ... 'somehow get the main document, therefor I would need your current code
dblTotal = docMain.TotalValue(0)
Set viewEmbedded = db.Getview( "vwTest" )
viewEmbedded.AutoUpdate = False
Set viwNav = viwEmbedded.CreateViewNavFromCategory( docMain.UniversalID )
Set ve = viwNav.getFirst()
While Not ve is Nothing
  Set docLine = ve.Document
  dblTotal = dblTotal - docLine.Cost(0)
  If dblTotal <> docLine.Difference(0) then
    docLine.Difference = dblTotal
    Call docLine.Save( true, true )
  End If
  Set ve = viwNav.getnextDocument(ve)
Wend

为什么是循环?如果有人在创建第二行和第三行后修改了第一行怎么办?那么 2、3 和所有后续行的总数必须改变。

此代码不是在 Designer 中输入的,可能包含拼写错误。它不包含任何错误处理,如果不小心使用,可能会产生复制/保存冲突。

希望有帮助

于 2013-07-23T10:49:59.557 回答