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

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

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

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

Задача выразить значение как строку возникает в 1С постоянно: при формировании сообщений пользователю, выводе в журнал регистрации, конкатенации текста с числами и датами, передаче данных во внешние системы и формировании наименований. Встроенный язык 1С предлагает несколько способов преобразования, и выбор конкретного влияет на результат: одно и то же значение может превратиться в «01.03.2026», «20260301» или «01 марта 2026 г.» в зависимости от применённой функции.

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

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

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

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

Число = 1234.56;

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

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

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

Булево = Истина;

Сообщить(Строка(Булево)); // "Да" или "Yes" — зависит от языка

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

Сообщить(Строка(Ссылка)); // наименование элемента, например "Телевизор Samsung"

Ключевая особенность: для ссылочных типов (элементы справочников, документы) Строка() возвращает представление объекта — то, что пользователь видит в интерфейсе. Для справочника это обычно наименование, для документа — строка вида «Поступление товаров 000001 от 01.03.2026». Для пустых ссылок возвращается пустая строка или текст вроде «<Объект не найден>», если ссылка битая.

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

Формат() — управляемое преобразование чисел и дат

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

Сумма = 12345.6;

Сообщить(Формат(Сумма, "ЧДЦ=2")); // "12 345,60"

Сообщить(Формат(Сумма, "ЧГ=0; ЧДЦ=2")); // "12345,60" без группировки

Сообщить(Формат(Сумма, "ЧЦ=10; ЧВН=")); // "0000012345,60" с ведущими нулями

Дата = '20260301153000';

Сообщить(Формат(Дата, "ДЛФ=D")); // "01.03.2026"

Сообщить(Формат(Дата, "ДЛФ=DD")); // "1 марта 2026 г."

Сообщить(Формат(Дата, "ДФ=yyyy-MM-dd")); // "2026-03-01" — для обмена

Сообщить(Формат(Дата, "ДФ='yyyyMMddHHmmss'")); // "20260301153000"

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

Практическое правило: если строка предназначена для пользователя — используйте ДЛФ и локальные форматы; если для файла обмена, веб-сервиса или SQL-подобного запроса — жёстко задавайте ДФ=yyyy-MM-dd и отключайте группировку разрядов у чисел.

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

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

Дата = '20260301153000';

Сообщить(XMLСтрока(Дата)); // "2026-03-01T15:30:00"

Сообщить(XMLСтрока(12.5)); // "12.5"

Сообщить(XMLСтрока(Истина)); // "true"

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

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

// "a1b2c3d4-e5f6-7890-abcd-ef1234567890"

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

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

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

Текст = "Итоговая сумма: " + 1234.5;   // "Итоговая сумма: 1 234,5"

Текст = "Дата отгрузки: " + Дата; // представление даты по настройкам

Надёжнее явно указывать формат, особенно если код может выполняться под разными пользователями и в разных локализациях:

Текст = "Итоговая сумма: " + Формат(Сумма, "ЧДЦ=2");

Текст = "Дата отгрузки: " + Формат(Дата, "ДЛФ=D");

Для сборки длинных сообщений удобнее СтрШаблон(), который сам приводит параметры к строке:

Сообщение = СтрШаблон("Документ %1 от %2 проведён, сумма %3",

НомерДокумента, Формат(ДатаДокумента, "ДЛФ=D"), Формат(Сумма, "ЧДЦ=2"));

Типичные ошибки
01
Конкатенация числа без Формат() — на англоязычном сервере получится «1,234.56» вместо привычного «1 234,56», и строка в файле обмена станет нечитаемой для приёмника
02
Использование Строка(Ссылка) как ключа поиска — наименование не уникально, поиск даст неверный или случайный элемент
03
Сравнение дат через строковое представление — «01.03.2026» > «02.02.2026» как строка, но не как дата; сравнивать нужно исходные значения
04
Ожидание, что Строка(Неопределено) вызовет ошибку — вернётся пустая строка, и дефект тихо уйдёт в продакшен

Выражение значения как строки в запросах

