Перебор в переборе

MMN

Well-known member
11.12.2008
97
0
#1
Столкнулся с проблемой перебора документов во вьюхе
Код:
	Set viewX = CS_GetCurrentDb.GetView( "EmployeeByNameWork" )
Set docX = viewX.GetFirstDocument
While Not(docX Is Nothing)			 
Set view=CS_GetCurrentDb.GetView("(AllPerson)")
Set telDoc=view.GetFirstDocument	

While Not telDoc Is Nothing

Set telDoc=view.GetNextDocument(telDoc)
Wend		

Set docX = viewX.GetNextDocument(docX)
Wend
вылетает на строке
Set docX = viewX.GetNextDocument(docX)
The Document is not in View EmployeeByNameWork

если из кода выкинуть
While Not telDoc Is Nothing

Set telDoc=view.GetNextDocument(telDoc)
Wend
то все проходит отлично.
В чем проблема ?? Перебор в переборе разве нельзя делать ??

Переменные вроде не пересекаются.
 

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 231
18
#4
куда правильнее писать так
Код:
do Until doc Is Nothing
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#5
Может во втором цикле docX меняется и пропадает из вида?
Я бы получил view.AllEntries и ходил бы по ним.

Кстати, зачем в цикле Set view=CS_GetCurrentDb.GetView("(AllPerson)")?
 
13.03.2009
625
1
#7
согласен с Medevic:
колитесь, что происходит с docX во вложенном цикле и зачем переполучаете вьюху "(AllPerson)"
P.S. telDoc из второго цикла не может в какой-то момент указывать на тот же документ, что и docX?
 

Omh

Lotus team
04.07.2007
2 210
1
#8
Автоапдейты поотрубай у view

Да тут наверно док меняется, перестаёт отображаться во view и на GetNextDocument вылетает.
Брать view в цикле - сииила!
 

MMN

Well-known member
11.12.2008
97
0
#9
до переполучения дело не доходит, на второй круг не уходит, для спокойствия всех могу вытащить наверх.
на самом деле это кусок из функции, когда стояла функция тоже вылетало, соответственно был найден проблемный кусок и вставлен в этот перебор.
Код:
Set viewX = CS_GetCurrentDb.GetView( "EmployeeByNameWork" )
Set view=CS_GetCurrentDb.GetView("(AllPerson)")
Set docX = viewX.GetFirstDocument
While Not docX Is Nothing

Set telDoc=view.GetFirstDocument	

While Not telDoc Is Nothing
Set telDoc=view.GetNextDocument(telDoc)
Wend		

Set docX = viewX.GetNextDocument(docX)
Wend
никак не повлияло
 

MMN

Well-known member
11.12.2008
97
0
#13
колитесь что с доком делаете!
в том то и дело что ничего не делаю )) по логике ошибки я понимаю что не находит документ
база тестовая, я в ней один
как только убираем перебор
While Not telDoc Is Nothing
Set telDoc=view.GetNextDocument(telDoc)
Wend
в котором даже нет принта, все начинает работать
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#15
М.б. представления кривые? Перестроить индексы или вообще пересоздать представления.
 
D

Darker

#17
попробуй так
Код:
	Set viewX = CS_GetCurrentDb.GetView( "EmployeeByNameWork" )
Set view=CS_GetCurrentDb.GetView("(AllPerson)")
Set docX = viewX.GetFirstDocument
While Not docX Is Nothing
set docX1=docX
Set docX = viewX.GetNextDocument(docX1)
'Дальше если надо используй docX1
Set telDoc=view.GetFirstDocument	

While Not telDoc Is Nothing
Set telDoc=view.GetNextDocument(telDoc)
Wend		

Wend