Это старая версия документа.


Пример обращения к данным из базы

Текущая ситуация

Business Studio предлагает создавать необходимые отчеты с использованием привязок. Это позволяет с минимумом знаний создавать необходимые правила для формирования отчетов. При этом, в Business Studio существуют механизмы, позволяющие создать отчет полностью программным путем, без создания привязок.

Постановка задачи

В отчете формата Word по процессу необходимо в разных строках кодом VBA добавить:

  • Параметр процесса "Название";
  • Параметр процесса "Содержание деятельности";
  • Текст с указанием числа задействованных субъектов в процессе;
  • Маркированным списком перечень субъектов и их типа участия вида "Субъект (НазваниеТипаСвязи).

Решение описывается с момента

Существует пустой шаблон отчета по процессу. Отчет не содержит ни одной привязки, а содержит лишь 2 строки, введенные вручную:

  • "Название процесса:"
  • "Содержание деятельности:".

Концепция решения

  1. В шаблоне в местах, где необходимо отображать данные, устанавливаем закладки. Далее кодом VBA получаем необходимые данные из базы и выводим их в указанных местах.
  2. Средствами OLE найти связи процесса по субъектам и получить названия субъектов и их типов связей. Вставить эти значения в документ.

Шаги решения

В шаблоне в разных строках вводятся поясняющие названия и добавляются закладки (лента "Вставка" группа "Ссылки" кнопка "Закладка") с названиями:

  • НазваниеПроцесса
  • СодержаниеДеятельности
Рисунок 1. Вид шаблона отчета после добавления необходимых закладок и форматирования

Для данного примера (Процесса) параметры называются:

  • Название
  • СодержаниеДеятельности

Далее средствами OLE будут получены остальные данные через создание необходимого фильтра. Отправным параметром для поиска будет служить guid процесса, от которого вызывается отчет. Полученные данные будут вставлены в документ средствами VBA.

Sub ПослеВыполненияОтчета(ob As Variant, app As Variant)
 
Названия заклад ЧАСТЬ
 
    "НазваниеПроцесса"
акладок
    bkmName = "НазваниеПроцесса"
    bkmContent = "СодержаниеДеятельности"
 
    Dim Name As String ТЬ
 
 
    '***
    'Обращение к парпроцесса "Название"
 
 
 Name = ob.НазваниеАЯ ЧАСТЬ
 
 
    GoTo     :=wdGoToBookmark, Name:=bkmName етрам объекта
    ion.T     
 
    me 'вставляем текстроцесса
    Name = ob.Название election.GoTo Wha данные
    Selection.GoTo What:=wdGoToBookmark, Name:=bkmName  .TypeText Text:=ob.Сакладке
    Selection.TypeText Text:=Name  
    '***
    'Им текст
 
 
     '***
 
 
    'Раятельности
    Selection.GoTo What:=wdGoToBookmark, Name:=bkmContent  E("БизнесМодель.Процакладке
    Selection.TypeText Text:=ob.СодержаниеДеятельности    Set ProcSFiltr м текст
 
 
        P    Filtr.Условия.Параметры.GUID.еханизма OLE
     Set      
 
     = ProcSFiltr.Выполнить
        Set ником Процессов
    Set ProcS = app.ПолучитьОбъектПоУмолчанию_OLE("БизнесМодель.Процессы")
 
        анию_OLE("БизнесМодель.СвязиСубъектов")
 
        'Создаем фильтр, чтлучить наш процесс как объект
        Set ProcSFiltr = ProcS.СоздатьФильтр
            ProcSFiltr.Условия.Параметры.GUID.Значение = ob.GUID
        Set ResultProcSFiltr = ProcSFiltr.Выполнить
        Set ProcName = ResultProcSFiltr.ПолучитьЭлемент(0)
 
 
    ует наш процесс
        countLinks = ResultPSLinkFiltr.Количим связи Процессы-Процессы
    Set ProcSubjectLink = app.ПолучитьОбъектПоУмолчанию_OLE("БизнесМодель.СвязиСубъектов")
 
          Dim LinkName() As String
        ReDim LinkName(countLinks)
 
      оторые участвуют в нашем процессе
        Set PSLinkFiltr = ProcSubjectLink.СоздатьФильтр
              'Связи субъекта с процессом: из "<Субъекедыдущего фильтра
            PSLinkFiltr.Условия.Параметры.ОбъектВ.Значение = ProcName
        Set ResultPSLinkFiltr = PSLinkFiltr.Выполнить
 
                 LinkText = ResultPSLinkFiltr.ПолучитьЭлемент(iрисутствует наш процесс
        countLinks = ResultPSLinkFiltr.КоличествоЭлементов
 
          'Второе вхождение символа
             азвания субъектов
        Dim Subjects() As String
        ReDim Subjects(countLinks)
 
                        Subjects(i) = Mid(Link названия связей
        Dim LinkName() As String
        ReDim LinkName(countLinks)
 
        первых двух символов "
 
        мента списка данные
        номер предпоследнего символаипах связей
        'Ищем второе вхождение символа справа
           ставлен строкой вида:
        CharPos)
 
                'Название типа связи между вхождениями<Процесс>" с типом "<Тип связи>"
 
        smbl = """" In)
      л "
 
        For i = 0 To countLinks - 1
 
            ние
    Selection.TypeParagraph 'с новой строки
    Selectioиями первых двух символов "
            LinkText = ResultPSLinkFiltr.ПолучитьЭлемент(i)
 
                ext:=CStr(countLinks)
    Selecдение символа
                FirstIn = InStr(LinkText, smbl)
 
                ection.TypeParagraph
 
ние символа
                SecondIn = InStr(FirstIn + 1, LinkText, smbl)
 
                кированный список
    Selection.Rangeежду вхождениями
                Subjects(i) = Mid(LinkText, FirstIn + 1, (SecondIn - FirstIn - 1))
 
            st:=False, _
        ApplyTo:=wdListApplyToWholeList, _
        Defauи справа первых двух символов "
 
                LastNeedCharPos = Len(LinkText) - 1 ts(i) + " (" + _
             днего символа
 
                                      
        If i <>е символа справа
                SecondIn = InStrRev(LinkText, smbl, LastNeedCharPos)
 
                ection.Range.ListFormat.RemoveNumbers Nежду вхождениями
 

Результат

Рисунок 2. Вид сформированного отчета. Все было создано кодом VBA без единой привязки
« ПредыдущаяНа уровень вышеСледующая »
Актуальные новости, публикации и практики для бизнес-архитекторов и аналитиков
Driven by DokuWiki