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

Материал из Intellex
Версия от 13:43, 22 февраля 2022; Wiki (обсуждение | вклад) (Новая страница: «= Типы данных = Модуль вычисления выражений универсальной XM платформы определяет тип данных операнда на основании репозитория параметров или значения константы. Модуль вычисления выражений универсальной XM платформы должен поддерживать следующие ти...»)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к навигации Перейти к поиску

Типы данных

Модуль вычисления выражений универсальной XM платформы определяет тип данных операнда на основании репозитория параметров или значения константы. Модуль вычисления выражений универсальной XM платформы должен поддерживать следующие типы данных параметров XM-документов:

Тип данных Описание
Строка Размер строки не ограничен. В случае неопределенного значения строкового операнда необходимо его трактовать как строку с нулевой длиной
Число Диапазон значений 1*e-15 … 1*e+15 Для js см. спецификацию https://262.ecma-international.org/5.1/#sec-8.5
Логический тип Диапазон значений: true, false
Дата Диапазон – календарные даты без времени
Дата и время Диапазон — календарные даты со временем, до секунд включительно

Константы

Модуль вычисления выражений универсальной XM платформы должен поддерживать указание констант в выражениях. Константы по типу данных разделяются на следующие виды:

  • Строковые. Константа строкового типа выделяется одинарными кавычками, началом значения константы является первый символ после открывающей кавычки, окончанием значения константы является символ, предшествующей закрывающей кавычке. Две идущие подряд одинарные кавычки в пределах строковой константы рассматриваются парсером как часть строки — символ одинарной кавычки
  • Числовые. Числовые константы начинаются с цифрового символа или символа десятичного разделителя и могут содержать только цифровые символы и только один символ десятичного разделителя. В выражениях, разбираемых парсером, за десятичный разделитель принят символ точки ('.')
  • Дата, дата и время. Константы этих типов дата определяются в исходном выражении как вызовы функций TODATE и TODATETIME соответственно с параметрами-строковыми константами, соответствующими спецификации строки форматирования даты и времени. Константы типа дата имеет формат: DD.MM.YYYY Константы типа дата и время имеет формат: DD.MM.YYYY HH24:MI:SS
  • Логические. Константа логического типа может принимать значение «true» или «false». Регистр символов значения не имеет.

Определение типа данных константы

Типом данных числовой константы всегда является число. Типом данных строковой константы является строка. Типом данных константы-даты может являться дата или дата и время.

Значение NULL

Для обозначения константы с неопределенным значением используется NULL. Данная константа может иметь один из описанных выше типов данных. Тип константы NULL определяется в исходном выражении с помощью ключевых слов:

  • NULL_NUMBER
  • NULL_DATE
  • NULL_DATETIME
  • NULL_DATETIMETZ
  • NULL_BOOL
  • NULL_STRING

Для строкового типа неопределенное значение также обозначается пустой строкой.

NULL всегда меньше любого значения и всегда равен NULL.

Комментарии

В тексте формул можно использовать комментарии, которые игнорируются синтаксическим анализатором. Текст комментария помещается в символы /* и */:

/*здесь пишется комментарий*/

Идентификаторы

Идентификаторы представляют собой имена параметров или функций. Длина идентификатора может быть любой от 1 до 65534 символов. Идентификатор может включать в себя спецификатор имени, отделенный точкой от имени параметра или функции. Идентификатор может начинаться с буквы или одного из символов '_', '@' или '&', далее могут следовать кроме указанных цифровые символы, символ десятичного разделителя, символ разделителя спецификатора имени.

Особые параметры

Обращение из встраиваемых аналитических форм

Информация о документе

Параметры документа можно получить через пространство имен DOCUMENT.

Форма записи: DOCUMENT.ИМЯ_ПАРАМЕТРА - берет значение из текущей открытой таблицы (для главного окна - главная, для окна саба - открытая строка саба)

DOCUMENT.ИМЯ_ТАБЛИЦЫ.ИМЯ_ПАРАМЕТРА - берет значение из указанной таблицы (она должна быть открыта)

Информация об экземпляре документа

Данные параметры принадлежат пространству имен DOCINFO. Обращение к таким параметрам в скрипте производится с помощью следующего синтаксиса:

DOCINFO.<имя_параметра>

Имя параметра Тип Описание
XMDOCVERSION NUMBER Версия формата XM-документа.
DOCTYPEID NUMBER Идентификатор типа документа.

Примечание: в некоторых случаях документа может не быть по разным, но убедительным причинам. В таких случаях параметр имеет значение -1.

DOCTYPENAME STRING Имя типа документа.
DOCID NUMBER Идентификатор экземпляра документа.

Примечание: для нового документа или в том случае, когда документа на самом деле нет, параметр имеет значение 0 или null (начиная с версии 2.0.0). Необходимо проверять оба значения

DOCSTATE NUMBER Идентификатор состояния документа.
PARENTDOCID NUMBER Идентификатор родительского документа (или 0, если такового не имеется).
RESULTID NUMBER Результат перехода (или идентификатор перехода по документообороту). Указывается, если мы выполняем пересчет документа "на переходе".

Примечание: при отсутствии перехода по документообороту параметр имеет значение NULL_NUMBER.

DOCDATE (DOCTIME) DATETIME Дата и время создания документа. Если документ еще не сохранен в базу данных, то используется текущее время сервера (SERVERDATE) на момент создания документа.
UID NUMBER Идентификатор группы документов (фактически это - идентификатор первого документа в группе).
CHANGED BOOL Признак того, что документ изменен, но не сохранен пользователем в клиентском приложении.
SENDERACTIONID STRING Идентификатор последней нажатой кнопки <externalAction>
DOCXML STRING XML документа, формируемый по тем же правилам, как отправляемый в externalCall
DOCFULLXML STRING Полный XML документа со всеми подтаблицами
CANSAVE BOOL Есть ли у юзера возможность сохранения документа (из апп-функции CAN_SAVE_XML_DOCUMENT)
CALCMODE STRING Флаг режима выполнения действия в документе:
  • cmCreateDoc первый пересчет документа при создании
  • cmOpenDoc первый пересчет документа при открытии
  • cmCopyDoc первый пересчет скопированного документа при открытии
  • cmCorrDoc первый пересчет документа после перехода с корректировкой
  • cmRecalc обычный пересчет документа
