Экспорт отчетов в Microsoft Word с использованием пользовательских шаблонов

Функция позволяет экспортировать исходные данные и таблицы результатов расчета в Microsoft Word.

Для экспорта исходных данных и результатов расчета следует выбрать команду меню Файл > Экспорт > Отчет в Word

Далее следует выделить данные, которые необходимо экспортировать, выбрать опцию «экспорт через *.tlb» и нажать кнопку ОК.

1. Пользовательские шаблоны

Шаблонами выступают обычные файлы .docx, редактируемые непосредственно в MS Word. Для управления выводом используется специальный язык разметки шаблона.

В комплект поставки входит базовый набор шаблонов для основных норм и языков. Пользователь может редактировать предоставленные шаблоны и создавать свои комплекты.

2. Настройки

Для выбора языка выходной документации следует выбрать пункт меню Сервис > Параметры > Настройки языка > Язык выходных документов

Ввести дополнительную пользовательскую информацию для отчета можно на вкладке меню Файл > Общие данные расчета > Инфо

Поля соответствуют переменным в таблице данных «User».

Поле Перемененная
Титул user.Title
Название проекта user.Project_name
Клиент user.Client
Номер документа user.document_No
Редакция user.Revision
Дата user.revision_date
Принимающий user.approved
Проверяющий user.checked
Разработчик user.prepared

3. Комплекты шаблонов

Базовый комплект шаблонов расположен в установочной директории Старт ...\CTAPTPR\Templates\

Каждому нормативному документу соответствует свой шаблон - корневой шаблон. Корневой шаблон может включать в себя другие шаблоны - включаемые шаблоны. Все вместе они составляют комплект шаблонов.

Для каждого языка выходных документов имеется возможность создать отдельный комплект шаблонов. Шаблоны должны находиться в соответствующей директории:

Язык Имя папки
Английский en
Испанский esp
Китайский ch
Русский ru

При существовании папки для выбранного языка выходных документов шаблоны в корне директории ...\CTAPTPR\Templates\ будут игнорироваться.

4. Таблицы данных

При запуске экспорта отчетов из СТАРТ генерируются текстовые таблицы данных, на основе которых генерируется отчет. Таблицы данных сохраняются в файлах с расширением .tbl во временную системную директорию ...\AppData\Local\Temp.

Каждая таблица данных разделена на секции. Секция начинается с её имени в квадратных скобках и заканчивается, если начинается новая секция или встречен конец файла.

Секция имеет один из двух типов: map (карта) или table (таблица). В секции типа map каждая строка имеет вид <ключ>=<значение>[,<дополнительные параметры>].

В секции table каждая строка имеет одинаковое число полей значений, разделённых запятой. При необходимости использовать запятую в качестве фрагмента данных, используется последовательность &comma;.

В каждой таблице предусмотрено две секции: meta типа map и data типа table. В секции meta описываются параметры полей, значения которых содержатся в секции data.

Формат описания meta:

<id>[=<val>[,<name>[,<type>[,<units>[,<factor>]]]]]

id – идентификатор поля

val – значение, по умолчанию – пустая строка

name – имя поля, по умолчанию совпадает с id

type – тип, по умолчанию 0

units – единицы измерения, по умолчанию – пустая строка

factor – множитель для приведения значения к единицам СИ, по умолчанию равен 1.0

Допускается опускать значения некоторых параметров, сохраняя запятые. Например, строка

foo=,42,,0.5

определяет поле со следующими параметрами:

id name type units factor
foo foo 42   0.5

В секции data находятся строки, каждая из которых – значения полей val в порядке, соответствующем описанию секции meta.

Пример фрагмента таблицы исходных данных:

[meta]

node_start

node_end

x=,,,мм

y=,,,мм

z=,,,мм

material=,,1

[data]

1,2,1000,0,0,09Г2С

2,3,0,1000,0,09Г2С

3,4,0,1000,0,09Г2С

Эта таблица определяет три строки данных:

node_start node_end x y z Material
1 2 1000 0 0 09Г2С
2 3 0 1000 0 09Г2С
3 4 0 1000 0 09Г2С

У переменных x, y, z определён непустой параметр units со значением «мм».

5. Синтаксис шаблонов

5.1. Директивы шаблона

