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

Тема в разделе "Lotus - Программирование", создана пользователем MMN, 29 июл 2010.

  1. MMN

    MMN Well-Known Member

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

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

    Klido Гость

    Репутация:
    0
    а что за скобки тут???
     
  3. MMN

    MMN Well-Known Member

    Репутация:
    0
    Регистрация:
    11 дек 2008
    Сообщения:
    97
    Симпатии:
    0
    скобки из хелпа на плавность полета не влияет
     
  4. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Репутация:
    0
    Регистрация:
    6 ноя 2007
    Сообщения:
    3.171
    Симпатии:
    21
    куда правильнее писать так
    Код:
    do Until doc Is Nothing
     
  5. Medevic

    Medevic Что это ? :)
    Lotus team

    Репутация:
    0
    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Может во втором цикле docX меняется и пропадает из вида?
    Я бы получил view.AllEntries и ходил бы по ним.

    Кстати, зачем в цикле Set view=CS_GetCurrentDb.GetView("(AllPerson)")?
     
  6. HAL

    HAL Гость

    Репутация:
    0
    ... и зачем в цикле Set telDoc=view.GetFirstDocument ?
     
  7. turumbay

    Репутация:
    0
    Регистрация:
    13 мар 2009
    Сообщения:
    625
    Симпатии:
    2
    согласен с Medevic:
    колитесь, что происходит с docX во вложенном цикле и зачем переполучаете вьюху "(AllPerson)"
    P.S. telDoc из второго цикла не может в какой-то момент указывать на тот же документ, что и docX?
     
  8. Omh

    Omh Well-Known Member
    Lotus team

    Репутация:
    0
    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Автоапдейты поотрубай у view

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

    MMN Well-Known Member

    Репутация:
    0
    Регистрация:
    11 дек 2008
    Сообщения:
    97
    Симпатии:
    0
    до переполучения дело не доходит, на второй круг не уходит, для спокойствия всех могу вытащить наверх.
    на самом деле это кусок из функции, когда стояла функция тоже вылетало, соответственно был найден проблемный кусок и вставлен в этот перебор.
    Код:
    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
    никак не повлияло
     
  10. Darker

    Darker Гость

    Репутация:
    0
    viewX.AutoUpdate=false
    view.AutoUpdate=false
    поставь
     
  11. MMN

    MMN Well-Known Member

    Репутация:
    0
    Регистрация:
    11 дек 2008
    Сообщения:
    97
    Симпатии:
    0
    viewX.Autoupdate=False
    view.Autoupdate=False
    не помогает
     
  12. Klido

    Klido Гость

    Репутация:
    0
    MMN
    колитесь что с доком делаете! :) как предложили выше... если, конечно, это не просто цикл B)
     
  13. MMN

    MMN Well-Known Member

    Репутация:
    0
    Регистрация:
    11 дек 2008
    Сообщения:
    97
    Симпатии:
    0
    в том то и дело что ничего не делаю )) по логике ошибки я понимаю что не находит документ
    база тестовая, я в ней один
    как только убираем перебор
    While Not telDoc Is Nothing
    Set telDoc=view.GetNextDocument(telDoc)
    Wend
    в котором даже нет принта, все начинает работать
     
  14. Darker

    Darker Гость

    Репутация:
    0
    А объекты все ты описывал явно?
     
  15. Medevic

    Medevic Что это ? :)
    Lotus team

    Репутация:
    0
    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    М.б. представления кривые? Перестроить индексы или вообще пересоздать представления.
     
  16. Omh

    Omh Well-Known Member
    Lotus team

    Репутация:
    0
    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Кстати, да!
     
  17. Darker

    Darker Гость

    Репутация:
    0
    попробуй так
    Код:
    	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
     
  18. MMN

    MMN Well-Known Member

    Репутация:
    0
    Регистрация:
    11 дек 2008
    Сообщения:
    97
    Симпатии:
    0
    переделал на AllEntries все заработало, спасибо.
     
  19. Klido

    Klido Гость

    Репутация:
    0
    MMN
    только хотел напомнить линк http://ww2.nutechs.com/hosting/msobczak/Bl...nks/MSOK-6E9R3V и там дальше с форума про подобные грабли...
    что интересно, встречаются не всегда - у меня несколько похожих вложенных циклов работают норм...
     
  20. Xalet

    Xalet Well-Known Member

    Репутация:
    0
    Регистрация:
    8 авг 2008
    Сообщения:
    410
    Симпатии:
    0
    Мб от вьюшек зависит? Скажем как вариант одинаковые доки в них встречаются или нет.
     
Загрузка...

Поделиться этой страницей