Хитрый Агент печати выделенных строк во вьюхе

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

Статус темы:
Закрыта.
  1. Kron

    Kron Гость

    Есть такая праблемка, сейчас из пердставления спец входит в форму, там нажимает печать @Command([ViewSwitchForm];"PrintAgentForm8") после чего попадает в форму созданную на основе пердыдущей + еще некоторые данные из других форм, все обрабатываеися скриптом:
    Sub Queryopen(Source As Notesuidocument, Mode As Integer, Isnewdoc As Variant, Continue As Variant)
    Dim ns As notessession
    Dim db As notesdatabase
    Dim view As notesview
    Dim doc1 As notesdocument
    Dim doc2 As notesdocument
    Dim dc As notesdocumentcollection
    Dim i As Integer
    Set doc1= source.document
    Set db = doc1.parentdatabase
    Set view = db.getview("(view1)")
    Set dc = view.GetAllDocumentsByKey(doc1.AgentShortName(0))
    i = 0
    j=1
    For i = 1 To dc.count
    Set doc2 = dc.Getnthdocument(i)
    '
    ' doc1.ReplaceItemValue("F1_"+cstr(i),)
    If doc2.PersonalNotPrintInForm(0)<>"НЕ показывать в карточке обновления" Then
    If doc2.PersonalDBaseUpdateUser(0)="Ответственный за пополнение БД" Then
    Call doc1.ReplaceItemValue("F0_"+Cstr(j),"+")
    End If
    If doc2.PersonalAccountUser(0)="Получатель платежных документов" Then
    Call doc1.ReplaceItemValue("F1_"+Cstr(j),"$")
    End If
    If doc2.PersonalKodeksUser(0)="Пользователь ИПС Кодекс" Then
    Call doc1.ReplaceItemValue("F2_"+Cstr(j),"K")
    End If
    Call doc1.ReplaceItemValue("F3_"+Cstr(j),doc2.PersonalAllName(0))
    Call doc1.ReplaceItemValue("F4_"+Cstr(j),doc2.PersonalDolg(0))
    Call doc1.ReplaceItemValue("F5_"+Cstr(j),doc2.PersonalWorkPhone(0))
    Call doc1.ReplaceItemValue("F6_"+Cstr(j),doc2.PersonalWorkRoom(0))
    If doc2.PersonalBDate(0)<>"" Then
    Call doc1.ReplaceItemValue("F7_"+Cstr(j),"*")
    End If
    If doc2.PersonalClubNumber(0)<>"" Then
    Call doc1.ReplaceItemValue("F8_"+Cstr(j),Cstr(doc2.PersonalClubNumber(0)))
    End If
    j = j + 1
    End If
    Next


    End Sub

    И вот сама соль как сделать агента чтобы он печатал все формы по конторам не заходя в них, т.е. как я понимаю выделили во вьюхе нужные конторы запустили агента, и на принтер поползли они все по порядку. :)
     
  2. serEJa Shabalin

    serEJa Shabalin Гость

    Типичная задачка для Excel
    Открываете экселевский шаблон
    Заполняете его постепенно по всем выделенным документам и печатаете

    Хотя можно сделать следующее
    получаете в агенте выделенный документы
    создаете новый документ по необходимой вам форме открываете его в UI
    и дальше заполняете и печатаете его notesUIDocument.Print
     
  3. Kron

    Kron Гость

    как вариант а как перейти на шаблон ексель, расскажите неразумному
     
  4. Гость

    Внимательно прочитал, но неважно уяснил цель - в чем сложность ? Так и реализуйте - выделяется коллекция документов, по нажатию кнопки для полей каждого производятся соответствующие вычисление, меняется флаг "Form" и можно подавать на принтер.

    Конечно, на принтер подавать нужно не бэкэндный документ. а UI
     
  5. serEJa Shabalin

    serEJa Shabalin Гость

    Я лишь предлагаю вариант которым сам пользовался.
    Плюсы:
    Возможность сложного форматирования
    Возможность фоновой печати
    Минусы:
    Необходимо задействовать COM-модель стороннего приложения (в нашем случае Excel.Application)

    1) В отдельных документах храняться отформатированные, незаполненные екселевские файлы
    возможно их хранить для простоты в одном документе Using Database или About Database (если они статичны)
    2) Способ хранения файлов либо аттачи, либо внедренные файлы (отображаемые, как иконка)
    Иногда предпочитаю пользоваться внедренным файлом, чтобы было меньше возни с сохранением оного на диск и удаления с диска.
    3) В коде например на кнопке в виде получаем коллекцию выделенных документов, обращаемся к нужному нам документу с шаблонным файлом
    GetDocumentByKey или
    Set doc = db.GetDocumentByID("FFFF0002") - About Database
    Set doc = db.GetDocumentByID("FFFF0100") - Using Database
    4) Далее от способа хранения файла либо сохраняем файл на диск и
    Set objExcelApp = CreateObject(Excel.Application)
    Set objExcelWb = objExcelApp.OpenWorkbook(путь)

    если внедренный объекты
    Set objExcelWb = NotesEmbeddedObject.Activate(False)

    5) Далее заполняем файл objExcelWb.Sheets(1).Cells(1, 1).Value = "бла-бла-бла" и печатаем лист, код печати не помню, но его легко записать макросом в VBA и повторить на LS
    6) Повторять Шаг 5 для всех выделенных документов
     
  6. Гость

    Создаешь экселовский OLE-объект: XLApp=CreateObject("Excel.Application"), делаешь его видимым (XLApp.Visible=True), ну а дальше читай экселовский хэлп по программной работе с объектами приложения средствами Visual Basic...

    Жаль, меня уже опередили :p
     
Загрузка...
Статус темы:
Закрыта.

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