К статье
Практический материал

Разработка и Конфигурация · 9 мин

Выразить как строка в запросе 1С: полное руководство по функции ВЫРАЗИТЬ

Как использовать ВЫРАЗИТЬ КАК СТРОКА в запросе 1С: синтаксис, приведение типов, ограничение длины, работа с NULL и типичные ошибки разработчиков.

Функция ВЫРАЗИТЬ в языке запросов 1С предназначена для явного приведения значения к указанному типу данных. Конструкция «выразить как строка» применяется, когда нужно преобразовать число, дату, ссылку или составное поле в строковый тип — например, для объединения с другими строками, сравнения по части значения или группировки.

Типичная ситуация: в регистре хранится составное поле, в котором могут лежать и ссылки, и числа, и строки. При попытке объединить такое поле со строковым литералом запрос вернёт ошибку несовместимости типов. Явное приведение через ВЫРАЗИТЬ решает задачу: запрос получает однозначный тип и корректно выполняется на СУБД.

Важно понимать, что ВЫРАЗИТЬ не является функцией форматирования. Она не превращает дату в читаемое представление и не добавляет разделители разрядов в число — она лишь меняет тип значения на уровне запроса. Для красивого вывода результата используется функция ПРЕДСТАВЛЕНИЕ или обработка уже на стороне кода.

Синтаксис функции ВЫРАЗИТЬ для строкового типа

Общий вид конструкции: ВЫРАЗИТЬ(Выражение КАК СТРОКА(Длина)). Первый аргумент — поле, параметр или вложенное выражение, второй — целевой тип с обязательным указанием максимальной длины в символах. В отличие от типов ЧИСЛО или ДАТА, для СТРОКА длина является обязательным параметром — без неё конструктор запроса выдаст ошибку.

Пример простого запроса, где числовой код приводится к строке для последующего объединения:

ВЫБРАТЬ

Номенклатура.Наименование,

ВЫРАЗИТЬ(Номенклатура.Код КАК СТРОКА(20)) КАК КодСтрокой

ИЗ

Справочник.Номенклатура КАК Номенклатура

Длина строки выбирается исходя из реальных данных. Если указать СТРОКА(10), а значение содержит 15 символов, результат будет усечён без предупреждения — это частый источник скрытых ошибок в отчётах и обменах данными.

Когда приведение к строке действительно нужно

Первая группа задач — объединение значений разных типов в одно поле. Оператор «+» для строк в запросе требует, чтобы оба операнда были строковыми, поэтому числа и даты приводят через ВЫРАЗИТЬ. Например, формирование ключа вида «Код-Год» из двух числовых полей.

Вторая группа — сравнение и поиск по подстроке. Функция ПОДСТРОКА и оператор ПОДОБНО работают только со строками. Если нужно найти документы, у которых номер заканчивается на определённые цифры, а поле номера имеет составной тип, предварительное приведение к строке становится обязательным.

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

Пример: объединение кода и наименования

ВЫБРАТЬ

ВЫРАЗИТЬ(Товары.Код КАК СТРОКА(11)) + " — " + Товары.Наименование КАК ПредставлениеТовара

ИЗ

Справочник.Номенклатура КАК Товары

Приведение чисел, дат и ссылок: особенности каждого типа

Числа приводятся к строке в том виде, в каком их вернёт СУБД: без разделителей групп разрядов, с точкой в качестве разделителя дробной части. Если для отчёта нужен формат «1 234,56», делать это нужно уже в модуле через функцию Формат(), а не в запросе.

Даты при приведении к строке дают внутреннее представление, которое зависит от платформы и СУБД, и почти никогда не совпадает с привычным «ДД.ММ.ГГГГ». Поэтому для дат конструкция ВЫРАЗИТЬ КАК СТРОКА практически не применяется — вместо неё используют ПРЕДСТАВЛЕНИЕ или извлечение частей даты функциями ГОД, МЕСЯЦ, ДЕНЬ с последующей сборкой строки.

Ссылки при приведении к строке дают не наименование объекта, а техническое представление. Чтобы получить читаемое название контрагента или документа, применяйте функцию ПРЕДСТАВЛЕНИЕ(Ссылка) — она возвращает именно то, что видит пользователь в интерфейсе.

Сравнение вариантов

ВЫРАЗИТЬ КАК СТРОКА

Подходит для чисел и составных полей, когда важен тип на уровне СУБД. Для ссылок и дат даёт техническое, а не пользовательское представление.

ПРЕДСТАВЛЕНИЕ

Возвращает читаемое представление ссылки или значения. Удобно для отчётов, но результат нельзя надёжно сравнивать и индексировать.

Формат() в коде

Применяется после выполнения запроса. Даёт полный контроль над выводом, но требует обхода выборки в модуле.

Работа с NULL и составными типами

Если исходное поле содержит NULL, результат ВЫРАЗИТЬ также будет NULL, а не пустой строкой. Это критично при объединении: «строка» + NULL даст NULL, и поле в отчёте окажется пустым. Перед приведением обрабатывайте такие значения функцией ЕСТЬNULL(Поле, "").

Для составного поля ВЫРАЗИТЬ выполняет ещё одну важную функцию — сужение типа. Если измерение регистра может хранить ссылки на два разных справочника, конструкция ВЫРАЗИТЬ(Поле КАК Справочник.Контрагенты) оставит только значения нужного типа, остальные превратит в NULL. Аналогично приведение к СТРОКА отбрасывает несовместимые значения.

Пошаговый пример: поиск документов по окончанию номера

Задача: найти реализации, номер которых оканчивается на «/25». Номер документа строковый, но в некоторых конфигурациях имеет составной тип, поэтому рассмотрим вариант с явным приведением.

