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

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

Как в 1С выразить представление как строку

Как в 1С получить представление объекта в виде строки: функция Строка(), СтрШаблон, Формат, работа со ссылками и датами. Примеры кода, ошибки и проверка результата.

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

У платформы есть несколько механизмов такого преобразования: функция Строка(), оператор конкатенации с явным приведением, функции СтрШаблон() и Формат(), а также свойства объектов, возвращающие готовое текстовое представление. Каждый способ ведёт себя по-разному в зависимости от типа значения, и выбор влияет на читаемость результата.

Ниже разобраны рабочие приёмы с примерами кода, особенности поведения для ссылочных типов, дат и чисел, а также типичные ошибки, из-за которых в строку попадает не то, что ожидал разработчик.

Как работает функция Строка() в 1С

Функция Строка(Значение) — базовый способ получить текстовое представление. Для ссылочных типов (документов, справочников, перечислений) она возвращает то же представление, которое платформа показывает пользователю: синоним вида объекта плюс наименование или номер и дату документа. Например, Строка(СсылкаНаДокумент) может вернуть «Реализация товаров и услуг 0000-000123 от 12.03.2026».

Для примитивных типов поведение предсказуемо: число приводится к строке без разделителей групп, дата — в формате по умолчанию текущей локали, булево — как «Да» или «Нет». Значение Неопределено превращается в пустую строку, а Null — тоже в пустую строку, что важно учитывать при отладке запросов.

Пример базового использования:

Сообщить("Обрабатывается документ: " + Строка(ДокументСсылка));

СтрокаОписания = "Контрагент: " + Строка(КонтрагентСсылка) + ", сумма: " + Строка(СуммаДокумента);

Важный нюанс: для некоторых системных типов (например, Тип, УникальныйИдентификатор) Строка() возвращает служебное представление, которое не всегда подходит для показа пользователю. Уникальный идентификатор приводится к строке вида «a1b2c3d4-...», что удобно для журнала, но не для интерфейса.

Подстановка значений через СтрШаблон()

Когда в строку нужно подставить несколько значений, конкатенация через «+» быстро становится нечитаемой. Функция СтрШаблон(Шаблон, П1, П2, ...) решает эту задачу: в шаблоне ставятся местозаполнители %1, %2 и так далее, а платформа автоматически приводит каждый параметр к строке.

ТекстСообщения = СтрШаблон("Документ %1 проведён на сумму %2 руб.",

ДокументСсылка,

СуммаДокумента);

Главное преимущество — не нужно явно вызывать Строка() для каждого параметра: СтрШаблон сама выполняет приведение. Кроме того, шаблон легко редактировать и локализовать, не трогая логику кода. Это стандарт де-факто для формирования текстов сообщений в современных конфигурациях.

Ограничения: параметров может быть не больше десяти (местозаполнители %1–%10), а если значение параметра — Неопределено, в строку подставится пустое место. Если нужен формат числа или даты, отличный от стандартного, СтрШаблон его не задаст — потребуется предварительно обернуть значение в Формат().

bsl
Текст = СтрШаблон("%1 от %2, ответственный: %3", Строка(ДокументСсылка), Формат(ДатаДокумента, "ДЛФ=D"), Строка(Ответственный));

Точное форматирование через Формат()

Функция Формат(Значение, ФорматнаяСтрока) применяется, когда стандартное представление не подходит: нужна дата без времени, число с разделителями разрядов, фиксированное количество знаков после запятой или подавление нулевого значения.

Типовые форматные строки:

  • Формат(Дата, "ДЛФ=D") — дата без времени;
  • Формат(Дата, "ДФ='dd.MM.yyyy HH:mm:ss'") — произвольный шаблон даты и времени;
  • Формат(Число, "ЧРД=,; ЧРГ=' '; ЧН=0") — запятая как разделитель дробной части, пробел между разрядами, ноль вместо пустой строки;
  • Формат(Число, "ЧЦ=15; ЧДЦ=2") — общая длина 15 знаков, два знака после запятой.

Частая ошибка — сложение Строка(Число) в сообщение, после чего сумма «1234567.89» выглядит как «1234567,89» без разделителей и плохо читается. Перед подстановкой в пользовательское сообщение число лучше пропустить через Формат() с нужными параметрами.

Особенности для ссылок, дат и составных типов

Ссылочные типы

Для ссылок Строка() возвращает пользовательское представление, но оно не является уникальным ключом: два контрагента с одинаковым наименованием дадут одинаковую строку. Если строка нужна для идентификации (например, в обмене данными), используйте Строка(Ссылка.УникальныйИдентификатор()) или XMLСтрока(Ссылка).

Даты

Пустая дата (01.01.0001) через Строка() превращается в «01.01.0001 0:00:00», что в сообщении выглядит как мусор. Перед выводом проверяйте заполненность: Если ЗначениеЗаполнено(Дата) Тогда ... либо используйте Формат(Дата, "ДЛФ=D"), который для пустой даты вернёт пустую строку.

Значения из запроса

Поля запроса с составным типом могут вернуть Null при левом соединении. Прямое преобразование даст пустую строку, и причину «пропавших» данных можно искать долго. Надёжнее обрабатывать Null явно через ЕСТЬNULL() в запросе или проверку Значение = Null в коде.