SUBCALCMODE STRING Флаг режима выполнения действия в под-документе (сабе):
  • scmInsert первый пересчет при добавлении записи
  • scmCopy первый пересчет при открытии скопированной записи
  • scmDetail пересчет при открытии в режиме master-detail
  • scmCheckRow пересчет при проверке данных под-документа (checkrows)
  • scmRecalc обычный пересчет

Информация о среде окружения

Данные параметры принадлежат пространству имен ENVINFO. Обращение к таким параметрам в скрипте производится с помощью следующего синтаксиса:

ENVINFO.<имя_параметра>

Для пространства имен ENVINFO предопределены следующие параметры:

Имя параметра Тип Описание
USER_ID NUMBER Идентификатор пользователя, вошедшего в систему
USER_LOGIN STRING Имя учетной записи пользователя, вошедшего в систему
USER_FIO STRING Имя пользователя, вошедшего в систему
USER_ORG_ID NUMBER Идентификатор организации пользователя
USER_ORG_NAME STRING Название организации пользователя
USER_ORG_TYPE_ID NUMBER Идентификатор типа организации пользователя
USER_LANG STRING Текущий язык пользователя
USER_POST NUMBER Идентификатор должности пользователя

К остальным параметрам среды окружения, которых может быть великое множество, обращение происходит точно так же, через спецификатор имени ENVINFO. При этом значение параметра <имя_параметра> возвращается в виде строки. Если параметр с указанным именем не найден, то функция возвращает NULL.

Операторы

Модуль вычисления выражений поддерживает описанные ниже операторы. Также приводятся типы операндов, к которым операторы применяются. В случае применения операторов к операндам других типов, не описанных здесь, возвращается ошибка «Оператор неприменим к операнду этого типа».

Унарный минус

Операция «унарный минус» обозначается «-», выполняется над одним числовым операндом. Синтаксис: «-Операнд». Тип данных результата операции всегда число. Результатом операции является обращение знака числового операнда (произведение числового операнда на -1)

Сложение

Операция «сложение» обозначается «+», выполняется над двумя операндами. Синтаксис: «Операнд1 + Операнд2». Результат операции зависит от типов данных операндов

Операнд 1 Операнд 2 Результат Примечание
Типы данных
Число Число Число Сложение двух чисел, при переполнении ошибка «Число слишком большое»
Дата Число Дата Увеличивает значение операнда1 на количество дней, равной целой части операнда2
Число Дата Дата Увеличивает значение операнда2 на количество дней, равной целой части операнда1
Дата и время Число Дата и время Увеличивает значение операнда1 на значение операнда2 в сутках
Число Дата и время Дата и время Увеличивает значение операнда2 на значение операнда1 в сутках
Строка Строка Строка Конкатенация двух строк

При сложении строк операнд равный NULL принимается за пустую строку.

При сложении других типов, если хотя бы один из операндов равен NULL, то результат операции также будет равен NULL.

Вычитание

Операция «вычитание» обозначается «-», выполняется над двумя операндами. Синтаксис: «Операнд1 - Операнд2». Результат операции зависит от типов данных операндов

Операнд 1 Операнд 2 Результат Примечание
Типы данных
Число Число Число Вычитание двух чисел
Дата Число Дата Уменьшает значение операнда1 на количество дней, равной целой части операнда2
Дата и время Число Дата и время Уменьшает значение операнда1 на значение операнда2 в сутках
Дата Дата Число Разница между значениями операнда1 и операнда2 в днях
Дата и время Дата и время Число Разница между значениями операнда1 и операнда2 в сутках

Если хотя бы один из операндов равен NULL, то результат операции также будет равен NULL.

Умножение

Операция «умножение» обозначается «*», выполняется над двумя операндами. Синтаксис: «Операнд1 * Операнд2». Операция может выполняться только над числовыми операндами, тип данных результата операции всегда число. Результатом операции является произведение операнда1 на операнд2.

Если хотя бы один из операндов равен NULL, то результат операции также будет равен NULL.

Возможные ошибки: «Переполнение числа», «Число слишком мало».

Деление

Операция «деление» обозначается «/», выполняется над двумя операндами. Синтаксис: «Операнд1 / Операнд2». Операция может выполняться только над числовыми операндами, тип данных результата операции всегда число. Результатом операции является частное, полученное в результате деления, делимым является значение операнда1, делителем является значение операнда2.

Если хотя бы один из операндов равен NULL, то результат операции также будет равен NULL.

Возможные ошибки: «Деление на ноль», «Число слишком мало».

Конъюнкция

Операция «конъюнкция» (логическое И, логическое умножение) обозначается «AND», выполняется над двумя операндами. Синтаксис: «Операнд1 AND Операнд2». Операция может выполняться только над операндами логического типа, тип данных результата операции всегда логический. Результатом операции является true только если оба операнда имеют значение true, в противном случае результат операции false.

Если хотя бы один из операндов равен NULL, то результат операции вычисляется по следующим правилам:

TRUE AND NULL = NULL

FLASE AND NULL = FALSE

NULL AND NULL = NULL

Дизъюнкция

Операция «дизъюнкция» (логическое ИЛИ, логическое сложение) обозначается «OR», выполняется над двумя операндами. Синтаксис: «Операнд1 OR Операнд2». Операция может выполняться только над операндами логического типа, тип данных результата операции всегда логический. Результатом операции является false только если оба операнда имеют значение false, в противном случае true.

Если хотя бы один из операндов равен NULL, то результат операции вычисляется по следующим правилам:

TRUE OR NULL = TRUE

FLASE OR NULL = NULL

NULL OR NULL = NULL

Инверсия

Операция «инверсия» (логическое отрицание) обозначается «NOT», выполняется над одним операндом. Синтаксис: «NOT Операнд». Операция может выполняться только над операндом логического типа, тип данных результата операции всегда логический. Результатом операции является true если операнд имеет значение false, в противном случае false.

Если операнд равен NULL, то результат операции также будет равен NULL.

Равенство

Операция «равенство» обозначается «=», выполняется над двумя операндами. Синтаксис: «Операнд1 = Операнд2». Операция «равенство» может быть выполнено только над операндами одинакового типа. Тип результата всегда логический тип. Результатом операции будет true, если значения операндов равны, в противном случае — false.

Если оба операнда равны NULL, то результат операции будет равен true.

Не равно

Операция «не равно» обозначается «<>», выполняется над двумя операндами. Синтаксис: «Операнд1 <> Операнд2». Типом результата операции является логический тип. Операция «не равно» может быть выполнено только над операндами одинакового типа. Результатом операции будет true, если значения операндов не равны, и false — в противном случае.

