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

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

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

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

Задача «выразить как строку» возникает в 1С постоянно: нужно подставить число в текст сообщения, вывести дату в нужном формате, получить строковое представление ссылки для лога или передать значение в запрос. Встроенный язык 1С предлагает несколько способов такого преобразования, и у каждого есть свои особенности, ограничения и подводные камни.

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

Ниже разобраны все основные способы преобразования значений в строку во встроенном языке 1С и в языке запросов, с примерами кода, типичными ошибками и рекомендациями по выбору.

Функция Строка() — базовое преобразование

Функция Строка() принимает значение любого типа и возвращает его строковое представление. Это самый простой и самый часто используемый способ:

Число = 1500.5;

Сообщить("Сумма: " + Строка(Число)); // "Сумма: 1 500,5"

Дата = ТекущаяДатаСеанса();

СтрокаДаты = Строка(Дата); // зависит от региональных настроек

Важная особенность: при конкатенации строки со значением другого типа оператор «+» не выполняет неявное преобразование во всех контекстах одинаково. В тонком клиенте и на сервере сложение строки с числом без явного вызова Строка() может привести к ошибке «Преобразование значения к типу Строка не может быть выполнено» — особенно со ссылочными типами и булево. Поэтому явное преобразование через Строка() — хорошая привычка.

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

Формат() — контроль над представлением чисел и дат

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

Сумма = 1500000.5;

Формат(Сумма, "ЧДЦ=2; ЧГ=0"); // "1500000,50" — без разделителей групп

Дата = ТекущаяДатаСеанса();

Формат(Дата, "ДФ=yyyy-MM-dd"); // "2026-03-15"

Формат(Дата, "ДЛФ=DD"); // длинный формат даты

Формат(Дата, "ДФ='dd.MM.yyyy HH:mm:ss'");

Ключ ЧГ=0 отключает группировку разрядов — это критично при выгрузке чисел в файлы, API и запросы к внешним системам. Ключ ЧДЦ задаёт число десятичных знаков, ЧН — представление нуля (например, ЧН=0,00, чтобы вместо пустой строки выводился ноль).

Для дат шаблоны строятся из токенов: yyyy — год, MM — месяц, dd — день, HH — часы, mm — минуты, ss — секунды. Обратите внимание: месяц и минуты различаются регистром (MM против mm), это частая причина ошибок.

bsl
Формат(Сумма, "ЧДЦ=2; ЧГ=0; ЧН=0,00")
Формат(ТекущаяДатаСеанса(), "ДФ=yyyy-MM-dd'T'HH:mm:ss")

Преобразование ссылок: XMLСтрока и ЗначениеВСтрокуВнутр

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

// GUID ссылки

УИД = Строка(Ссылка.УникальныйИдентификатор());

// Строка вида "Справочник.Номенклатура:00000000-0000-0000-..."

Стр = XMLСтрока(Ссылка);

// Внутреннее представление (для хранения внутри одной ИБ)

Внутр = ЗначениеВСтрокуВнутр(Ссылка);

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

Преобразование булево, NULL и Неопределено

Значения Истина/Ложь через Строка() превращаются в локализованные «Истина»/«Ложь», что неприемлемо для машинного обмена. Для выгрузки в JSON или XML приводите булево явно:

Стр = ?(Флаг, "true", "false");

// или

Стр = XMLСтрока(Флаг); // "true" / "false"

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

Выразить как строку в запросе 1С

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

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

ПРЕДСТАВЛЕНИЕ(Товары.Номенклатура) КАК ТоварСтрокой,

ВЫРАЗИТЬ(Товары.Комментарий КАК СТРОКА(100)) КАК Комментарий

ИЗ

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

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

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

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

ЗадачаСпособОграничение
Сообщение пользователюСтрока()Формат зависит от региональных настроек
Число в файл/APIФормат() с ЧГ=0Нужно явно задать ЧДЦ
Дата в обменФормат() с ДФ или XMLСтрокаСогласовать формат с приёмником
Идентификатор ссылкиУникальныйИдентификатор() + Строка()Только чтение, запись через ПолучитьСсылку
Строка в запросеПРЕДСТАВЛЕНИЕ / ВЫРАЗИТЬВЫРАЗИТЬ — только для строковых полей
Маршрут решения

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

Строка показывается пользователю в сообщении или на формеИспользуйте Строка() или Формат() с локализованным шаблоном
Строка уходит в файл, веб-сервис или другую системуИспользуйте Формат() с ЧГ=0 для чисел и ISO-шаблон для дат
Нужно однозначно идентифицировать объектБерите УникальныйИдентификатор() и преобразуйте его через Строка()
Преобразование нужно внутри запросаДля вывода — ПРЕДСТАВЛЕНИЕ, для усечения строки — ВЫРАЗИТЬ КАК СТРОКА(N)

Проверить результат проще всего через Сообщить() в отладочной обработке или через окно «Вычислить выражение» (Shift+F9) в конфигураторе. Обязательно проверяйте граничные случаи: нулевые и отрицательные числа, пустые даты ('00010101'), значения NULL из запросов и ссылки с одинаковыми наименованиями.

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

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

Число в выгруженной строке
Норма

Нет пробелов-разделителей, разделитель дробной части соответствует приёмнику

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

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

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

Порядок год-месяц-день соответствует формату приёмника

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

Месяц и день перепутаны, минуты вместо месяца (mm вместо MM)

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

Присутствует GUID или полный XML-идентификатор

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

Только наименование, которое может повторяться

Итог

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

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

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

Почему Строка(Число) возвращает пробелы между цифрами?

1С форматирует числа с разделителями групп разрядов по региональным настройкам, причём используются неразрывные пробелы. Чтобы получить «чистое» число, применяйте Формат(Число, "ЧГ=0") — ключ ЧГ=0 отключает группировку.

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

Используйте Формат(Дата, "ДФ=yyyy-MM-dd"). Шаблон задаётся токенами: yyyy — год, MM — месяц, dd — день. Не путайте MM (месяц) с mm (минуты).

Можно ли в запросе преобразовать число в строку?

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

Чем отличаются XMLСтрока и ЗначениеВСтрокуВнутр?

XMLСтрока даёт переносимое представление, пригодное для обмена между базами. ЗначениеВСтрокуВнутр — внутренний формат, привязанный к конкретной информационной базе; использовать его для межсистемного обмена нельзя.

Почему сложение строки со ссылкой выдаёт ошибку?

Неявное преобразование типов при конкатенации работает не для всех типов. Всегда преобразуйте значение явно: "Документ: " + Строка(Ссылка).

Как получить строку из GUID ссылки обратно в ссылку?

Создайте объект Новый УникальныйИдентификатор(СтрокаGUID), затем получите ссылку методом менеджера объекта, например: Справочники.Номенклатура.ПолучитьСсылку(УИД).