Как В Ls Узнать Текущее Название Формы? Срочно Нужно...

Тема в разделе "Lotus - Программирование", создана пользователем afest, 18 дек 2012.

  1. afest

    afest Well-Known Member

    Регистрация:
    16 июн 2009
    Сообщения:
    78
    Симпатии:
    0
    Мне в скрипте нужно узнать текущую обрабатываемую форму. Вьюха, с которой берутся доки с селектом по двум формам. Часть выборки работает зашибись, но два момента ну никак! Давненько делал это, но уже забыл. В хэлпе шось не совсем то, что нужно нашел... Да и проблемки семейные - жена на операции... В общем голова не шибко варит... помогите пожалуйста!!!

    вот скрипт:
    Код (Text):
     Sub Click(Source As Button)
    Dim xlFilename As String
    xlFilename ="c:\f3.xls"
    Dim session As New NotesSession
    Dim db As NotesDatabase
    Dim view As NotesView, transferview As NotesView
    Dim doc As NotesDocument, transferdoc As NotesDocument
    Dim i As Integer
    Dim dc As NotesDocumentCollection
    Dim CountDoc As Integer
    Dim CountDoc1 As Integer
    Dim CountDoc2 As Integer
    Dim CountDoc3 As Integer
    Dim CountDoc4 As Integer
    Dim j As Integer
    Dim aritem As NotesItem

    Dim row As Integer
    Dim Excel As Variant
    Dim xlWorkbook As Variant
    Dim xlSheet As Variant
    Dim xlCells As Variant

    Set db = session.CurrentDatabase

    '// инициализация OLE-объекта
    Set Excel = CreateObject("excel.application")
    Excel.Visible = True
    Print "Открыт файл " & xlFilename & "..."
    Excel.Workbooks.Open xlFilename '// открытие файла Excel
    Set xlWorkbook = Excel.ActiveWorkbook
    Set xlSheet = xlWorkbook.ActiveSheet
    Set xlCells = xlSheet.Cells

    row = 2

    Print "Starting export..."

    Set view = db.GetView("dvig_workers")
    Set doc = view.GetFirstDocument
    CountDoc = 0        'принято работников всего
    CountDoc1 =     0   'выбыло работников всего
    CountDoc2 = 0   'из них в связи с сокращением
    CountDoc3 = 0   'по собственному желанию
    CountDoc4 = 0   'численность работников на конец отчетного периода
    formName = "kadry"

    While Not doc Is Nothing

    On Error Resume Next   
    If doc.f1_69(0)<>"" Then
    CountDoc1=CountDoc1+1
    End If
    'If formName = db.Forms Then

    'End If
    Set aritem=doc.f1_70_1(0)
    If aritem.Contains("сокращению штата") Then
    CountDoc2=CountDoc2+1
    End If
    If aritem.Contains("собственному желанию") Then
    CountDoc3=CountDoc3+1
    End If
    Set doc = view.GetNextDocument(doc)
    Wend

    Set view = db.GetView("dvig_workers1")
    CountDoc4 = view.EntryCount
    Set view = db.GetView("dvig_workers2")
    CountDoc = view.EntryCount


    xlCells(row, 1).value= CountDoc
    xlCells(row, 2).value=CountDoc1
    xlCells(row, 3).value=CountDoc2
    xlCells(row, 4).value=CountDoc3
    xlCells(row, 5).value=CountDoc4

    End Sub
    на моменте происходит проблема с разницей форм (в дебагере смотрел)
    Код (Text):
    If aritem.Contains("сокращению штата") Then
    CountDoc2=CountDoc2+1
    End If
    If aritem.Contains("собственному желанию") Then
    CountDoc3=CountDoc3+1
    End If
    и вот тут перед этим надо сделать проверку на форму...
     
  2. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Что есть текущая обрабатываемая форма??? Если речь о форме текущего обрабатываемого документа, то получить можно так:
    doc.Form(0)
    или так
    doc.GetItemValue("Form")(0)
     
  3. afest

    afest Well-Known Member

    Регистрация:
    16 июн 2009
    Сообщения:
    78
    Симпатии:
    0
    Да, именно текущая обрабатываемая форма!
    Другое дело, как поставить в условие, что это та форма? Например, при использовании doc.Form?
    Понятно, что там IF должен быть... но в хэлпе все ссылается на метод For All...

    ЗЫ: реально помощь нужна, с жинкой мучаюсь по поводу операции и т.п. почти неделю на работе по-сути не был... весь в нервах, сегодня вот только с реанимации ее выписали... и то, не известно на сколько (((

    бЗЫ: использую дизайнер 7.0.2
    на большие версии я пока совместимость не сделал, почти полгода работаю и переделываю БД
     
  4. Мыш

    Мыш Lotus team
    Lotus team

    Регистрация:
    12 фев 2008
    Сообщения:
    1.020
    Симпатии:
    8
    Эээээ... Form - это просто поле документа типа "текст", содержащее название формы. Соответственно:
    Код (LotusScript):
    if doc.Form(0) = "Форма1" Then...
    Т.е., работаете как с любым другим текстовым полем. Contains - он для списков...
    ЗЫ. Во избежание проблемы с регистрами букв можно использовать Instr c соотв. ключами.
     
  5. afest

    afest Well-Known Member

    Регистрация:
    16 июн 2009
    Сообщения:
    78
    Симпатии:
    0
    Т.е. я так понял, что нужно внести новое поле, которое будет содержать название формы по умолчанию(естетсвенно невидимое для юзверя)?
    Других вариантов нет?
    Менять дизайн на основной базе стремно... На данный момент на локальном серваке тестирую, обновлять дизайн основной базы буду при 100% ее работоспособности.
     
  6. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Ничего не понял. Что Вам нужно? Что такое форма по умолчанию?
    Документ состоит из полей, нужные отображаются пользователю на форме, ненужные не отображаются, но пользователь может просмотреть список ВСЕХ полей документа в окне свойств.
    Поле Form хранит форму, по которой документ создан/должен отображаться, есть возможность изменить его значение для открытия документа по другой форме. Проверка значение поля Form:
    Код (LotusScript):
    If doc.Form(0) = "Form1" Then
    ' что-то делаем
    ElseIf doc.Form(0) = "Form2" Then
    ' делаем что-то другое
    Else
    ' рыбу заворачиваем
    End
     
  7. Мыш

    Мыш Lotus team
    Lotus team

    Регистрация:
    12 фев 2008
    Сообщения:
    1.020
    Симпатии:
    8
    Эммм... А что, такого поля в док-тах на текущий момент нет? Вообще говоря, может быть и такое (скажем, док-т открывается из вида с Form Formula). Вот в этом случае не знаю...
     
  8. afest

    afest Well-Known Member

    Регистрация:
    16 июн 2009
    Сообщения:
    78
    Симпатии:
    0
    Еще раз повторяюсь: БД не моя, была портирована из аксесса, полей дополнительных (бишь служебных) никто не поставил, дали мне эту ***утую БД на переделку...

    БЗЫ: сегодня пробую обновить дизайн, завтра расскажу каков результат... жалко, кнеш, что не все еще работает, но с дополнительными полями все должно быть нормально
     
  9. Anatoly

    Anatoly Well-Known Member

    Регистрация:
    30 мар 2007
    Сообщения:
    204
    Симпатии:
    0
    Кстати, @Command( [SwitchForm] ; formName ) - меняет при сохранении поле Form.
    А как-бы указать, что я просто хочу поработать с документом через другую форму, без изменения поля Form.
    И не только из View, а уже имея документ открытым...
    На формулах что-то не вариант.
     
  10. Мыш

    Мыш Lotus team
    Lotus team

    Регистрация:
    12 фев 2008
    Сообщения:
    1.020
    Симпатии:
    8
    Понятно, я тоже повторюсь: форма - это не какое-то внутреннее свойство документов. Это обычное текстовое поле. Т.е., если его нет, его надо добавить во все документы.

    А поменять взад на QuerySave?
     
  11. Anatoly

    Anatoly Well-Known Member

    Регистрация:
    30 мар 2007
    Сообщения:
    204
    Симпатии:
    0
    Поле Form должно быть, тот кто портировал, как-то же планировал работать с документами.
    Или-же в дизайне базы должна быть форма "по умолчанию"
     
  12. VladSh

    VladSh начинающий
    Lotus team

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    Поля Form в документах элементарно может не быть (RTFM). Но привычнее всё-таки когда оно там есть.
     
  13. Мыш

    Мыш Lotus team
    Lotus team

    Регистрация:
    12 фев 2008
    Сообщения:
    1.020
    Симпатии:
    8
    Даже если есть, в док-тах она не хранится...
     
  14. Anatoly

    Anatoly Well-Known Member

    Регистрация:
    30 мар 2007
    Сообщения:
    204
    Симпатии:
    0
    Да, но позволяет открыть документ "на посмотреть".
    К вопросу этоне относится, конечно, ...
    Но в чем суть проблемы - непонятно.
    Имя формы либо есть в свойствах документы - и тогда оно оттуда элементарно получается.
    Либо его там нет - тогда решение об алгоритме обработки можно принимать на основании набора каких-либо реквизитов, наличие|отсутствие которых также легко проверяется.

    Если, как я понял, документы есть результат импорта из Accessa, то автор импорта, скорее всего, не заморачивался прописыванием имени формы в документы.
    Написать агента, который заполнит по всем нужным докам поле "Form" нужным значениеми и все.
     
  15. Anatoly

    Anatoly Well-Known Member

    Регистрация:
    30 мар 2007
    Сообщения:
    204
    Симпатии:
    0
    Кстати:
    раз документ есть во вью, значит имя формы в нем присутствует.
     
  16. afest

    afest Well-Known Member

    Регистрация:
    16 июн 2009
    Сообщения:
    78
    Симпатии:
    0
    где? как его достать? в дебагере, на указанном мной моменте, doc все так же, имея другую форму, считывает данные несуществующего поля и по тем двум параметрам прописывает по +1
     
  17. divankin

    divankin Senjor developer

    Регистрация:
    13 авг 2009
    Сообщения:
    182
    Симпатии:
    0
    Вчитался в код. Что-то у вас там капитально неправильно.
    1. Уберите нафиг On Error Resume Next. Это одна из конструкций, за которые нужно бить по рукам, за исключением некоторых редких случаев, когда разработчик может убедительно объяснить, зачем он так делает.

    Сделаем нормальную обработку ошибок Вместо этого поставьте
    On Error Goto TRAP
    а в конец добавьте
    Exit Sub
    TRAP:
    MsgBox "Ошибка " & Error & " (" & Err & ")" & "в строке " & Erl
    If not Excel is nothing Then Delete Excel
    Exit Sub

    2. Вместо Set aritem=doc.f1_70_1(0)
    Поставьте Set aritem=doc.getFirstItem("f1_70_1")
    А дальнейший код обработки значения aritem оберните в
    If not aritem is nothing then
    .
    .
    End If
     
  18. Мыш

    Мыш Lotus team
    Lotus team

    Регистрация:
    12 фев 2008
    Сообщения:
    1.020
    Симпатии:
    8
    Неа, вовсе не обязательно.
     
  19. ToxaRat

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

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.046
    Симпатии:
    18
    правильно говоришь

    я для многих доков, которые ложу в отдельные базы вообще форму не прописываю - меньше суммари полей быстрее едем, и так знаю что у меня там
     
  20. Anatoly

    Anatoly Well-Known Member

    Регистрация:
    30 мар 2007
    Сообщения:
    204
    Симпатии:
    0
    Да? Тогда объясните: как документы без указанной формы попадают во "Вьюха с селектом по двум формам"?
     
Загрузка...

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