Если оба операнда равны NULL, то результат операции будет равен false.

Больше

Операция «больше» (строгое неравенство больше) обозначается «>», выполняется над двумя операндами одинакового типа. Синтаксис: «Операнд1 > Операнд2». Результат операции имеет логический тип.

Операнд 1 Операнд 2 Результат Примечание
Типы данных
Число Число Логический тип Рассчитывается по формуле (Операнд1-Операнд2)>0
Дата Дата Логический тип Рассчитывается по формуле (Операнд1-Операнд2)>0
Дата и время Дата и время Логический тип Рассчитывается по формуле (Операнд1-Операнд2)>0

Больше или равно

Операция «больше или равно» (нестрогое неравенство больше) обозначается «>=», выполняется над двумя операндами одинакового типа.

Синтаксис: «Операнд1 >= Операнд2».

Результат операции имеет логический тип.

Операнд 1 Операнд 2 Результат Примечание
Типы данных
Число Число Логический тип Рассчитывается по формуле

(Операнд1-Операнд2)>0 OR (Операнд1-Операнд2)=0

Дата Дата Логический тип Рассчитывается по формуле

(Операнд1-Операнд2)>0 OR (Операнд1-Операнд2)=0

Дата и время Дата и время Логический тип Рассчитывается по формуле

(Операнд1-Операнд2)>0 OR (Операнд1-Операнд2)=0

Меньше

Операция «меньше» (строгое неравенство меньше) обозначается «<», выполняется над двумя операндами одинакового типа. Синтаксис: «Операнд1 < Операнд2». Результат операции имеет логический тип.

Операнд 1 Операнд 2 Результат Примечание
Типы данных
Число Число Логический тип Рассчитывается по формуле NOT ((Операнд1-Операнд2)>=0)
Дата Дата Логический тип Рассчитывается по формуле NOT ((Операнд1-Операнд2)>=0)
Дата и время Дата и время Логический тип Рассчитывается по формуле NOT ((Операнд1-Операнд2)>=0)

Меньше или равно

Операция «меньше или равно» (нестрогое неравенство меньше) обозначается «<=», выполняется над двумя операндами одинакового типа. Синтаксис: «Операнд1 <= Операнд2». Результат операции имеет логический тип.

Операнд 1 Операнд 2 Результат Примечание
Типы данных
Число Число Логический тип Рассчитывается по формуле NOT ((Операнд1-Операнд2)>0)
Дата Дата Логический тип Рассчитывается по формуле NOT ((Операнд1-Операнд2)>0)
Дата и время Дата и время Логический тип Рассчитывается по формуле NOT ((Операнд1-Операнд2)>0)

Вхождение строки по маске

Операция «вхождение строки по маске» обозначается «LIKE», выполняется над двумя строковыми операндами.

Синтаксис: «Операнд1 LIKE Операнд2», либо LIKE( Операнд1, Операнд2 ). Для случая, когда один из операндов является формулой работает только второй вариант.

Результат всегда имеет логический тип. Результатом операции будет true, если значение Операнда1 удовлетворяет маске, указанной в значении Операнда2, предполагая, что символы '%' из строки-маски могут быть заменены любым количеством любых символов, а символы '_' (подчеркивание) — любым одним символом. Если хотя бы один из операндов равен NULL, то результат операции также будет равен NULL.

Остаток от деления

Операция «остаток от деления» обозначается «MOD», выполняется над двумя числовыми операндами.

Синтаксис: «MOD(Операнд1, Операнд2)».

Результат всегда имеет числовой тип. Результатом операции является остаток от деления целой части значения Операнда1 на целую часть значения Операнда2.

Если хотя бы один из операндов равен NULL, то результат операции также будет равен NULL.

Целочисленное деление

Операция «Целочисленное деление» обозначается «DIV», выполняется над двумя числовыми операндами.

Синтаксис: «Операнд1 DIV Операнд2». Результат всегда имеет числовой тип. Результатом операции является целая часть частого от деления целой части значения Операнда1 на целую часть значения Операнда2.

Если хотя бы один из операндов равен NULL, то результат операции также будет равен NULL.

Приоритет операторов

При вычислении выражений, описанных в обратной польской нотации, все операторы имеют одинаковый приоритет. При приведении выражений, описанных в традиционной инфиксной нотации, к обратной польской нотации определен следующий приоритет операторов в порядке снижения:

Приоритет Лексемы Операция Ассоциативность
9 Параметры, константы Простые лексемы Слева направо
9 FUNC() Вызов функций Слева направо
8 NOT Инверсия Справа налево
7 - Унарный минус Слева направо
6 / * MOD DIV Деление, умножение, остаток от деления, целочисленное деление Слева направо
5 + - Сложение, вычитание Слева направо
4 < <= > >= Неравенства-отношения Слева направо
3 = <> Равенство, не равно Слева направо
3 LIKE Вхождение Слева направо
2 AND Конъюнкция Слева направо
1 OR Дизъюнкция Слева направо

Для однозначного определения максимального порядка вычисления выражения можно использовать парные скобки «()», при этом первыми вычисляются выражения, лежащие во внутренних скобках по отношению к внешним.

Встроенные функции

Функции для работы со строками

1 SUBSTR(<value : string>, <startindex : number>, <length : number>) : string

Описание:

Функция копирует подстроку в строке.

Параметры:

<value> - исходная строка. Если <value> = NULL_STRING, то результат всегда равен NULL_STRING (как было указано выше, пустая строка и NULL_STRING есть одно и то же).

<startindex> - начальная позиция, индекс символа, с которого осуществляется копирование. Первый символ строки имеет индекс 1. Данный параметр не может быть NULL.

<length> - количество символов, которое будет скопировано в результирующую строку. Данный параметр не может быть NULL.

Пример:

SUBSTR( 'Привет, мир', 2, 3 ) = 'рив'

SUBSTR( 'Привет, мир', 8, 123 ) = 'мир'

SUBSTR( NULL_STRING, 2, 3 ) = NULL_STRING

Псевдоним: COPY

2 LENGTH(<value : string>) : number

Описание:

Возвращает длину строки <value>.

Параметры:

<value> - исходная строка.

Пример:

LENGTH( 'Привет, мир' ) = 11

LENGTH( NULL_STRING ) = 0

Псевдоним: LEN

3 UPPER(<value : string>) : string

Описание:

Преобразует символы строки <value> в верхний регистр

Пример:

UPPER( 'Привет, мир' ) = 'ПРИВЕТ, МИР'

