начнём стого что подход удобен тем, что можно получить коллекцию в диапозоне дат, и работать с мультивэль списками (синхронными), через энтрисы и колмнвэлью
НО:
-напрямую получить энтрис и юзать колумнвэлью низя
-можно получить в коллекцию энтрисы не относящиеся к диапозону дат
ежели первый трабл решается получением Set reportNav=reportView.CreateViewNav
и преобразованием
Set Me.firstEntry=entries.GetFirstEntry
Set GetFirst=reportNav.GetEntry(Me.firstEntry)
а далее сканированием по нафигатору...
то второй решить можно влоб - перебором по нафигатору до dtStart и также по последнему (от lastEntry в прямом! направлении до даты > dtEnd)
но это не красиво, а может оказаться и накладно по времени (если даты в синхронном списке разнесены ощутимо, а промежутоные энтрисы в большом кол-ве)
в рамках одного дока, мультивэлью поле может оказаться гораздо меньше (по кол-ву в списке)
т.о. можно получить doc из firstEntry (а потом и lastEntry) и сканировать поле на нужную дату
принято допущение, что даты в списке расположены по-возрастанию
типа:
и вот апосля начинается интересное...
мы теряем счетчик энтрисов и стало быть навигацию по reportNav
как быть?! :what?: выход прост - использовать:
т.о. мы можем "зафиксировать" "номер" скорректированных ентрисов по его "позиции":
скорректированное значение счетчика:
проход по навигатору, с контролем границ
НО:
-напрямую получить энтрис и юзать колумнвэлью низя
-можно получить в коллекцию энтрисы не относящиеся к диапозону дат
ежели первый трабл решается получением Set reportNav=reportView.CreateViewNav
и преобразованием
Set Me.firstEntry=entries.GetFirstEntry
Set GetFirst=reportNav.GetEntry(Me.firstEntry)
а далее сканированием по нафигатору...
то второй решить можно влоб - перебором по нафигатору до dtStart и также по последнему (от lastEntry в прямом! направлении до даты > dtEnd)
но это не красиво, а может оказаться и накладно по времени (если даты в синхронном списке разнесены ощутимо, а промежутоные энтрисы в большом кол-ве)
в рамках одного дока, мультивэлью поле может оказаться гораздо меньше (по кол-ву в списке)
т.о. можно получить doc из firstEntry (а потом и lastEntry) и сканировать поле на нужную дату
принято допущение, что даты в списке расположены по-возрастанию
типа:
Код:
...
Forall d In v
dt.LocalTime=Fulltrim(d)
'д.б. dt >= dtStart, dt - dtStart>=0
If dt.TimeDifference(dtStart)>=0 Then
'для соответствия индексной колонке во вьюшке
dt.AdjustSecond(i)
'если дата больше или = началу периода - найти стартовый энтрис
Set Me.firstEntry=FindEntry(dt)
Exit Sub
End If
i=i+1
End Forall
...
Private Function FindEntry(dt As NotesDateTime) As NotesViewEntry
'может, при преобразовании, вывалится по ошибке ADT (поиск по ключу даст Nothing)
'вероятные причины: ошибка индекса, ошибка программирования;)
Set FindEntry=reportView.GetEntryByKey(dt, True)
End Function
мы теряем счетчик энтрисов и стало быть навигацию по reportNav
как быть?! :what?: выход прост - использовать:
Код:
Private Property Get CurrentNum As Long
Dim v As Integer
v=curEntry.GetPosition(".")
CurrentNum=Clng(v)
End Property
Код:
...
Call checkStartDate() 'ф-ция, кусок кот. выше
Set Me.curEntry=reportNav.GetEntry(Me.firstEntry)
firstNum=CurrentNum
Call checkEndDate()
Set Me.curEntry=reportNav.GetEntry(Me.lastEntry)
lastNum=CurrentNum
...
Код:
Property Get Count As Long
Count=lastNum-firstNum+1
End Property
проход по навигатору, с контролем границ
Код:
Property Get GetNext() As NotesViewEntry
If CurrentNum<lastNum Then
Set GetNext=reportNav.GetNext(curEntry)
Delete curEntry
Set curEntry=Me.GetNext
End If
End Property