Все выражения на языке шаблонов находятся внутри обрамляющей пары открывающих и закрывающих последовательностей символов вида {#...#}.

В используемой дальше нотации в квадратные скобки заключены необязательные части директив, в треугольные скобки – мнемонические имена, которые должны быть заменены на реальное значение.

Общий вид директивы следующий:

{# <tag>[: attributes] #}

для переменных или

{# <tag>: attributes #} … {# end<tag> #}

для секций if, for и тп

Атрибуты директивы attributes – набор атрибутов, разделенных запятыми. Каждый атрибут представлен именем или парой <key>=<value>. В некоторых директивах вместо знака = могут использоваться логические операторы (см. ниже).

Пример директивы:

{# name: F=c, L=ru #}

Здесь tag это «name» и два атрибута «F» и «L» со значениями «с» и «ru» соответственно.

5.2. Таблицы

В каждый момент обработки шаблона имеется текущая таблица, которая используется по умолчанию. Каждая таблица имеет собственную структуру – набор строк, каждая из которых содержит набор переменных (аналогично строкам и полям таблицы БД) и соответствует своему файлу таблицы данных, сгенерированному в СТАРТ.

У текущей таблицы есть текущая строка, из которой извлекаются данные. Построчный обход таблицы с именем name осуществляется специальными директивами:

{# for: <table>[,<condition> ] #}…{# endfor #}

На каждой итерации набор переменных принимает значения из текущей строки таблицы.

Необязательный атрибут <condition> позволяет итерировать по записям с фильтрацией по условию. Более подробно об условных атрибутах см. «Условные директивы».

Значение условия оценивается на каждом шаге цикла в контексте текущей записи. Если условие истинно, происходит выполнение тела цикла для этой записи, в противном случае запись пропускается и происходит переход к обработке следующей записи.

Блоки for могут быть вложенными.

Поля таблицы также могут итерироваться. Это делается при помощи директивы

{# for: [<table>.]fields [,<condition> ] #} {# endfor #}

На каждом шаге цикла for fields доступны переменные, соответствующие параметрам текущей переменной: id, name, val и тд. По сути fields – специальная таблица, которая создаётся на каждом шаге цикла for table. Если for fields используется вне for table, то необходимо задать префикс table. В этом случае значения берутся из секции meta.

Необязательный атрибут <condition> позволяет итерировать по полям с фильтрацией по условию. Более подробно об условных атрибутах см. «Условные директивы».

5.3. Таблица таблиц

Таблица таблиц содержит список сгенерированных таблиц, который может использоваться для вывода этих таблиц в порядке, установленном пользователем. Пример таблицы таблиц:

[meta]

DescrData=,1

Materials=,1

Таблица таблиц сохраняется в файле tables.tbl.

5.4. Вспомогательные таблицы данных

5.4.1. Таблица трансляции

Для перевода на различные языки используется таблица трансляции, содержащая перевод наименований на различные языки. Перевод даётся для значений id переменных или произвольных строк. Пример таблицы трансляции:

[meta]

id

ru

en

it

[data]

DescrData, общие данные, general data, general data

section, участок

node, узел

Таблица трансляции сохраняется в файле translation.tbl.

5.4.2. Таблица дополнительной информации

Дополнительная пользовательская информация сохраняется в файле user.tbl.

5.5. Переменные

Директивы переменных заменяются на данные из таблиц – переменные принимают значения полей текущей строки.

Каждая переменная может иметь несколько параметров:

id – идентификатор переменной (обязательный).

name – имя переменной (необязательный, если опущен – совпадает с id).

val – значение переменной (обязательный).

type – тип (классификатор) переменной. Используется для фильтрации. Например, в исходных данных поля node1, node2,x,y,z имеют type=0, основные параметры – type=1, дополнительные – type=2.

factor – множитель значения, приводящий его в систему СИ

units – единицы измерения

Параметры units и factor позволяют выводить значения как в исходных единицах, так и менять единицы в шаблоне.

Общий вид переменной:

{# [<table>.]<id>[:<attr1>=<value>,<attr2>=<value2>…] #}.

table – имя таблицы. Если имя таблицы опущено, то значение переменной берётся из текущей таблицы, устанавливаемой в цикле {# for… #}. Если имя таблицы присутствует, то используются значения по умолчанию из раздела [meta], даже если данная таблица открыта в цикле.

id – идентификатор переменной. Атрибуты:

D – display: выводимый атрибут переменной, по умолчанию val

L – language: язык вывода. Выводимое значение транслируется в требуемый язык

M – multiplier: множитель. Выводимое значение умножается на значение множителя. Может быть задано числом или выражением, содержащем знаки * или / и переменную ‘factor’ – значение параметра factor текущей переменной.

F – format: формат вывода числа в виде s[n]. s указывает тип вывода (e – экспоненциальный; f – с фиксированной запятой; g – выбирается наиболее короткая запись из e и f; n – целое число; t – значение преобразуется в текст «Нет» [если значение пусто или равно 0] и «Да» в противном случае; c – с заглавной буквы), n указывает число выводимых знаков.

Следующие примеры показывает различные способы вывода переменной:

{# code: L=en #} – вывод значения переменной code на английском языке

{# force #} – вывод значения переменной force в том виде, как оно содержится в таблице данных

{# force: L=ru, D=name #} – вывод имени переменной force на русском языке

{# force: F=g5 #} – вывод значения переменной force в универсальном формате с 5 значащими цифрами

{# force:D=units, L=ru#} – вывод единиц переменной на русском языке

{# force: M=factor*1000, F=e3 #} – вывод значения переменной force, умноженного на 100, в научном формате с 3 значащими цифрами.

Пусть, например, имеются следующие данные текущей записи текущей таблицы:

id=A, name=A, value=42, units=mm, color=red

а также соответствующий перевод слов «mm» и «red» в таблице трансляции.

Тогда в шаблоне можно написать различные директивы:

{# A #}  =  42

{# A: M=0.01, F=e1 #} = 0.4

{# A: D=value #} = 42

{# A: D=name #} = A

{# A: D=units, L=ru #} = мм

{# A: D=color, L=ru #} = красный

5.6. Условные директивы

Условные директивы позволяют оценивать значение и включать или исключать фрагмент шаблона по значению результата.

Условная директива выглядит так:

{# if: <condition> #}

[ {# else #} ]

{# endif #}

Condition – условное выражение. В условном выражении могут быть использованы операторы <, >, ==, !=, <=, >=. В качестве сравниваемых величин могут выступать строки в двойных кавычках, числа или переменные в виде [<table>.]<name>[.<parameter>]. table по умолчанию – текущая таблица, parameter по умолчанию – val.

Для проверки значения на существование переменной используется псевдо-свойство exist:

{# if: <name>.exist #}

Форма без оператора сравнения

{# if: <name> #}

является краткой формой записи

{# if: <name> != “” #}

5.7. Директива трансляции

Для перевода произвольных строк по таблице трансляции используется директива

{# tr:<text>, L=<lang> #},

где text – текст в двойных кавычках, подлежащий переводу, lang – целевой язык.

Пример: {# tr:”red”, L=ru #} = красный

5.8. Изображения

Поддерживается включение изображений форматов JPEG, BMP, PNG, определяемые по расширению файлов *.jpeg, *.jpg, *.bmp, *png.

Файлы изображений берутся из той же папки, в которой находятся таблицы данных.

Для включения изображения используется директива

{# img: <filename>, w=<width>, h=<height> #},

где w и h – ширина и высота картинки в сантиметрах. Если один из параметров w или h отсутствует, используется оставшийся параметр, а картинка масштабируется пропорционально исходному размеру. Если оба параметра отсутствуют, картинка вставляется размером 100%.

Имя файла <filename> задаётся либо статически строкой в двойных кавычках, либо переменной в форме [<table>.]<name> , значение которой подставляется в качестве имени файла.

5.9. Включение шаблонов

Специальная директива

{# include: <filename>[, curTable=<table>] #}

позволяет включить в текущий шаблон содержимое другого шаблона с именем <filename>. Если filename – строка, заключённая в кавычки, то она используется как есть, в противном случае интерпретируется как имя переменной в виде [<table>.]<name>, значение которой подставляется в качестве имени файла.

Если указан атрибут curTable, то переменные во включаемом шаблоне с именами curTable и curTable_config будут заменены на переменные с именами <table> и <table>_config соответственно. Это позволяет использовать один и тот же шаблон с разными таблицами, которые устанавливаются при включении этого шаблона.

При включении шаблонов используется содержимое только основного раздела документа. Определение стилей, колонтитулы, настройки страниц и разделов включаемых шаблонов игнорируются. Стили и параметры страниц должны быть настроены в главном шаблоне. Поэтому все включаемые шаблоны рекомендуется создавать на основе корневого шаблона, таким образом, стили документов будут однозначно совпадать.

Примеры:

Следующая директива включает шаблон из файла Materials.docx:

{# include: “Materials.docx” #}

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

{# for: tables #}

{# name: L=ru, F=c #} ({# name: L=en, F=c #})

{# include: id #}

{# endfor #}

6. Генератор шаблонов

Генератор отчётов – отдельная внешняя программа. При необходимости генератор можно использовать отдельно от СТАРТ, запустив исполняемый файл со следующими параметрами

...\CTAPTPR\StartReport\NTP.StartReport.Console.exe <main_template> <output> < template_directory> <data>

где:

<main_template> - путь до файла основного шаблона.

<output> - путь до файла отчета.

< template_directory> - директория комплекта шаблонов.

<data> - директория с данными.

Доступ из меню

Файл > Экспорт > Отчет в Word