Здесь показаны различия между выбранной ревизией и текущей версией данной страницы.
ru:manual:sample_questions:macros_in_report [2013/08/23 10:35] belkin удалено |
— (текущий) | ||
---|---|---|---|
Строка 1: | Строка 1: | ||
- | ====== Примеры использования макросов в отчетах ====== | ||
- | При проектировании объектной модели в каждом классе определяются необходимые параметры, часть информации является хранимой, часть рассчитывается по имеющимся данным. Процесс наращивания числа параметров в классе может быть бесконечным. Часто для вывода в отчете требуется в таблице добавить колонку, которая рассчитывается перемножением одного из параметров на данные другой колонки таблицы, или посчитать и подставить в таблицу сумму данных в колонке. Иногда нужно добавить график по данным таблицы. | ||
- | |||
- | Теперь эти задачи имеют решение. Можно написать макросы, которые будут выполняться перед или после выполнения отчета. Для этого требуется установить доверие на доступ к объектной модели VBA. | ||
- | |||
- | В Microsoft Word 2007 это осуществляется следующей последовательностью действий: | ||
- | |||
- | *нажать кнопку {{ru/manual/sample_questions/macros_in_report/macros_in_report_1418.png?34x35&nolink}} Office в верхнем левом углу, нажать кнопку "Параметры Word"; | ||
- | *выбрать закладку "Центр управления безопасностью", нажать кнопку "Параметры центра управления безопасностью"; | ||
- | *выбрать закладку "Параметры макросов", в разделе "Параметры макросов для разработчика" установить опцию "Доверять доступ к объектной модели проектов VBA". | ||
- | |||
- | В Microsoft Word 2010: | ||
- | |||
- | *выбрать пункт меню "Файл -> Параметры…"; | ||
- | *в окне "Параметры Word" выбрать закладку "Центр управления безопасностью", нажать кнопку "Параметры центра управления безопасностью"; | ||
- | *выбрать закладку "Параметры макросов", в разделе "Параметры макросов для разработчика" установить опцию "Доверять доступ к объектной модели проектов VBA". | ||
- | |||
- | Макросы можно использовать как для оформления отчета, так и для получения данных непосредственно из базы (можно написать макрос, который строит отчет, аналогичный регламентирующему документу без единой привязки). | ||
- | |||
- | Для того, чтобы просмотреть или создать макрос необходимо открыть шаблон отчета на редактирование с помощью гиперссылки //__Редактировать шаблон__// в справочнике отчеты объектов. В Microsoft Word 2007 в ленте "Разработчик" нажать кнопку "Visual Basic". Откроется окно Microsoft Visual Basic. В дереве "Project - Normal" щелчком открыть шаблон "ThisDocument" (Рис. 1). | ||
- | |||
- | [{{ ru/manual/sample_questions/macros_in_report/macros_in_report_1420.png?nolink |Рисунок 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, | ||
- | |||
- | где <СистемноеНазваниеПривязки> − это название привязки, которое отображается в дереве привязок на конечной странице мастера (см. [[ru/manual/report/master_report#конечная_страница_мастера_отчетов|Kонечная страница мастера отчетов]]). Таким образом получены данные привязки с типом "Объект". В макросе примера так получено значение привязки "СтавкаВЧас" для дальнейшего использования. | ||
- | |||
- | Можно получить значение закладки шаблона, по имени: | ||
- | |||
- | Application.ActiveDocument.Bookmarks("<СистемноеНазваниеПривязки>").Range.Tables(1), | ||
- | |||
- | где <СистемноеНазваниеПривязки> − это название привязки, которое отображается в дереве привязок на конечной странице мастера (см. [[ru/manual/report/master_report#конечная_страница_мастера_отчетов|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, | ||
- | |||
- | где <СистемноеНазваниеПривязки> − это название привязки, которое отображается в дереве привязок на конечной странице мастера (см. [[ru/manual/report/master_report#конечная_страница_мастера_отчетов|Kонечная страница мастера отчетов]]). | ||
- | |||
- | Затем строится диаграмма по данным выделенной таблицы: | ||
- | |||
- | WordBasic.InsertChart | ||
- | ===== Пример обращения к данным из базы в отчете ===== | ||
- | |||
- | В шаблоне отчета "Отчет по результатам имитации" можно посмотреть пример использования макроса для вывода данных из базы. Отчет находится в справочнике "Отчеты объектов", в папке "Шаблоны отчетов/ФСА". | ||
- | |||
- | Часть текста макроса, выполняемого после выполнения самого отчета, представлена ниже: | ||
- | |||
- | Sub ПослеВыполненияОтчета (ob As Variant, app As Variant) | ||
- | |||
- | Set StatTime = ob.СтатистикаВремени | ||
- | |||
- | ПостроитьДиаграмму StatTime, "Время", "Распределение времени выполнения процесса", 0, CDbl(ob.ШагВремени) | ||
- | |||
- | End Sub | ||
- | |||
- | Здесь идет обращение к параметрам объекта, от которого был вызван отчет: | ||
- | |||
- | ob.<СистемноеНазваниеПараметра>, | ||
- | |||
- | где ob - объект, от которого был вызван отчет; | ||
- | |||
- | <СистемноеНазваниеПараметра> − это системное название параметра объекта, которое можно просмотреть в Объектной модели (см. [[ru/manual/report/object_model]]). | ||
- | |||
- | В данном примере был получен список "Статистика времени" (оb.СтатистикаВремени) и вещественный параметр "Шаг группировки времени" (ob.ШагВремени) от элемента справочника "Статистики имитаций", от которого был вызван отчет. По полученному списку и параметру строится диаграмма. |