Это старая версия документа.
Необходимые данные из бизнес-модели для отчетов собираются через привязки. Оформление отчета делается средствами MS Word. При этом бывают ситуации, когда для воплощения требуемого решения, этого бывает не достаточно и требуется использование программного кода VBA.
Задачи, при которых имеет смысл использовать макросы:
Макросы можно использовать для получения данных непосредственно из базы. Даже можно написать макрос, который строит отчеты, аналогичный регламентирующему документу без единой привязки. Но в этом нет смысла при таком мощном Мастере отчетов.
VBA - Visual Basic for Applications (Visual Basic для приложений) - упрощённая реализация языка программирования Visual Basic, встроенная в линейку продуктов Microsoft Office.
Для того, чтобы создать или просмотреть макрос для отчета формата Word необходимо:
В Word 2007 закладка «Разработчик» по умолчанию скрыта. Чтобы вывести ее на показ необходимо:
Для того, чтобы создать или просмотреть макрос для отчета формата Excel необходимо:
В Excel 2007 закладка «Разработчик» по умолчанию скрыта. Чтобы вывести ее на показ необходимо:
Любой отчет изначально содержит следующий макрос:
Sub ПослеВыполненияОтчета(ob As Variant, app As Variant) ВыполненияОтчета" + CStr(ob.Название) End Sub
Этот макрос будет запускаться после вставки данных в отчет. Он используется в отчетах шаблонной базы данных, поставляемой с программой. Код по обработке отчета следует вставлять в этот макрос.
Переменные, которые передаются в макрос:
Просмотреть объектную модель Word для разработки макросов в редакторе Visual Basic можно по клавише F2.
При решении ряда задач средствами программирования бывает удобно оперировать данными привязок отчета. Для этого необходимо:
Ниже представлено как это это делается для разного типа привязок.
Тип привязки: Объект
В отчете такие привязки представлены полями.
Узнать название в шаблоне отчета: см. Вставка привязки в шаблон отчета, статья Пример определения названия привязки типа "Объект"
Использование названия привязки в коде:
ПеременнаяВКоде = Application.ActiveDocument.Variables.Item("Назв
Тип привязки: Список и Фильтр
В отчете такие привязки представлены таблицей.
Узнать название в шаблоне отчета: см. Вставка привязки в шаблон отчета, статья Пример определения названия привязки типа "Список")
Использование названия привязки в коде:
Set ТаблицДляОбработки = Application.ActiveDocument.Bookmarks("Название
Отчеты Business Studio имеют четкую структуру и в них присутствует множество таблиц. Поэтому высока вероятность того, что основные задачи будут связаны с их обработкой.
Примеры ключевых функций, которые будут полезны при работы с таблицами, приведены ниже.
Работа с таблицей через название привязки
Set Table = Application.ActiveDocument.Bookmarks("НазваниеПривязки"ривязки").Range.Tables(1) работы с конкретной таблицей countColumn = Tконкретной таблицей countColumn = Table.Columns.Count unt 'количество строк таблицыбцов таблицы countRow = Table.Rows.Count ки во 2й строке 1го столбцр
Работа с таблицей через её номер в документе
сountTables = ActiveDocument.Tables.Count количество таблиц в документе ц в документе Selection.GoTo What:=wdGoToTable, Which:=wdGoToFirst, Count:=5, Name:="" countColumn = Selection.Tице номер 5 countColumn = Selection.Tables(1).Columns.Count n.Tables(1).Rows.Count 'количбцов таблицы countRow = Selection.Tables(1).Rows.Count Text 'значение ячейки во 2рок таблицы
При работе с таблицами следует помнить ряд моментов:
On Error Resume Next ' игнорирование <error 5991> - ячейки таблицы имеют вертикальное объединение
СellText = Selection.Tables(1).Cell(3,2).Range.Text текст ячейки со служебными символами ебными символами СellText = Left$(СellText, (Len(CellText) - 2)) - чистый текст
Приведенная выше информация является не полной для работы с таблицами, а лишь обращает внимание на наиболее возможные ситуации.
Один и тот же отчет Business Studio может рассматриваться из разных мест:
При рассмотрение такого отчета в разных местах есть свои нюансы. Например, отчеты в HTML-публикации и Business Studio Portal не содержат колонтитулов, которые есть в отчете, сделанным отдельным документом Word.
Аналогичным образом могут быть и разные задачи по обработке отчета кодом в зависимости от направления формирования отчета. Для определения направления формирования отчета используются параметры: BSInThread, BSHtml и BSPortal.
Направление формирования отчета | BSInThread | BSHtml | BSPortal |
---|---|---|---|
Одиночный файл (Word, Excel) | False | False | False |
Пакетное формирование (Word, Excel) | True | False | False |
HTML-публикация | True | True | False |
Business Studio Portal | True | True | True |
Пример использования в коде:
Dim HTMLCreate As Boolean HTMLCreate = Application.ActiveDocument.Variables("BSHtml").Value 'True или False se If HTMLCreate Then MsgBox "Выводим в одиночный файл или потоком" Else MsgBox "Выводим для HTML: HTML-п
При формировании отчета типа HTML (HTML-публикация, Business Studio Portal) так же происходит формирование и отдельного файла типа Word.
При обработке кодом VBA отчета, сформированного для HTML-публикации или Business Studio Portal, следует помнить, что после формирования отчета представляет собой отображение не тех данных, что видны в браузере, а документ с показом кодов полей. Это не позволяет вести обработку гиперссылок.
Для "нормализации" отображения данных следует сначала использовать следующий код:
ActiveWindow.View.ShowFieldCodes = Not ActiveWindow.View.ShowFieldCodes 'Alt+F9 - видим не коды полей, а значения
При копировании отчета названия всех привязок изменяются.
В случае, если в отчете используется макрос, который "опирается" на названия привязок, то следует помнить, что после копирования такой отчет не сможет формироваться таким же образом как оригинал без дополнительной обработки.
Для корректной работы макроса рекомендуется использование проверки на предмет наличия привязки в отчете.
Пример проверки наличия привязки типа "Список". В документе это закладки.
Определяем название привязки типа "Список", которая представляет нужную таблицу. (см. Вставка привязки в шаблон отчета)
BookmarkName = "Изменения_процесса_e1ded8b0"сса_e1ded8b0" и 'Проверкривязки вязки Dim BookmarkIs As Boolean 'снь названия привязки Dim BookmarkIs As Boolean па Закладка For Each Bkm InActiveжной закладки нет Dim Bkm AsBookmark IfBkm.Name = BookmarkNameпа Закладка For Each Bkm InActiveDocument.Bookmarks отмечаем, что закладка есть адки в документе IfBkm.Name = BookmarkName Then plication.ActiveDocument.Bookmarks(B с нашим именем BookmarkIs = True hen 'если в документе закладккладка есть действия c таблицей End If
Выводить какое-либо сообщение в случае отсутствия привязки не рекомендуется по причине того, что если не будет данных для формирования привязки, то и соответствующей привязки не будет.
Пример проверки наличия привязки типа Объект
Определяем название привязки типа "Объект", которая представляет нужное поле в отчёте. (см. Вставка привязки в шаблон отчета)
VarName = "Статус_процесса_c9a10e8d"са_c9a10e8d" язки 'Проверривязки и в документе Dim VarIs As Boolean 'сначай привязки в документе Dim VarIs As Boolean For Each aVar In ActiveDocumenо привязки нет ame Then 'если среди них есть с нашимменные документа For Each aVar In ActiveDocument.Variables If aVar.Name = VarName Then = Application.ActiveDocument.Variab с нашим именем VarIs = True Then 'если в м это 'производим необходимые действия с переменной Enй
Закладки, не относящиеся к привязкам, например, созданные пользователем самостоятельно, при копировании отчетов не изменяются.
Из отчета можно напрямую обращаться к данным из базы бизнес-модели. Это делается двумя способами:
Обращение к параметрам объекта, от которого был вызван отчет, происходит таким образом:
ob.<СистемноеНазваниеПараметра>,
где
Например, при выводе отчета от процесса получить данные названия процесса можно таким образом:
Name = ob.Название Название объекта, от которого вызвали отчет
/code