Редактор шаблонов в Текле
Статья посвящена тонкостям в работе с редактором шаблонов в программном комплексе 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. Можно и не добавлять, просто приготовьтесь к тому, что редактор будет постоянно ругаться на наличие некорректных аргументов в формулах, не особенно страшно, но эта мелочь может мешать процессу отладки отчета.
Теперь собственно о шаблонах.
Шаблон состоит их нескольких принципиальных разделов
- Заголовок шаблона (Header) — он создается один раз в процесс выполнения инструкции.
- Заголовок страницы — при достижении некоторого колличества строк в отчете, автоматически создается новая страница. Этот заголовок будет дублирован для каждой страницы отчета.
- Строки — это самый интересный раздел. С их помощью мы можем выводить интересующие нас параметры для интересующих нас объектов.
При добавлении строки необходимо указать тип объектов которые будут этой строкой выводиться. (если список пуст — значит вы запустили редактор без среды, проще всего запустить его со средой вызывав редактор из чертежа теклы)
Кроме того строки можно выводить внутри других строк. Например в строку Сборок можно добавить строку с болтами, где выведутся болты которые к этой Сборке относятся, или строку с деталями из которых эта сборка состоит. Это позволяет создавать сложные отчеты, а так же производить дополнительную фильтрацию и разбивку по группам.
Кроме того что при создании строки указывается тип объкта, можно дополнительно отфильтровать с помощью правил (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
То теперь к этому значению можно обращатся напрямую из любого другого поля. 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») — вернет толщину пакета деталей который для которого используются болты.
Здравствуйте, а не подскажите как менять фон в редакторе шаблонов, раньше был белый, сейчас стал чёрный. Версия 21.0.
Добрый день! Читаю ваши статьи — очень полезные. Нахожу в них много нового для себя.
Задался таким вопросом- можно ли создать таблицу таким образом, чтобы в зависимости от параметров увеличивалось не только количество строк, но и столбцов? К примеру по строкам идут сборки, а по столбцам пользовательский атрибут(дата к примеру)? Причем значения атрибута неизвестны с самого начала, а задаются руками в модели.
Нет, ведомости расхода стали текловскими шаблонами не сделать…
Вообще, это общая проблема для подобных программ (в ревите та же беда), видимо, для западных норм нехарактерны горизонтально-динамические таблицы.
После появления реляционных баз данных и компьютеров горизонтально динамические таблицы мягко говоря потеряли актуальность.
Но у нас, как и реснички их продолжают поддерживать, с упорством достойным лучшего применения.
Но если очень нужен именно такой репорт можно сделать следующим образом
— делаем обычный репорт,
— открываем его в Экселе, и превращаем в Pivot Table
— результат отправляем в Теклу