UPPER( NULL_STRING ) = NULL_STRING

4 LOWER(<value : string>) : string

Описание:

Преобразует символы строки <value> в нижний регистр

Пример:

LOWER( 'Привет, мир' ) = 'привет, мир'

LOWER( NULL_STRING ) = NULL_STRING

5 INSTR(<value : string>, <substr : string>) : number

Описание:

Возвращает позицию подстроки <substr> в строковом представлении <value>. Первый символ строки находится в позиции 1. Если подстрока не найдена, возвращается 0.

Пример:

INSTR('Привет, мир', 'и') = 3

INSTR(NULL_STRING, 'и') = NULL

INSTR('Привет, мир', NULL_STRING) = 0

Псевдоним: POS

6 REGEXP_LIKE(<source : string>, <regexpr : string>) : bool

Описание:

Функция ищет вхождения в строку <source> подстроки, представленной шаблоном (регулярным выражением) <regexpr> Как <source>, так и <regexpr> могут быть вычисляемыми выражениями или константами. Функция возвращает true, если в строке <source> была обнаружена подстрока, соответствующая шаблону <regexpr>. В противном случае функция возвращает false.

Описание синтаксиса: Синтаксис регулярных выражений или http://regexpstudio.com/RU/TRegExpr/Help/RegExp_Syntax.html

Пример:

REGEXP_LIKE('Привет, мир', 'При.*') = TRUE

REGEXP_LIKE('Привет, мир', 'ПРИ.*') = FALSE

REGEXP_LIKE(NULL_STRING, 'ПРИ.*') = FALSE

REGEXP_LIKE('Привет, мир', NULL_STRING) = FALSE

Псевдоним: CHECKREGULAREXPRESSION

7 TRIM(<expr : string>, <char : string = ' '>) : string

Описание:

Удаляет из строки <expr> ведущие и концевые символы <char> и возвращает обрезанную строку. Параметр <char> имеет значение по умолчанию, равное пробелу (символ с кодом 0x20) и может не передаваться в явном виде. Если <char> содержит более одного символа, то при вычислении результата используется только первый символ строки. Если <char> является пустой строкой, то параметр заменяется на значение по умолчанию, равное пробелу (символ с кодом 0x20).

Пример:

TRIM('   ABC   ') = 'ABC'

TRIM(NULL_STRING) = NULL_STRING

TRIM('00000ABC0', '0') = 'ABC'

TRIM('   ABC   ', '*') = '   ABC   '

TRIM('   ABC   ', NULL_STRING) = 'ABC'

Псевдоним: TRIMCHAR

8 LTRIM(<expr : string>, <char : string = ' '>) : string

Описание:

Удаляет из строки <expr> ведущие символы <char> и возвращает обрезанную спереди строку. Параметр <char> имеет значение по умолчанию, равное пробелу (символ с кодом 0x20) и может не передаваться в явном виде. Если <char> содержит более одного символа, то при вычислении результата используется только первый символ строки. Если <char> является пустой строкой, то параметр заменяется на значение по умолчанию, равное пробелу (символ с кодом 0x20).

Пример:

LTRIM('   ABC   ') = 'ABC   '

LTRIM(NULL_STRING) = NULL_STRING

LTRIM('00000ABC0   ', '0') = 'ABC0   '

LTRIM('   ABC   ', '*') = '   ABC   '

LTRIM('   ABC   ', NULL_STRING) = 'ABC   '

Псевдоним: TRIMCHARLEFT

9 RTRIM(<expr : string>, <char : string = ' '>) : string

Описание:

Удаляет из строки <expr> концевые символы <char> и возвращает обрезанную сзади строку. Параметр <char> имеет значение по умолчанию, равное пробелу (символ с кодом 0x20) и может не передаваться в явном виде. Если <char> содержит более одного символа, то при вычислении результата используется только первый символ строки. Если <char> является пустой строкой, то параметр заменяется на значение по умолчанию, равное пробелу (символ с кодом 0x20).

Пример:

RTRIM('   ABC   ') = '   ABC'

RTRIM(NULL_STRING) = NULL_STRING

RTRIM('    0ABC00000', '0') = '    0ABC'

RTRIM('   ABC   ', '*') = '   ABC   '

RTRIM('   ABC   ', NULL_STRING) = '   ABC'

Псевдоним: TRIMCHARRIGHT

10 REPLACE(<value : string>, <substr: string | number>, <newsubstr: string | number>) : string

Описание:

Функция возвращает новую строку на основе исходной строки <value>, в которой все вхождения <substr> заменены на <newsubstr>.

Параметры:

<value> - исходная строка.

<substr> - заменяемая подстрока.

<newsubstr> - заменитель.

Пример: REPLACE( 'Привет, мир', 'мир', 'друг' ) = 'Привет, друг' REPLACE( 'а б в г д', ' ', '' ) = 'абвгд'

REPLACE( NULL_STRING, 'a', 'b' ) = NULL

Функции для работы с числами

1 TRUNC(<value : number>) : number

Описание:

Возвращает целую часть вещественного числа <value>. <value> не может принимать значение NULL_NUMBER.

Пример:

TRUNC( 1234.567 ) = 123

Псевдоним: INT

2 FRAC(<value : number>) : number

Описание:

Возвращает дробную часть вещественного числа <value>. <value> не может принимать значение NULL_NUMBER.

Пример:

FRAC( 1234.567 ) = 0.567

3 ROUND(<value : number>, [<decimal_places : number = 0>] ) : number

Описание:

Возвращает значение вещественного числа <value>, округленное до ближайшего целого числа. Если округляемое число находится ровно между двумя целыми, то округление происходит до ближайшего бОльшего числа. <value> не может принимать значение NULL_NUMBER.

decimal_places - точность урезания дробной части.

  • 0 - возвращается целое число
  • 1 - один знак после запятой
  • 2 - два знака и т.д

Пример:

ROUND(1.5) = 2

ROUND(1.2) = 1

ROUND(-2.5) = -2

ROUND(123.4567,2) = 123.46

4 ABS(<value : number>) : number

Описание:

Возвращает абсолютную величину числа <value>. <value> не может принимать значение NULL_NUMBER.

Пример:

ABS(123.45) = 123.45

ABS(-123.45) = 123.45

5 CEIL(<value : number>) : number

Описание:

Возвращает наименьшее целочисленное значение большее или равное <value> (фактически это - округление в сторону плюс бесконечности). <value> не может принимать значение NULL_NUMBER.

Пример:

CEIL(123.1) = 124

