При работе с языком запросов 1С программисты часто сталкиваются с необходимостью использовать специфические функции для преобразования данных, математических вычислений или работы со строками. Найти актуальный и полный список всех возможностей бывает непросто из-за обилия разрозненной информации в сети. В этой статье мы разберем, где находится официальный справочник, какие инструменты встроены в платформу для помощи разработчику и какие новые функции появились в последних релизах платформы (начиная с 8.3.20).
Самый надежный и актуальный список функций всегда находится внутри самой платформы. Чтобы получить к нему доступ, не нужно искать информацию в интернете. Рассмотрим путь в Синтакс-помощнике:
Именно здесь представлено официальное описание всех операторов, таких как ВЫБРАТЬ, ГДЕ, СГРУППИРОВАТЬ ПО, а также встроенных функций.
Если вам нужно быстро вспомнить название функции или посмотреть доступные варианты «на лету», проанализируем возможности Конструктора запросов. Это визуальный инструмент, который минимизирует риск синтаксических ошибок.
При добавлении нового поля на закладке Поля или при написании условия на закладке Условия, вы можете нажать на кнопку редактирования выражения. В открывшемся окне доступно дерево функций. Это позволяет не только увидеть список, но и сразу понять, какие параметры ожидает функция. Однако стоит помнить, что Конструктор иногда может предлагать функции, требующие специфических параметров (например, ТИП), при неправильном заполнении которых запрос не будет выполнен. Для интерактивного составления и тестирования выражений в тонком клиенте подойдёт инженерная консоль запросов с конструктором.
Часто возникают вопросы по функциям ТИПЗНАЧЕНИЯ и ТИП. Разберем на примере, как правильно сравнивать типы данных в теле запроса. Это особенно актуально для полей составного типа.
Проанализируем пример кода, который позволяет определить, является ли ссылка в поле типом «Номенклатура»:
ВЫБРАТЬ ПЕРВЫЕ 1
Номенклатура.Ссылка КАК Ссылка,
ТИПЗНАЧЕНИЯ(Номенклатура.Ссылка) КАК ТипСсылки,
ТИП(Справочник.Номенклатура) КАК ТипТипа,
ВЫБОР
КОГДА ТИПЗНАЧЕНИЯ(Номенклатура.Ссылка) = ТИП(Справочник.Номенклатура)
ТОГДА "Это Ссылка точно номенклатура"
ИНАЧЕ "Не номенклатура"
КОНЕЦ КАК Проверка
ИЗ
Справочник.Номенклатура КАК Номенклатура
Важный нюанс: функция ТИП принимает в качестве аргумента имя таблицы в формате Справочник.Имя, Документ.Имя и так далее. Если передать туда некорректную строку или само поле, система выдаст ошибку «Таблица не найдена».
Начиная с версии 8.3.20, возможности языка запросов были существенно расширены. Ранее сложные расчеты приходилось выполнять уже после получения выборки в коде 1С, теперь же мы можем перенести их на сторону СУБД.
Рассмотрим основные математические функции:
ABS(Число) — вычисление модуля.ОКРУГЛ(Число, Разрядность) — полноценное округление прямо в запросе.ЦЕЛОЕ(Число) — получение целой части (отбрасывание дроби).POW(Основание, Показатель) — возведение в степень.SQRT(Число) — квадратный корень.SIN, COS, TAN, ASIN, ACOS, ATAN.LOG (натуральный) и LOG10 (десятичный).Долгое время разработчикам была доступна только функция ПОДСТРОКА. Теперь мы можем выполнять более гибкие манипуляции со строковыми данными. Выясним, какие инструменты появились в нашем арсенале:
ВРЕГ и НРЕГ позволяют привести строки к единому виду для сравнения.СОКРЛ, СОКРП и СОКРЛП удаляют лишние символы пробелов.ДЛИНА(Строка) возвращает число символов, а СТРНАЙТИ помогает найти позицию подстроки.ЛЕВ(Строка, Количество) и ПРАВ(Строка, Количество) упрощают получение префиксов или суффиксов.Помимо новых функций, не забываем про классические инструменты, которые используются практически в каждом сложном отчете:
Функция ЗНАЧЕНИЕ(): Позволяет обращаться к предопределенным данным, не используя параметры запроса. Например: ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказов.Новый) или ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка).
Функция ВЫРАЗИТЬ(): Необходима для изменения типа данных. Чаще всего применяется для ограничения длины неограниченных строк (чтобы их можно было использовать в группировках) или для приведения составного типа к конкретному: ВЫРАЗИТЬ(ПолеСоставногоТипа КАК Справочник.Номенклатура).
Функция ЕСТЬNULL(): Критически важна при работе с левыми соединениями. Она позволяет заменить пустое значение (NULL) на значение по умолчанию: ЕСТЬNULL(СуммаОстаток, 0).
Функции ПРЕДСТАВЛЕНИЕ и ПРЕДСТАВЛЕНИЕОСНОВНОГОДАННОГО заслуживают отдельного упоминания. Они возвращают строковое описание объекта (например, наименование справочника). Однако помните: эти функции нельзя использовать в условиях ГДЕ, в группировках или внутри других функций. Они предназначены только для вывода финального результата пользователю. Для обхода ограничений при фильтрации по представлению ссылки можно использовать методику сравнения строки с представлением ссылки в запросе.
Подводя итог, можно сказать, что язык запросов 1С становится всё более мощным инструментом. Регулярная проверка раздела «Синтаксис текста запросов» в официальной справке Конфигуратора позволит вам всегда быть в курсе актуальных возможностей платформы.