ОБСУЖДЕНИЕ

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

28 ответов 11,1 тыс.
AI-выжимка обсуждения скоро

Краткие тезисы обсуждения со ссылками на ключевые ответы появятся здесь.

Автор темы
Столкнулся с проблемой перебора документов во вьюхе
Код:
	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

никак не повлияло
 
viewX.AutoUpdate=false
view.AutoUpdate=false
поставь
 
Да тут наверно док меняется, перестаёт отображаться во view и на GetNextDocument вылетает.
MMN
колитесь что с доком делаете! :) как предложили выше... если, конечно, это не просто цикл B)
 
колитесь что с доком делаете!
в том то и дело что ничего не делаю )) по логике ошибки я понимаю что не находит документ
база тестовая, я в ней один
как только убираем перебор
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
только хотел напомнить линк http://ww2.nutechs.com/hosting/msobczak/Bl...nks/MSOK-6E9R3V и там дальше с форума про подобные грабли...
что интересно, встречаются не всегда - у меня несколько похожих вложенных циклов работают норм...
 

Статистика тем

Создано
MMN,
Последний ответ от
Akupaka,
Ответы
28
Просмотры
11 119