Это старая версия документа.
При проектировании объектной модели в каждом классе определяются необходимые параметры, часть информации является хранимой, часть рассчитывается по имеющимся данным. Процесс наращивания числа параметров в классе может быть бесконечным. Часто для вывода в отчете требуется в таблице добавить колонку, которая рассчитывается перемножением одного из параметров на данные другой колонки таблицы, или посчитать и подставить в таблицу сумму данных в колонке. Иногда нужно добавить график по данным таблицы.
Теперь эти задачи имеют решение. Можно написать макросы, которые будут выполняться перед или после выполнения отчета. Для этого требуется установить доверие на доступ к объектной модели VBA.
В Microsoft Word 2003 это осуществляется следующей последовательностью действий:
В Microsoft Word 2007:
В Microsoft Word 2010:
Макросы можно использовать как для оформления отчета, так и для получения данных непосредственно из базы (можно написать макрос, который строит отчет, аналогичный регламентирующему документу без единой привязки).
Для того, чтобы просмотреть или создать макрос необходимо открыть шаблон отчета на редактирование с помощью гиперссылки Редактировать шаблон в справочнике отчеты объектов. В Microsoft Word 2003 выбрать пункт меню «Сервис –> Макросы –> Редактор Visual Basic». В Microsoft Word 2007 в ленте «Разработчик» нажать кнопку «Visual Basic». Откроется окно Microsoft Visual Basic. В дереве «Project - Normal» щелчком открыть шаблон «ThisDocument» (Рис. 1).
Названия макросов должны быть следующими:
Переменные, которые передаются в макрос:
В отчетах шаблонной базы данных, поставляемой с программой, используется макрос «ПослеВыполненияОтчета».
Внимание: Просмотреть объектную модель 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 – объект, от которого был вызван отчет;
<СистемноеНазваниеПараметра> − это системное название параметра объекта, которое можно просмотреть в Объектной модели (см. Объектная модель).
В данном примере был получен список «Статистика времени» (оb.СтатистикаВремени) и вещественный параметр «Шаг группировки времени» (ob.ШагВремени) от элемента справочника «Статистики имитаций», от которого был вызван отчет. По полученному списку и параметру строится диаграмма.