Специализированное администрирование > Настройка бизнес-объектов > Управление типами и атрибутами > Работа с утилитой "Управление типами и атрибутами" > Управление типами > Информационная страница типа > Вкладка "Атрибуты" > Создание атрибута > Формулы рассчитываемых атрибутов
  
Формулы рассчитываемых атрибутов
Расчетные атрибуты используют формулы для вычисления своих значений на основе значений других атрибутов. В этих формулах для вычисления или генерирования значений производных атрибутов могут использоваться и атрибуты, и символьные значения.
Формулу можно ввести в поле Формула на шаге Задать свойства при создании расчетного атрибута или изменить значение поля Формула на информационной странице после создания расчетного атрибута.
* 
Если атрибут, влияющий на расчетный атрибут, изменяется при создании или правке объекта, формула не пересчитывается сразу. Перерасчет формулы и обновление значения рассчитываемого атрибута выполняются после завершения обработки действия создания или правки.
Сведения об отображении расчетных атрибутов, включенных в макеты атрибутов, см. в разделе Отображение атрибутов.
Локализация числовых результатов расчетного атрибута осуществляется на основе языковой настройки браузера.
Типы данных в формулах
В формулах поддерживаются только атрибуты со следующими типами данных: : Строка, , Целое число, , Вещественное число, , Вещественное число с единицей измерения, , Гиперссылка, , Дата и время и Логический. Результат формулы должен соответствовать заданному типу данных расчетного атрибута, но в самой формуле можно использовать атрибуты с другими типами данных.
Если в формуле используются атрибуты с различными типами данных, то перед выполнением операции или функции система преобразует все типы данных в один тип, который требуется для операции или функции, используемой в формуле. Результатом формулы будут данные того же типа. Преобразование типа данных применяется с учетом следующего порядка приоритетов:
1. Строка: если хотя бы один аргумент в формуле имеет тип данных Строка, все аргументы преобразуются в тип данных Строка. (Типы Гиперссылка и Дата и время автоматически преобразуются в тип Строка.)
2. Вещественное число с единицей измерения: если хотя бы один аргумент в формуле имеет тип данных Вещественное число с единицей измерения, все аргументы преобразуются в тип данных Вещественное число с единицей измерения.
3. Вещественное число: если хотя бы один аргумент в формуле имеет тип данных Вещественное число, все аргументы преобразуются в тип данных Вещественное число.
4. Целое число: если хотя бы один аргумент в формуле имеет тип данных Целое число, все аргументы преобразуются в тип данных Целое число.
5. Логический.
Например, если в формуле attrA + attrBattrA имеет тип данных Строка, а attrB имеет тип данных Вещественное число, то attrB преобразуется в тип данных Строка и объединяется с attrA. Если attrA имеет значение Результат, а attrB имеет значение 1.5, то результатом формулы будет Результат: 1.5.
Аналогично, если attrC имеет тип данных Целое число, а attrD имеет тип данных Вещественное число, то в формуле attrC * attrDattrC преобразуется в тип данных Вещественное число и результат формулы будет иметь тип данных Вещественное число.
Система вычисляет введенную формулу при сохранении расчетного атрибута. Если тип данных результата формулы не соответствует типу данных расчетного атрибута, возвращается ошибка и формула не сохраняется. Тип данных результата формулы можно преобразовать, изменив способ задания формулы. В приведенном ниже примере <формула> - это исходная формула, тип данных которой преобразуется.
Чтобы преобразовать формулу, результат которой имеет тип данных Логический, Целое число, Вещественное число или Вещественное число с единицей измерения, в тип данных Строка, введите в поле Формула:
""+(<формула>)
Чтобы преобразовать формулу, результат которой имеет тип данных Логический, Целое число или Вещественное число, в тип данных Вещественное число с единицей измерения, введите в поле Формула:
unit("1.0000000000000")*(<формула>)
(Для сохранения полной точности исходного результата требуются по крайней мере тринадцать нулей.)
Чтобы преобразовать формулу, результат которой имеет типа данных Логический или Целое число, в тип данных Вещественное число, введите в поле Формула:
1.0*(<формула>)
Чтобы преобразовать формулу, результат которой имеет тип данных Логический, в тип данных Целое число, введите в поле Формула:
1*(<формула>)
Пример: вычисление числового значения
Используйте операторы и внутренние наименования атрибутов для составления формул, по которым вычисляется требуемое значение атрибута. (В формулах необходимо использовать Внутреннее наименование атрибута, а не его Отображаемое наименование.)
Например, если имеется атрибут "Суммарная стоимость", который должен быть равен произведению атрибута "Количество" и атрибута "Стоимость единицы", сложенному с атрибутом "Затраты на обработку", можно использовать следующую формулу, чтобы вычислить значение атрибута "Суммарная стоимость":
(quantity*unitCost)+fee
.
Пример: объединение нечисловых значений атрибутов
Формулы могут также использоваться, чтобы комбинировать нечисловые значения атрибута.
Например, если бы был создан расчетный атрибут с именем "ИД", можно получить его значение путем комбинации значений атрибутов "Имя" и "Обозначение" данного типа с помощью следующей формулы:
name+"("+number+")"
Результат будет присвоен атрибуту "ИД", например MyDocument(0001A).
Поддерживаемые функции
* 
Для расчетных атрибутов многозначные функции в настоящее время не поддерживаются.
Поддерживаются следующие функции.
Функция
Описание
isNull( )
Проверка на ноль
unit( )
Преобразование типа данных Строка в тип данных Вещественное число с единицей измерения
str( )
Преобразование числа в данные типа Строка
abs( )
Абсолютное значение или величина
avg( )
Среднее списка значений
sum( )
Сумма списка значений
min( )
Минимум списка значений
max( )
Максимум списка значений
round()
Преобразование числа с десятичными разрядами (вещественного числа) в целое число
Если десятичное число содержит ".5", это число округляется до ближайшего четного числа (например, 30.5 округляется вниз - до 30, а 31.5 округляется вверх - до 32)
Если десятичные разряды содержат другие цифры, число округляется до ближайшего целого числа (например, 30.8 округляется вверх - до 31, а 33.4 округляется вниз - до 33)
mod()
Получение остатка от деления одного числа на другое (только типы данных Целое число)
${}
Обрамляет внутренние наименования атрибутов, которые включают специальные символы, чтобы их можно было использовать в формулах. Можно обрамлять все внутренние наименования атрибутов, но внутренние наименования атрибутов, которые содержат тире (-), знак доллара ($) или квадратные скобки ([ ]), необходимо обрамлять при использовании в формулах. Например, атрибуты с внутренними наименованиями my-attribute или my[very$complex]-attribute могут использоваться в формулах, если они обрамлены следующим образом:
${my-attribute}
${my[very$complex]-attribute}
Если бы внутренние наименования атрибутов, используемых в разделе Пример: вычисление числового значения, содержали специальные символы, формула для атрибута общих затрат выглядела бы следующим образом:(${item-quantity}*${unit-cost})+${handling-fee}
Поддерживаемые операторы
Поддерживаются следующие операторы.
Оператор
Описание
+
Сложение. Может также использоваться для последовательного соединения строк.
-
Вычитание
*
Умножение
/
Деление
( )
Открывающие и закрывающие скобки изменяют приоритет последовательности выполнения операций (сначала выполняются операции в скобках)
" "
Двойные кавычки указывают, что их содержимое является символьной строкой. Любое нечисловое значение, не заключенное в двойные кавычки, считается наименованием атрибута.
>
Больше
<
Меньше
>=
Больше или равно
<=
Меньше или равно
==
Равно
!=
Не равно
^
Показатель степени или оператор возведения в степень
&
И
|
Или
~
Не
^*
Исключающее "Или"
&&
И
||
Или
!
Не
? :
Условный оператор, показывающий, что результат зависит от того, является ли заданное условие истинным или ложным:
(условие) ? значение для истины : значение для лжи
Например, предположим, что тип имеет атрибуты длины, ширины и формы, где форма является расчетным атрибутом со следующей формулой:
(длина>ширина) ? "длинный" : "широкий"
Если значение атрибута длины больше, чем значение атрибута ширины, то атрибуту формы присваивается значение длинный. Если значение атрибута длины не больше, чем значение атрибута ширины, то атрибуту формы присваивается значение широкий.
%
Остаток