Business Studio предлагает создавать необходимые отчеты с использованием привязок. Это позволяет с минимумом знаний создавать необходимые правила для формирования отчетов. При этом, в Business Studio существуют механизмы, позволяющие создать отчет полностью программным путем, без создания привязок.
В отчете формата Word по процессу необходимо в разных строках кодом VBA добавить:
Существует пустой шаблон отчета по процессу. Отчет не содержит ни одной привязки, а содержит лишь 2 строки, введенные вручную:
В шаблоне в разных строках вводятся поясняющие названия и добавляются закладки (лента "Вставка" группа "Ссылки" кнопка "Закладка") с названиями:
Для данного примера (Процесса) параметры называются:
Далее средствами OLE будут получены остальные данные через создание необходимого фильтра. Отправным параметром для поиска будет служить guid процесса, от которого вызывается отчет. Полученные данные будут вставлены в документ средствами VBA.
Sub ПослеВыполненияОтчета(ob As Variant, app As Variant) 'ВВОДНАЯ ЧАСТЬ 'Названия закладок bkmName = "НазваниеПроцесса" bkmContent = "СодержаниеДеятельности" Dim Name As String 'для хранения параметра процесса "Название" 'ПРОЦЕДУРНАЯ ЧАСТЬ '*** 'Обращение к параметрам объекта '*** 'Название процесса Name = ob.Название 'получаем данные Selection.GoTo What:=wdGoToBookmark, Name:=bkmName 'переход к закладке Selection.TypeText Text:=Name 'вставляем текст 'Содержание деятельности Selection.GoTo What:=wdGoToBookmark, Name:=bkmContent 'переход к закладке Selection.TypeText Text:=ob.СодержаниеДеятельности 'вставляем текст '*** 'Использование механизма OLE '*** 'Работаем со справочником Процессов Set ProcS = app.ПолучитьОбъектПоУмолчанию_OLE("БизнесМодель.Процессы") 'Создаем фильтр по процессам, чтобы получить наш процесс как объект Set ProcSFiltr = ProcS.СоздатьФильтр ProcSFiltr.Условия.Параметры.GUID.Значение = ob.GUID Set ResultProcSFiltr = ProcSFiltr.Выполнить Set ProcName = ResultProcSFiltr.ПолучитьЭлемент(0) 'Работаем со справочником, хранящим связи Процессы-Процессы Set ProcSubjectLink = app.ПолучитьОбъектПоУмолчанию_OLE("БизнесМодель.СвязиСубъектов") 'Создаем фильтр, чтобы получить субъекты, которые участвуют в нашем процессе Set PSLinkFiltr = ProcSubjectLink.СоздатьФильтр 'значение = результат предыдущего фильтра PSLinkFiltr.Условия.Параметры.ОбъектВ.Значение = ProcName Set ResultPSLinkFiltr = PSLinkFiltr.Выполнить 'Количество связей, в которых присутствует наш процесс countLinks = ResultPSLinkFiltr.КоличествоЭлементов 'в этом массиве будут названия субъектов Dim Subjects() As String ReDim Subjects(countLinks) 'в этом массиве будут названия связей Dim LinkName() As String ReDim LinkName(countLinks) 'Выделяем из каждого элемента списка данные 'о субъектах и типах связей 'Каждый элемент списка представлен строкой вида: 'Связи субъекта с процессом: из "<Субъект>" в "<Процесс>" с типом "<Тип связи>" smbl = """" 'символ " For i = 0 To countLinks - 1 'Название субъекта между вхождениями первых двух символов " LinkText = ResultPSLinkFiltr.ПолучитьЭлемент(i) 'Ищем первое вхождение символа FirstIn = InStr(LinkText, smbl) 'Второе вхождение символа SecondIn = InStr(FirstIn + 1, LinkText, smbl) 'Название субъекта между вхождениями Subjects(i) = Mid(LinkText, FirstIn + 1, (SecondIn - FirstIn - 1)) 'Название типа связи между вхождениями справа первых двух символов " LastNeedCharPos = Len(LinkText) - 1 'номер предпоследнего символа 'Ищем второе вхождение символа справа SecondIn = InStrRev(LinkText, smbl, LastNeedCharPos) 'Название типа связи между вхождениями LinkName(i) = Mid(LinkText, SecondIn + 1, LastNeedCharPos - SecondIn) Next i 'Внесение данных в документ и форматирование Selection.TypeParagraph 'с новой строки Selection.TypeParagraph Selection.TypeText Text:="Количество субъектов, связанных с процессом: " Selection.Font.Bold = wdToggle Selection.TypeText Text:=CStr(countLinks) Selection.Font.Bold = wdToggle Selection.TypeParagraph Selection.TypeText Text:="А именно:" Selection.TypeParagraph 'Создание маркированного списка 'субъектов и типов связей вида: '* Субъект (тип связи) 'Вкл. маркированный список Selection.Range.ListFormat.ApplyListTemplateWithLevel _ ListTemplate:=ListGalleries(wdBulletGallery).ListTemplates(1), _ ContinuePreviousList:=False, _ ApplyTo:=wdListApplyToWholeList, _ DefaultListBehavior:=wdWord10ListBehavior For i = 0 To countLinks - 1 Selection.TypeText Text:=Subjects(i) + " (" + _ LinkName(i) + ")" If i <> countLinks Then Selection.TypeParagraph End If Next i 'Убираем маркированный список Selection.Range.ListFormat.RemoveNumbers NumberType:=wdNumberParagraph End Sub