Общая структура шаблона похожа на язык разметки XML. Шаблон представляет собой дерево элементов. Элемент определяется одним или двумя тэгами. У элемента есть вложенные элементы, атрибуты и содержимое.
Допустимые имена элементов (без учета регистра):
1.group – Группа: используется только как обрамление таблицы.
2.container – Контейнер: используется для групповых отчётов. (См. описание генератора групповых отчётов)
3.list - Список элементов: используется только как обрамление таблицы
4.param – Параметр: используется только внутри таблицы, содержимое игнорируется. Сам элемент заменяется значением из колонки состава изделия. Элементы param не должны быть вложены один в другой
5.group_macro – Макрос обработки группы. Должен использоваться как вложенный элемент элемента group.
6.summary – Итог. Используется только как обрамление таблицы
7.outcome – Результирующее значение. Используется внутри элемента summary.
8.frag – Вставка в ячейку фрагмента.
9. sum_res – Результат суммирования описанного в параметрах состава изделия на вкладке «Суммирование». Используется внутри таблицы summary.
10. variable – Значение переменной. Переменная должна существовать в файле, на основе которого создаётся отчёт.
11. table_hider – Элемент позволяющий скрыть таблицу. Используется вместе с фильтром.
Из приведенных выше элементов только group и list могут быть элементами верхнего уровня.
Допустимые значения атрибутов:
1.name – Имя: фактически имеет смысл только для элемента типа param.
2.filter – Фильтр: используется во всех элементах. Подробнее см. ниже
3.recursive – Рекурсивный элемент: имеет смысл только для group и list. При наличии иерархии во входных данных влияет на результат отбора записей состава изделия.
4.recursive_template – Атрибут говорит о том, что элемент является шаблоном для всех групп.
5.str_process – Используется в элементе param и outcome для постобработки текстового значения, полученного из записи. Данный атрибут используется, если необходимо провести несущественную обработку текстового значения. Например, задать форматирование и скорректировать число знаков после запятой.
6.str_proc_macro - Используется в элементе param и outcome для постобработки текстового значения, полученного из записи. Данный атрибут использует указанный макрос для обработки текста.
7.hide_table – Используется в элементах обрамляющих таблицы. Задает правило, по которому таблица не выводится.
8.source – Используется с frag
9.sorce_macro - Используется с frag
10. from_item - Используется с frag
11. regenerate_3d – Используется с frag
12. index – Индекс, используется с table_hider
Элементы имеют 2 формы записи:
1. {list}содержимое элемента{/list} - два тэга и содержимое
2. {param name=«Наименование»/} – один тэг и нет содержимого.
При генерации отчета элементы group и list копируют в отчёт содержимое (таблицу) для каждой группы/записи состава изделия.
Элемент group
Элементы param в таблице элемента group заполняются следующим образов: берется первая запись из группы и подставляются её значения.
Все вложенные элементы list будут оперировать объединенными данными (теми данными, что показываются в окне состава изделия в режиме Применить представление состава изделия ).
Элемент list
Если элемент list не вложен в элемент group, тогда он оперирует всеми записями состава изделия (как они выглядят в окне состава изделия с выключенным режимом Применить представление состава изделия ).
Если входные данные имеют иерархию:
•По умолчанию флаг атрибут recursive отключен, т.е. будут выводится только записи состава верхнего уровня.
•Если выставить recursive в true, то будут выводиться все записи.
Допускается в элементе list создавать вложенный элемент list. В этом случае для каждой записи состава изделия с дочерними записями будет создана и заполнена таблица из вложенного элемента list.
Элемент param
Элемент param заменятся на соответствующее значение ячейки записи состава изделия.
Полная запись элемента: {param name=«Имя_колонки»/}. Полную запись необходимо использовать, если имя колонки содержит пробелы.
У элемента есть упрощенная запись:
1){param Имя_колонки/} - name является атрибутом по умолчанию, поэтому его указание не обязательно
2){Имя_колонки/} - param является элементом по умолчанию, поэтому его указание не обязательно
Например запись типа: {количество всего/} – не распознается как правильная. Для имен из 2 и более слов нужно использовать полную запись.
Для вывода позиции зарезервированы имена: Pos, Position, Поз, Позиция
Элемент summary
Элемент обрамляет таблицу. Может использоваться как элемент верхнего уровня. В этом случае в отчёт просто копируется таблица.
При использовании элемента внутри элементов group и list можно выводить в таблицу summary информацию полученную обработкой записей group/list. Информация выводится с помощью элемента outcome.
Необязательный атрибут before=«true» выведет таблицу до вывода записей group/list.
Пример элемента summary верхнего уровня:
Header |
|
EmptyGlobalHeader |
|
|
Пример с вложением в group и list элементов:
Header |
|
EmptyGlobalHeader |
|
|
|
{Раздел str_process=«str = P.SpecGroup(str)»/} |
|
EachGroupHeader: |
Всего: {outcome name=«Количество» out_operation=«numeric_sum» argument=«F4»/} |
EachGroupFooter: |
Всего: {outcome name=«Количество» out_operation=«numeric_sum» argument=«F4»/} |
AllGroupsHeader: |
Всего: {outcome name=«Количество» out_operation=«numeric_sum»/} |
AllGroupsFooter: |
Всего: {outcome name=«Количество» out_operation=«numeric_sum»/} |
AllGroupsFooter: |
Все имена: {outcome name=«Наименование» out_operation=«str_concat» argument=«-;»/} |
AllGroupsFooter: |
Уникальные имена: {outcome name=»Наименование» out_operation=«unique_strs» argument=«;»/} |
Header |
|
EmptyGlobalFooter |
|
|
Элемент outcome
Элемент нужен для вывода результирующей информации внутри таблицы, обрамленной {summary}.
Основные атрибуты:
1.name – имя параметра, по которому собирается результирующая информация.
2.out_operation – тип обработки значений:
•numeric_sum – числовая сумма всех значений
•str_concat – суммирование строк.
•unique_strs – список уникальных значений.
3.argument – дополнительный строковый параметр передаваемый out_operation
•numeric_sum – формат вывода строки
•str_concat – разделитель между суммируемыми строками.
•unique_strs – разделитель между суммируемыми строками.
Также можно задать атрибут сортировки записей, которые будут участвовать в расчёте с помощью атрибута source_filter (работает аналогично параметру filter). Можно использовать str_process для постобработки строки.
Примеры:
{outcome name=«Наименование» out_operation=«unique_strs» argument=«;»/}
Всего: {outcome name=«Количество» out_operation=«numeric_sum» argument=«F4»/}
Элемент sum_res
Элемент нужен для вывода результата суммирования, настроенного в параметрах состава изделия, внутри таблицы обрамленной {summary}.
Основные атрибуты:
name – имя суммирования. Имя можно посмотреть в окне состава изделия вызвав контекстное меню Состав изделия/Результаты суммирования.
Имя можно не задавать. Тогда оно будет выбрано автоматически (имя представления + имя первого суммирования ).
Можно использовать атрибут filter.
Можно использовать str_process для постобработки строки.
Примеры:
{sum_res/}
{sum_res name=«Mass»/}
Всего: {sum_res Mass/}
Элемент variable
Элемент нужен для вывода значений переменных документа сборки в отчёт. Оно может быть выведено в таблицу заголовка summary или в таблицы group и list.
Основные атрибуты:
name – имя переменной.
Если переменной нет в документе, будет выведена пустая строка.
Можно использовать атрибут filter. Можно использовать str_process для постобработки строки.
Примеры:
{variable name=«nCount»/}
{variable name=«$Обозначение»/}
Форматированный вывод действительных значений (1 знак после запятой):
{variable name=«nCount» str_process=«str = str.AsDouble().Format(1)»/}
Элемент group_macro
Макрос обработки группы. Данный элемент должен использоваться как вложенный элемент элемента group. Может иметь атрибут filter - макрос будет применяться только к тем группам, которые удовлетворяют условию.
У элемента должен быть задано имя. Имя указывает макрос, который должен быть запущен перед заполнением таблицы. Прототип макроса: void func(MacroCallContext context, GroupItemInfo group);
Первый параметр содержит контекст вызова макроса.
Пример:
{group}
{group_macro name=«Gen.Gen.GroupMacro» filter=«Раздел = 'Спецификации\Стандартные изделия'»/}
…
{/group}
Пример макроса:
using System;
using System.Linq;
using TFlex.Model;
using System.Collections.Generic;
using TFlex.Model.Model2D;
using TFlex.CadReportGenerator;
namespace Gen
{
public class Gen
{
public static bool GroupMacro(MacroCallContext context, GroupItemInfo group)
{
var generAttrs = context.Properties.Attributes;// Проверка атрибутов отчета.
if(!generAttrs.HasAttribute(«attrName»)
> > generAttrs[«attrName»].ValueAsBool == false)
return true;
//%%TODO: заполнить
return true;
}
}
}
Для компиляции макроса надо добавить ссылку на TFPSCadReportGenerator.
Элемент frag
Элемент используется только внутри таблицы. По одному элементу на ячейку. На его место вставляется фрагмент.
Путь к фрагменту задается одним из 4-ех способов:
1.Имя файла берется из колонки состава изделия : {frag name=«Примечание»/}
2.Имя файла явно задается: {frag source=«<Болты>Болт ГОСТ 123123.grb»/}
3.Имя получается по текущему элементу (тот фрагмент, из которого подняты данные): {frag from_item=«true»/}
4.Имя получается из макроса (см. source_macro): {frag source_macro=«Gen.Gen3.SourceMacro»/}
Можно указать имя страницы в документе фрагмента, которую вставлять в ячейку:
{Frag Source=«<Fitting_v2>Sketch.grb» page=«sketch_p»/}
Или
{Frag Source=«<Fitting_v2>Sketch.grb» page_macro=«Gen.Gen.FragPageMacro»/}
Формат макросов source_macro и page_macro:
String func(MacroCallContext context, ItemInfo currentItem);
Также можно воспользоваться атрибутом фильтр (filter=«…») аналогично элементам param и outcome.
Можно указать атрибут regenerate_3d (regenerate_3d=«true») для того, чтобы вставляемый фрагмент всегда пересчитывал 3D при пересчете 2D (используется с проекциями).
Можно использовать атрибут auto_width=«true/false» – автоматический подбор ширины фрагмента, чтобы он вписывался в ячейку. По умолчанию - true.
Элемент table_hider
В теги обрамляющие таблицы можно добавить несколько таблиц. С помощью тега table_hider можно задать логику, по которой таблицы будут скрываться.
Используемые атрибуты:
•index – индекс вложенной в родительский тег таблицы (индексация от 0)
•filter – фильтр по которому скрывается таблицы
Пример:
{table_hider index=«0» filter=« Формат = 'БЧ' » /}
Результат:
Атрибуты
В общем случае атрибуты записываются как attrName=«attrValue» внутри открывающего элемент тэга.
Атрибут filter
Пример записи фильтра:
{group filter=«раздел = 'Спецификации\Детали'»}
Первая лексема – имя столбца состава изделия.
Вторая лексема – оператор.
Третья лексема – значение.
Нужно заметить, что оператор у фильтра (в данном случае ‘=’) записывается через пробел, в отличие от атрибутов, где пробела нет. Строковое значение пишется в одинарных кавычках.
Между выражениями можно указывать логическую связь: AND / OR.
{group filter=«раздел = 'Спецификации\Детали' OR раздел = ‘Unknown’»}
Внутри фильтра можно использовать скобки ( ).
{group filter=«(раздел = ‘A' AND количество = 1) OR (раздел = ‘B' AND количество = 2)»}
Обработка специальных символов в названии столбца. Если имя столбца содержит пробелы или символы, то при написании фильтра их необходимо заменять следующим образом:
•амперсанд «&» заменяется на «&»
•меньше «<» заменяется на «<»
•больше «>» заменяется на «>»
•кавычки «» заменяется на «"»
•апостроф «'» заменяется на «'»
•пробел « » заменяется на « »
•открывающая круглая скобка "(" заменяется на "("
•закрывающая круглая скобка ")" заменяется на ")"
Например:
{param name=«Количество всего» filter=«Количество всего != 0»/}
При формировании условия   заменится пробелом.
Атрибут hide_table
Аналогичен атрибуту filter. Задает условие, по которому для текущего элемента не будет выводиться таблица. Можно использовать в элементах обрамляющих таблицу.
Пример:
{group hide_table=«Раздел = 'Нет' OR Раздел = '' »}
…
{/group}
Для групп, у которых не задан Раздел или он равен «Нет», не будет создана таблица заголовка группы.
Список доступных операторов:
•=
•!=
•>
•>=
•<
•<=
•IsOneOf - Входит в список
•IsNotOneOf - Не входит в список
•IsNull - Не содержит данных
•IsNotNull - Содержит какие-либо данные
•ContainsSubstring - Содержит
•NotContainSubstring - Не содержит
•StartsWithSubstring - Начинается с
•EndsWithSubstring - Заканчивается на
•IsEmptyString - Не содержит текст
•IsNotEmptyString - Содержит текст
•MatchMask - Соответствует маске
•NotMatchMask - Не соответствует маске
Атрибут str_process
Используется в элементах param и out_come для постобработки текстового значения, полученного из элемента.
Пример: Значение атрибута записывается на C#. Результирующая переменная «str».
str_process=«str = str.Replace('Д', 'V')»
Есть предопределенные методы доступные в классе «P»:
•P.SpecGroup – Обрабатывает полное имя раздела спецификации и оставляет только имя подраздела после последнего ‘\’.
str_process=«str = P.SpecGroup(str)».
•P.AsDouble – Преобразование строки в действительное число:
str = (str.AsDouble() * 1.2).ToString()
•P.AsInt – Преобразование строки в целое число:
str = (str.AsInt() * 2).ToString()
•P.Format – Преобразовать число в строку с форматированием (число знаков после запятой по умолчанию 2):
str = (str.AsDouble() * 1.2).Format(1) - число знаков после запятой 1.
str = (str.AsDouble() * 1.2).Format() - число знаков после запятой 2.
Пример составной обработки:
{Раздел str_process=«str = P.SpecGroup(str).Replace('Д', 'V').ToLowerInvariant()»/}
Атрибут str_proc_macro
Используется в элементах param и outcome для постобработки текстового значения, полученного из элемента. Значение атрибута должно задавать имя макроса постобработки.
Пример атрибута:
{param name=«Title_1» str_proc_macro=«Gen.Str.ConstVarReplacer»/}
Пример макроса:
using System;
using TFlex.Model;
using TFlex.Model.Model2D;
using TFlex.Model.Model3D;
using TFlex.CadReportGenerator;
namespace Gen
{
public class Str
{
public static string ConstVarReplacer(MacroCallContext context, String originalValue)
{
if(String.IsNullOrWhiteSpace(originalValue))
return originalValue;
else if(originalValue == «ConstPart»)
return «Постоянные данные исполнений:»;
else if(originalValue == «VarPart»)
return «Переменные данные для исполнений:»;
else
return originalValue;
}
}
}
Атрибут from_item
Является булевым атрибутом и используется с элементом frag. Означает, что путь к фрагменту формируется из текущего элемента (вставляется тот же фрагмент, из которого подняты данные):
Пример:
{frag from_item=«true»/}
Атрибут source
Используется с элементом frag. Задает путь к файлу фрагмента, который надо вставить:
Пример:
{Frag Source=«<Fitting_v2>Sketch.grb»/}
Атрибут source_macro
Используется с элементом frag. Задает путь к файлу фрагмента, который надо вставить с помощью макроса:
Пример:
{frag source_macro=»Gen.Gen3.FragSourceMacro»/}
Пример макроса:
using System;
using System.Linq;
using TFlex.Model;
using System.Collections.Generic;
using TFlex.Model.Model2D;
using TFlex.CadReportGenerator;
namespace Gen
{
public class Gen3
{
public static string FragSourceMacro(MacroCallContext context, ItemInfo item)
{
string val = item[»Примечание»];
return String.IsNullOrWhiteSpace(val) ? «<Fitting_v2>Sketch.grb» : val;
}
}
}
Атрибут page
Используется с элементом frag. Задает имя страницы вставляемого фрагмента:
Пример:
{Frag Source=«<Fitting_v2>Sketch.grb» page=«Страница_2»/}
Атрибут regenerate_3d
Используется с элементом frag. Выставляет флаг вставляемого фрагмента
Пример:
{Frag Source=«<Fitting_v2>Sketch.grb» page=«Страница_2» regenerate_3d=»true»/}
Атрибут recursive_template
Используется в элементах group.
Имеет смысл для представлений, в которых включен учёт иерархии при группировке.
Означает, что все дочерние элементы будут использовать один элемент для своего отображения.
Пример:
recursive_template=»true»
Пример шаблона:
Конвертация значения массы
{Масса.Convert(кг) /} кг – Сконвертировать значение массы в кг перед выводом
{Масса.Convert(lb) str_process=»str=P.AsDouble(str).Format(2)»/} lb - – Сконвертировать значение массы в фунты перед выводом
Имя ЕИ можно использовать любое: Полное, короткое, глобальное.
Можно выводить имя ЕИ конкретного параметра:
Масса.Unit
ИмяПараметра.Unit.ShortName
ИмяПараметра.Unit.GlobalName
ИмяПараметра.Unit.FullName
Генератор групповых отчётов (TFPSCadVersionReportGenerator)
Генератор является специализированной версией обычного генератора отчётов (TFPSCadReportGenerator), предназначенной для генерации отчётов по Составу изделия, связанным с исполнениями. Основные отличия:
•Вместо элемента group используется элемент container.
•Специальный синтаксис в элементе param.
Элемент container
На вход генератора поступает древовидная структура, содержание которой зависит от типа представления (приблизительно похожа на отображение в окне состава изделия).
Структуру данных для разных вариантов групповой спецификации можно отобразить следующим образом:
Есть 2 основных типа узла дерева: Container и Item. (Узлы типа Version, Group и Position являются узлами типа Container).
Элемент container выводит узлы типа Container.
Элементы container можно вкладывать друг в друга. Например для А:
{container} Container
{container} Version
{container} Group
{list} Item
{/list}
{/container}
{/container}
{/container}
У каждого контейнера есть список заголовков, вывести которые в отчёт можно с помощью элемента param: {Title_1/} или {param name=«Title_2»/}.
Элемент list
Элемент list предназначен для вывода узлов Item.
Узел Item сам представляет собой иерархическую состав:
Элемент param будет выводить значения первого Элемента состава изделия первого SubItem.
Каждый SubItem связан с конкретной составом изделия (следовательно и исполнением). Для вывода колонки SubItem-a конкретной состава изделия используется специальный синтаксис:
{param name=«Количество$$01»/}, где подсвеченная желтым часть идентифицирует исполнение.
Если в представлении узел Item вложен в узел Version, то можно вместо задания конкретного исполнения, указать использование «текущего» исполнения:
{param name=«Количество$$_CurVer»/}
Элемент list также может быть вложенным:
{list} Item
{list} SubItem
{/list}
{/list}
Пример шаблона отчёта для представления типа А: