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