Разработка и Конфигурация · 10 мин
Как в 1С выразить представление как строку
Как в 1С получить представление объекта в виде строки: функция Строка(), СтрШаблон, Формат, работа со ссылками и датами. Примеры кода, ошибки и проверка результата.
Во встроенном языке 1С значения разных типов — ссылки, даты, числа, булево — нельзя напрямую склеивать со строками: попытка написать "Документ: " + Ссылка завершится ошибкой преобразования типов. Поэтому разработчику постоянно требуется выразить представление значения как строку — для сообщений пользователю, журнала регистрации, формирования надписей на форме и отладки.
У платформы есть несколько механизмов такого преобразования: функция Строка(), оператор конкатенации с явным приведением, функции СтрШаблон() и Формат(), а также свойства объектов, возвращающие готовое текстовое представление. Каждый способ ведёт себя по-разному в зависимости от типа значения, и выбор влияет на читаемость результата.
Ниже разобраны рабочие приёмы с примерами кода, особенности поведения для ссылочных типов, дат и чисел, а также типичные ошибки, из-за которых в строку попадает не то, что ожидал разработчик.
Как работает функция Строка() в 1С
Функция Строка(Значение) — базовый способ получить текстовое представление. Для ссылочных типов (документов, справочников, перечислений) она возвращает то же представление, которое платформа показывает пользователю: синоним вида объекта плюс наименование или номер и дату документа. Например, Строка(СсылкаНаДокумент) может вернуть «Реализация товаров и услуг 0000-000123 от 12.03.2026».
Для примитивных типов поведение предсказуемо: число приводится к строке без разделителей групп, дата — в формате по умолчанию текущей локали, булево — как «Да» или «Нет». Значение Неопределено превращается в пустую строку, а Null — тоже в пустую строку, что важно учитывать при отладке запросов.
Пример базового использования:
Сообщить("Обрабатывается документ: " + Строка(ДокументСсылка));
СтрокаОписания = "Контрагент: " + Строка(КонтрагентСсылка) + ", сумма: " + Строка(СуммаДокумента);
Важный нюанс: для некоторых системных типов (например, Тип, УникальныйИдентификатор) Строка() возвращает служебное представление, которое не всегда подходит для показа пользователю. Уникальный идентификатор приводится к строке вида «a1b2c3d4-...», что удобно для журнала, но не для интерфейса.
Подстановка значений через СтрШаблон()
Когда в строку нужно подставить несколько значений, конкатенация через «+» быстро становится нечитаемой. Функция СтрШаблон(Шаблон, П1, П2, ...) решает эту задачу: в шаблоне ставятся местозаполнители %1, %2 и так далее, а платформа автоматически приводит каждый параметр к строке.
ТекстСообщения = СтрШаблон("Документ %1 проведён на сумму %2 руб.",
ДокументСсылка,
СуммаДокумента);
Главное преимущество — не нужно явно вызывать Строка() для каждого параметра: СтрШаблон сама выполняет приведение. Кроме того, шаблон легко редактировать и локализовать, не трогая логику кода. Это стандарт де-факто для формирования текстов сообщений в современных конфигурациях.
Ограничения: параметров может быть не больше десяти (местозаполнители %1–%10), а если значение параметра — Неопределено, в строку подставится пустое место. Если нужен формат числа или даты, отличный от стандартного, СтрШаблон его не задаст — потребуется предварительно обернуть значение в Формат().
Текст = СтрШаблон("%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 в коде.
Сравнение способов преобразования
Выбор зависит от задачи: быстрый вывод одного значения, сборка сложного сообщения или строгий формат для обмена. Таблица помогает сориентироваться.
| Способ | Когда применять | Ограничения |
|---|---|---|
Строка(Значение) | Одно значение, отладка, журнал регистрации | Нет управления форматом; пустая строка для Неопределено и Null |
СтрШаблон() | Сообщения с несколькими подстановками | До 10 параметров; формат значений не настраивается |
Формат() | Даты, числа, суммы для пользователя и файлов | Требует знания форматных строк; зависит от локали при неявном формате |
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 проверяйте до вывода.