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

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

Как преобразовать переменную в строку в 1С

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

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

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

Важно понимать: строковое представление ссылки на объект (например, «Номенклатура 00-0000123») не является уникальным идентификатором и не подходит для обмена данными между базами. Для таких задач используются другие механизмы, о которых также рассказано ниже.

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

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

Число = 123.45;

СтрокаИзЧисла = Строка(Число); // "123,45"

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

СтрокаИзДаты = Строка(Дата); // например "15.03.2026 10:30:00"

СсылкаНаТовар = Справочники.Номенклатура.НайтиПоКоду("000000123");

СтрокаИзСсылки = Строка(СсылкаНаТовар); // представление объекта

Для булевых значений Строка(Истина) вернёт «Да», а Строка(Ложь) — «Нет». Значение Неопределено преобразуется в пустую строку, что удобно при склейке сообщений, но может маскировать ошибку, если вы ожидали реальное значение.

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

Неявное преобразование при конкатенации

Оператор «+» в 1С при соединении строки с другим типом автоматически вызывает строковое представление. Конструкция "Сумма: " + СуммаДокумента сработает без ошибки и вернёт, например, «Сумма: 1500».

Сумма = 1500.5;

Сообщение = "Итого к оплате: " + Сумма + " руб.";

Сообщить(Сообщение);

Этот приём удобен в коротких выражениях, но таит подводные камни. Если первый операнд — не строка, а число, произойдёт арифметическое сложение вместо склейки: 10 + "5" вызовет ошибку преобразования типа, а в ряде контекстов поведение зависит от порядка операндов. Поэтому в сложных выражениях лучше явно оборачивать значения в Строка() или использовать шаблоны через СтрШаблон().

Функция СтрШаблон() — более читаемая альтернатива конкатенации: СтрШаблон("Заказ №%1 от %2", Номер, Формат(Дата, "ДЛФ=D")). Она сама приводит подставляемые параметры к строке и упрощает локализацию сообщений.

Формат() — управляемый вывод чисел и дат

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

Сумма = 12345.6;

Итог = Формат(Сумма, "ЧЦ=15; ЧДЦ=2; ЧРД=.; ЧГ=3,0"); // "12 345.60"

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

ДатаСтрокой = Формат(ДатаОтчета, "ДФ=yyyy-MM-dd"); // "2026-03-15"

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

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

Отдельный полезный параметр — ЧН, задающий представление нуля. Например, Формат(Количество, "ЧН=") выведет пустую строку вместо «0», что удобно в табличных частях печатных форм.

Преобразование ссылок и объектов в строку

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

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

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

СтрокаГУИД = Строка(ГУИД); // "a1b2c3d4-..."

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

Типичные ошибки
01
Использование Строка(Ссылка) как ключа поиска: представление не уникально, поиск даст неверный или нестабильный результат
02
Передача строки с пробелами-группировками в файлы обмена: принимающая система отклоняет число «1 500,00»
03
Ожидание, что Строка(Неопределено) выдаст слово «Неопределено»: на деле возвращается пустая строка, и ошибка маскируется
04
Преобразование даты через Строка() для обмена: формат зависит от региональных настроек сеанса и может отличаться на разных серверах

XMLСтрока и преобразование для обмена данными

Функция XMLСтрока() преобразует значение в строку по правилам XML-сериализации. Дата станет «2026-03-15T10:30:00», число — «123.45» с точкой, булево — «true». Это стандартный путь при формировании XML, JSON-подобных структур и веб-запросов вручную.

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

СтрокаXML = XMLСтрока(ДатаДок); // "2026-03-15T10:30:00"

ЧислоXML = XMLСтрока(123.45); // "123.45"

БулевоXML = XMLСтрока(Истина); // "true"

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

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

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

Строка()

Универсально и быстро. Подходит для сообщений и отладки. Не управляет форматом, зависит от настроек сеанса

Формат()

Полный контроль над выводом чисел, дат и булево. Требует знания форматной строки

СтрШаблон()

Склейка нескольких значений в одно сообщение без операторов +. Не заменяет Формат для сложных шаблонов

XMLСтрока()

Стандартизированный вывод для обмена и файлов. Не читаем для ссылок, избыточен для интерфейса

ЗначениеВСтрокуВнутр()

Сериализация с восстановлением внутри одной базы. Не переносимо между разными конфигурациями

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

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

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

Исходное = 1234.56;

СтрокаЧисла = Формат(Исходное, "ЧГ=0; ЧРД=.");

ЕстьПробел = СтрНайти(СтрокаЧисла, " ") > 0; // должно быть Ложь

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

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

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

Без пробелов между разрядами, разделитель соответствует требованиям приёмника

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

«1 234,56» при выгрузке в файл, где ожидается «1234.56»

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

Формат стабилен независимо от настроек сеанса (yyyy-MM-dd или ДЛФ по требованию)

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

Порядок дня и месяца меняется на разных компьютерах

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

Используется УникальныйИдентификатор для идентификации

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

Поиск объекта по представлению даёт неоднозначный результат

Частые сценарии и готовые решения

Число без дробной части и пробелов

Для выгрузки целых значений в файлы: Формат(Значение, "ЧДЦ=0; ЧГ=0"). Параметр ЧГ=0 убирает группировку, ЧДЦ=0 отбрасывает дробную часть с округлением.

Дата для имени файла

Используйте шаблон без запрещённых в файловой системе символов: Формат(Дата, "ДФ=yyyyMMdd_HHmmss"). Двоеточия из стандартного представления времени в имени файла недопустимы в Windows.

Склейка сообщения об ошибке

Сочетайте СтрШаблон() с ОписаниеОшибки(): СтрШаблон("Не удалось записать документ %1: %2", Строка(ДокументСсылка), ОписаниеОшибки()). Так сообщение останется читаемым и информативным.

Пустое значение вместо нуля

Для печатных форм, где ноль не должен отображаться: Формат(Сумма, "ЧН=") — нулевое значение превратится в пустую строку, остальные числа выведутся как обычно.

Итог

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

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

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

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

Сама функция Строка() обычно не группирует разряды, но если число уже получено из строки с форматированием или вы используете Формат() без параметра ЧГ=0, появятся неразрывные пробелы. Укажите ЧГ=0, чтобы получить «чистое» число.

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

Используйте Формат(Дата, "ДФ=yyyy-MM-dd") или XMLСтрока(Дата), если допустимо наличие времени через букву T. Первый вариант гибче и позволяет задать любой шаблон.

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

Напрямую через Строка() — нет, получите неинформативное служебное представление. Перебирайте коллекцию в цикле и склеивайте нужные поля через СтрШаблон(), либо сериализуйте через ЗначениеВСтрокуВнутр() для хранения внутри базы.

Чем отличается Строка() от XMLСтрока() для булева?

Строка(Истина) вернёт «Да», а XMLСтрока(Истина) — «true». Первый вариант предназначен пользователю, второй — машинному обмену, где требуется стандартное значение независимо от языка сеанса.

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

Для числа используйте конструкцию с попыткой: Попытка Число = Число(СтрокаЗначения) Исключение ... КонецПопытки. Для дат надёжнее XMLЗначение(Тип("Дата"), Строка), если строка получена через XMLСтроку, либо собственный разбор формата.

Безопасно ли хранить результат ЗначениеВСтрокуВнутр между базами?

Нет. Этот формат привязан к конкретной конфигурации и внутренним идентификаторам объектов. Для обмена между базами применяйте планы обмена, сериализацию в XML/JSON или передачу уникальных идентификаторов ссылок.