Анонсированные возможности (кратко)
Анонс новых возможностей можно посмотреть по ссылке, если кратко, можно выделить три больших блока добавлений:
- Добавлены новые арифметические операции: округление, логарифмы, квадратные корни и т.д.
- Добавлена возможность преобразования в строку и расширение работы со строками: обрезка строк, удаление пробелов и т.д.
- Добавлена возможность получать размер хранимых данных через метод
РазмерХранимыхДанных
.
Вот со всем этим и хотелось познакомится поподробнее. Все эксперименты проводились на платформе 8.3.20.1613.
Арифметические возможности
В платформе анонсировали следующие возможности:
- Тригонометрические функции Sin, Cos, Tan, ASin, ACos, ATan (все вычисления производятся в радианах)
- Exp - вычисляет результат возведения основания натурального логарифма (числа e) в степень
- Log - вычисляет натуральный логарифм числа.
- Log10 - вычисляет десятичный логарифм числа.
- Pow - вычисляет возведение в степень.
- Sqrt – вычисляет квадратный корень.
- Окр(Round) - округляет исходное число до нужной разрядности
- Цел(Int) - вычисляет целую часть переданного числа, полностью отсекая дробную часть.
Выявлены следующие особенности:
- Данные операторы работают строго с числами. При попадании туда любого другого значения, включая
NULL
илиНеопределено
- платформа выдаст ошибку.
- Данные операторы не могут работать с полями составного типа без явного приведения к числу (оператор
ВЫРАЗИТЬ
).
- В арифметических операциях можно влететь в невозможность вычислить выражение из-за слишком большого числа. Ошибка ниже возникла при попытке посчитать exp от 500. Попытки вставить "ВЫРАЗИТЬ" и т.д. ни к чему не привели.
В целом с арифметическим операциями всё - переходим к работе со строками.
Работа со строками.
В платформе анонсировали следующие возможности:
- Строка(String) – преобразует значение примитивного типа в строку с учетом национальных установок.
- ДлинаСтроки(StringLength) – вычисляет длину строки.
- СокрЛ(TrimL) – отбрасывает незначащие пробелы слева.
- СокрП(TrimR) – отбрасывает незначащие пробелы справа.
- СокрЛП(TrimAll) – отбрасывает незначащие пробелы слева и справа.
- Лев(Left) – получает первые слева символы строки.
- Прав(Right) – получает первые справа символы строки.
- СтрНайти(StrFind) – находит первую позицию подстроки в строке (без учета регистра).
- ВРег(Upper) – преобразует все символы строки в верхний регистр.
- НРег(Lower) – преобразует все символы строки в нижний регистр.
- СтрЗаменить(StrReplace) – заменяет все вхождения подстроки на другую подстроку (без учета регистра).
В данном случае будет 2 эксперимента, т.к. функцию Строка
хотелось погонять "в хвост и в гриву".
Работа функции Строка
Выявлены следующие особенности:
- Умеет преобразовывать любые примитивные типы, включая
NULL
илиНеопределено
(см. пример). - Не умеет преобразовывать ссылки на объекты, в том числе предопределённые элементы.
- Если использовать функцию
Строка
на строку неограниченной длинны - запрос спокойно отработает. Ради интереса вставил в реквизит текст первого тома "Война и мир" - запрос выполнился без вопросов и в результате получил весь текст из реквизита.
Прочие функции работы со строками
Выявлены следующие особенности:
- Остальные функции отказываются работать с любыми типами, кроме Строка
- Все эти функции умеют работать со строками неограниченной длинны.
- Конструктор ловить лишь часть ошибок по типизации, а часть вылезет только на клиенте.
Функция РазмерХранимыхДанных
В платформе анонсировали следующие возможности:
> РазмерХранимыхДанных(StoredDataSize) – возвращает размер данных в байтах, которые занимают данные параметра.
Данная функция будет применима не только к хранилищу значений (как почему-то подумалось мне изначально), а к любому существующему в базе реквизиту (ну, почти к любому).
Выявлены следующие особенности:
- Любая ошибка с размером хранимых данных приводит к вылету платформы.
- Надо чётко понимать, что является реквизитом ИБ, а что нет, т.к. подсказка в конструкторе работает далеко не всегда. (Н-р: попытка обращения к полям
Представление
,Предопределённый
- приведут к ошибке (см. пример проверки)). - Получить общий размер табличной части таким образом не получится, что собственно следует из определения, но проверить нужно было.
Заключение.
Доклад окончен. Целью статьи было попробовать для себя и показать другим как работают новые возможности языка запросов, какие есть при этом ограничения и нюансы, о которых можно изначально не подумать. Спасибо за внимание.
Если вдруг кому нужна обработка, в которой я накидывал данные примеры кода - см. мой github