CEIL(-123.1) = -123

6 FLOOR(<value : number>) : number

Описание:

Возвращает набольшее целочисленное значение меньшее или равное <value> (фактически это - округление в сторону минус бесконечности). <value> не может принимать значение NULL_NUMBER.

Пример:

FLOOR(123.1) = 123

FLOOR(-123.1) = -124

Функции для работы с датой и временем

1 INC_TIME(<value : datetime>, <seconds : number>) : datetime

Описание:

Увеличивает временную часть <value> на указанное количество секунд (<seconds>) (для совершения операции берется целая часть значения). Значение <seconds> может быть как положительным, так и отрицательным при этом происходит либо увеличение, либо уменьшение временной части <value> соответственно. <value> не может принимать значение NULL_DATETIME или NULL_DATETIMETZ. <seconds> не может принимать значение NULL_NUMBER.

Пример:

INC_TIME( TO_DATETIME('01.01.2015 01:02:03'), 75 ) = '01.01.2015 01:03:18'

Псевдоним: INCTIME

2 ADD_MONTHS( <value : date>, <inc : number> ) : date

ADD_MONTHS( <value : datetime>, <inc : number> ): datetime

Описание:

Добавляет <inc> месяцев к значению <value>. Если день месяца <value> больше последнего дня месяца результата, то берется последний день этого месяца. <value> не может принимать значение NULL_DATE или NULL_DATETIME. <inc> не может принимать значение NULL_NUMBER.

Пример:

ADD_MONTHS( TO_DATE('01.01.2015'), 4 ) = '01.05.2015'

ADD_MONTHS( TO_DATETIME('31.01.2015 01:02:03'), 1 ) = '28.02.2015 01:02:03'

Псевдоним: ADDMONTHS

3 FIRST_DAY(<value : date>) : date

FIRST_DAY(<value : datetime>) : datetime — временная часть результата становится равной 00:00:00.

Описание:

Возвращает первый день месяца, представленного параметром <value>. <value> не может принимать значение NULL_DATE, NULL_DATETIME или NULL_DATETIMETZ.

Пример:

FIRST_DAY( TO_DATE('31.01.2015') ) = '01.01.2015'

FIRST_DAY( TO_DATETIME('31.01.2015 11:12:13') ) = '01.01.2015 00:00:00'

Псевдоним: FIRSTDAY

4 LAST_DAY(<value : date>) : date

LAST_DAY(<value : datetime>) : datetime

Описание:

Возвращает последний день месяца, представленного параметром <value>. Если тип возвращаемого значения содержит временную часть, то она становится равной 23:59:59. <value> не может принимать значение NULL_DATE, NULL_DATETIME или NULL_DATETIMETZ.

Пример:

LAST_DAY( TO_DATE('01.01.2015') ) = '31.01.2015'

LAST_DAY( TO_DATETIME('02.01.2015 11:12:13') ) = '31.01.2015 23:59:59'

Псевдоним: LASTDAY

Функции проверки типов данных

1 IS_NUMBER(<value : string>) : bool

Описание:

Возвращает true, если строка <value> представляет собой число, иначе возвращает false.

Пример:

IS_NUMBER('123ddd') = FALSE

IS_NUMBER('123') = TRUE

IS_NUMBER('-1234.56') = TRUE

Псевдоним: ISNUMBER

2 IS_DATE(<value : string>) : bool

Описание:

Возвращает true, если строка <value> представляет собой дату, иначе возвращает false. <value> не может быть пустой строкой (NULL_STRING)

Пример:

IS_DATE('01.01.2015') = TRUE

IS_DATE('22.33.2015') = FALSE

IS_DATE('01.01.2015 00:00:00') = FALSE

IS_DATE('A') = FALSE

Псевдоним: ISDATE

3 IS_DATETIME(<value : string>) : bool

Описание:

Возвращает true, если строка <value> представляет собой дату и время, иначе возвращает false. <value> не может быть пустой строкой (NULL_STRING).

Пример:

IS_DATETIME('01.01.2015') = FALSE

IS_DATETIME('22.33.2015 00:00:00') = FALSE

IS_DATETIME('01.01.2015 25:61:61') = FALSE

IS_DATETIME('A') = FALSE

IS_DATETIME('01.01.2015 10:11:12') = TRUE


Псевдоним: ISDATETIME

Функции преобразования типов

1 TO_CHAR(<value : string>) : string —  преобразует <value> в строку. Данная функция введена для совместимости с предыдущим синтаксисом формул и возвращает <value> в неизменном виде.

TO_CHAR(<value : number>, <format : string = '##00.00##'>) : string — string — преобразует <value> в строку. Если значение <value> равно NULL_NUMBER, функция возвращает пустую строку (NULL_STRING). Если <format> не передан, то число обрезается, до 2 знаков после запятой. Нули после точки в формате, добавят знаков после запятой, если их не хватит в переданном числе (3.3 -> "###0.000" => 3.300 ), # - указывает максимально возможное количество знаков.

TO_CHAR(<value : anydatetimetype>, <format : string> = <default_format>) : string — преобразует <value> в строку в соответствии с форматом <format>. Параметр <format> имеет значение по умолчанию <default_format>, которое будет использовано, если этот параметр не будет передан в функцию. См. также Спецификация строки форматирования даты и времени. Если значение <value> равно NULL_DATE или NULL_DATETIME, функция возвращает пустую строку (NULL_STRING).

TO_CHAR(<value : date>, <format : string = 'DD.MM.YYYY'>) : string

TO_CHAR(<value : datetime>, <format : string = 'DD.MM.YYYY HH24:MI:SS'>) : string

Псевдоним: STR

2 TO_DATE(<expr : string>, <format : string = 'DD.MM.YYYY'>) : date — переводит <expr> в дату. Параметр <expr> должен вычисляться в строку, соответствующую формату даты <format>. Параметр <format> имеет значение по умолчанию и может не передаваться в явном виде. См. также Спецификация строки форматирования даты и времени. <expr> и <format> не могут быть пустыми строками (NULL_STRING).

Примечание: 1. Если в строке <expr> отсутствует день, то в качестве дня берется первый день месяца. 2. Если в строке <expr> отсутствует месяц, то в качестве месяца берется текущий месяц года. 3. Если в строке <expr> отсутствует год, то в качестве года берется текущий год. 4. День недели может присутствовать в строке <expr> только вместе с днем, при этом он должен соответствовать получившейся дате.

Псевдоним: TODATE

