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

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

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

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

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

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

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

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

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

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

Число = 1234.56;

Сообщить(Строка(Число)); // "1 234,56" — зависит от региональных настроек

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

Сообщить(Строка(ДатаДок)); // например, "15.03.2026 10:30:00"

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

Сообщить(Строка(Ссылка)); // наименование элемента, например "Кабель ВВГ 3х2,5"

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

Функция Формат(): точное управление выводом чисел, дат и булево

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

Форматирование чисел

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

Сумма = 1234567.891;

// Без разделителя групп, две цифры после запятой

Стр = Формат(Сумма, "ЧРД=.; ЧРГ=; ЧДЦ=2"); // "1234567.89"

// С ведущими нулями до 10 знаков

Стр = Формат(42, "ЧЦ=10; ЧН=; ЧВН="); // "0000000042"

// Ноль выводить как пустую строку

Стр = Формат(0, "ЧН="); // ""

Форматирование дат

Для дат удобны конструкции ДФ (шаблон даты) и ДЛФ (локальный формат). Шаблон ДФ=yyyy-MM-dd даёт формат ISO, который корректно сортируется как строка и принимается большинством внешних систем.

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

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

Стр = Формат(Д, "ДФ='dd.MM.yyyy HH:mm:ss'"); // "15.03.2026 10:30:00"

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

Стр = Формат(Д, "ДЛФ=T"); // только время

Форматирование булево

Для типа Булево параметр БЛ/БИ задаёт текст для «Ложь» и «Истина». По умолчанию Формат(Истина) вернёт «Да», что не всегда подходит для обмена — в JSON и веб-сервисах обычно нужны «true»/«false».

Стр = Формат(Истина, "БЛ=false; БИ=true"); // "true"
bsl
// Универсальный пример: строка для имени файла с датой
ИмяФайла = "Выгрузка_" + Формат(ТекущаяДатаСеанса(), "ДФ=yyyy-MM-dd_HH-mm-ss") + ".xml";

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

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

Текст = "Документ № " + Документ.Номер + " от " + Формат(Документ.Дата, "ДЛФ=D");

Сообщить(Текст);

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

Текст = СтрШаблон("Недостаточно товара ""%1"": требуется %2, доступно %3",

Строка(Номенклатура),

Формат(Требуется, "ЧДЦ=3"),

Формат(Доступно, "ЧДЦ=3"));

Сериализация: XMLСтрока, ЗначениеВСтрокуВнутр, JSON

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

XMLСтрока и XMLЗначение

Функция XMLСтрока() преобразует примитивные типы и ссылки в строку формата XML. Обратное преобразование — XMLЗначение() с указанием типа. Для ссылок результат содержит тип объекта и GUID, что позволяет однозначно восстановить ссылку.

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

// "b8c5f4a2-..." с указанием типа, например:

// "CatalogRef.Номенклатура:b8c5f4a2-..."

СтрДата = XMLСтрока(ТекущаяДатаСеанса()); // "2026-03-15T10:30:00"

Восстановленная = XMLЗначение(Тип("Дата"), СтрДата);

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

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

JSON

Для интеграций стандарт де-факто — JSON. Платформа предоставляет объекты ЗаписьJSON/ЧтениеJSON, а примитивные значения сериализуются автоматически. Даты по умолчанию пишутся в формате ISO.

Запись = Новый ЗаписьJSON;

Запись.УстановитьСтроку();

ЗаписатьJSON(Запись, Новый Структура("Сумма, Дата", 100.5, ТекущаяДатаСеанса()));

Стр = Запись.Закрыть(); // {"Сумма":100.5,"Дата":"2026-03-15T10:30:00"}

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

Строка()

Быстро и просто, но результат зависит от локали и представления объекта. Подходит для сообщений пользователю.

Формат()

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

XMLСтрока()

Однозначная обратимая сериализация примитивов и ссылок. Подходит для хранения и обмена.

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

Сериализует любые объекты, включая таблицы значений. Только внутри платформы, не для внешних систем.

JSON

Стандарт для веб-интеграций. Требует ручной обработки ссылок и сложных типов.

