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

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

  1. MMN

    MMN Well-Known Member

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

    а что за скобки тут???
     
  3. MMN

    MMN Well-Known Member

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

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

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

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

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

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

    HAL Гость

    ... и зачем в цикле Set telDoc=view.GetFirstDocument ?
     
  7. turumbay

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

    Omh Lotus team
    Lotus team

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

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

    MMN Well-Known Member

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

    viewX.AutoUpdate=false
    view.AutoUpdate=false
    поставь
     
  11. MMN

    MMN Well-Known Member

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

    Klido Гость

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

    MMN Well-Known Member

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

    Darker Гость

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

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

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

    Omh Lotus team
    Lotus team

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

    Darker Гость

    попробуй так
    Код (LotusScript):
        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

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

    Klido Гость

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

    Xalet Well-Known Member

    Регистрация:
    8 авг 2008
    Сообщения:
    410
    Симпатии:
    0
    Мб от вьюшек зависит? Скажем как вариант одинаковые доки в них встречаются или нет.
     
Загрузка...
Похожие Темы - Перебор переборе
  1. 123456789igor
    Ответов:
    1
    Просмотров:
    1.571
  2. sima12
    Ответов:
    4
    Просмотров:
    1.775
  3. iivvnn
    Ответов:
    4
    Просмотров:
    1.860
  4. Altaya
    Ответов:
    10
    Просмотров:
    2.812
  5. Xalet
    Ответов:
    7
    Просмотров:
    3.557

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