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

Отчеты и Аналитика · 9 мин

Как в СКД 1С выразить число как строку

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

В системе компоновки данных (СКД) задача преобразовать число в строку возникает постоянно: нужно склеить сумму с валютой, вывести номер документа без разделителей групп, собрать произвольную подпись в итогах или подготовить поле для группировки. При этом прямой функции «число в строку» в языке запросов 1С нет — приходится использовать обходные приёмы, и у каждого есть свои ограничения.

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

Ниже разобраны все три подхода с примерами выражений, типичными ошибками и критериями выбора. Материал применим к управляемым формам и обычным отчётам на СКД в типовых и самописных конфигурациях.

Где именно нужно преобразование: выбираем уровень

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

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

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

Маршрут решения

Как выбрать действие

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

Способ 1: функция ПРЕДСТАВЛЕНИЕ в запросе

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

Пример запроса для набора данных СКД:

ВЫБРАТЬ

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

Продажи.СуммаОборот КАК Сумма,

ПРЕДСТАВЛЕНИЕ(Продажи.СуммаОборот) КАК СуммаСтрокой

ИЗ

РегистрНакопления.Продажи.Обороты КАК Продажи

Поле СуммаСтрокой будет иметь тип «Строка», и его можно конкатенировать с другими строками прямо в запросе:

	"Итого: " + ПРЕДСТАВЛЕНИЕ(Продажи.СуммаОборот) + " руб." КАК Подпись

Главное ограничение: формат представления числа определяется платформой и региональными настройками сеанса. Вы не управляете количеством знаков после запятой и разделителями групп через параметры функции — их там нет. Поэтому для строгих требований к виду строки этот способ не подходит.

Способ 2: вычисляемое поле с функцией Формат

Когда нужен полный контроль над видом числа в строке, добавьте вычисляемое поле на вкладке «Вычисляемые поля» конструктора СКД. В выражении доступен встроенный язык, включая функцию Формат().

Порядок действий: откройте схему компоновки, перейдите на вкладку «Вычисляемые поля», добавьте поле, укажите путь к данным (например, СуммаСтрокой) и введите выражение:

Формат(Сумма, "ЧЦ=15; ЧДЦ=2; ЧРД=.; ЧГ=0")

Параметры форматной строки: ЧЦ — общее число знаков, ЧДЦ — знаков после запятой, ЧРД — разделитель дробной части, ЧГ=0 — отключает группировку разрядов (убирает пробелы между тысячами). Именно ЧГ=0 чаще всего нужен, когда строку потом передают во внешние системы или сравнивают.

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

Порядок действий
  1. 1
    Откройте схему компоновки данных отчёта
  2. 2
    Перейдите на вкладку «Вычисляемые поля» и нажмите «Добавить»
  3. 3
    Укажите путь к данным, например СуммаСтрокой
  4. 4
    В поле «Выражение» введите: Формат(Сумма, "ЧЦ=15; ЧДЦ=2; ЧГ=0")
  5. 5
    Добавьте поле в выбранные поля настроек отчёта
  6. 6
    Сформируйте отчёт и проверьте вид строки и работу итогов

Способ 3: формат поля без смены типа

Частая ситуация: разработчик преобразует число в строку только ради внешнего вида, а потом сталкивается с тем, что итоги по колонке перестали считаться. В большинстве таких случаев преобразование вообще не нужно.

В СКД формат отображения задаётся без изменения типа. На вкладке «Наборы данных» откройте список полей, найдите нужное числовое поле и в колонке «Оформление» (или через настройки: «Выбранные поля» → поле → «Оформление» → параметр «Формат») укажите форматную строку, например ЧЦ=15; ЧДЦ=2; ЧН=0.

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

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

ПРЕДСТАВЛЕНИЕ в запросе

Просто и быстро, но формат не контролируется; подходит для склейки и группировок

Вычисляемое поле с Формат()

Полный контроль формата; требует аккуратности с ресурсами и итогами

Оформление поля (формат без смены типа)

Лучший вариант, когда нужно только отображение; итоги и сортировка не страдают

Типичные ошибки и ограничения

Самая частая ошибка — попытка склеить число со строкой в запросе без преобразования. Выражение "Сумма: " + Продажи.СуммаОборот вызовет ошибку исполнения запроса, потому что язык запросов не выполняет неявного приведения числа к строке при конкатенации.

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

Третья ловушка — неразрывные пробелы. Представление числа 12 500 содержит неразрывный пробел (код 160), а не обычный. Сравнение такой строки с «12 500» с обычным пробелом вернёт Ложь. Если строка используется для сопоставлений, удаляйте разделители через Формат() с ЧГ=0.

Типичные ошибки
01
Склейка числа со строкой без ПРЕДСТАВЛЕНИЕ — ошибка исполнения запроса
02
Строковое поле в ресурсах с Сумма() — пустые или ошибочные итоги
03
Игнорирование неразрывных пробелов в представлении числа — не срабатывают сравнения строк
04
Смена типа ради отображения, хотя достаточно настройки формата поля

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

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

Особое внимание уделите NULL: если числовое поле приходит из левого соединения и может быть пустым, ПРЕДСТАВЛЕНИЕ(NULL) вернёт пустую строку, а Формат(NULL, ...) в вычисляемом поле может выдать неожиданный результат. Надёжнее обернуть поле в ЕСТЬNULL(Поле, 0) в запросе или в конструкцию ВЫБОР КОГДА ... ТОГДА ... ИНАЧЕ "" КОНЕЦ.

Также проверьте числа с нулевой дробной частью: при ЧДЦ=2 целое число 100 выведется как «100.00», что не всегда желательно. Если нужен «умный» формат, комбинируйте ВЫБОР с двумя вариантами форматирования в вычисляемом поле.

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

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

Вид строки в детальных записях
Норма

Число выведено в нужном формате, без лишних пробелов

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

Неразрывные пробелы, лишние или отсутствующие знаки после запятой

Итоги по числовым колонкам
Норма

Суммы и количества считаются как раньше

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

Итоги пустые или отчёт падает с ошибкой

Пустые значения (NULL)
Норма

Пустая строка или 0 по заданному правилу

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

Ошибка вычисления выражения или артефакты в ячейках

Часто задаваемые вопросы

Можно ли в запросе СКД использовать функцию Формат()?

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

Как убрать пробелы между разрядами в строковом представлении числа?

Создайте вычисляемое поле с выражением Формат(Поле, "ЧГ=0") — параметр ЧГ=0 отключает группировку разрядов. Если строка уже получена через ПРЕДСТАВЛЕНИЕ, удалить неразрывные пробелы можно функцией СтрЗаменить в вычисляемом поле, заменяя символ с кодом 160.

Почему после преобразования в строку перестали считаться итоги?

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

Как вывести число с фиксированным количеством знаков после запятой в запросе?

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

Что вернёт ПРЕДСТАВЛЕНИЕ для значения NULL?

Пустую строку. Если поле может содержать NULL (например, из левого соединения), заранее обработайте его через ЕСТЬNULL(Поле, 0) или конструкцию ВЫБОР, чтобы получить предсказуемый результат.

Можно ли группировать отчёт по строковому представлению числа?

Да, поле с ПРЕДСТАВЛЕНИЕ или вычисляемое строковое поле можно добавить в группировку. Но учтите, что сортировка будет строковой: «9» окажется после «10». Для числового порядка сортировки добавьте рядом исходное числовое поле и сортируйте по нему.

Итог

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

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