3 TO_DATETIME(<expr : string>, <format : string = 'DD.MM.YYYY HH24:MI:SS'>) : datetime — переводит <expr> в дату и время. Параметр <expr> должен вычисляться в строку, соответствующую формату даты и времени <format>. Параметр <format> имеет значение по умолчанию и может не передаваться в явном виде. См. также Спецификация строки форматирования даты и времени. <expr> и <format> не могут быть пустыми строками (NULL_STRING).

Примечание: 1. Если в строке <expr> отсутствует день, то в качестве дня берется первый день месяца. 2. Если в строке <expr> отсутствует месяц, то в качестве месяца берется текущий месяц года. 3. Если в строке <expr> отсутствует год, то в качестве года берется текущий год. 4. День недели может присутствовать в строке <expr> только вместе с днем, при этом он должен соответствовать получившейся дате.

Псевдоним: TODATETIME

5 TO_NUMBER(<expr : string>) : number — переводит <expr> в вещественное число. <expr> не может быть пустой строкой (NULL_STRING).

Псевдоним: TONUMBER

6 DATE_TO_DATETIME(<value : date>) : datetime — переводит значение типа дата <value> в дату и время. Временная часть результата, разумеется, остается нулевой. <value> не может принимать значение NULL_DATE.

Псевдоним: DATETODATETIME

8 DATETIME_TO_DATE(<value : datetime>) : date — переводит значение типа дата и время <value> в дату. Временная часть <value> обрезается. <value> не может принимать значение NULL_DATETIME.

Псевдоним: DATETIMETODATE

10 DATETIMETZ_TO_DATE(<value : datetimetz>) : date — переводит значение типа дата и время с временной зоной <value> в дату. Временная часть <value> обрезается. <value> не может принимать значение NULL_DATETIMETZ.

Псевдоним: DATETIMETZTODATE

11 DATETIMETZ_TO_DATETIME(<value : datetimetz>) НЕ РЕАЛИЗОВАНА! : datetime — переводит значение типа дата и время с временной зоной <value> в дату и время. <value> не может принимать значение NULL_DATETIMETZ.

Псевдоним: DATETIMETZTODATETIME

12 CHR(<value : number>) : string — возвращает строку, состоящую из единственного символа с ASCII-кодом <value>. Для преобразования берется младший байт целой части <value> (значение от 0 до 255). Если <value> принимает значение NULL_NUMBER, то функция возвращает NULL_STRING.

Спецификация строки форматирования для функций, оперирующих датой и временем

Код формата Описание
DAY День в виде полного имени (Sunday-Saturday) в соответствии с установленными в системе языковыми настройками
D День в виде числа с ведущим нулем (1-31)
DD День в виде числа с ведущим нулем (01-31)
DDD Краткое название дня недели. Берется из текущих региональных настроек
DDDD Полное название дня недели. Берется из текущих региональных настроек.
DDDDD Дата в кратком формате. Берется из текущих региональных настроек. Обычно это что-то вроде "d/m/yy".
DDDDDD Дата в полном формате. Берется из текущих региональных настроек. Обычно это что-то вроде "dd/mm/yyyy".
DY День в виде сокращенного имени (Sun-Sat) в соответствии с установленными в системе языковыми настройками
MM Месяц в виде числа с ведущим нулем (01-12)
MMM Краткое название месяца. Берется из текущих региональных настроек
MMMM Полное название месяца. Берется из текущих региональных настроек
MON Месяц в виде сокращенного имени (Jan-Dec) в соответствии с установленными в системе языковыми настройками
MONTH Месяц в виде полного имени (January-December) в соответствии с установленными в системе языковыми настройками
YY Год в виде двузначного числа (00-99)
YYYY Год в виде четырехзначного числа (0000-9999)
H Час 1-24
HH Час 01-24
HH24 Час в виде числа с ведущим нулем в 24-часовом формате (00-24)
HH12 Час в виде числа с ведущим нулем в 12-часовом формате (00-12)
N Минута 1-59
NN Минута 01-59
MI Минуты в виде числа с ведущим нулем (00-59)
SS Секунды в виде числа с ведущим нулем (00-59)
T Время в кратком формате. Берется из текущих региональных настроек. Обычно это что-то вроде "h:nn".
TT Время в полном формате. Берется из текущих региональных настроек. Обычно это что-то вроде "hh:nn:ss".
/ Разделитель даты. В результирующей строке этот символ заменяется на разделитель даты из текущих региональных настроек.
: Разделитель времени. В результирующей строке этот символ заменяется на разделитель времени из текущих региональных настроек.


Символы '-', '/', ',', '.', ';', ':' и пробел выводятся неизменными и в их исходных позициях в строке.

Остальные символы и их сочетания в строке форматирования недопустимы.

Один и тот же код формата не может дважды встречаться в строке форматирования.

Некоторые коды формата исключают появление в строке форматирования других кодов. Взаимно исключают друг друга:

  • DY и DAY
  • MM, MON и MONTH
  • YY и YYYY
  • HH24 и HH12
Маска даты/времени должна быть в верхнем регистре

Функции для вычисления контрольных знаков

1 GETCONTDIG(<value: string>, <leadingZeros: number>) : number — расчет контрольного знака. Если leadingZeros указан, то перед расчетом строка дополняется нулями слева до указанной длины.
2 GETCONTDIGWAG(<value: string>) : number — расчет контрольного знака номера вагона.
3 GETCONTDIGCONTAINER(<value: string>) : number — расчет контрольного знака номера контейнера.

Системные переменные

1 SYSDATE : datetime — возвращает текущие дату и время, установленные на компьютере
2 SERVERDATE : datetime — возвращает текущие дату и время, установленные на сервере БД

Дополнительные функции

1 Функция возвращает <null_value>, если выражение <value> равно NULL

NVL(<value : string>, <null_value : string>) : string

NVL(<value : number>, <null_value : number>) : number

NVL(<value : date>, <null_value : date>) : date

NVL(<value : datetime>, <null_value : datetime>) : datetime

NVL(<value : bool>, <null_value : bool>) : bool

2 Тернарный условный оператор, возвращает <value1>, если выражение <expr> равно true, иначе возвращает <value2>. Данная функция работает аналогично функции IIF вVisual Basic или тернарному оператору « ? : » в языке C (Це). <expr> не может принимать значение NULL_BOOL.

IF(<expr : bool>, <value1 : string>, <value2 : string>) : string

IF(<expr : bool>, <value1 : number>, <value2 : number>) : number

IF(<expr : bool>, <value1 : date>, <value2 : date>) : date

