Редактор шаблонов в Текле

Статья посвящена тонкостям в работе с редактором шаблонов в программном комплексе Tekla Structures. Собственно редактор шаблонов — это отдельная программа идущая в комплекте поставки Теклы. Основное назначение создавать так называемые репорты, и темплейты. Текстовые и графические шаблоны позволяющие выводить необходимую информацию, извлекаемую из базы данных информационной модели Теклы, в желаемом для пользователя виде  и формате.

Живет сам редактор по следующему пути:

..\TeklaStructures\19.0\nt\TplEd\tpled.exe

Для того чтобы не создавать спецификации и отчеты вручную, а доверить это занятие Текле и создан этот редактор. С его помощью мы создаем текстовые файлы с расширением .rpt, и .tpl — которые являются по сути инструкциями для Теклы, в соответствии с которыми программа выбирает из модели данные и предоставляет их пользователю в том или ином виде.

Кроме этого можно использовать репорты не только для того чтобы извлекать данные, но и для того чтобы данные задавать. Часто используемый трюк — из модели извлекаются данные с помощью репорта (отчёта), в процессе формирования которого на основе анализа входящих данных формируется некоторые новые значения, которые нам бы хотелось сохранить в модели. После чего делается импорт атрибутов, где в качестве аргументов используются данные из отчета полученного на предыдущем этапе.

Звучит несколько запутанно, однако подход встречается практически повсеместно, позволяя задавать отдельным деталям дополнительные свойства в автоматическом режиме, не прибегая к программированию на C#. Изобретательность наших зарубежных товарищей, в использовании этого трюка, порой достигает невообразимых вершин. При том, что ту же задачу обычно можно решить быстрее, проще и с меньшим расходом вычислительных ресурсов.

Работа в самом редакторе идет подобным же образом — вроде все понятно, но как-то уж больно запутанно. Так что цель этой статьи это разобрать не столько работу с редактором, сколько принципы механики формирования отчетов и графических шаблонов.

Ссылки по теме редактора шаблонов:

Собственно прямая ссылка на гайд по редактору шаблонов — он на английском. Впрочем написан крайне подробно, и обязателен к ознакомлению.

А тут можно кое, что узнать про мультиязычные шаблоны — собственно это следует из гайда по шаблонам теклы (см.выше)

Tekla templates — object.inp feat contentattributes.lst

Но начнем мы с того, что разберем один нюанс — у нас есть object.inp где мы объясняем Текле какие атрибуты должны иметь наши Текла объекты. Но при этом найти эти же объекты в списке доступных атрибутов, из редактора шаблонов — не так-то просто. Точнее, вы их там не найдете вовсе.

Дело в том, что для этих целей используются дополнительный файлы, подробнее можно узнать из девятой главы гайда(ссылка выше). А тут выдержка из него же.

  • contentattributes.lst контейнер, в котором содержатся ссылки на файлы с актуальными описаниями атрибутов. Файлы добавляются с помощью инструкции — INCLUDE. Последовательность в которой файлы перечислины — являются порядком их загрузки.
  • contentattributes_global.lst  — Этот файл содержит атрибуты забитые в редактор на уровне компилятора или как-то так. И цитата из гайда —  «Do not edit this file». — в смысле этот файл не трогать.   Просто знайте, что он есть. Еще в него можно заглядывать чтобы ознакомится со списком атрибутов доступных в текле по умолчанию.
  • contentattributes_userdefined.lst —  этот файл содержит атрибуты назначенные пользователем (UDA), такие же как те, что в object.inp. Чтобы в редакторе исопользовать ваши собственные атрибуты необходимо сохранить отдельно текущую версию этого файла (на всякий слуачй) и потом добавить в него свои атрибуты. Стоит обратить внимание, что атрибут прописывается несколько раз. Сначала он объявляется в первой части файла. А потом задается элементам модели(балки, сборки, болты и т.п.), для которых вы хотите иметь доступ к этому атрибуту. Элементы  перечислены в contenttypes.lst.

Файлы можно найти в настройках используемого окружения (Например C:\TeklaStructures\19.0\Environments\middle_east\template\settings).

Зачем понадобились дополнительные файлы, спросит пытливый читатель? Что же, дело в том, что Template Editor — это вполне самостоятельная программа, которая к Текле какой-то особенной привязки не имеет. Назначение программы — создать текстовый файл с инструкцией в формате понятном для Теклы. Сама инструкция может быть чрезвычайно запутана и содержать в себе кроме указаний, какие данные запрашивать и выводить, еще и мини программы результаты выполнения которых могут быть использованы в качестве новых данных, либо в качестве аргументов для других программ, которые в свою очередь… и так далее и так далее.

Из-за этого Template Editor не сильно интересуется тем какая именно схема пользовательских атрибутов (object.inp) будет использована в той или иной модели. Вообщем если вы хотите при создании шаблона использовать ваши атрибуты — имеет смысл добавить их в contentattributes_userdefined.lst. Можно и не добавлять, просто приготовьтесь к тому, что редактор будет постоянно ругаться на наличие некорректных аргументов в формулах, не особенно страшно, но эта мелочь может мешать процессу отладки отчета.

