Формулы в операции | A-TECHS

Формулы в операции

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

Подобные задачи можно выполнить с использованием формул. Формула может быть написана для любого поля Шапки или строки Таблицы операции. После вычисления формулы полученное значение будет присвоено в поле, которое содержит формулу.

Формулы исполняются на клиенте в браузере. Поэтому для написания формул используется язык Java Script и некоторые специальные функции, разработанные для использования в сервисе A-Techs.

Синтаксис формул

В большинстве случаев формулы в операциях достаточно простые т.к. ограничиваются понятными арифметическими операциями и их написание не вызывает сложностей. В данной главе мы приведем только минимально необходимые операторы языка Java Script. При необходимости более глубоко ознакомиться с синтаксисом языка Java Script можно в онлайн руководстве или онлайн учебнике.

Арифметические операторы Java Script

Название Оператор Пример
Сложение + $r.amount+$r.tax
Вычитание $r.total — $r.tax
Умножение * $r.quantity * $r.price
Деление / $r.amount / $r.quantity

Более подробно про арифметические операторы Java Script можно прочесть в данной главеонлайн руководства.

Операторы сравнения Java Script

Называние Оператор
Равно ==
НЕ равно !=
Больше >
Больше или равно >=
Меньше <
Меньше или равно <=

Более подробно про операторы сравнения Java Script можно прочесть в данной главе онлайн руководства.

Логические операторы Java Script

Название Оператор
Логическое И &&
Логическое ИЛИ ||
Логическое НЕ !

Более подробно про логические операторы Java Script можно прочесть в данной главе онлайн руководства.

Тернарный ( условный оператор )

Тернарный оператор позволяет в формулах вычислять значения в зависимости от условия. Синтаксис тернарного оператора следующий:

( Условие ) ? ВыражениеДа : ВыражениеНет

Тернарные операторы могут быть вложены друг в друга, например

(Условие1) ? ((Условие2) ? Выражение2Да : Выражение2Нет) : Выражение1Нет

Более подробно про тернарный оператор Java Script можно прочесть в данной главе онлайн руководства.

Контекст выполнения формул

Важно понимать контекст выполнения формул. Иными словами, какие переменные доступны для использования в формулах. В формулах доступны значения в полях Шапки, значения в текущей строке Таблицы, а также итоги по числовым полям Таблицы:

  • $h.name — поле Шапки операции, h от английского header.
  • $r.name — поле текущей строки Таблицы операции, r от английского row.
  • $t.name — итоговое значение, вычисленное по Таблице операции, t от английского total.

Пример. Формула для вычисления суммы по цене и количеству в строке Таблицы может выглядеть таким образом:

$r.количество * $r.цена

OperationFormulaExample.png

Рисунок 1. Пример вычисления Суммы по Количеству и Цене.

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

Использование имен элементов

Также необходимо понимать, что когда мы оперируем в формуле со значением поля типа Справочник, то мы работает с числовым идентификатором элемента, а не с текстовым заголовком элемента. Поэтому в формула необходимо выполнять сравнение с идентификатором элемента, а не с заголовком. Например, формула (1) вычисляет значение в зависимости от статьи затрат с использованием идентификатора в условии:

$h.статья_затрат == 45 ? 2500 : 0         (1)

Использовать идентификаторы не всегда удобно. Поэтому в формулах доступно использование имен элементов справочников в формате Catalog.<CatalogName>.<ElementName>. Теперь формулу (1) мы можем переписать в виде:

$h.статья_затрат == Catalog.СтатьяЗатрат.Прочее ? 2500 : 0             (2)

Специальные функции

Далее мы рассмотрим специальные функции, доступные в формулах в операции.

Разность дат

date_difference( dateStart, dateFinish, periodType), где

dateStart — начальная дата

dateFinish — конечная дата

periodType — тип периода, для которого вычисляется разность. Тип периода может принимать значения: second, minute, hour, day, month, year

Возвращаемое значение — число.


Пример.

date_difference( $r.начало, $r.конец, «day»)

Вычисляет количество дней между указанными датами.


Вычисление стандартных дат

standard_date( date, standardDateName), где

date — дата, для которой производятся вычисления.

standardDateName — строка, имя стандартной даты.

Доступные значения стандартной даты:

  • BeginDay
  • EndDay
  • BeginNextDay
  • EndNextDay
  • BeginLastDay
  • EndLastDay
  • BeginWeek
  • EndWeek
  • BeginNextWeek
  • EndNextWeek
  • BeginLastWeek
  • EndLastWeek
  • BeginMonth
  • EndMonth
  • BeginNextMonth
  • EndNextMonth
  • BeginLastMonth
  • EndLastMonth
  • BeginQuarter
  • EndQuarter
  • BeginNextQuarter
  • EndNextQuarter
  • BeginLastQuarter
  • EndLastQuarter
  • BeginYear
  • EndYear
  • BeginNextYear
  • EndNextYear
  • BeginLastYear
  • EndLastYear

Пример.
standard_date( $h.просто_дата, “BeginMonth”) — вычисляет начало месяца для указанной даты.

standard_date( $h.просто_дата, “EndMonth”) — вычисляет конец месяца для указанной даты.


Получение даты по элементу справочника

Предполагается, что есть справочник с периодами подряд. Январь, Февраль, Март и т.п. Важно, чтобы идентификаторы элементов шли подряд. Тогда дату по элементу можно получить по формуле:

month_from_catalog( $h.date , $h.month , idStart), где

$h.date — любая дата из года, удобно использовать дату операции.

$h.month— поле типа справочник Периоды.

idStart — идентификатор элемента январь. Идентификатор можно посмотреть в консоли источников.