В языке запросов 1С прямого аналога функции Строка() нет. Оператор ВЫРАЗИТЬ(... КАК Строка(N)) служит для другого: он приводит тип поля к строке заданной длины, но не преобразует число или дату в текст — он лишь указывает, что поле следует трактовать как строковое. Попытка написать ВЫРАЗИТЬ(Сумма КАК Строка(20)) для числового поля вернёт пустую строку или ошибку в зависимости от платформы.

ВЫБРАТЬ

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

ИЗ

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

Типичные легальные применения ВЫРАЗИТЬ ... КАК Строка(N): обрезка неограниченной строки для соединения или группировки (соединять по строке неограниченной длины нельзя), приведение составного типа к конкретному строковому для корректной работы СКД. Если нужно получить текстовое представление числа из запроса — выгрузите результат и обработайте его в коде функцией Формат().

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

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

Строка()

Быстро и универсально, подходит для отладки и сообщений. Минус: зависит от региональных настроек, для ссылок даёт представление

Формат()

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

XMLСтрока()

Канонический вид для обмена и сериализации. Не предназначена для показа пользователю

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

Единственный надёжный способ получить идентификатор ссылки текстом. Для пользователя бесполезен

СтрШаблон()

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

Проверка результата и граничные случаи

После преобразования полезно проверить результат на типовых граничных значениях: пустая дата ('00010101'), ноль, пустая ссылка, Неопределено. Пустая дата через Строка() даст «01.01.0001 0:00:00», что в сообщении выглядит странно — обычно её заменяют пустой строкой или прочерком через Формат(Дата, "ДЛФ=D; ДП=—") либо проверкой Если ЗначениеЗаполнено(Дата).

Для чисел проверяйте округление: Формат(2.675, "ЧДЦ=2") может дать «2,67» из-за двоичного представления дробных чисел, а не ожидаемые «2,68». Если критична точность денежных сумм, округляйте значение до преобразования функцией Окр() с явным указанием режима.

Битая ссылка (объект удалён, ссылка осталась) при вызове Строка() вернёт строку вида «<Объект не найден> (…)». Перед формированием пользовательских сообщений такие случаи стоит отлавливать проверкой Ссылка.ПолучитьОбъект() на Неопределено или запросом с проверкой ЕСТЬ NULL.

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

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

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

Разделители и точность соответствуют ожиданию на всех целевых локалях

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

Точка вместо запятой, лишние пробелы-группировки в файле обмена

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

Формат читается приёмником (yyyy-MM-dd для обмена, ДЛФ для пользователя)

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

Пустая дата отображается как 01.01.0001

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

Для пользователя — представление, для обмена — ГУИД

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

Наименование используется как ключ сопоставления

Пустые значения
Норма

Неопределено и NULL осознанно превращены в пустую строку или заменитель

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

Пустая строка маскирует отсутствие обязательных данных

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

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

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

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

Используйте Формат(Дата, "ДФ=yyyyMMdd"). Для варианта с временем добавьте части: "ДФ='yyyyMMddHHmmss'". Этот формат не зависит от региональных настроек и подходит для имён файлов и обмена.

Как получить строку-идентификатор элемента справочника?

Вызовите Строка(Ссылка.УникальныйИдентификатор()). Полученный ГУИД вида «a1b2c3d4-…» уникален и используется для синхронизации между базами. Обратно ссылку получают методом ПолучитьСсылку(Новый УникальныйИдентификатор(СтрокаГУИД)).

Почему ВЫРАЗИТЬ(Число КАК Строка) в запросе возвращает пустоту?

Оператор ВЫРАЗИТЬ в языке запросов не конвертирует число в текст — он лишь приводит тип поля к строковому для совместимости. Числовое значение не может быть интерпретировано как строка, поэтому результат пустой. Преобразуйте число в строку уже после выполнения запроса, в коде, функцией Формат().

Как убрать пробелы-разделители групп из числа в строке?

Передайте в Формат() параметр ЧГ=0: Формат(Сумма, "ЧГ=0; ЧДЦ=2") вернёт «12345,60» без разделителей разрядов. Альтернатива — СтрЗаменить() неразрывных пробелов, но параметр ЧГ надёжнее и быстрее.

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

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

Итог

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

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