В статье описаны правила использования дополнительных функций синтаксиса шаблонов:
- Barcode() — вывести содержимое переменной в документе в виде штрихкода;
- JobPosition() — подставить должность пользователя;
- PasteImage() — вставить на месте переменной изображение;
- Hyperlink() — преобразовать заданное значение в гиперссылку;
- ExtText() — создать пользовательскую функцию для расширенных возможностей работы с шаблоном документов.
Функция Barcode()
Функция Barcode() используется для кодирования строки приложения и добавления её в документ в виде штрихкода. Например, таким образом можно сгенерировать штрихкод для регистрационного номера договора или другого уникального номера документа. В дальнейшем с помощью штрихкода можно будет сопоставить документ на бумажном носителе и электронную копию.
Взаимодействие ELMA365 с ПО для считывания штрихкодов осуществляется через модули интеграции. Подробнее о них можно прочитать в статьях «Модули расширения системы» и в справке по публичному API ELMA365.
Генерация штрихкода доступна для форматов, поддерживаемых в программах Word и Excel.
Синтаксис функции: GenerateBarcode(text: строка:1, format: формат кода:2, высота сгенерированного штрихкода в пикселях).
- [1] — строка зависит от формата, указываемого во втором параметре;
- [2] — возможные форматы штрихкодов и требования к строке:
- QR Code — любая строка. Поддерживается разрешение до 300 DPI;
- EAN-8 — строка до восьми цифр, где последняя используется как контрольная;
- EAN-13 — строка из 12 цифр или 13 цифр, где последняя — контрольная.
Вы также можете указать формат EAN без уточнения типа. В таком случае тип сгенерированного штрихкода будет зависеть от количества цифр в передаваемой строке;
- высота штрихкода в пикселях — необязательный параметр. Для корректного распознавания высота указывается в зависимости от количества используемых символов.
Если в шаблоне одна и та же строка используется для генерации QR-кода два раза, но при этом указывается разный размер, то в обоих случаях сгенерируется QR-код одинакового размера.
начало внимание
Если при использовании форматов EAN контрольная сумма не была указана, она добавится автоматически. Для корректной работы сканер штрихкодов следует настроить на работу с данными форматами.
конец внимание
Мы рекомендуем использовать формат QR Code, так как он не имеет таких строгих ограничений, как форматы EAN.
Для примера возьмём строку $numberstring = «5901234123457». Она подойдёт для формата QR Code и EAN-13.
начало примера
Примеры
- {GenerateBarcode({$numberstring}, "QR Code", "125")};
- {GenerateBarcode({$numberstring}, "EAN-13", "125")}.
конец примера
Для формата EAN-8 в строке должно быть не больше восьми цифр: $numberstring = «59012341».
Функция JobPosition()
Эта функция используется для получения должности пользователя.
Синтаксис функции: JobPosition(param1: пользователь, формат: строка).
Вы можете использовать переменную first для передачи первой должности, и переменную all — для всех должностей пользователя.
начало примера
Пример
{JobPosition({$__createdBy}, all)} —> функция передаст все должности пользователя, записанного в поле Автор.
конец примера
Функция PasteImage()
Чтобы вставить в шаблон документа изображение из контекстной переменной типа Изображение и Файлы, используйте функцию PasteImage().
Синтаксис функции: PasteImage(param1: изображение/файл, ширина в пикселях, высота в пикселях, обрезать вместо сжатия: true/false).
Начало примера
Примеры
- {PasteImage({$image})} — вставка изображения с исходными значениями ширины и высоты из переменной типа Изображение;
- {PasteImage({$file.__id})} — вставка изображения с исходными значениями ширины и высоты из переменной типа Файлы;
- {PasteImage({$image}, 200)} — изображение из свойства типа Изображение отобразится с шириной 200 пикселей. Значение высоты изменится, исходные пропорции сохранятся;
- {PasteImage({$file.__id}, 200, 400)} — функция масштабирует изображение из свойства типа Файлы до строго заданного размера;
- {PasteImage({$image}, auto, 400)} — изображение из переменной типа Изображение отобразится с высотой 400 пикселей. При этом значение ширины масштабируется, исходные пропорции сохранятся;
- {PasteImage({$file.__id}, 200, 400, true)} — функция обрежет изображение из переменной типа Файлы до указанного размера без учёта исходных пропорций.
Конец примера
По умолчанию функция PasteImage() позволяет вставить в документ только одно изображение или файл. Чтобы вывести несколько данных, примените функцию внутри цикла for.
Начало примера
Пример
- В документе нужно отобразить список изображений. Список передаётся в переменную шаблона image1 типа Изображение (несколько).
- Цикл for позволяет неоднократно применить функцию PasteImage(), чтобы последовательно вставить в документ все изображения из списка.
Для корректной работы цикла нужно использовать две переменные:
- image1 — содержит несколько изображений;
- image — временная переменная, в которую по очереди помещается каждое изображение из image1.
{for image in {$image1}}
{PasteImage({$image}, 400, 200)}
{end}
После выполнения цикла в документе отобразится список изображений.
Конец примера
Функция Hyperlink()
Функция Hyperlink() используется в шаблонах формата .docx, .xls и .xlsx и позволяет преобразовать заданное значение в гиперссылку.
В качестве аргументов функции можно использовать переменные типа Строка из контекста приложения, а также задать значения вручную. Для корректной работы функции указывается полный URL‑адрес ссылки.
Синтаксис функции:
- {Hyperlink("URL-адрес", "Текст ссылки")} — отобразится текст‑гиперссылка, в которой настроен переход на указанный сайт;
- {Hyperlink("URL-адрес")} — гиперссылка отобразится в виде URL-адреса.
начало примера
Примеры функции с использованием переменных из контекста приложения:
- {Hyperlink("{$site}", "Смотрите на официальном сайте")} — адрес сайта указан в виде строки в элементе приложения, значение гиперссылки задано вручную;
- {Hyperlink ("https://elma365.com/ru/", "{$__name}")} — адрес сайта прописан вручную, значение гиперссылки формируется из поля в элементе приложения.
конец примера
Функция ExtText()
Если для настройки шаблона системных функций недостаточно, вы можете использовать пользовательскую функцию ExtText(). Она позволяет вызывать методы API, созданные в пользовательских модулях, и подставлять результаты их работы в генерируемый по шаблону документ.
Синтаксис функции
Функция задаётся следующим образом:
{ExtText("ID модуля", "адрес метода", {$дополнительный параметр 1}, "дополнительный параметр 2")},
где:
- ID модуля — символы из URL модуля, идущие после /ext_. Например, если URL модуля mycompany.elma365.ru/admin/extensions/ext_12ab-1212ab-12, в функцию передаётся значение "12ab-1212ab-12";
- адрес метода — для получения адреса перейдите в настройки модуля, где создан метод, откройте вкладку Методы API. В списке найдите нужный метод и скопируйте значение из поля Адрес;
- дополнительные параметры — один или несколько параметров, которые передаются в метод API. В синтаксисе функции параметры указываются через запятую в нужном порядке. Свойства приложения заключаются в фигурные скобки, например {$app_field}. Другие параметры прописываются в кавычках, например "function". В скрипте метода API параметры доступны как ключи p1, p2 и далее в том порядке, в котором они перечислены в функции ExtText().
Ускорение обработки пользовательских функций
При использовании сложных пользовательских функций вы можете изменить режим их обработки для ускорения генерации документов по шаблону. Все переменные и функции будут обрабатываться не последовательно друг за другом, а параллельно.
Для этого включается фича-флаг enableConcurrencyTemplateMapper, а в конфигурационном файле с помощью специального параметра задаётся количество параллельных потоков обработки.
Подробнее читайте в статьях «Изменение параметров ELMA365 Enterprise» и «Изменение параметров ELMA365 Standard». Если вы используете поставку SaaS Enterprise, для включения фича‑флага обратитесь к вашему менеджеру ELMA365.
Пример пользовательской функции для выполнения арифметических операций
С помощью метода API в модуле и функции ExtText() вы можете вывести в документе, сгенерированном по шаблону, результат арифметических операций: сложение, вычитание, деление, умножение. В качестве аргументов для операций в функции можно использовать произвольные числа или поля приложения типа Число, Деньги, Строка — если в виде строки указано число.
Для примера настроим генерацию документа по шаблону в приложении Договоры. С помощью вычислений пользовательской функции в договоре отобразим:
- итоговую сумму с учётом фиксированной стоимости доставки;
- остаток по платежу после оплаты аванса;
- сумму неустойки в размере двойного аванса;
- ежемесячную выплату клиента при рассрочке на указанное количество месяцев.
Шаг 1. Настроить контекст приложения
Для реализации примера в приложении Договоры нужно создать следующие свойства:
- Сумма договора (sum_total) — поле типа Деньги;
- Авансовый платёж (advance_payment) — поле типа Деньги;
- Срок рассрочки (installment_months) — поле типа Число. Менеджер указывает в карточке договора срок в месяцах, на который клиенту предоставляется рассрочка на оплату суммы по договору.
Шаг 2. Создать метод API в модуле
Все вычисления будут выполняться с помощью скрипта в методе API. Для настройки:
- Перейдите в раздел Администрирование > Модули. Создайте пользовательский модуль или откройте управление существующего. Убедитесь, что модуль включён.
- Перейдите на вкладку Методы API, откройте редактор методов и нажмите + Добавить.
- В качестве параметров метода укажите:
- название — Выполнение расчёта;
- адрес — выберите метод Get и укажите значение arithmetic, которое в дальнейшем будет указано в функции ExtText();
- название функции — doArithmetic.
- Сохраните настройки метода.
Подробнее читайте в статье о создании метода в модуле.
Шаг 3. Задать скрипт метода API
В редакторе методов перейдите на вкладку Скрипты и объявите функцию doArithmetic.
Она будет вызываться из шаблона для генерации документа с помощью указанной в нём функции: {ExtText("ID модуля", "адрес метода", {$операнд 1}, {$операнд 2}, "операция")}. Параметры из функции автоматически передаются в объект с ключами p1, p2, p3.
Скрипт принимает аргументы, преобразует значения переменных в числа и выполняет выбранную арифметическую операцию: сложение — add, вычитание — subtract, умножение — multiply, деление — divide.
Скрипт для выполнения арифметических операций через API модуля
|
Шаг 4. Добавить функцию ExtText() в шаблон документа
В файле шаблона договора добавьте вызовы функции ExtText() для каждой операции. В функции укажите идентификатор созданного модуля, например 8ca92961-2c8a-418e-abff-7761a962265a, адрес метода, например arithmetic, свойства приложения или числовой аргумент и операцию:
- Операция сложения: {ExtText("8ca92961-2c8a-418e-abff-7761a962265a", "arithmetic", {$sum_total}, "15 000", "add")} — получим итоговую стоимость по договору с учётом фиксированной суммы доставки в 15 000 рублей.
- Операция вычитания: {ExtText("8ca92961-2c8a-418e-abff-7761a962265a", "arithmetic", {$sum_total}, {$advance_payment}, "subtract")} — получим остаток к оплате по договору после внесения авансового платежа.
- Операция умножения: {ExtText("8ca92961-2c8a-418e-abff-7761a962265a", "arithmetic", {$advance_payment}, "2", "multiply")} — получим неустойку при досрочном расторжении договора в размере двойного авансового платежа.
- Операция деления: {ExtText("8ca92961-2c8a-418e-abff-7761a962265a", "arithmetic", {$sum_total}, {$installment_months}, "divide")} — получим ежемесячный платёж при рассрочке в указанное количество месяцев.
Подробнее читайте в статье о добавлении и настройке шаблона для документов.
Предположим, что в карточке договора указано: общая сумма договора — 500 000, авансовый платёж — 100 000, срок рассрочки — 4 месяца. Тогда в сгенерированном по шаблону договоре рассчитаются следующие значения:
- итоговая сумма — 515 000;
- остаток к оплате — 400 000;
- неустойка — 200 000;
- ежемесячный платёж — 125 000.