Пропадают Документы Из Представления После Пересохранения

Тема в разделе "Lotus - Программирование", создана пользователем juk-777, 16 окт 2013.

  1. juk-777

    juk-777 Active Member

    Регистрация:
    5 авг 2013
    Сообщения:
    38
    Симпатии:
    0
    И снова здравствуйте уважаемые форумчане.

    Опишу ситуацию, а затем проблему:
    Имеются 2 идентичные по настройкам базы: Основная база документов и Архив Документов (куда списываются отработанные документы).
    Имеются в этих базах также идентичные вьюхи и формы.

    Проблема с следующем: когда пересохраняю через UI документ в Архиве - то он пропадает из представления. обновления вьюхи по F9 не помогает, поэтому приходится перестраивать индекс по shift+F9 (это очень неудобно так как не все пользователи знают про такую комбинацию).
    НО, когда пересохраняю через UI документ в Основной базе - то он тоже пропадает из представления, но перестраивать индекс не надо, помогает просто обновления вьюхи по F9 ну или по стрелочке обновления в левом верхнем углу у вьюхи.

    ВОПРОС: почему так происходит?

    P.S. частота обновления индекса в свойствах обеих баз - стоит НЕМЕДЛЕННО. В свойствах представления в разделе "Индекс" выставлял все возможные значения - результат один .. только перестраивать надо чтобы увидеть пересохраненный док.
     
  2. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    формула отбора вьюх, нужно глянуть, что-то в документе меняется.
    Если сильно замороченные, то надо проверять по частям.
    Через scanez проще всего,Lite версия даже может, но если нет, то делаем поля на форму туда вставляем эту формулу и смотрим документ до сохранения и после, предварительно сохранив ссылку.
     
  3. juk-777

    juk-777 Active Member

    Регистрация:
    5 авг 2013
    Сообщения:
    38
    Симпатии:
    0
    Формула отбора одной из вьюх вот:
    SELECT ( ((@Left(Form;4)="Vhod")&( ТИП_ДОКУМЕНТА="Проект н.п.а. поступающий на согласование") )|(РАССМАТРИВАЕТ_ДОКУМЕНТ="В Архиве"&ПРЕДВАРИТ_ЧИТАЮТ_ДОЛЖНОСТ_ЛИЦА="На контроле")&ОТМЕТКА_ОБ_УДАЛЕНИИ=0)

    Если честно не очень понял что именно надо сделать исходя из этого текста: "делаем поля на форму туда вставляем эту формулу и смотрим документ до сохранения и после, предварительно сохранив ссылку."

    Вот что заметил буквально несколько минут назад. Есть копии этих баз на других серверах (ну то есть с ними в общем работают другие организации), так вот - там все отлично работает и документы не пропадают из вьюх.
    Может ли это быть из-за созданного индекса? В базах где все работает индекс создан по умолчанию с единственной галкой - индексировать зашифрованные поля. А в базе где документы пропадают - индекс создан по всем пунктам, включая вложения.
     
  4. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    Значения полей: РАССМАТРИВАЕТ_ДОКУМЕНТ, ПРЕДВАРИТ_ЧИТАЮТ_ДОЛЖНОСТ_ЛИЦА,ОТМЕТКА_ОБ_УДАЛЕНИИ

    Смотрим значения полей, до сохранения документа.
    Затем сохраняем документ.
    Смотрим значения полей, если меняются: значит где-то на форме в событиях стоит пересчет.

    Спорно... Копии баз могут отличаться программным кодом, иначе бы хватило просто реплики и разграничения доступа.
     
  5. juk-777

    juk-777 Active Member

    Регистрация:
    5 авг 2013
    Сообщения:
    38
    Симпатии:
    0
    Значения полей как до сохранения как после сохранения одинаковые, сморю через свойства документа на второй закладке. НО из представления удаляется все равно.
    Создал другое представление с пустой выборкой, ну то есть с отбором по всем документам, так вот документ не удаляется из этого представления, но в столбцах с вышеуказанными полями пустые значения, хотя само поле через свойство документа заполнено значением.
    Почему так?
    Ах да забыл сказать, события формы выложу сейчас:

    Sub Queryopen(UIDoc As Notesuidocument, Mode As Integer, Isnewdoc As Variant, Continue As Variant)
    If Isnewdoc=False Then
    If Isnull(Arraygetindex(UIDoc.Document.РАССМАТРИВАЕТ_ДОКУМЕНТ,"регистратор")) And Isnull(Arraygetindex(UIDoc.Document.РАССМАТРИВАЕТ_ДОКУМЕНТ,"На резолюции"))Then
    If Mode=1 Then Continue=False
    End If
    End If
    End Sub

    Sub Querymodechange(UIDoc As Notesuidocument, Continue As Variant)
    Dim CurDoc As NotesDocument
    Set CurDoc=UIDoc.Document
    '----------удаление SAVEOPTIONS ---------------------
    If CurDoc.HasItem("SAVEOPTIONS")=True Then
    Call CurDoc.RemoveItem("SAVEOPTIONS")
    End If

    End Sub

    НИкаких пересчетов полей нет, поэтому не пойму почему происходит подобное.
     
  6. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    QuerySave и PostSave пустые?
    Подформы есть на форме? Если да, то в событиях подформ может быть пересчет.
    Сами поля редактируемые или вычисляемые? Если вычисляемы то там есть формула.

    Не удаляется, потому что формула отбора общая.
    А вот то что в колонках исчезают значения, как раз говорит что они изменяются и в результате не попадают под формулу отбора...
     
  7. juk-777

    juk-777 Active Member

    Регистрация:
    5 авг 2013
    Сообщения:
    38
    Симпатии:
    0
    QuerySave и PostSave - пустые.
    Подформ нет.
    Поля вычисляемые (заполняются в процессе работы), в формуле стоит название поля.


    Вы утверждаете, что поля изменяются и не попадают под формулу отбора, а почему же тогда когда сделаю перестроение индекса документ появляется во вью? то есть после перестройки индекса все уже попадает под формулу? Не могу понять...
     
  8. juk-777

    juk-777 Active Member

    Регистрация:
    5 авг 2013
    Сообщения:
    38
    Симпатии:
    0
    Проблему решил добавив в событие формы следующий код.

    Sub Querysave(Source As Notesuidocument, Continue As Variant)

    Call Source.Document.Save(1,0)
    Continue=True

    End Sub

    Теперь просто по нажатию на F9 документ отображается в виде.
    Прошу разъяснений по приведенному коду - правильно ли я сделал, можно ли так вообще было делать или есть другие варианты?

    Спасибо ...
     
  9. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    код:
    Call Source.Document.Save(1,0)

    читается как NotesDocument(True,False)
    первый параметр - принудительное сохранение.
    второй параметр - сделать ответным, у вас жесткий False.
    Значит если документ был ответным, то он перестанет им быть и иерархия, если она была - сломается.

    Вопрос: до сохранения поле $Ref было в документе?

    Что касается перебивки индекса, это странно, так как кнопки F9 всегда хватало и Shift-F9 нажимать не надо.
    Так же как и странно, что колонки пустые, а значения есть.

    Добавлено: Вы когда поля проверяли в документе после сохранения - переоктрывали его? или просто сохранили и смотрели?
     
  10. Мыш

    Мыш Lotus team
    Lotus team

    Регистрация:
    12 фев 2008
    Сообщения:
    1.020
    Симпатии:
    8
    Может, просто индекс вида пересоздать?...
     
  11. juk-777

    juk-777 Active Member

    Регистрация:
    5 авг 2013
    Сообщения:
    38
    Симпатии:
    0
    Спасибо за разъяснения.
    До сохранения поля $Ref в документе не было.
    Я проверял поля документа во вьюхе после сохранения.

    Хотелось бы уточнить по поводу метода save. В документации указано, что второй параметр учитывается только если у первого значение False, так ли это? И почему тогда в той же документации в примерах пишут конструкции типа Save(True,True) ... это аналогично написанию Save(True,false) или есть различия? И если можно разъяснить в каких случаях использовать метод с различными параметрами ...
    save(1,0)
    save(1,1)
    save(0,1)
    save(0,0)

    P.S. если я правильно понял то метод save со вторым параметром равным True использовать при работе с ответными документами. А при работе с обычными доками можно использовать с параметром равным False. Поправьте плиз если я не прав.
     
  12. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    В хелпе:
    Метод всегда возвращает значение, если только Call не используется.
    True - удалось сохранить, False - в пролете.

    Первые 2 параметра обязательные, но по хелпу да, второй учитывается только при первом False, совсем запамятовал.
    Но, так как хелп IBM может долго не обновлять, то лично я уже привык писать call Save(True,doc.IsResponse), на всякий случай.
    И кажется натыкался на то, что он все же учитывается. Ибо пару ответных при Save(True,False) я потерял.

    Если первый True, то документ будет сохранен в любом случае, даже если он заблочен кем-то (открыт на редактирование).
    И если этот кто-то после такой правки в бэке сохранит документ, то получит сообщение о возможном конфликте.
    Конечно это не решает ошибки: "Вы не входите в список авторов..."

    Второй параметр отвечает за "дочерность" документа и как гласит опять же хелп:
    "Если кто-то редактирует документ, то этот параметр укажет что сделать"
    Если проще: Если первый Fasle и второй True и документ кто-то редактирует, то сохраниться новая версия документа, которая будет ответная к основной, если False ничего не сохраниться.
    Но что самое главное, это дает использовать следующую конструкцию:
    Код (LotusScript):
    If doc.Save(false,false) then
    '...
    End If
    Такой подход может использоваться в циклах на сохранение документа-счетчика.

    Есть док, в котором хранится последний порядковый номер, резервируем номер, пытаемся прописать новый, если не получается снова резервируем и так пока не сохраним. Только главное не зациклиться :)
     
Загрузка...

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