Структура шаблона отчета

Предыдущая страницаВ началоСледующая страница

 

Общая структура шаблона похожа на язык разметки 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

Элемент используется только внутри таблицы. По одному элементу на ячейку. На его место вставляется фрагмент.

Путь к фрагменту задается одним из 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=" Формат = 'БЧ' " /}

 

clip1187

 

Результат:

clip1188

 

Атрибуты

В общем случае атрибуты записываются как attrName=”attrValue” внутри открывающего элемент тэга.

 

Атрибут filter

Пример записи фильтра:

{group filter="раздел = 'Спецификации\Детали'"}

 

Первая лексема – имя столбца структуры изделия.

Вторая лексема – оператор.

Третья лексема – значение.

 

Нужно заметить, что  оператор у фильтра (в данном случае ‘=’) записывается через пробел, в отличие от атрибутов, где пробела нет. Строковое значение пишется в одинарных кавычках.

 

Между выражениями можно указывать логическую связь: AND / OR.

{group filter="раздел = 'Спецификации\Детали' OR раздел = ‘Unknown’"}

 

Внутри фильтра можно использовать скобки ( ).

{group filter="(раздел = ‘A' AND количество = 1) OR (раздел = ‘B' AND количество = 2)"}

 

Обработка специальных символов в названии столбца. Если имя столбца содержит пробелы или символы, то при написании фильтра их необходимо заменять следующим образом:

амперсанд "&"  заменяется на "&amp;"

меньше "<"  заменяется на "&lt;"

больше ">" заменяется на "&gt;"

кавычки  """ заменяется на "&quot;"

апостроф  "'"  заменяется на "&apos;"

пробел " " заменяется на "&#032;"

Например:

{param name="Количество всего" filter="Количество&#032;всего != 0"/}

При формировании условия &#032 заменится пробелом.

 

Атрибут 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. Выставляет флаг вставляемого фрагмента

clip1189:

Пример:

{Frag Source="<Fitting_v2>Sketch.grb" page=”Страница_2” regenerate_3d=”true”/}

 

Атрибут recursive_template

Используется в элементах group.

Имеет смысл для представлений, в которых включен учёт иерархии при группировке.

Означает, что все дочерние элементы будут использовать один элемент для своего отображения.

Пример:

recursive_template=”true”

 

Пример шаблона:

clip6120

Конвертация значения массы

{Масса.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

На вход генератора поступает древовидная структура, содержание которой зависит от типа представления (приблизительно похожа на отображение в окне структуры изделия).

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

clip1190

Есть 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 сам представляет собой иерархическую структуру:

clip7272

Элемент param будет выводить значения первого “Элемента структуры изделия” первого “SubItem”.

Каждый SubItem связан с конкретной структурой изделия (следовательно и исполнением). Для вывода колонки SubItem-a конкретной структуры изделия используется специальный синтаксис:

{param name=”Количество$$01”/}, где подсвеченная желтым часть идентифицирует исполнение.

Если в представлении узел Item вложен в узел Version, то можно вместо задания конкретного исполнения, указать использование “текущего” исполнения:

{param name=”Количество$$_CurVer”/}

Элемент list также может быть вкложенным:

{list}        Item

 {list}        SubItem

{/list}

{/list}

Пример шаблона отчёта для представления типа А:

clip7273

 

Смотри: Содержание