Формат Даты
Сама по себе дата выводится формулой ${o.moment} или ${row.moment}
В этом случае ячейке, в которой формула, нужно применить тип — Дата. Это Формат ячейки в Excel.
Но такой метод не будет работать, если в той же ячейке с формулой есть любой статичный текст или другая формула. Например, когда в одной строке, нужно вывести неразрывно:
Товарный чек № 00656 от 15.05.2024 12:50
В таких случаях по отношению к формуле вывода даты применяется специальный метод formatter.format :
Товарный чек № ${o.name} от ${formatter.format("%1$td.%1$tm.%1$tY %1$tH:%1$tM", formatter.getExcelDate(o.moment))}
Формат записан в кавычках, это правило, по которому формула o.moment преобразуется в нужную форму.
В данном случает в кавычках записан формат ДД.ММ.ГГГГ чч:мм — это так называемые флаги.
Возможные флаги форматирования для дат
Флаг | Описание |
---|---|
%tB | Полное название месяца, например, Январь, Февраль и т.д. |
%tb | Сокращенное название месяца, например, Янв, Фев и т.д. |
%tA | Полное название дня недели, например, Понедельник, Вторник |
%ta | Сокращенное название дня недели, например, Пон, Вт и т.д. |
%tY | Год в формате 4 цифры, например, от 0000 до 9999 |
%ty | Год в формате 2 цифры, например, от 00 до 99 |
%tm | Месяц отформатирован с нуля в начале, например, от 01 до 12 |
%tD | Дата в формате %tm/%td/%ty |
%td | День месяца в формате двух цифр, например, от 01 до 31 |
%te | День месяца в формате без 0 в начале, например от 1 до 31 |
%tT | Время в 24-часовом формате, например, %tH:%tM:%tS |
%tH | Час дня в 24-часовом формате, от 00 до 23 |
%tI | Час дня для 12-часового формата, например, от 01 до 12 |
%tM | Минуты в часе форматируются с нуля в начале, например, от 00 до 59 |
%tS | Секунды в минуте, состоящие из двух цифр, например, от 00 до 59 |
Примеры
${formatter.format("%1$td.%1$tm.%1$tY", formatter.getExcelDate(o.moment))} | 01.06.2024 |
${formatter.format("%1$td.%1$tm.%1$ty", formatter.getExcelDate(o.moment))} | 01.06.24 |
${formatter.format("%1$td «%1$tB» %1$tY", formatter.getExcelDate(o.moment))} года | 01 «июня» 2024 года |
${formatter.format("%1$te %1$tb %1$tY", formatter.getExcelDate(o.moment))} г. | 1 июн. 2024 г. |
Формат Числа
Если формула выводит число (сумма, количество), то такой метод применяется, чтобы результат был с нужным количеством знаков в дробной части или без дробной части совсем.
Например, нужно вывести сумма документа в составе текста:
Оплачено по договору на сумму 50000,00 рублей
Если в шаблоне запись имеет такой вид:
Оплачено по договору на сумму ${o.tail.payedSum/100} рублей,
то результат будет:
Оплачено по договору на сумму 50000.0 рублей
Результат такой, что число преобразовалось в текст.
Чтобы этого избежать, формулы, которые должны выводить Число, нужно "экранировать" форматом числа.
В этом случае формула будет иметь вид:
Оплачено по договору на сумму ${formatter.format("%.2f", o.tail.payedSum / 100)} рублей
Формат записан в кавычках. Это правило, по которому знаков после запятой будет сколько нам надо.
Варианты:
%.2f — 0,00
%.4f — 0,0000
%.0f — 0
Специальный метод, который выводит сумму с разрядностью: ${formatter.printLongAmount(o.sum.sum)} — 1 000 000,00
Формат Прописи
Применяется, когда нужно вывести число прописными буквами. Например, общее количество товаров прописью, кол-во штук прописью, доп. поле с типом целого числа прописью.
Для сумм в валюте используется метод — printAmount
Например, нужно вывести в составе текста:
Итого к оплате: Тридцать шесть тысяч четыре рубля 00 копеек
В этом случае формула будет иметь вид:
Итого к оплате: ${formatter.printAmount(formatter.getCurrency(o), o.sum.sumInCurrency)}
Дополнительно прописью доступно выводить сумму на Английском и Украинском языках:
${formatter.printAmountINR(formatter.getCurrency(o), o.sum.sumInCurrency)} — eng.
${formatter.printAmountUA(formatter.getCurrency(o), o.sum.sumInCurrency)} — укр.
Для вывода других чисел (кол-во, доп. поле, вес и т.д.) используется метод — printNumber
Примеры:
Формула | Описание |
---|---|
${formatter.printNumber(position.quantity)} | Количество позиции |
${formatter.printNumber(position.good.weight)} | Вес позиции |
${formatter.printNumber(formatter.calcTotalGoodsQuantity(o))} | Кол-во товаров во всем документе |
${formatter.printNumber(formatter.operationWeight(o))} | Общий вес по документу |
${formatter.printNumber(formatter.findAttribute(o, "Поставка (дней)").longValue)} | Число из доп. поля (тип Число) |
printIf и printIfElse
Основной метод, когда нужно вывести то или иное значение при выполнении заданного условия.
Заключается в том, что задается условие и в зависимости от его результата сработает либо одна формула, либо другая.
Есть 2 варианта методов:
1) ${formatter.printIf(условие, формула при выполнении)}
2) ${formatter.prinIfElse(условие, формула при выполнении, формула при НЕ выполнении)}
Дословно объясняются так:
1) вывести формулу ТОЛЬКО ЕСЛИ выполняется условие
2) вывести формулу ЕСЛИ выполняется условие ИНАЧЕ вывести другую формулу
Самый распространенный пример такой формулы:
${formatter.printIfElse(empty(o.targetAgentRequisite.legalTitle), o.targetAgentRequisite.agent.name, o.targetAgentRequisite.legalTitle)}
— объясняется, как проверка наличия в карточке контрагента/организации полного юридического наименования. При НЕ заполненном полном наименовании в карточке выведется краткое и соответственно, если заполнено (условие не выполнено), то как раз полное и будет выведено.
Существует также сокращенный вариант. Работает в точности, как formatter.prinIfElse, но имеет сокращенный вид записи:
${условие ? формула при выполнении : формула при НЕ выполнении}
${условие ? формула при выполнении : " "}
Например:
${empty(o.targetAgentRequisite.legalTitle) ? o.targetAgentRequisite.agent.name : o.targetAgentRequisite.legalTitle}
${o.sourceAgent.getCompanyType() == "INPR" ? o.sourceAgentRequisite.ogrn : " "}
Другие примеры и операторы
Статичный текст в формулах пишется в двойных ("text") или одинарных ('text') кавычках.
Числовые свойства, такие как Сумма, Оплаченная сумма, Кол-во, Вес и т.д. складываются друг с другом и с другими цифрами через базовые операторы +, -, *, /
${(row.sum.sum - row.payedSum) / 100}
${(o.sum.sumInCurrency / 100) * 0.5}
${position.quantity * position.good.weight}