Разработка и Конфигурация · 11 мин
Как преобразовать значение в строку в 1С
Способы преобразования значений в строку в 1С: функции Строка(), Формат(), XMLСтрока(), ЗначениеВСтрокуВнутр(). Примеры кода, типичные ошибки и ответы на вопросы.
Преобразование значения в строку — одна из самых частых операций во встроенном языке 1С. Она нужна при формировании сообщений пользователю, записи в журнал регистрации, конкатенации текста, выгрузке данных в файлы и обмене с внешними системами. Платформа предлагает несколько способов, и выбор между ними влияет на результат: одно и то же значение может превратиться в «01.01.2026», «20260101000000» или «Да» в зависимости от применённой функции.
Главное, что нужно понимать: функция Строка() даёт представление значения «для человека», а служебные функции вроде XMLСтрока() или ЗначениеВСтрокуВнутр() — представление «для машины». Смешение этих подходов — самая частая причина ошибок, когда строку невозможно обратно преобразовать в значение или пользователь видит нечитаемый технический код.
Ниже разобраны все основные способы с примерами кода, условиями выбора, типичными ошибками и способами проверки результата.
Функция Строка(): универсальное преобразование для отображения
Функция Строка() принимает значение практически любого типа и возвращает его строковое представление. Это самый простой и самый часто используемый способ. Вызов выглядит так:
Количество = 15;
ТекстСообщения = "В документе " + Строка(Количество) + " позиций";
Сообщить(ТекстСообщения);
Для примитивных типов результат предсказуем: число 15 станет «15», булево Истина — «Да», дата — строкой в формате, заданном региональными настройками сеанса. Для ссылочных типов (элементов справочников, документов) Строка() возвращает представление объекта — обычно наименование или номер с датой, как это настроено в конфигураторе.
Важно понимать ограничение: результат зависит от региональных установок. Одна и та же дата на сервере с русскими настройками выдаст «01.03.2026 10:30:00», а с английскими — «3/1/2026 10:30:00 AM». Поэтому Строка() нельзя использовать для формирования машиночитаемых данных, XML-пакетов или ключей поиска.
Функция Формат(): точное управление видом чисел, дат и булевых значений
Когда требуется конкретный вид значения — с разделителями разрядов, фиксированным числом знаков после запятой или особым форматом даты — используется функция Формат(). Она принимает значение и форматную строку:
Сумма = 1234567.8;
Сообщить(Формат(Сумма, "ЧДЦ=2; ЧРГ=' '")); // "1 234 567,80"
ДатаОтчета = ТекущаяДатаСеанса();
Сообщить(Формат(ДатаОтчета, "ДЛФ=DD")); // длинный формат даты
Сообщить(Формат(ДатаОтчета, "ДФ=yyyy-MM-dd")); // "2026-03-01"
Форматная строка состоит из параметров, разделённых точкой с запятой. Для чисел ключевые параметры: ЧДЦ — число десятичных знаков, ЧРГ — разделитель групп разрядов, ЧН — представление нуля (например, ЧН=0.00, чтобы ноль не выводился пустой строкой). Для дат: ДФ — собственный шаблон, ДЛФ — локальный формат (D, DD, DT и другие).
Для булевых значений параметр БЛ/БИ задаёт текст для Ложь и Истина: Формат(Признак, "БЛ=Нет; БИ=Да"). Это удобно при выгрузке в текстовые файлы, где требуется русскоязычное обозначение.
Преобразование ссылок и составных типов
Ссылочные значения — элементы справочников, документы, перечисления — преобразуются в строку через своё представление. Строка(СсылкаНаКонтрагента) вернёт наименование контрагента, а Строка(СсылкаНаДокумент) — что-то вроде «Реализация товаров 000001 от 01.03.2026». Это удобно для сообщений, но не подходит для идентификации.
Если нужно получить уникальный идентификатор ссылки в виде строки (например, для интеграции с внешней системой), используется метод УникальныйИдентификатор():
ИдСтрокой = Строка(СсылкаНаКонтрагента.УникальныйИдентификатор());
// Результат: "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
Для перечислений Строка() возвращает синоним значения (то, что видит пользователь), а XMLСтрока() — имя значения, заданное в конфигураторе. Если строка потом будет разбираться программно, правильный выбор — XMLСтрока(): синонимы могут меняться при доработке конфигурации, а имена значений перечислений стабильны.
Сравнение способов преобразования
Для сообщений пользователю и журнала регистрации. Не подходит для обмена данными: результат зависит от региональных настроек.
Для чисел, дат и булевых значений с требуемым оформлением: отчёты, печатные формы, текстовые файлы. Требует явной форматной строки.
Для обмена данными, хранения значений в строковых реквизитах, веб-сервисов. Результат машиночитаемый, обратим через XMLЗначение().
Для внутреннего хранения сложных значений (таблиц, структур, настроек). Не переносимо между разными версиями платформы и не предназначено для обмена.
XMLСтрока() и ЗначениеВСтрокуВнутр(): машиночитаемые представления
Функция XMLСтрока() преобразует значение в строку по правилам XML-сериализации. Дата станет «2026-03-01T10:30:00», булево Истина — «true», число — без разделителей разрядов. Обратное преобразование выполняется функцией XMLЗначение() с указанием типа:
ДатаСтрокой = XMLСтрока(ТекущаяДатаСеанса()); // "2026-03-01T10:30:00"
ДатаОбратно = XMLЗначение(Тип("Дата"), ДатаСтрокой);
Функция ЗначениеВСтрокуВнутр() сериализует значение во внутреннем формате платформы. Её преимущество — она работает почти с любыми типами, включая таблицы значений и структуры (через промежуточную сериализацию). Обратное действие — ЗначениеИзСтрокиВнутр(). Типичный сценарий — сохранение настроек пользователя в строковом реквизите хранилища.
Ограничение ЗначениеВСтрокуВнутр() принципиально: формат внутренний, недокументированный и может меняться между версиями платформы. Передавать такие строки во внешние системы или хранить их годами нельзя — при обновлении платформы данные могут стать нечитаемыми.
Преобразование в строку через JSON
Для интеграций с веб-сервисами часто нужно превратить структуру данных в JSON-строку. Встроенный язык предоставляет объекты ЗаписьJSON и ЧтениеJSON:
Структура = Новый Структура;
Структура.Вставить("Контрагент", Строка(СсылкаНаКонтрагента));
Структура.Вставить("Сумма", 1500.5);
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, Структура);
СтрокаJSON = ЗаписьJSON.Закрыть();
// {"Контрагент":"ООО Ромашка","Сумма":1500.5}
Учтите, что даты и ссылки напрямую в JSON не сериализуются — их нужно предварительно преобразовать: дату через Формат() в ISO-вид, ссылку — через уникальный идентификатор. Это типичное место ошибок при написании интеграций.
Неявное преобразование и конкатенация: где прячутся ошибки
Встроенный язык 1С не выполняет автоматического преобразования числа в строку при сложении. Выражение "Итого: " + 100 вызовет ошибку «Преобразование значения к типу Строка не может быть выполнено» в строгом контексте или неожиданный результат — поэтому явный вызов Строка() или Формат() обязателен.
Отдельная ловушка — шаблоны сообщений через СтрШаблон(). Функция подставляет значения в шаблон с автоматическим преобразованием, что удобно, но применяет то же представление по умолчанию, что и Строка(), со всеми его ограничениями по региональным настройкам:
Текст = СтрШаблон("Документ №%1 от %2", НомерДок, Формат(ДатаДок, "ДЛФ=D"));
При выводе чисел через конкатенацию помните про неразрывные пробелы в представлении разрядов: строка «1 000 000» содержит символы, которые визуально неотличимы от пробелов, но ломают числовой разбор и сравнение строк.
Как проверить результат
Число читаемо, разряды и десятичные знаки соответствуют ожиданиям
Появились неразрывные пробелы или лишние нули после запятой
Формат ISO (yyyy-MM-dd) или XML-представление, стабильный на любом сервере
Формат зависит от региональных настроек сеанса
XMLЗначение() или ЗначениеИзСтрокиВнутр() возвращает исходное значение без потерь
Ошибка разбора или потеря дробной части и времени
Пошаговый алгоритм выбора способа
Чтобы не выбирать функцию наугад, пройдите по простой цепочке вопросов. Кто будет читать строку — человек или программа? Если человек — нужно локализованное представление. Если программа — стабильный машинный формат. Нужно ли обратное преобразование? Если да, выбор сужается до пар «сериализация/десериализация».
- 1Определите потребителя строки: пользователь, журнал регистрации, файл обмена или внешняя система.
- 2Для пользователя используйте Строка() или Формат() с явной форматной строкой для чисел и дат.
- 3Для файлов и обмена применяйте XMLСтрока() или Формат() с форматом ISO для дат.
- 4Для хранения сложных структур в строковом реквизите используйте ЗначениеВСтрокуВнутр() только внутри одной системы.
- 5Проверьте результат: выведите строку в Сообщить() и убедитесь, что обратное преобразование (если нужно) проходит без ошибок.
Этот алгоритм покрывает подавляющее большинство задач. Исключения — специализированные сценарии вроде выгрузки в форматах с жёсткими требованиями регуляторов, где формат каждого поля задан документацией и его нужно формировать только через Формат() с точной форматной строкой.
Что важно запомнить
Строка() — для пользователя, Формат() — для точного вида чисел и дат, XMLСтрока() — для обмена данными, ЗначениеВСтрокуВнутр() — только для внутреннего хранения. Никогда не полагайтесь на представление по умолчанию там, где строка будет разбираться программно, и всегда проверяйте обратное преобразование.
Частые вопросы
Как преобразовать число в строку без пробелов между разрядами?
Используйте Формат(Число, "ЧГ=0") — параметр ЧГ=0 отключает группировку разрядов. Функция Строка() для больших чисел вставляет неразрывные пробелы, которые мешают дальнейшей обработке, поэтому для машиночитаемого вывода всегда применяйте Формат() с подавлением разрядов.
Как преобразовать дату в строку формата «ГГГГММДД»?
Примените Формат(Дата, "ДФ=yyyyMMdd"). Для варианта с временем добавьте в шаблон часы, минуты и секунды: "ДФ=yyyyMMddHHmmss". Такой формат стабилен и не зависит от региональных настроек сервера, в отличие от Строка(Дата).
Чем отличается Строка() от XMLСтрока() для перечислений?
Строка() возвращает синоним значения — текст, который видит пользователь, например «В наличии». XMLСтрока() возвращает имя значения из конфигуратора, например «ВНаличии». Для программного разбора и обмена используйте XMLСтрока(): синонимы могут измениться при доработке конфигурации, а имена остаются стабильными.
Как преобразовать ссылку справочника в строку для передачи во внешнюю систему?
Получите уникальный идентификатор: Строка(Ссылка.УникальныйИдентификатор()). Это строка вида «a1b2c3d4-...», однозначно идентифицирующая объект. Наименование (результат Строка(Ссылка)) для идентификации не подходит — оно не уникально и может меняться.
Почему «"Итог: " + 100» вызывает ошибку?
Встроенный язык 1С не преобразует число в строку автоматически при операции сложения. Нужно явное преобразование: "Итог: " + Строка(100) или "Итог: " + Формат(100, "ЧГ=0"). Альтернатива — СтрШаблон("Итог: %1", 100), где подстановка выполняется автоматически.
Можно ли преобразовать таблицу значений в строку?
Напрямую через Строка() — нет, результат будет служебным. Для хранения внутри системы используйте ЗначениеВСтрокуВнутр(ТаблицаЗначений), для передачи наружу — сериализацию в JSON через ЗаписьJSON или в XML. Учитывайте объём: большая таблица превратится в строку значительного размера.