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

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

Общая структура шаблона похожа на язык разметки 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 будут оперировать объединенными данными (теми данными, что показываются в окне состава изделия в режиме Применить представление состава изделия ProductStructureDiff).

Элемент list

Если элемент list не вложен в элемент group, тогда он оперирует всеми записями состава изделия (как они выглядят в окне состава изделия с выключенным режимом Применить представление состава изделия ProductStructureDiff).

Если входные данные имеют иерархию:

По умолчанию флаг атрибут 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=« Формат = 'БЧ' » /}

 

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

Пример:

{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