Особые случаи: ссылки, перечисления, типы и Неопределено

Некоторые типы ведут себя неочевидно. Значение Неопределено функция Строка() преобразует в пустую строку, NULL — тоже в пустую строку. Это удобно, но может маскировать ошибку: пустая строка в сообщении не скажет, было ли значение вообще.

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

Для получения строкового имени типа значения применяется связка XMLТипЗнч(Значение).ИмяТипа — это надёжнее, чем разбор строки от Строка(ТипЗнч(Значение)), которая возвращает локализованное представление типа.

ИмяТипа = XMLТипЗнч(Значение).ИмяТипа; // "CatalogRef.Номенклатура"

// Имя значения перечисления как в конфигураторе

ИмяЗначения = XMLСтрока(Перечисления.СтавкиНДС.НДС20); // "НДС20"

Типичные ошибки
01
Использование Строка(Число) в обмене данными: разделитель дробной части зависит от локали, и внешняя система может не распарсить значение. Решение — Формат() с явным ЧРД.
02
Сравнение ссылок через строковые представления: два разных объекта могут иметь одинаковое наименование. Сравнивайте сами ссылки или УникальныйИдентификатор().
03
Хранение результата ЗначениеВСтрокуВнутр в долгосрочных данных: внутренний формат может измениться между версиями платформы.
04
Конкатенация даты без Формат(): получаете строку вида '15.03.2026 10:30:00' с локалью сеанса, что ломает сортировку и парсинг.

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

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

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

Стр = XMLСтрока(ДатаИсходная);

Если XMLЗначение(Тип("Дата"), Стр) = ДатаИсходная Тогда

// Преобразование обратимо

КонецЕсли;

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

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

Число в строке для обмена
Норма

Разделитель дробной части — точка, нет пробелов-разделителей групп

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

Запятая или неразрывные пробелы в строке

Дата для сортировки или API
Норма

Формат ISO: yyyy-MM-dd или yyyy-MM-ddTHH:mm:ss

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

Локальный формат dd.MM.yyyy

Ссылка для идентификации
Норма

GUID или XMLСтрока с типом

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

Только наименование объекта

Обратимая сериализация
Норма

Обратное преобразование даёт исходное значение

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

Ошибка разбора или потеря данных

Практические рекомендации по выбору способа

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

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

Отдельное правило: никогда не собирайте строки запросов к базе или тексты программного кода через конкатенацию с преобразованными значениями без контроля — это путь к ошибкам и уязвимостям. Для запросов используйте параметры, для кода — шаблоны.

Маршрут решения

Как выбрать способ

Строка нужна для сообщения пользователюСтрока() или СтрШаблон()
Строка пойдёт в файл, API или имя файлаФормат() с явной форматной строкой
Нужно однозначно сохранить ссылку или датуXMLСтрока()
Нужно сохранить таблицу значений или структуруЗначениеВСтрокуВнутр() или JSON
Интеграция с внешним веб-сервисомЗаписьJSON с явным контролем типов
Итог

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

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

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

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

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

Как преобразовать число в строку без пробелов между разрядами?

Используйте Формат с пустым разделителем групп: Формат(Число, "ЧРГ="). Если нужен и разделитель дробной части «точка», добавьте ЧРД=.: Формат(Число, "ЧРД=.; ЧРГ=").

Как получить GUID ссылки в виде строки?

Вызовите Строка(Ссылка.УникальныйИдентификатор()) — получите строку вида "b8c5f4a2-1d3e-4f5a-9b8c-7d6e5f4a3b2c". Альтернатива — XMLСтрока(Ссылка), которая дополнительно включает тип объекта и позволяет восстановить ссылку через XMLЗначение().

Почему Строка(Дата) в разных базах даёт разный результат?

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

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

Напрямую Строка() для таблицы значений не даёт полезного результата. Используйте ЗначениеВСтрокуВнутр(Таблица) для внутреннего хранения или сериализацию в JSON через ЗаписьJSON для обмена. Для восстановления — ЗначениеИзСтрокиВнутр() или ЧтениеJSON соответственно.

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

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