Функция позволяет экспортировать исходные данные и таблицы результатов расчета в Microsoft Word.
Для экспорта исходных данных и результатов расчета следует выбрать команду меню Файл > Экспорт > Отчет в Word, Excel
Далее следует выделить данные, которые необходимо экспортировать, выбрать опцию «экспорт через *.tlb» и нажать кнопку ОК.
Шаблонами выступают обычные файлы .docx, редактируемые непосредственно в MS Word. Для управления выводом используется специальный язык разметки шаблона.
В комплект поставки входит базовый набор шаблонов для основных норм и языков. Пользователь может редактировать предоставленные шаблоны и создавать свои комплекты.
Для выбора языка выходной документации следует выбрать пункт меню Сервис > Параметры > Настройки языка > Язык выходных документов
Ввести дополнительную пользовательскую информацию для отчета можно на вкладке меню Файл > Общие данные расчета > Инфо
Поля соответствуют переменным в таблице данных «User».
Поле | Перемененная |
Титул | user.Title |
Название проекта | user.Project_name |
Клиент | user.Client |
Номер документа | user.document_No |
Редакция | user.Revision |
Дата | user.revision_date |
Принимающий | user.approved |
Проверяющий | user.checked |
Разработчик | user.prepared |
Базовый комплект шаблонов расположен в установочной директории Старт ...\CTAPTPR\Templates\
Каждому нормативному документу соответствует свой шаблон - корневой шаблон. Корневой шаблон может включать в себя другие шаблоны - включаемые шаблоны. Все вместе они составляют комплект шаблонов.
Для каждого языка выходных документов имеется возможность создать отдельный комплект шаблонов. Шаблоны должны находиться в соответствующей директории:
Язык | Имя папки |
Английский | en |
Испанский | esp |
Китайский | ch |
Русский | ru |
При существовании папки для выбранного языка выходных документов шаблоны в корне директории ...\CTAPTPR\Templates\ будут игнорироваться.
При запуске экспорта отчетов из СТАРТ генерируются текстовые таблицы данных, на основе которых генерируется отчет. Таблицы данных сохраняются в файлах с расширением .tbl во временную системную директорию ...\AppData\Local\Temp.
Каждая таблица данных разделена на секции. Секция начинается с её имени в квадратных скобках и заканчивается, если начинается новая секция или встречен конец файла.
Секция имеет один из двух типов: map (карта) или table (таблица). В секции типа map каждая строка имеет вид <ключ>=<значение>[,<дополнительные параметры>].
В секции table каждая строка имеет одинаковое число полей значений, разделённых запятой. При необходимости использовать запятую в качестве фрагмента данных, используется последовательность ,.
В каждой таблице предусмотрено две секции: 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 со значением «мм».
Все выражения на языке шаблонов находятся внутри обрамляющей пары открывающих и закрывающих последовательностей символов вида {#...#}.
В используемой дальше нотации в квадратные скобки заключены необязательные части директив, в треугольные скобки – мнемонические имена, которые должны быть заменены на реальное значение.
Общий вид директивы следующий:
{# <tag>[: attributes] #}
для переменных или
{# <tag>: attributes #} … {# end<tag> #}
для секций if, for и тп
Атрибуты директивы attributes – набор атрибутов, разделенных запятыми. Каждый атрибут представлен именем или парой <key>=<value>. В некоторых директивах вместо знака = могут использоваться логические операторы (см. ниже).
Пример директивы:
{# name: F=c, L=ru #}
Здесь tag это «name» и два атрибута «F» и «L» со значениями «с» и «ru» соответственно.
В каждый момент обработки шаблона имеется текущая таблица, которая используется по умолчанию. Каждая таблица имеет собственную структуру – набор строк, каждая из которых содержит набор переменных (аналогично строкам и полям таблицы БД) и соответствует своему файлу таблицы данных, сгенерированному в СТАРТ.
У текущей таблицы есть текущая строка, из которой извлекаются данные. Построчный обход таблицы с именем 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> позволяет итерировать по полям с фильтрацией по условию. Более подробно об условных атрибутах см. «Условные директивы».
Таблица таблиц содержит список сгенерированных таблиц, который может использоваться для вывода этих таблиц в порядке, установленном пользователем. Пример таблицы таблиц:
[meta]
DescrData=,1
Materials=,1
Таблица таблиц сохраняется в файле tables.tbl.
Для перевода на различные языки используется таблица трансляции, содержащая перевод наименований на различные языки. Перевод даётся для значений id переменных или произвольных строк. Пример таблицы трансляции:
[meta]
id
ru
en
it
[data]
DescrData, общие данные, general data, general data
section, участок
node, узел
Таблица трансляции сохраняется в файле translation.tbl.
Дополнительная пользовательская информация сохраняется в файле user.tbl.
Директивы переменных заменяются на данные из таблиц – переменные принимают значения полей текущей строки.
Каждая переменная может иметь несколько параметров:
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 #} = красный
Условные директивы позволяют оценивать значение и включать или исключать фрагмент шаблона по значению результата.
Условная директива выглядит так:
{# if: <condition> #}
[ {# else #} ]
{# endif #}
Condition – условное выражение. В условном выражении могут быть использованы операторы <, >, ==, !=, <=, >=. В качестве сравниваемых величин могут выступать строки в двойных кавычках, числа или переменные в виде [<table>.]<name>[.<parameter>]. table по умолчанию – текущая таблица, parameter по умолчанию – val.
Для проверки значения на существование переменной используется псевдо-свойство exist:
{# if: <name>.exist #}
Форма без оператора сравнения
{# if: <name> #}
является краткой формой записи
{# if: <name> != “” #}
Для перевода произвольных строк по таблице трансляции используется директива
{# tr:<text>, L=<lang> #},
где text – текст в двойных кавычках, подлежащий переводу, lang – целевой язык.
Пример: {# tr:”red”, L=ru #} = красный
Поддерживается включение изображений форматов JPEG, BMP, PNG, определяемые по расширению файлов *.jpeg, *.jpg, *.bmp, *png.
Файлы изображений берутся из той же папки, в которой находятся таблицы данных.
Для включения изображения используется директива
{# img: <filename>, w=<width>, h=<height> #},
где w и h – ширина и высота картинки в сантиметрах. Если один из параметров w или h отсутствует, используется оставшийся параметр, а картинка масштабируется пропорционально исходному размеру. Если оба параметра отсутствуют, картинка вставляется размером 100%.
Имя файла <filename> задаётся либо статически строкой в двойных кавычках, либо переменной в форме [<table>.]<name> , значение которой подставляется в качестве имени файла.
Специальная директива
{# 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 #}
Генератор отчётов – отдельная внешняя программа. При необходимости генератор можно использовать отдельно от СТАРТ, запустив исполняемый файл со следующими параметрами
...\CTAPTPR\StartReport\NTP.StartReport.Console.exe <main_template> <output> < template_directory> <data>
где:
<main_template> - путь до файла основного шаблона.
<output> - путь до файла отчета.
< template_directory> - директория комплекта шаблонов.
<data> - директория с данными.
Файл > Экспорт > Отчет в Word, Excel