Порядок действий
  1. 1
    Откройте консоль запросов и выберите таблицу документа.
  2. 2
    Добавьте поле номера с приведением: ВЫРАЗИТЬ(Док.Номер КАК СТРОКА(20)).
  3. 3
    В секции ГДЕ задайте условие: ВЫРАЗИТЬ(Док.Номер КАК СТРОКА(20)) ПОДОБНО "%/25".
  4. 4
    Выполните запрос на тестовой копии базы и сверьте количество строк с ожиданием.
  5. 5
    Проверьте, что в результат не попали документы с похожим окончанием в середине номера.
ВЫБРАТЬ

Реализация.Ссылка,

ВЫРАЗИТЬ(Реализация.Номер КАК СТРОКА(20)) КАК НомерСтрокой

ИЗ

Документ.РеализацияТоваровУслуг КАК Реализация

ГДЕ

ВЫРАЗИТЬ(Реализация.Номер КАК СТРОКА(20)) ПОДОБНО "%/25"

Обратите внимание: символ процента в шаблоне ПОДОБНО означает любую последовательность символов. Если в самом номере могут встречаться спецсимволы шаблона, их нужно экранировать через параметр СПЕЦСИМВОЛ.

Типичные ошибки и как их избежать

Типичные ошибки
01
Не указана длина: ВЫРАЗИТЬ(Поле КАК СТРОКА) — запрос не пройдёт проверку, длина обязательна.
02
Слишком короткая длина: значения молча усекаются, сравнения и группировки дают неверный результат.
03
Приведение ссылки к строке вместо ПРЕДСТАВЛЕНИЕ — в отчёте появляется технический идентификатор вместо наименования.
04
Игнорирование NULL: объединение строки с NULL даёт пустое поле, нужна обёртка ЕСТЬNULL.
05
Приведение полей соединения к строке — теряются индексы, запрос резко замедляется на больших таблицах.

Отдельно стоит упомянуть попытку привести строку к числу «на всякий случай» и обратно в одном запросе. Каждое лишнее преобразование типов усложняет план запроса и затрудняет отладку. Приводите значение ровно один раз и сохраняйте результат в именованное поле через КАК.

Проверка результата и ограничения

Контрольные точки

Как проверить результат

Длина значений в результате
Норма

Все строки целиком, без обрезанных окончаний

Тревожный признак

Часть значений усечена — увеличьте длину в СТРОКА(N)

Пустые поля
Норма

Пусто только там, где данных нет изначально

Тревожный признак

Пусто там, где значение есть — проверьте NULL и составной тип

Скорость выполнения
Норма

Запрос отрабатывает за приемлемое время на рабочем объёме

Тревожный признак

Резкое замедление — уберите приведение из условий соединения

Помните об ограничении: максимальная длина строки в запросе ограничена возможностями платформы и СУБД, а строки неограниченной длины (тип СТРОКА(0) в метаданных) в запросах приводятся с конкретной длиной и могут усекаться. Поля типа ХранилищеЗначения и строки неограниченной длины нельзя напрямую сравнивать и группировать — предварительно приводите их к фиксированной длине.

Итог

Что важно запомнить

ВЫРАЗИТЬ(Поле КАК СТРОКА(Длина)) приводит значение к строке фиксированной длины; длина обязательна, лишнее усекается. Для читаемого представления ссылок используйте ПРЕДСТАВЛЕНИЕ, для форматирования — Формат() в коде. NULL обрабатывайте через ЕСТЬNULL, а поля соединений не приводите к строке, чтобы не потерять индексы.

Частые вопросы

Можно ли выразить значение как строку неограниченной длины в запросе?

Нет, в языке запросов длина строки указывается явно числом, например СТРОКА(150). Конструкция СТРОКА(0), допустимая в метаданных, в запросе не используется. Если реальная длина данных неизвестна, задайте значение с запасом и проверьте результат на усечение.

Чем ВЫРАЗИТЬ отличается от ПРЕДСТАВЛЕНИЕ?

ВЫРАЗИТЬ меняет тип значения на уровне запроса и для ссылок возвращает техническое представление. ПРЕДСТАВЛЕНИЕ возвращает строку так, как её видит пользователь: наименование справочника, номер и дату документа. Для вывода в отчёт обычно нужен именно второй вариант.

Почему после приведения к строке поле стало пустым?

Наиболее вероятные причины — исходное значение NULL или несовместимый тип в составном поле. Оберните выражение в ЕСТЬNULL(ВЫРАЗИТЬ(Поле КАК СТРОКА(50)), "") и проверьте, какие типы реально хранятся в поле.

Как преобразовать дату в строку формата ДД.ММ.ГГГГ прямо в запросе?

Надёжного способа сделать это одной функцией в запросе нет. Варианты: собрать строку из ГОД(), МЕСЯЦ() и ДЕНЬ() с дополнением нулями, либо получить дату в выборке и отформатировать её функцией Формат() уже в модуле при обходе результата.

Влияет ли приведение к строке на производительность запроса?

Да, если приведение применяется к полям в условиях соединения или отбора по большим таблицам: СУБД не сможет использовать индекс по исходному полю. В списке выбираемых полей влияние минимально, поэтому приводите типы в секции ВЫБРАТЬ, а не в ГДЕ и соединениях.

Можно ли использовать ВЫРАЗИТЬ КАК СТРОКА для поля типа ХранилищеЗначения?

Нет, значения типа ХранилищеЗначения нельзя напрямую приводить к строке в запросе. Данные из хранилища извлекаются в коде методом Получить() после выполнения запроса, и уже там преобразуются в нужное представление.