Типичные ошибки
01
Конкатенация строки со ссылкой без Строка() — ошибка «Преобразование значения к типу Строка не может быть выполнено» в строгих контекстах или неожиданный результат
02
Использование Строка(Число) для сумм — число выводится без разделителей разрядов и плохо читается
03
Вывод пустой даты без проверки — в сообщении появляется «01.01.0001 0:00:00»
04
Использование представления ссылки как ключа поиска — наименования не уникальны и могут меняться
05
Ожидание, что Строка(Неопределено) даст слово «Неопределено» — на самом деле возвращается пустая строка

Сравнение способов преобразования

Выбор зависит от задачи: быстрый вывод одного значения, сборка сложного сообщения или строгий формат для обмена. Таблица помогает сориентироваться.

СпособКогда применятьОграничения
Строка(Значение)Одно значение, отладка, журнал регистрацииНет управления форматом; пустая строка для Неопределено и Null
СтрШаблон()Сообщения с несколькими подстановкамиДо 10 параметров; формат значений не настраивается
Формат()Даты, числа, суммы для пользователя и файловТребует знания форматных строк; зависит от локали при неявном формате
XMLСтрока()Идентификация ссылок, обмен, хранение ключейРезультат нечитаем для пользователя
Маршрут решения

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

Нужно быстро вывести одну ссылку или значение в сообщениеИспользуйте Строка(Значение)
Собираете текст из нескольких значенийПрименяйте СтрШаблон() с местозаполнителями %1, %2
Выводите дату или сумму пользователюОберните значение в Формат() с явной форматной строкой
Строка нужна как уникальный ключ в обменеИспользуйте XMLСтрока(Ссылка) или УникальныйИдентификатор()

Проверка результата и отладка

После преобразования полезно убедиться, что строка содержит ожидаемое. Самый простой способ — вывод через Сообщить() в пользовательский режим или запись в журнал регистрации через ЗаписьЖурналаРегистрации() на сервере. В отладчике значение переменной видно сразу, включая тип.

Контрольные признаки корректного преобразования: ссылка отображается с наименованием и номером, дата — в нужном формате без «01.01.0001», число — с разделителями и нужным количеством знаков. Если вместо значения пустая строка — проверьте, не равно ли оно Неопределено или Null.

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

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

Ссылка в строке
Норма

Виден вид объекта, номер и дата или наименование

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

Пустая строка или служебный идентификатор без смысла

Дата в строке
Норма

Дата в ожидаемом формате

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

«01.01.0001 0:00:00» — дата не заполнена

Число в строке
Норма

Разделители разрядов, нужная точность

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

Слипшиеся цифры, лишние знаки после запятой

Значение из запроса
Норма

Осмысленный текст

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

Пустая строка — вероятно Null из левого соединения

В журнал регистрации лучше писать не только представление ссылки, но и её уникальный идентификатор. Представление со временем меняется (переименовали контрагента — изменилась строка), а по идентификатору объект находится всегда. Удобный шаблон: СтрШаблон("%1 (%2)", Строка(Ссылка), XMLСтрока(Ссылка)).
ПЗ
Практическое замечание

FAQ

Чем Строка() отличается от Формат()?

Строка() возвращает стандартное представление значения без настройки формата, а Формат() позволяет задать точный вид даты, числа или булево через форматную строку. Для ссылок Формат() не применяется — там используется только Строка().

Почему Строка(Ссылка) вернула пустую строку?

Чаще всего переменная содержит Неопределено или Null, а не ссылку. Проверьте в отладчике тип значения. Также пустая ссылка (например, Документы.РеализацияТоваровУслуг.ПустаяСсылка()) даст представление без номера и наименования.

Как получить строку, по которой потом можно найти ссылку?

Используйте XMLСтрока(Ссылка) или Строка(Ссылка.УникальныйИдентификатор()). Обратное преобразование выполняется через XMLЗначение() или поиск по уникальному идентификатору методом ПолучитьСсылку().

Как вывести дату без времени в сообщении?

Примените Формат(Дата, "ДЛФ=D") — получите строку вида «12.03.2026». Если нужен свой шаблон, используйте конструкцию вида Формат(Дата, "ДФ='dd.MM.yyyy'").

Можно ли в СтрШаблон() подставить число с форматированием?

Напрямую нет — СтрШаблон приводит параметры к строке стандартным способом. Оберните число в Формат() внутри вызова: СтрШаблон("Сумма: %1", Формат(Сумма, "ЧЦ=15; ЧДЦ=2; ЧРГ=' '")).

Что вернёт Строка() для перечисления?

Для значения перечисления функция вернёт его представление — обычно синоним значения, заданный в конфигураторе, например «Проведён» или «На согласовании». Если синоним не заполнен, будет использовано имя значения.

Итог

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

Строка() — универсальный способ получить представление значения, СтрШаблон() — удобная сборка сообщений из нескольких значений, Формат() — точный контроль вида дат и чисел. Для идентификации ссылок используйте XMLСтрока() или уникальный идентификатор, а пустые даты и Null проверяйте до вывода.