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


Примеры использования макросов в отчетах

При проектировании объектной модели в каждом классе определяются необходимые параметры, часть информации является хранимой, часть рассчитывается по имеющимся данным. Процесс наращивания числа параметров в классе может быть бесконечным. Часто для вывода в отчете требуется в таблице добавить колонку, которая рассчитывается перемножением одного из параметров на данные другой колонки таблицы, или посчитать и подставить в таблицу сумму данных в колонке. Иногда нужно добавить график по данным таблицы. 

Теперь эти задачи имеют решение. Можно написать макросы, которые будут выполняться перед или после выполнения отчета. Для этого требуется установить доверие на доступ к объектной модели VBA.

В Microsoft Word 2003 это осуществляется следующей последовательностью действий:

  • выбрать пункт меню «Сервис –> Параметры…»;
  • в окне «Параметры» выбрать закладку «Безопасность», нажать кнопку «Защита от макросов»;
  • в окне «Безопасность» выбрать закладку «Надежные источники»; установить опцию «Доверять доступ Visual Basic Project».

В Microsoft Word 2007:

  • нажать кнопку image1419.jpg Office в верхнем левом углу, нажать кнопку «Параметры Word»;
  • выбрать закладку «Центр управления безопасностью», нажать кнопку «Параметры центра управления безопасностью»;
  • выбрать закладку «Параметры макросов», в разделе «Параметры макросов для разработчика» установить опцию «Доверять доступ к объектной модели проектов VBA».

В Microsoft Word 2010:

  • выбрать пункт меню «Файл –> Параметры…»;
  • в окне «Параметры Word» выбрать закладку «Центр управления безопасностью», нажать кнопку «Параметры центра управления безопасностью»;
  • выбрать закладку «Параметры макросов», в разделе «Параметры макросов для разработчика» установить опцию «Доверять доступ к объектной модели проектов VBA».

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

Для того, чтобы просмотреть или создать макрос необходимо открыть шаблон отчета на редактирование с помощью гиперссылки Редактировать шаблон в справочнике отчеты объектов. В Microsoft Word 2003 выбрать пункт меню «Сервис –> Макросы –> Редактор Visual Basic». В Microsoft Word 2007 в ленте «Разработчик» нажать кнопку «Visual Basic». Откроется окно Microsoft Visual Basic. В дереве «Project - Normal» щелчком открыть шаблон «ThisDocument» (Рис. 17.3.1).

image1421.jpgРис. 17.3.1

Названия макросов должны быть следующими:

  • «ПередВыполнениемОтчета» − макрос будет запускаться перед вставкой данных в отчет;
  • «ПослеВыполненияОтчета» − макрос будет запускаться после вставки данных в отчет.

Переменные, которые передаются в макрос:

  • «ob» − объект, от которого был вызван отчет;
  • «app» − приложение, от которого был вызван отчет, то есть Business Studio.

В отчетах шаблонной базы данных, поставляемой с программой, используется макрос «ПослеВыполненияОтчета».

Внимание: Просмотреть объектную модель Word для разработки макросов в редакторе Visual Basic можно по клавише F2.

Пример обращения к значению переменной и данным таблицы в отчете

В шаблоне отчета «Дневная загрузка ресурса (субъекты)» демонстрационной базы данных можно посмотреть пример использования макроса для расчета суммы и вывода ее в таблицу. Отчет находится в справочнике «Отчеты объектов», в папке «Шаблоны отчетов/ФСА».

Текст макроса, выполняемого после выполнения самого отчета, представлен ниже:

Sub ПослеВыполненияОтчета(ob As Variant, app As Variant)

  a = CDbl(Application.ActiveDocument.Variables("СтавкаВЧас").Value)

  Set T = Application.ActiveDocument.Bookmarks("ДействияСтоимостьРесурсаИРоли").Range.Tables(1)

  kol = T.Rows.Count

  For i = 2 To kol - 1

    Stroka = T.Cell(i, 8).Range.Text

    l = Len(Stroka)

    If l > 1 Then

      d = CDbl(Left(Stroka, l - 1)) 'убрать последний символ ячейки

      T.Cell(i, 9).Range.Text = CStr(d * a)

    End If

  Next i

  T.Cell(kol, 9).AutoSum

End Sub

Можно получить значение переменной шаблона, обозначаемой DOCVARIABLE, по имени:

Application.ActiveDocument.Variables("<СистемноеНазваниеПривязки>").Value,

где <СистемноеНазваниеПривязки> − это название привязки, которое отображается в дереве привязок на конечной странице мастера (см. Kонечная страница мастера отчетов). Таким образом получены данные привязки с типом «Объект». В макросе примера так получено значение привязки «СтавкаВЧас» для дальнейшего использования.

Можно получить значение закладки шаблона, по имени:

Application.ActiveDocument.Bookmarks("<СистемноеНазваниеПривязки>").Range.Tables(1),

где <СистемноеНазваниеПривязки> − это название привязки, которое отображается в дереве привязок на конечной странице мастера (см. Kонечная страница мастера отчетов). Таким образом можно получить данные привязки с типом «Список», «Фильтр», «Дерево». В макросе примера получена таблица «ДействияСтоимостьРесурсаИРоли», и далее ведется работа с данными таблицы.

Пример вывода графика по данным таблицы в отчете

В шаблоне отчета «Значение показателя за период» демонстрационной базы данных можно посмотреть пример использования макроса для вывода графика по данным таблицы. Отчет находится в справочнике «Отчеты объектов», в папке «Шаблоны отчетов/ССП».

Текст макроса, выполняемого после выполнения самого отчета, представлен ниже:

Sub ПослеВыполненияОтчета (ob As Variant, app As Variant)

  Application.ActiveDocument.Bookmarks("Значения_Показателя").Range.Tables(1).Select

  WordBasic.InsertChart

End Sub

Здесь выделяются данные таблицы по имени закладки шаблона:

Application.ActiveDocument.Bookmarks("<СистемноеНазваниеПривязки>").Range.Tables(1).Select,

где <СистемноеНазваниеПривязки> − это название привязки, которое отображается в дереве привязок на конечной странице мастера (см. Kонечная страница мастера отчетов).

Затем строится диаграмма по данным выделенной таблицы:

WordBasic.InsertChart

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

В шаблоне отчета «Отчет по результатам имитации» можно посмотреть пример использования макроса для вывода данных из базы. Отчет находится в справочнике «Отчеты объектов», в папке «Шаблоны отчетов/ФСА».

Часть текста макроса, выполняемого после выполнения самого отчета, представлена ниже:

Sub ПослеВыполненияОтчета (ob As Variant, app As Variant)

   Set StatTime = ob.СтатистикаВремени

   ПостроитьДиаграмму StatTime, "Время", "Распределение времени выполнения процесса", 0, CDbl(ob.ШагВремени)

End Sub

Здесь идет обращение к параметрам объекта, от которого был вызван отчет:

ob.<СистемноеНазваниеПараметра>,

где ob – объект, от которого был вызван отчет;

<СистемноеНазваниеПараметра> − это системное название параметра объекта, которое можно просмотреть в Объектной модели (см. http://wiki.businessstudio.ru/doku.php/ru/manual/report/object_model).

В данном примере был получен список «Статистика времени» (оb.СтатистикаВремени) и вещественный параметр «Шаг группировки времени» (ob.ШагВремени) от элемента справочника «Статистики имитаций», от которого был вызван отчет. По полученному списку и параметру строится диаграмма.

Актуальные новости, публикации и практики для бизнес-архитекторов и аналитиков
Driven by DokuWiki