Разработка и Конфигурация · 11 мин
ВЫРАЗИТЬ КАК в языке запросов 1С: синтаксис и практика
Синтаксис оператора ВЫРАЗИТЬ КАК в запросах 1С: приведение типов полей, строк, чисел и ссылок. Примеры, ограничения, ошибки и проверка результата запроса.
Оператор ВЫРАЗИТЬ КАК в языке запросов 1С выполняет приведение значения поля к указанному типу данных прямо в тексте запроса. Это основной инструмент, когда поле хранит составной тип (например, строку неограниченной длины или ссылку на несколько видов справочников), а для соединения, сравнения или вывода в СКД нужен один конкретный тип.
Типичные ситуации: обрезать строку неограниченной длины до фиксированной, чтобы по ней можно было соединять таблицы; сузить составной тип ссылки до одного справочника, чтобы появилась возможность обратиться к его реквизитам через точку; привести число к нужной точности. Без такого приведения запрос либо не выполнится, либо вернёт ошибку «Поле не найдено» при обращении к реквизиту составной ссылки.
Ниже разобраны точный синтаксис, допустимые типы, рабочие примеры для строк, чисел и ссылок, ограничения оператора и типичные ошибки, которые приводят к падению запроса или к пустым результатам.
Синтаксис оператора ВЫРАЗИТЬ КАК
Общая форма записи: ВЫРАЗИТЬ(Выражение КАК ТипДанных). В качестве выражения допускается поле таблицы, параметр запроса или вложенное выражение. Тип указывается ключевым словом с параметрами в скобках там, где они нужны: СТРОКА(длина), ЧИСЛО(длина, точность), ДАТА, БУЛЕВО, либо ссылочный тип вида Справочник.Номенклатура или Документ.РеализацияТоваровУслуг.
Пример минимального запроса с приведением строки:
ВЫБРАТЬ
ВЫРАЗИТЬ(Товары.Комментарий КАК СТРОКА(150)) КАК КраткийКомментарий
ИЗ
Справочник.Номенклатура КАК Товары
Результат приведения обязательно получает псевдоним через КАК, если поле нужно дальше использовать в выборке, группировке или упорядочивании. Приведённое поле можно применять в условиях ГДЕ, в соединениях и в параметрах виртуальных таблиц — везде, где допустимо обычное выражение.
Какие типы можно указывать
Оператор поддерживает примитивные типы и ссылочные типы конфигурации. Для примитивных типов задаются параметры: у строки — длина, у числа — общее количество цифр и количество знаков после запятой. Для ссылочных типов указывается конкретный объект метаданных: справочник, документ, план видов характеристик и так далее.
Если приведение невозможно (например, значение ссылки относится к другому виду справочника), результатом будет NULL, а не ошибка выполнения. Это важно учитывать при соединениях: «неподходящие» строки не отвалятся сами по себе, но поле станет пустым.
| Тип | Запись в запросе | Типичное применение |
|---|---|---|
| Строка | СТРОКА(100) | Обрезка неограниченной строки для соединения или группировки |
| Число | ЧИСЛО(15, 2) | Приведение к фиксированной точности, сравнение с параметром |
| Дата | ДАТА | Отсечение времени или приведение составного типа |
| Булево | БУЛЕВО | Приведение составного типа к логическому |
| Ссылка | Справочник.Контрагенты | Сужение составной ссылки, доступ к реквизитам через точку |
Приведение строк: обрезка неограниченной длины
Поля с типом «строка неограниченной длины» нельзя использовать в соединениях, группировках и сравнениях в ряде СУБД — запрос завершится ошибкой или будет работать крайне медленно. Стандартное решение — обрезать строку оператором ВЫРАЗИТЬ до разумной длины, достаточной для задачи.
ВЫБРАТЬ
ВЫРАЗИТЬ(Реализация.Комментарий КАК СТРОКА(200)) КАК Комментарий
ПОМЕСТИТЬ ВТ_Документы
ИЗ
Документ.РеализацияТоваровУслуг КАК Реализация
;
ВЫБРАТЬ
ВТ_Документы.Комментарий,
КОЛИЧЕСТВО(*) КАК КоличествоДокументов
ИЗ
ВТ_Документы КАК ВТ_Документы
СГРУППИРОВАТЬ ПО
ВТ_Документы.Комментарий
Длину выбирайте по содержимому: для артикулов и кодов хватает 25–50 символов, для комментариев обычно достаточно 100–200. Избыточная длина увеличивает расход памяти при группировке и сортировке, а недостаточная обрежет значимую часть значения и склеит разные строки в одну группу.
Приведение ссылок составного типа
Когда реквизит имеет составной тип (например, «ДокументОснование» со ссылками на несколько видов документов), прямое обращение к реквизиту конкретного вида через точку невозможно. ВЫРАЗИТЬ сужает тип до одного вида, после чего реквизиты становятся доступны.
ВЫБРАТЬ
Оплата.ДокументОснование КАК Основание,
ВЫРАЗИТЬ(Оплата.ДокументОснование КАК Документ.ЗаказКлиента).ДатаОтгрузки КАК ДатаОтгрузки
ИЗ
Документ.ОперацияПоПлатежнойКарте КАК Оплата
ГДЕ
Оплата.ДокументОснование ССЫЛКА Документ.ЗаказКлиента
Обратите внимание на пару приёмов: условие ССЫЛКА отфильтровывает строки, где основание — нужный вид документа, а ВЫРАЗИТЬ открывает доступ к его реквизитам. Без фильтра для «чужих» видов документов приведённое поле вернёт NULL, и обращение к реквизиту тоже даст NULL.
Тот же приём работает в соединениях: приведённая ссылка соединяется с таблицей конкретного справочника или документа. Это корректнее, чем соединение составной ссылки напрямую, которое платформа может выполнить с лишними объединениями по всем возможным таблицам.
- 1Определите, к какому виду объекта нужно привести поле (например, Справочник.Контрагенты)
- 2Оберните поле: ВЫРАЗИТЬ(Таб.Поле КАК Справочник.Контрагенты) и задайте псевдоним
- 3Добавьте условие ГДЕ Таб.Поле ССЫЛКА Справочник.Контрагенты, чтобы отсечь NULL
- 4Обращайтесь к реквизитам через приведённое выражение или через соединение с таблицей справочника
- 5Выполните запрос в консоли запросов и проверьте, что реквизиты заполнены, а строки не потеряны
Приведение чисел и дат
Приведение чисел востребовано, когда составной реквизит хранит числа разной точности либо когда нужно сравнить значение с параметром фиксированного типа. Запись ВЫРАЗИТЬ(Поле КАК ЧИСЛО(15, 2)) задаёт 15 значащих цифр, из них 2 после запятой. При превышении разрядности значение округляется по правилам платформы, а не обрезается механически.
С датами оператор чаще применяют для приведения составного типа (дата + строка, например) к чистой дате. Для отсечения времени у обычной даты корректнее использовать функции работы с датами, а не ВЫРАЗИТЬ, поскольку приведение к ДАТА не обнуляет время у значения, которое уже является датой.
ВЫБРАТЬ
ВЫРАЗИТЬ(Движения.Количество КАК ЧИСЛО(15, 3)) КАК Количество,
НАЧАЛОПЕРИОДА(Движения.Период, ДЕНЬ) КАК День
ИЗ
РегистрНакопления.ТоварыНаСкладах КАК Движения
Если запрос с ВЫРАЗИТЬ используется в СКД, помните, что схема компоновки сама приводит типы полей набора данных к типам, указанным на закладке «Наборы данных». Явное приведение в тексте запроса надёжнее: оно фиксирует тип независимо от настроек полей.
Ограничения и частые ошибки
Оператор не выполняет произвольных преобразований: нельзя превратить строку «123» в число или ссылку в её представление. ВЫРАЗИТЬ работает только как уточнение типа внутри допустимых комбинаций — в первую очередь для сужения составных типов и задания параметров примитивных типов.
Вторая группа проблем — потеря данных при неверных параметрах. Слишком короткая строка обрезает значения, малая разрядность числа вызывает ошибку переполнения или округление, а приведение ссылки к неверному виду молча даёт NULL. Перед использованием в рабочем отчёте проверяйте результат на реальных данных, включая «крайние» значения: самые длинные строки, максимальные числа, все встречающиеся виды ссылок.
Как проверить результат
Консоль запросов показывает целевой тип (Строка(100), Справочник.Контрагенты и т.п.)
Тип остался составным или строка неограниченной длины
Значения соответствуют исходным, NULL только там, где тип изначально другой
Массовые NULL или обрезанные значения
Совпадает с количеством строк без приведения при тех же отборах
Строки пропали — вероятно, условие или соединение отсекает NULL
Когда ВЫРАЗИТЬ не нужен: альтернативы
Не каждую задачу стоит решать приведением. Если поле уже имеет нужный тип, ВЫРАЗИТЬ избыточен и лишь удлиняет текст запроса. Для проверки вида ссылки без доступа к реквизитам достаточно оператора ССЫЛКА в условии. Для подстановки текстового представления ссылки используется функция ПРЕДСТАВЛЕНИЕ, а для работы с периодами — функции НАЧАЛОПЕРИОДА и КОНЕЦПЕРИОДА.
В механизме СКД часть приведений можно переложить на вычисляемые поля и ресурсы, но для соединений и группировок внутри запроса ВЫРАЗИТЬ остаётся основным инструментом. Выбирайте подход по месту: всё, что влияет на соединение и группировку, приводите в запросе; всё, что касается только отображения, — на уровне настроек отчёта.
Как выбрать действие
FAQ
Чем ВЫРАЗИТЬ отличается от оператора ССЫЛКА?
ССЫЛКА — это проверка: условие «Поле ССЫЛКА Справочник.Контрагенты» возвращает истину или ложь и используется только для отбора. ВЫРАЗИТЬ — преобразование: оно возвращает значение заданного типа и позволяет дальше обращаться к реквизитам объекта. В запросах их часто комбинируют: ССЫЛКА фильтрует, ВЫРАЗИТЬ открывает доступ к полям.
Что произойдёт, если привести ссылку к неверному виду объекта?
Ошибки выполнения не будет — поле просто получит значение NULL для всех строк, где фактический тип не совпадает с указанным. Поэтому перед приведением полезно проверить, какие виды ссылок реально встречаются в поле, например запросом с группировкой по ТИПЗНАЧЕНИЯ(Поле).
Можно ли через ВЫРАЗИТЬ преобразовать строку в число?
Нет. Оператор не выполняет разбор строки и не конвертирует «123» в число 123. Приведение работает как уточнение типа в допустимых пределах: сужение составных типов и задание параметров примитивных типов. Для строк, хранящих числа, потребуется менять структуру данных или обрабатывать значения кодом.
Почему запрос с ВЫРАЗИТЬ к СТРОКА всё равно падает при соединении?
Частая причина — приведение выполнено в одной части запроса, а соединение идёт по исходному полю без приведения. Проверьте, что в условии соединения используются именно приведённые выражения с одинаковой длиной строки с обеих сторон. Разная длина или смешение приведённого и исходного поля приводит к ошибке или к заведомо ложному сравнению.
Влияет ли ВЫРАЗИТЬ на производительность запроса?
Само приведение недорогое, но оно мешает использовать индексы по приведённому полю в условиях и соединениях. Если отбор по такому полю критичен, лучше хранить значение уже в нужном типе (отдельный реквизит фиксированной длины) и строить индекс по нему, а ВЫРАЗИТЬ оставить для отчётных сценариев.
Работает ли ВЫРАЗИТЬ в параметрах виртуальных таблиц?
Да, приведение допустимо в выражениях параметров виртуальных таблиц, например при передаче отбора по составному полю. Убедитесь, что тип параметра совпадает с типом измерения или реквизита, по которому строится отбор, — иначе отбор не сработает или вернёт пустой результат.
Что важно запомнить
ВЫРАЗИТЬ(Выражение КАК Тип) приводит значение к нужному типу внутри запроса: обрезает неограниченные строки, сужает составные ссылки и задаёт точность чисел. Несовместимые значения превращаются в NULL без ошибки, поэтому приведение ссылок дополняйте проверкой ССЫЛКА, а результат всегда проверяйте в консоли запросов на реальных данных.