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

  • Автор темы Автор темы MMN
  • Дата начала Дата начала
M

MMN

Столкнулся с проблемой перебора документов во вьюхе
Код:
	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
то все проходит отлично.
В чем проблема ?? Перебор в переборе разве нельзя делать ??

Переменные вроде не пересекаются.
 
куда правильнее писать так
Код:
do Until doc Is Nothing
 
Может во втором цикле docX меняется и пропадает из вида?
Я бы получил view.AllEntries и ходил бы по ним.

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

Да тут наверно док меняется, перестаёт отображаться во view и на GetNextDocument вылетает.
Брать view в цикле - сииила!
 
до переполучения дело не доходит, на второй круг не уходит, для спокойствия всех могу вытащить наверх.
на самом деле это кусок из функции, когда стояла функция тоже вылетало, соответственно был найден проблемный кусок и вставлен в этот перебор.
Код:
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

никак не повлияло
 
колитесь что с доком делаете!
в том то и дело что ничего не делаю )) по логике ошибки я понимаю что не находит документ
база тестовая, я в ней один
как только убираем перебор
While Not telDoc Is Nothing
Set telDoc=view.GetNextDocument(telDoc)
Wend
в котором даже нет принта, все начинает работать
 
М.б. представления кривые? Перестроить индексы или вообще пересоздать представления.
 
попробуй так
Код:
	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
 
переделал на AllEntries все заработало, спасибо.
 
MMN
только хотел напомнить линк и там дальше с форума про подобные грабли...
что интересно, встречаются не всегда - у меня несколько похожих вложенных циклов работают норм...
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab