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

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

1С СКД: как использовать ВЫРАЗИТЬ КАК СТРОКА

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

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

При этом у оператора есть нюансы, которые регулярно приводят к ошибкам компоновки: попытка выразить ссылку в строку, слишком короткая длина с обрезанием данных, конфликт типов при объединении запросов. Ниже разобран синтаксис, рабочие сценарии и способы проверить результат до того, как отчёт попадёт к пользователям.

Важно понимать разницу: ВЫРАЗИТЬ не преобразует значение по смыслу (не «склеивает» ссылку в её наименование), а приводит тип поля. Для получения строкового представления ссылки используется функция ПРЕДСТАВЛЕНИЕ — эти два приёма часто путают, и оба описаны дальше.

Синтаксис ВЫРАЗИТЬ КАК СТРОКА в запросе СКД

Базовая форма оператора в тексте запроса набора данных выглядит так: ВЫРАЗИТЬ(Поле КАК Строка(50)). В скобках после слова «Строка» указывается максимальная длина результата. Если длина не задана или указана как 0, строка считается неограниченной — но такие поля нельзя использовать в группировках, соединениях и ряде других операций, поэтому на практике длину почти всегда фиксируют.

Пример фрагмента запроса набора данных:

ВЫБРАТЬ

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

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

ВЫРАЗИТЬ(СоставноеПоле КАК Строка(100)) КАК ЗначениеСтрокой

ИЗ

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

Оператор допустим и в вычисляемых полях СКД (закладка «Вычисляемые поля» конструктора настроек), и в пользовательских полях выражения. Синтаксис там тот же, поскольку СКД использует тот же язык выражений запросов: ВЫРАЗИТЬ(Поле КАК Строка(150)).

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

Первая типичная ситуация — строка неограниченной длины. Поля вроде «Комментарий» или «Описание» часто хранятся как Строка(0). Такое поле нельзя вывести в группировку, отсортировать по нему или использовать в соединении: компоновщик выдаст ошибку либо отчёт откажется формироваться. Приведение к Строка(N) с разумной длиной снимает ограничение.

Вторая ситуация — составные типы. Если поле может хранить и строку, и число, и ссылку, то при объединении запросов через ОБЪЕДИНИТЬ ВСЕ или при сортировке платформа не сможет однозначно сравнивать значения. Приведение к одному типу выравнивает состав колонки.

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

Строка(0) в группировкеОшибка компоновки

Приведите поле к Строка(N) с достаточной длиной

Составной тип колонкиНестабильная сортировка или объединение

Приведите все ветки объединения к одному типу

Конкатенация полейОшибка типов при сложении

Оберните каждый операнд в ВЫРАЗИТЬ КАК Строка

Нужен текст ссылкиВЫРАЗИТЬ не подходит

Используйте ПРЕДСТАВЛЕНИЕ(Поле)

ВЫРАЗИТЬ против ПРЕДСТАВЛЕНИЕ: частая путаница

Главная ошибка новичков — попытка написать ВЫРАЗИТЬ(ДокументСсылка КАК Строка(100)), чтобы получить текст вроде «Реализация товаров 000123 от 12.03». Так делать нельзя: ссылочный тип не приводится к строке оператором ВЫРАЗИТЬ, и запрос вернёт ошибку либо NULL в зависимости от контекста.

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

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

ВЫРАЗИТЬ или ПРЕДСТАВЛЕНИЕ

ВЫРАЗИТЬ(Поле КАК Строка(N))

Приводит уже строковое или примитивное значение к строке заданной длины. Не работает для превращения ссылки в текст.

ПРЕДСТАВЛЕНИЕ(Ссылка)

Возвращает текстовое представление ссылки (наименование, номер и дату). Результат — строка неограниченной длины.

ВЫРАЗИТЬ(ПРЕДСТАВЛЕНИЕ(Поле) КАК Строка(N))

Комбинация для случаев, когда текст ссылки нужно группировать, сортировать или выводить с фиксированной длиной.

Пошаговая настройка в конструкторе СКД

Разберём практический сценарий: в отчёте по документам нужно вывести колонку «Основание» — строку, собранную из комментария документа, с обрезкой до 100 символов, чтобы по ней можно было группировать.

Откройте схему компоновки данных, перейдите на закладку «Набор данных» и отредактируйте текст запроса. Найдите нужное поле в списке выборки и замените его на выражение с ВЫРАЗИТЬ, задав длину. После этого проверьте, что псевдоним поля (после слова КАК) не изменился, иначе настройки отчёта, ссылающиеся на старое имя, придётся поправить.