IF(<expr : bool>, <value1 : datetime>, <value2 : datetime>) : datetime

IF(<expr : bool>, <value1 : bool>, <value2 : bool>) : bool

Псевдоним: IIF

3 Функция возвращает true, если выражение <expr> входит во множество значений <valueX>

IN(<expr : anytype>, <value1 : anytype>[, <value2 : anytype>[, <value3 : anytype>[, … ]]]) : bool

IN(<expr : string >, <value1 : string>[, <value2 : string>[, <value3 : string>[, … ]]]) : bool

IN(<expr : number>, <value1 : number>[, <value2 : number>[, <value3 : number>[, … ]]]) : bool — параметры не могут принимать значение NULL_NUMBER.

IN(<expr : date>, <value1 : date>[, <value2 : date>[, <value3 : date>[, … ]]]) : bool — параметры не могут принимать значение NULL_DATE.

IN(<expr : datetime>, <value1 : datetime>[, <value2 : datetime>[, <value3 : datetime>[, … ]]]) : bool — параметры не могут принимать значение NULL_DATETIME.

4 Функция сравнивает значение <expr> с каждым значением <valueX> и, если они равны, возвращает значение соответствующего <returnvalueX>. Если не одно из значений <valueX> не равно значению <expr>, то возвращается <defaultreturnvalue>. Если <defaultreturnvalue> не указано, то возвращается Null (пустая строка).

