Разработка и Конфигурация · 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-..."
Для полной сериализации значения с возможностью восстановления существуют функции ЗначениеВСтрокуВнутр() и обратная ЗначениеИзСтрокиВнутр(). Они работают только внутри одной информационной базы (или идентичных конфигураций) и часто применяются для хранения настроек. Вне базы такие строки бессмысленны.
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Строка() вернёт внутреннее представление, пригодное для механизмов обмена, но не для чтения человеком. Если цель — показать данные пользователю, оставайтесь на Строка() или Формат().
Сравнение способов
Универсально и быстро. Подходит для сообщений и отладки. Не управляет форматом, зависит от настроек сеанса
Полный контроль над выводом чисел, дат и булево. Требует знания форматной строки
Склейка нескольких значений в одно сообщение без операторов +. Не заменяет Формат для сложных шаблонов
Стандартизированный вывод для обмена и файлов. Не читаем для ссылок, избыточен для интерфейса
Сериализация с восстановлением внутри одной базы. Не переносимо между разными конфигурациями
Проверка результата и отладка
После преобразования полезно убедиться, что строка соответствует ожиданиям. Самый простой способ — вывести результат через Сообщить() в толстом клиенте или посмотреть значение в табло отладчика. Проверяйте три вещи: наличие лишних пробелов-группировок, корректность разделителя дробной части и формат даты.
Для программной проверки используйте функции работы со строками: СтрДлина() для контроля длины, СтрНайти() для поиска подозрительных символов (пробелов, запятых там, где нужна точка). Если строка предназначена для обратного преобразования, сразу выполните его в тесте и сравните с исходным значением.
Исходное = 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 или передачу уникальных идентификаторов ссылок.