Если поле уже используется в ресурсах, связях наборов данных или параметрах, убедитесь, что приведение типа не нарушило эти связи: СКД сравнивает типы полей при соединении наборов, и разная длина строк в связанных полях может привести к неожиданным результатам.

Порядок действий в конструкторе
  1. 1
    Откройте схему компоновки данных и перейдите к набору данных
  2. 2
    В тексте запроса замените поле на ВЫРАЗИТЬ(Поле КАК Строка(100)) с нужной длиной
  3. 3
    Сохраните псевдоним поля (КАК ИмяПоля) без изменений
  4. 4
    Нажмите «Готово» и проверьте, что поле появилось в списке доступных полей
  5. 5
    Сформируйте отчёт и убедитесь, что значения выводятся и не обрезаны раньше нужного места
  6. 6
    Если поле используется в группировке — проверьте, что группировка выполняется без ошибки типов

Ограничения и подводные камни

Обрезание данных. Если фактическое значение длиннее заданной длины, лишние символы отбрасываются без предупреждения. Два разных комментария, совпадающие в первых 50 символах, после приведения к Строка(50) станут неразличимы и сгруппируются вместе. Длину выбирайте с запасом, исходя из реального содержимого базы.

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

NULL вместо ошибки. Если значение нельзя привести к строке (например, в составном поле лежит ссылка, а вы приводите к Строка), результатом будет NULL, а не ошибка выполнения. Отчёт сформируется, но колонка окажется пустой — такую проблему легко пропустить, если не проверять данные глазами.

Типичные ошибки и как их исправить

Ошибка «Неверные параметры в операции сравнения» при объединении наборов возникает, когда в разных запросах ОБЪЕДИНИТЬ одно и то же поле имеет разный тип или разную длину строки. Лечится выравниванием: в каждой ветке объединения поле приводится к одинаковому типу, например Строка(150).

Ошибка «Поле не может быть использовано в группировке» — признак строки неограниченной длины. Добавьте ВЫРАЗИТЬ с конкретной длиной либо замените группировку по этому полю на группировку по связанному ссылочному полю.

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

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

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

Самый надёжный способ — временно вывести в отчёт исходное поле и приведённое рядом и сравнить несколько десятков строк. Совпадение начала текста и отсутствие пустых ячеек там, где исходное значение заполнено, — хороший признак корректной настройки.

Дополнительно проверьте граничные случаи: самое длинное значение в базе (не обрезалось ли оно), пустые значения (должны остаться пустыми или NULL, а не превратиться в странный текст), значения из составного поля разных типов.

Если отчёт работает через консоль СКД или открывается в режиме предприятия, полезно сформировать его с отбором по одному заведомо известному объекту и сверить колонку с данными карточки объекта вручную.

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

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

Длина значений в колонке
Норма

Длинные тексты выводятся целиком или обрезаны осознанно

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

Все строки заканчиваются ровно на границе заданной длины

Составное поле
Норма

Все типы значений отображаются

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

Часть строк пустая — неприводимые типы ушли в NULL

Группировка по полю
Норма

Отчёт формируется без ошибки типов

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

Ошибка «неограниченная длина» или «неверные параметры»

Сравнение с исходными данными
Норма

Текст совпадает с карточкой объекта

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

Текст отличается — перепутаны поля или применена лишняя функция

FAQ

Можно ли выразить число как строку в запросе СКД?

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

Какую длину строки указывать в ВЫРАЗИТЬ?

Ориентируйтесь на максимальную реальную длину данных с запасом: для наименований обычно достаточно 100–150 символов, для комментариев — 200–500. Слишком маленькая длина обрезает данные и склеивает разные значения в группировках; чрезмерно большая не ломает отчёт, но увеличивает расход памяти при обработке результата.

Почему после ВЫРАЗИТЬ КАК Строка колонка стала пустой?

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

Можно ли использовать ВЫРАЗИТЬ в пользовательском поле СКД?

Да. Пользовательские поля-выражения поддерживают язык выражений компоновки, где доступна функция ВЫРАЗИТЬ с тем же синтаксисом: ВЫРАЗИТЬ(Поле КАК Строка(100)). Это удобно, когда исходный запрос менять нельзя, а строка фиксированной длины нужна для группировки или склейки с другим полем.

Чем заменить ВЫРАЗИТЬ, если нужно просто вывести текст ссылки?

Используйте ПРЕДСТАВЛЕНИЕ(Поле) — она возвращает наименование справочника или номер и дату документа в виде строки. Если по этому тексту потом нужно группировать или сортировать, оберните результат в ВЫРАЗИТЬ с фиксированной длиной: ВЫРАЗИТЬ(ПРЕДСТАВЛЕНИЕ(Поле) КАК Строка(150)).

Итог

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

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