Теперь собственно о шаблонах.

Редактор атрибутов Tekla Structures, разделы

Шаблон состоит их нескольких принципиальных разделов

  1. Заголовок шаблона (Header) — он создается один раз в процесс выполнения инструкции.
  2. Заголовок страницы — при достижении некоторого колличества строк в отчете, автоматически создается новая страница. Этот заголовок будет дублирован для каждой страницы отчета.
  3. Строки — это самый интересный раздел. С их помощью мы можем выводить интересующие нас параметры для интересующих нас объектов.Редактор Шаблонов, Tekla выводим объекты в отчет.

При добавлении строки необходимо указать тип объектов которые будут этой строкой выводиться. (если список пуст — значит вы запустили редактор без среды, проще всего запустить его со средой вызывав редактор из чертежа теклы)

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

Редактор атрибутов блока - свойства строк, Tekla Structures

Кроме того что при создании строки указывается тип объкта, можно дополнительно отфильтровать с помощью правил (Rule) а по сути небольших программ:

Tekla_strucutres-Template_editor-Row-rule

Функции контроля вывода строк

  • IsFirst ()
  • IsLast ()
  • Output ()
  • PageBreak ()
  • StepIn ()
  • StepOut ()
  • StepOver ()

Примеры

if (GetValue(«LENGTH»)>50 then Output() else StepOver() endif

Функции для получения значений атрибутов из модели

Эти функции позволяют получить данные, скажем так из элементов модели. Т.е. если мы используем значение GetValue(«NUMBER») в строке у которой выставлен контекст — BOLT — мы ожидаем что результатом будет количество болтов в сборке.  GetValue(«NAME») нам должно вернуть в этом контексте Имя болта из каталога болтов. И так далее.

GetValue () —
NextValue () — позволяет пропустить какое значение, обычно используется в фильтрации контекста строки.
PreviousValue ()
IsSet () —
возвращает true — если указанный пользовательский атрибут был задан, и соответственно false если нет. Очень удобно

Пример: Допустим мы добавили какой то атрибут в к сборке, который должен выводится в место позиции сборки, если такой атрибут есть, тогда:

if IsSet(«USERDEFINED.MyValue») then GetValue(«USERDEFINED.MyValue») else GetValue(«ASSEMBLY_POS») endif

Функции для работы с Полями.

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

Т.е. когда вы добавили в репорт Insert/Value Field и в нем запросили GetValue(«NUMBER») и дали этому полю имя QTY

Tekla Template Editor Insert Field form
Tekla Template Editor Insert Field form

То теперь к этому значению можно обращатся напрямую из любого другого поля. CopyField(«QTY») — даст нам искомое количество.

Кроме этого к полям можно применять Агрегирующие функции Sum(«QTY») — вернет сумму значения этого поля в заданном контексте строки.

Так же их можно комбинировать со значениями извлекаемыми из модели, например формула ниже для поля в контексте Сборки вернет что то интересное:

Sum(«Weight_F»)*GetValue(«MODEL_TOTAL») 

GetFieldFormula ()
CopyField  ()
Sum  ()
Total ()
Count  ()
All  ()

Функции для работы со строками

find  ()     пример:  find(«ab-cd»,»-«) — возвратить значение 2.
match  () пример: match(«abc», «abc») вернет TRUE;  match(«abc»,»b») вернет FALSE.

mid  () пример: mid(«abcd»,1,2) вернет «bc»

length  () 
reverse  ()   пример: reverse(«tekla») — вернет «alket»
getat  ()
setat  ()

Пример работы со строками:

mid(GetValue(«assembly_name»),0,find(GetValue(«assembly_name»),»-«))+»-» + GetValue(«ASSEMBLY_SERIAL_NUMBER») 

Функции для конверсии типов данных

int () — превращаем атрибут в целое число.
double () — дробное число
string ()  — строку
vwu (Value with unit) () — примеры: vwu(2.0,»rad») — вернет 114.59 градусов;  vwu(4.0,»in») — вернет 101.60 мм
format (102)

Математические функции

собственно они стандартные но на некоторых остановимся чуть подробнее

ceil () — возвращает округленное целое число в большую сторону — ceil(1.01) — вернет 2
floor () — наоборот — округляем в меньшую floor(1.99) — вернет 1
min () — min(12,3,6) = 3
max () — max(12,3,6) = 12
sqsum () — sqsum(60,70)  = 8500
ave () — ave(3,6,9) = 6  |  [(3+6+9)/3 = 6]
sqave () — sqave(81,36,9) = 2646   | [(81^2+36^2+9^2)/3 = 2646]

sqrt ()

round ()

Статья в процессе обновления. Но любые вопросы можно задавать прямо тут в комментариях. Извините за доставленные неудобства.

Вывести информацию только о пластинах (полосах, и прочих плоских элементах:

if (GetValue(«PROFILE_TYPE») == («B»)) then
Output()
else
StepOver()
endif

Толщина пакета деталей для болта

Запрос  GetValue(«BOLT_MATERIAL_LENGTH») —  вернет толщину пакета деталей который для которого используются болты.