Общая структура шаблона похожа на язык разметки 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 верхнего уровня:
{summary}
Header |
EmptyGlobalHeader |
{/summary}
Пример с вложением в group и list элементов:
{summary}
Header |
EmptyGlobalHeader |
{/summary}
{group}
|
{Раздел str_process="str = P.SpecGroup(str)"/}
|
|
{list recursive="true"}
{summary before="true"}
EachGroupHeader: |
Всего: {outcome name="Количество" out_operation="numeric_sum" argument="F4"/} |
{/summary}
{summary}
EachGroupFooter: |
Всего: {outcome name="Количество" out_operation="numeric_sum" argument="F4"/} |
{/summary}
{/list}
{summary before="true"}
AllGroupsHeader: |
Всего: {outcome name="Количество" out_operation="numeric_sum"/} |
{/summary}
{summary}
AllGroupsFooter: |
Всего: {outcome name="Количество" out_operation="numeric_sum"/} |
{/summary}
{summary}
AllGroupsFooter: |
Все имена: {outcome name="Наименование" out_operation="str_concat" argument="-;"/} |
{/summary}
{summary}
AllGroupsFooter: |
Уникальные имена: {outcome name="Наименование" out_operation="unique_strs" argument=";"/} |
{/summary}
{/group}
{summary}
Header |
EmptyGlobalFooter |
{/summary}
Элемент 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
Элемент используется только внутри таблицы. По одному элементу на ячейку. На его место вставляется фрагмент.
Путь к фрагменту задается одним из четырёх способов:
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"/}
Также можно воспользоваться атрибутом фильтр (filter=”…”) аналогично элементам param и outcome.
Атрибут auto_width позволяет автоматически подбирать ширину фрагмента, чтобы он вписывался в ячейку.
Элемент 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”
Пример шаблона:
Генератор групповых отчётов (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}
Пример шаблона отчёта для представления типа А:
Смотри: Содержание