Разработка и Конфигурация · 9 мин
Как в 1С выразить значение как строку
Как в 1С выразить значение как строку: функция Строка(), Формат(), XMLСтрока, преобразование чисел, дат, ссылок и булево. Примеры кода и типичные ошибки.
Задача «выразить как строку» возникает в 1С постоянно: нужно подставить число в текст сообщения, вывести дату в нужном формате, получить строковое представление ссылки для лога или передать значение в запрос. Встроенный язык 1С предлагает несколько способов такого преобразования, и у каждого есть свои особенности, ограничения и подводные камни.
Простейший вариант — функция Строка(), но она не всегда даёт ожидаемый результат: дата выводится в региональном формате, число может содержать неразрывные пробелы-разделители групп, а ссылка превращается в наименование, а не в уникальный идентификатор. Поэтому важно понимать, какой инструмент подходит под конкретную задачу.
Ниже разобраны все основные способы преобразования значений в строку во встроенном языке 1С и в языке запросов, с примерами кода, типичными ошибками и рекомендациями по выбору.
Функция Строка() — базовое преобразование
Функция Строка() принимает значение любого типа и возвращает его строковое представление. Это самый простой и самый часто используемый способ:
Число = 1500.5;
Сообщить("Сумма: " + Строка(Число)); // "Сумма: 1 500,5"
Дата = ТекущаяДатаСеанса();
СтрокаДаты = Строка(Дата); // зависит от региональных настроек
Важная особенность: при конкатенации строки со значением другого типа оператор «+» не выполняет неявное преобразование во всех контекстах одинаково. В тонком клиенте и на сервере сложение строки с числом без явного вызова Строка() может привести к ошибке «Преобразование значения к типу Строка не может быть выполнено» — особенно со ссылочными типами и булево. Поэтому явное преобразование через Строка() — хорошая привычка.
Для ссылочных типов (справочники, документы) Строка() возвращает представление объекта — обычно наименование или «номер от даты». Это удобно для сообщений пользователю, но не подходит для идентификации объекта: два элемента могут иметь одинаковое наименование.
Формат() — контроль над представлением чисел и дат
Когда нужен точный формат, используйте функцию Формат(Значение, ФорматнаяСтрока). Она позволяет задать количество десятичных знаков, подавить разделители групп, выбрать шаблон даты:
Сумма = 1500000.5;
Формат(Сумма, "ЧДЦ=2; ЧГ=0"); // "1500000,50" — без разделителей групп
Дата = ТекущаяДатаСеанса();
Формат(Дата, "ДФ=yyyy-MM-dd"); // "2026-03-15"
Формат(Дата, "ДЛФ=DD"); // длинный формат даты
Формат(Дата, "ДФ='dd.MM.yyyy HH:mm:ss'");
Ключ ЧГ=0 отключает группировку разрядов — это критично при выгрузке чисел в файлы, API и запросы к внешним системам. Ключ ЧДЦ задаёт число десятичных знаков, ЧН — представление нуля (например, ЧН=0,00, чтобы вместо пустой строки выводился ноль).
Для дат шаблоны строятся из токенов: yyyy — год, MM — месяц, dd — день, HH — часы, mm — минуты, ss — секунды. Обратите внимание: месяц и минуты различаются регистром (MM против mm), это частая причина ошибок.
Формат(Сумма, "ЧДЦ=2; ЧГ=0; ЧН=0,00")
Формат(ТекущаяДатаСеанса(), "ДФ=yyyy-MM-dd'T'HH:mm:ss")Преобразование ссылок: XMLСтрока и ЗначениеВСтрокуВнутр
Если нужно получить строковый идентификатор ссылки для обмена данными, логирования или хранения в регистре, Строка() не подходит — наименование не уникально. Используйте один из вариантов:
// GUID ссылки
УИД = Строка(Ссылка.УникальныйИдентификатор());
// Строка вида "Справочник.Номенклатура:00000000-0000-0000-..."
Стр = XMLСтрока(Ссылка);
// Внутреннее представление (для хранения внутри одной ИБ)
Внутр = ЗначениеВСтрокуВнутр(Ссылка);
Обратное преобразование выполняется функциями XMLЗначение() и ЗначениеИзСтрокиВнутр(). Учтите ограничения: ЗначениеВСтрокуВнутр работает только внутри одной информационной базы и не гарантирует переносимость между базами. XMLСтрока переносима, но восстановление ссылки через XMLЗначение требует совпадения типов метаданных.
Преобразование булево, NULL и Неопределено
Значения Истина/Ложь через Строка() превращаются в локализованные «Истина»/«Ложь», что неприемлемо для машинного обмена. Для выгрузки в JSON или XML приводите булево явно:
Стр = ?(Флаг, "true", "false");
// или
Стр = XMLСтрока(Флаг); // "true" / "false"
Значение Неопределено через Строка() даёт пустую строку, а NULL (встречается в результатах запросов) напрямую преобразовать нельзя — сначала проверяйте через ЕСТЬ NULL в запросе или функцию ЗначениеЗаполнено() в коде. Попытка сложить строку с NULL приведёт к ошибке времени выполнения.
Выразить как строку в запросе 1С
В языке запросов нет прямого аналога функции Строка(). Есть три рабочих приёма:
ПРЕДСТАВЛЕНИЕ(Поле)— возвращает строковое представление значения, аналогичноСтрока()в коде. Подходит для вывода, но результат нельзя использовать в соединениях.ВЫРАЗИТЬ(Поле КАК СТРОКА(N))— приведение к строке фиксированной длины. Работает только для полей, которые уже имеют строковый тип (например, для усечения длины или превращения неограниченной строки в ограниченную).ПОДСТРОКА(Поле, Начало, Длина)— извлечение части строки.
ВЫБРАТЬ
ПРЕДСТАВЛЕНИЕ(Товары.Номенклатура) КАК ТоварСтрокой,
ВЫРАЗИТЬ(Товары.Комментарий КАК СТРОКА(100)) КАК Комментарий
ИЗ
Документ.Реализация.Товары КАК Товары
Как выбрать способ и проверить результат
Выбор зависит от назначения строки: для пользователя, для машинного обмена или для идентификации объекта. Используйте таблицу ниже как ориентир.
| Задача | Способ | Ограничение |
|---|---|---|
| Сообщение пользователю | Строка() | Формат зависит от региональных настроек |
| Число в файл/API | Формат() с ЧГ=0 | Нужно явно задать ЧДЦ |
| Дата в обмен | Формат() с ДФ или XMLСтрока | Согласовать формат с приёмником |
| Идентификатор ссылки | УникальныйИдентификатор() + Строка() | Только чтение, запись через ПолучитьСсылку |
| Строка в запросе | ПРЕДСТАВЛЕНИЕ / ВЫРАЗИТЬ | ВЫРАЗИТЬ — только для строковых полей |
Как выбрать действие
Проверить результат проще всего через Сообщить() в отладочной обработке или через окно «Вычислить выражение» (Shift+F9) в конфигураторе. Обязательно проверяйте граничные случаи: нулевые и отрицательные числа, пустые даты ('00010101'), значения NULL из запросов и ссылки с одинаковыми наименованиями.
Как проверить результат
Нет пробелов-разделителей, разделитель дробной части соответствует приёмнику
Неразрывные пробелы между разрядами, неожиданная запятая вместо точки
Порядок год-месяц-день соответствует формату приёмника
Месяц и день перепутаны, минуты вместо месяца (mm вместо MM)
Присутствует GUID или полный XML-идентификатор
Только наименование, которое может повторяться
Что важно запомнить
Строка() — универсально, но зависит от региональных настроек. Для машинного обмена всегда используйте Формат() с отключённой группировкой разрядов и явным шаблоном даты. Ссылки идентифицируйте через УникальныйИдентификатор(). В запросах применяйте ПРЕДСТАВЛЕНИЕ и ВЫРАЗИТЬ, помня об их ограничениях.
Частые вопросы
Почему Строка(Число) возвращает пробелы между цифрами?
1С форматирует числа с разделителями групп разрядов по региональным настройкам, причём используются неразрывные пробелы. Чтобы получить «чистое» число, применяйте Формат(Число, "ЧГ=0") — ключ ЧГ=0 отключает группировку.
Как преобразовать дату в строку формата ГГГГ-ММ-ДД?
Используйте Формат(Дата, "ДФ=yyyy-MM-dd"). Шаблон задаётся токенами: yyyy — год, MM — месяц, dd — день. Не путайте MM (месяц) с mm (минуты).
Можно ли в запросе преобразовать число в строку?
Напрямую — нет. ВЫРАЗИТЬ КАК СТРОКА работает только со строковыми полями. Для чисел есть обходной путь через ПРЕДСТАВЛЕНИЕ(Поле), но результат подходит только для вывода, а не для соединений и сравнений.
Чем отличаются XMLСтрока и ЗначениеВСтрокуВнутр?
XMLСтрока даёт переносимое представление, пригодное для обмена между базами. ЗначениеВСтрокуВнутр — внутренний формат, привязанный к конкретной информационной базе; использовать его для межсистемного обмена нельзя.
Почему сложение строки со ссылкой выдаёт ошибку?
Неявное преобразование типов при конкатенации работает не для всех типов. Всегда преобразуйте значение явно: "Документ: " + Строка(Ссылка).
Как получить строку из GUID ссылки обратно в ссылку?
Создайте объект Новый УникальныйИдентификатор(СтрокаGUID), затем получите ссылку методом менеджера объекта, например: Справочники.Номенклатура.ПолучитьСсылку(УИД).