Приведение типов

int(val) — приводит val к типу Integer
str(val) — приводит val к типу String
n(val) — возвращает 0, если val == null, иначе возвращает val (эквивалентно int(val))

Работа с коллекциями

Коллекцией является:
1) результат запроса данных класса через @ALL.[CLASSNAME]
2) данные связанного грида при обращении по коду набора данных (например, если в @this находится объект класса M$OBR, то результат запроса @this.DS или @this.KS_STAC будет являться коллекцией)
3) результат ручной инициализации коллекции

@Code == null является булевым выражением (так как @Code конкретное значение) и будет вычислено до выполнения запроса, а выражение code == null имеет тип sql запрос и будет преобразовано в code == 0

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

Ссылки: filter, in, all, size, init, map, find, findMax, findMin, sum, mkString, head, last, tail, distinct, trunc, ~|, split, ~~~, at, sortBy, (), seq, ++, intersect, diff

Функция и описание Примеры
.filter([expr]) — выражение фильтрации коллекции, где [expr] — выражение для фильтрации. Для сравнения используется двойное равенство (одинарное означает присваивание)
@this.DOGOVOR.filter(END_DATE > today()) 
@ALL.PACIENT.filter(gender == @this.gender)
[val] in [collection] — выражение проверки наличия val в коллекции collection. Работает только для Integer. Также может использоваться в .filter(). Для not in использовать конструкцию вида !([val] in [collection])
3 in (1, 2, 3, 4) => true
5 in (1, 2, 3, 4) => false
@this.PACIENTS.filter(ID in @this.dogovor.PRIKREPL_PACIENTS)
@this.PACIENTS.filter(!(ID in @ALL.M$PACIENT.filter(AGE > 35)))
@ALL.[classcode] — выражение для получения всех объектов класса classcode.
@ALL.M$PACIENT
@ALL.M$POLIS_OMS
.size() — возвращает количество элементов в коллекции.
@this.ADRES.filter(A$STATUSID==25215465427).size()
 .init() — заставляет явно инициализировать коллекцию. По умолчанию она инициализируется только по явному требованию доступа к элементам коллекции. Это дает возможность фильтровать объекты через точку (join). Если массив инициализирован, выражение будет вычисляться на сервере приложений и последовательно пройдется по всем объектам, предоставляя дополнительный доступ к полям и ссылкам объектов, хотя это и будет медленно. Когда же массив не инициализирован, выражение не вычисляется на сервере приложений а конвертируется в sql, но join в данный момент не поддерживается.
@ALL.m$pacient.init().filter(statusId.code == 123)
.map([expr]) — делает новую коллекцию на основе вычисленного выражения expr.
@this.uslugi.map(price * number)
@ALL.M$POLIS_STATUS.map(ID -> NAME)
.find([expr]) — возвращает первый найденный объект из коллекции согласно выражению expr. Если такого объекта не существует — возвращает null.
@this.DOGOVOR.find(A$STATUSID==2941524)
@ALL.M$PACIENT.find(LAST_NAME == "Иванов" && 
FIRST_NAME == "Иван")
.findMax([columnName]) — возвращает объект с максимальным значением в колонке columnName. ColumnName вводится без кавычек.
@this.RESULTS.findMax(EFF)
@ALL.STUDENTS.findMax(AVERAGE_MARK)
.findMin([columnName]) — аналогично findMax, но с минимальным значением в колонке.
.sum( | [expr]) — сумма коллекции. Если на входе подается Vector (коллекция с одной колонкой), то expr можно не указывать. Если подается коллекция объектов, то считается выражение expr, затем сумма вычисленных значений.
@this.Uslugi.map(price * number).sum()
@this.Uslugi.sum(price * number)
 .mkString([separator]) — объединяет объекты в строку, используя разделитель separator. На вход подается Vector(String).
@this.USLUGI.a$name.mkString("; ") 
@ALL.M$SRC_STAC.map(CODE + ": " + NAME).mkString(", ")
.head([separator])  — возвращает первый элемент из коллекции. Если коллекция пуста — возвращает null.
@this.PACIENTS.head()
.last() — то же, что и .head(), но последний элемент.
.tail()— возвращает массив без первого элемента. На пустом массиве возвращает ошибку.
@ALL.M$PACIENT.tail()
.distinct() — отбирает уникальные значения в коллекции.
@ALL.USLUGI.ISTOCHNIK_FINID.distinct()
.trunc(val) — укорачивает коллекцию до количества элементов val.
@ALL.M$PACIENT.trunc(1000)
[regexp] ~| [str] — разбиение строки str на коллекцию по разделителю regexp, которое является регулярным выражением и записывается в одиночных кавычках. Регулярное выражение может быть как справа так и слева. Возвращается коллекция.
', *' ~| "ааа,бб, ссс"
 [regexp] split [str] — то же, что и ~|.
 [regexp] ~~~ [str] — получает из строки str вхождения удовлетворяющие regexp. Возвращает коллекцию. regexp и str можно менять местами.
'(\d+)' ~~~ "12j123k12"
.at([val]) — возвращает элемент массива по индексу val. Если val больше, чем n-1, где n — количество элементов, то возвращается null.
@this.RESULTS.at(0)
.sortBy([columnName]) — сортировка коллекции по указанной колонке.
@this.SHABLON_STR_SDELKA_ID.USLUGI
    .filter(a$statusid == 1876900708430).sortBy(SORT_ORDER)
() — инициализация массива.
() - Пустой массив
(123,123) - массив из двух элементов
seq([exp]) — cоздает массив если значением выражения является не массив, иначе же просто возвращает значение выражения. Используется при париснге xml где узел может быть как элемент так и коллекция для приведения к одному виду.
seq(@xml.adresses.adres)
++ — добавляет к массиву один или несколько элементов. Может использоваться для упрощения синтаксиса и проверки что взять первое значение из массива а если он не пустой взять какое-то другое значение.
@this.uslugi.CENA ++ @this.BAZ_CENA.head()
intersect — формирует массив, в который входят элементы, присутствующие в обоих исходных массивах. При работе с массивом объектов сверяет их id.
(1,2,3) intersect (2,4,5,6,7,8)
splitPeriod(@this.DATA_OTKR, today(), "day", 1) 
intersect @this.KS_STAC
.filter(A$CLASSID == 1382979469314).DATA
diff — формирует массив, в который входят элементы, отсутствующие в массиве №2, но присутствующие в массиве №1. При работе с массивом объектов сверяет их id.
splitPeriod(@this.DATA_OTKR, today(), "day", 1) diff 
@this.KS_STAC.filter(A$CLASSID == 1382979469314).DATA

 

Работа со строками

[regexp] ~~ [str] — проверка что строка соответствует регулярному выражению. Результат Bool. Пример:

'[a-zA-Z]+' ~~ "ashgdfkj"

searchEleks(str) — поиск объектов в Элекс. Возвращает список ID найденных объектов. Разбивает входящую строкуна слова, выкидввает строки длинной меньше трех, ищет слова по фильтру like ‘text%’ По найденным словам ищет объекты. Кол-во слов обрезается до 1000. Кол-во обьектов итоговое тоже до 1000.