• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

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

  • Автор темы Kron
  • Дата начала
Статус
Закрыто для дальнейших ответов.
K

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

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

serEJa Shabalin

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

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

Kron

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

Guest

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

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

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 для всех выделенных документов
 
G

Guest

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

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

Жаль, меня уже опередили :p
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!