DECODE(<expr : anytype1>, <value1 : anytype1>[, <returnvalue1 : anytype2>[, <value2 : anytype1>[, <returnvalue2 : anytype2>[, …[, <defaultreturnvalue : anytype2>]]]]) : anytype2

Агрегативные функции sub-блоков документа

Парсер и вычислитель поддерживают набор агрегативных функций, применимых к строкам блока типа sub. При вычислении данных функций перебираются все строки sub-блока.

Вызов агрегативной функции в выражении должен содержать спецификатор имени (имя sub-блока) и имя функции, разделенные точкой. Этот sub-блок может находиться на любом уровне вложенности, считая от документа верхнего уровня. Если sub-блок не будет найден по имени, возникает исключение.

Параметры агрегативных функций являются выражениями. Данные выражения вычисляются для каждой видимой строки sub-блока и над вычисленными значениями производятся операции, предусмотренные агрегативной функцией. Имена параметров, содержащиеся в данных выражениях, не имеющие спецификатора имени и не являющиеся параметрами вложенной агрегативной функции, рассматриваются парсером как параметры строки sub-блока, для которого вызвана агрегативная функция.

Для обращения к параметрам и свойствам строки sub'а, в контексте которой производится вычисление выражения, используется специальный символ '&' (коммерческое and). Такой строкой может быть, например, строка sub'а, открытая на редактирование в визуальном XM-проигрывателе. Символ '&' ставится перед именем параметра и в этом случае рассматривается как параметр активной строки, а не очередной строки, над которой производится итерации при вычислении агрегативной функции.Символ '&' появляется только перед именем параметра, не перед спецификатором имени, который также может присутствовать в идентификаторе. Параметрами, перед которыми ставится '&' могут также быть и специальные параметры '@ROWINDEX', '@ROWID' и '@PARENTROWID', для них возвращается индекс активной строки в списке строк, ее идентификатор и идентификатор ее родительской строки соответственно. Использование особой переменной '@NESTEDCALLLEVEL' с префиксом '&' приводит к ошибке. Также происходит ошибка, если используются переменные с '&' при вычислении выражения в контексте основного документа.

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


Примечание: если параметр с указанным именем отсутствует среди параметров sub-блока, то его значение принимается как Null. Это сделано потому, что производится запрос значения параметра по имени и, если такой параметр не обнаруживается в строке, то возвращается Null.

Все вызовы агрегативных функций имеют вид: ИМЯ_ГРИДА.ФУНКЦИЯ( <параметры> )

Функция Описание
EXISTS(<expr : bool>) : bool Возвращает true, если значение выражения <expr> хотя бы в одной из строк равно true. Если подходящая строка не была найдена или в sub-блоке нет ни одной строки, функция возвращает false.
SUM(<expr : number>) : number Возвращает сумму значений выражения <expr>, вычисленного для всех строк sub-блока. Строки, для которых значение <expr> вычисляется в Null, игнорируются. В случае отсутствия строк в sub-блоке (не выполнено ни одной итерации) или вычисления значений <expr> всех строк в Null функция возвращает 0.
AVG(<expr : number>) : number Возвращает среднее арифметическое значений выражения <expr>. Строки, для которых значение <expr> вычисляется в Null, игнорируются. В случае отсутствия строк в sub-блоке (не выполнено ни одной итерации) или вычисления значений <expr >всех строк в Null функция возвращает 0.
MAX(<expr : anytype>) : anytype Возвращает наибольшее значение выражения <expr>. Строки, для которых значение <expr> вычисляется в Null, игнорируются. anytype = [number | date | datetime | datetimetz | string]. В случае отсутствия строк в sub-блоке (не выполнено ни одной итерации) или вычисления значений <expr >всех строк в Null функция возвращает Null. Сравнение строк происходит по кодовым точкам (без учёта локали).
MIN(<expr : anytype>) : anytype Возвращает наименьшее значение выражения <expr>. Строки, для которых значение <expr> вычисляется в Null, игнорируются. anytype = [number | date | datetime | datetimetz | string]. В случае отсутствия строк в sub-блоке (не выполнено ни одной итерации) или вычисления значений <expr >всех строк в Null функция возвращает Null. Сравнение строк происходит по кодовым точкам (без учёта локали).
COUNT() : number Возвращает количество строк sub-блока.
COUNTDISTINCT(<expr : anytype>) : number Возвращает количество строк с неповторяющимися значениями выражения <expr>. Значение выражения <expr>, вычисленное в NULL, рассматривается как одно из значений. В случае отсутствия строк в sub-блоке функция возвращает 0.
FIRST(<expr : anytype>) : anytype Возвращает значение выражения <expr> первой строки sub-блока. В случае отсутствия строк в sub-блоке функция возвращает значение NULL того же типа, что и тип параметра.
LAST(<expr : anytype>) : anytype Возвращает значение выражения <expr> последней строки sub-блока. В случае отсутствия строк в sub-блоке функция возвращает значение NULL того же типа, что и тип параметра.
COUNTIF(<cond : bool>) : number Возвращает количество строк, для которых значение выражения <cond> равно true. В случае отсутствия строк в sub-блоке функция возвращает 0.
COUNTDISTINCTIF(<cond : bool>, <expr : anytype>) : number Возвращает количество строк с неповторяющимися значениями выражения <expr> для строк, в которых значение выражения <cond> равно true. Значение выражения <expr>, вычисленное в NULL, рассматривается как одно из значений. В случае отсутствия в sub-блоке строк, удовлетворяющих условию, функция возвращает 0.
SUMIF(<cond : bool>, <expr : number>) : number Возвращает сумму значений выражения <expr> в строках, для которых значение выражения <cond> равно true. Строки, для которых значение выражения <expr> вычисляются в NULL_NUMBER, игнорируются. В случае отсутствия строк в sub-блоке (не выполнено ни одной итерации) или вычисления значений <expr> всех подходящих по условию строк в NULL_NUMBER функция возвращает 0.
MAXIF(<cond : bool>, <expr : anytype>) : anytype Возвращает наибольшее значение выражения <expr> среди  строк, для которых значение выражения <cond> равно true. Строки, для которых значение выражения <expr> вычисляются в NULL соответствующего типа, игнорируются. anytype = [number | date | datetime | datetimetz | string]. В случае отсутствия строк в sub-блоке (не выполнено ни одной итерации), вычисления значений <expr >всех строк в Null или если значение выражения <cond> ни для одной строки не выполняется функция возвращает Null. Сравнение строк происходит по кодовым точкам (без учёта локали).
MINIF(<cond : bool>, <exp : anytype>) : anytype Возвращает наименьшее значение выражения <expr> среди  строк, для которых значение выражения <cond> равно true. Строки, для которых значение выражения <expr> вычисляются в NULL соответствующего типа, игнорируются. anytype = [number | date | datetime | datetimetz | string]. В случае отсутствия строк в sub-блоке (не выполнено ни одной итерации), вычисления значений <expr >всех строк в Null или если значение выражения <cond> ни для одной строки не выполняется функция возвращает Null. Сравнение строк происходит по кодовым точкам (без учёта локали).
FIRSTIF(<cond : bool>, <expr : anytype>) : anytype Возвращает значение выражения <expr> первой строки sub-блока, для которой значение выражения <cond> равно true. В случае отсутствия в sub-блоке строк, удовлетворяющих условию, функция возвращает значение NULL того же типа, что и тип параметра <expr>.
LASTIF(<cond : bool>, <expr : anytype>) : anytype Возвращает значение выражения <expr> последней строки sub-блока, для которой значение выражения <cond> равно true. В случае отсутствия в sub-блоке строк, удовлетворяющих условию, функция возвращает значение NULL того же типа, что и тип параметра <expr>.
PREDFIRSTIF(<cond : bool>, <expr : anytype>) : anytype Возвращает значение выражения <expr> строки sub-блока, предшествующей, первой строке, для которой значение выражения <cond> равно true. В случае отсутствия в sub-блоке строк, удовлетворяющих условию, функция возвращает значение NULL того же типа, что и тип параметра <expr>.

Выполнение условия <cond> в первой строке sub-блока также рассматривается как отсутствие строк, удовлетворяющих условию.

SUCCLASTIF(<cond : bool>, <expr : anytype>) : anytype Возвращает значение выражения <expr> строки sub-блока, следующей за последней строкой, в которой значение выражения <cond> равно true. В случае отсутствия в sub-блоке строк, удовлетворяющих условию, функция возвращает значение NULL того же типа, что и тип параметра <expr>.

Выполнение условия <cond> в последней строке sub-блока также рассматривается как отсутствие строк, удовлетворяющих условию.

VALUEFORROW(<index : number>, <expr : anytype>) : anytype Очень опасная в неумелых руках функция! Возвращает значение выражения <expr>, вычисленного для строки sub-блока с индексом <index> в списке строк. Параметр функции <index> также может являться выражением, возвращающим значение числового типа. В случае отсутствия в sub-блоке строки с индексом <index>, то есть (<index> < 0) OR (<index> >= sub.COUNT()), функция возвращает значение NULL того же типа, что и тип параметра <expr>.

Примечание: допустимо, что некоторые компиляторы псевдокода могут принимать в исходном выражении более удобную для программиста скриптов конструкцию <sub>[<index : number>].<param> : anytype, где <param> - имя параметра sub'а, при условии, что препроцессор этих компиляторов преобразует подобную конструкцию в <sub>.VALUEFORROW(<index : number>, <expr : anytype>) : anytype, от которого и создается псевдокод.

DCONC(<expr : string>, <separator: string>) : string Выполняет конкатенацию результатов, полученных при выполнении выражения <expr>, используя указанный в <separator> разделитель и сортируя в алфавитном порядке.

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

Если тип результата <expr> отличен от string необходимо явно привести значение к типу string, используя функцию TO_CHAR. В противном случае DCONC вернет NULL_STRING
LAG(<paramName : string>) : anytype Получение значения параметра из предыдущей строки саба относительно текущей. Если текущая строка первая, тогда функция возвращает NULL
LEAD(<paramName : string>) : anytype Получение значения параметра из следующей строки саба относительно текущей. Если текущая строка последняя, тогда функция возвращает NULL

Внутренние параметры для агрегативных функций

При вычислении агрегативных функций sub-блока могут использоваться следующие специальные внутренние параметры:

Параметр Описание
@ROWINDEX : number Порядковый номер строки в списке строк sub-блока. Учитываются все строки, в том числе те, которые отбрасываются при вычислении некоторых функций (например, в случае, если значение параметра равно Null). Диапазон значений от 0 до количества строк sub-блока - 1. Значения порядковых номеров строк постоянны в продолжение вычисления выражения, содержащего агрегативную функцию.

Обращение к этим параметрам может производиться только в рамках вызова агрегативной функции в контексте sub-блока, для которого эта функция вызвана.

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

В настоящее время определены следующие специальные функции: Агрегативные функции аналитики

Особые внешние функции

Особые внешние функции являются функциями с заранее определенными именами, наборами параметров и возвращаемыми значениями, реализация которых может различаться в зависимости от способа применения вычислительного модуля. Например, самая первая из объявленных особых внешних функций CHECK_RIGHT проверяет наличие права по его идентификатору

Функция Описание
CHECK_RIGHT(<busfuncid : number>) : bool Возвращает true, если значение выражения <busfuncid> является идентификатором бизнес функции, на выполнение которой имеет право пользователь системы. В противном случае функция возвращает false.