Разработка и Конфигурация · 9 мин
1С 8: как выразить значение как строку
Способы выразить значение как строку в 1С 8: функция Строка(), Формат(), конкатенация, недопустимые типы. Примеры кода, ошибки и проверка результата.
Задача «выразить как строку» возникает в 1С 8 постоянно: при формировании сообщений пользователю, записи в лог, склейке текста запроса, выводе печатных форм и обмене данными. Встроенный язык не преобразует типы неявно во всех контекстах, поэтому разработчику нужно явно приводить число, дату, булево или ссылку к строковому виду.
В языке 1С есть несколько способов получить строковое представление: функция Строка(), функция Формат(), оператор конкатенации +, а также шаблоны через СтрШаблон(). Каждый из них работает по-разному и подходит для своих сценариев. Ошибка в выборе приводит к лишним пробелам, нечитаемым датам или сообщению «Преобразование значения к типу Строка не может быть выполнено».
Ниже разобраны все основные приёмы с примерами кода, типичными ошибками и способами проверить результат. Материал применим к платформе 1С:Предприятие 8.2 и 8.3 в обычном и управляемом приложении.
Функция Строка(): базовый способ преобразования
Функция Строка(Значение) возвращает строковое представление переданного значения. Она работает с примитивными типами (число, дата, булево, строка), с ссылками на объекты базы данных и с рядом других типов, для которых определено строковое представление.
Перем Число, ДатаДок, СсылкаКонтрагент;
Число = 12345.67;
ДатаДок = ТекущаяДата();
Сообщить(Строка(Число)); // "12 345,67" — с разделителем групп
Сообщить(Строка(ДатаДок)); // дата в формате по умолчанию
Сообщить(Строка(СсылкаКонтрагент)); // наименование или представление ссылки
Обратите внимание на два нюанса. Во-первых, число при преобразовании через Строка() получает разделитель групп разрядов (неразрывный пробел) — «12 345,67». Если строка потом пойдёт в файл обмена или запрос, эти пробелы сломают обратное преобразование. Во-вторых, для ссылок функция возвращает представление объекта (обычно наименование), а не уникальный идентификатор — это не подходит для технической идентификации.
Для значения Неопределено и NULL функция Строка() вернёт пустую строку. Это удобно при склейке текста, но может маскировать ошибку, когда вы ожидали реальное значение.
Функция Формат(): управление видом строки
Когда нужно контролировать точный вид результата — количество знаков после запятой, формат даты, ведущие нули, — используется Формат(Значение, ФорматнаяСтрока). Это основной инструмент для подготовки строк в обменах, печатных формах и именах файлов.
Сумма = 1234.5;
ДатаОперации = '20260115143025';
// Число без группировки разрядов, 2 знака после запятой
Стр = Формат(Сумма, "ЧГ=; ЧДЦ=2"); // "1234,50"
// Число с ведущими нулями до 8 знаков
Стр = Формат(42, "ЧЦ=8; ЧВН="); // "00000042"
// Дата в заданном формате
Стр = Формат(ДатаОперации, "ДФ=dd.MM.yyyy"); // "15.01.2026"
Стр = Формат(ДатаОперации, "ДФ=yyyy-MM-dd"); // "2026-01-15"
Стр = Формат(ДатаОперации, "ДФ='dd.MM.yyyy HH:mm:ss'"); // с временем
Форматная строка строится из параметров вида «Имя=Значение», разделённых точкой с запятой. Для чисел ключевые параметры — ЧЦ (общая длина), ЧДЦ (число знаков дробной части), ЧГ (группировка разрядов, пустое значение отключает), ЧВН (ведущие нули). Для дат — ДФ с шаблоном, где dd, MM, yyyy обозначают день, месяц и год.
Пустая дата ('00010101') через Формат() выводится как «01.01.0001». Чтобы получить пустую строку, используйте параметр ДП (дата пустая): Формат(Дата, "ДФ=dd.MM.yyyy; ДП=''").
Формат(Сумма, "ЧГ=; ЧДЦ=2") // число в строку без пробелов-разделителейКонкатенация и СтрШаблон(): склейка строк со значениями
Оператор + в 1С не выполняет неявное преобразование: выражение "Итого: " + 100 вызовет ошибку «Операции сравнения на больше-меньше...» — точнее, ошибку несоответствия типов. Каждое нестроковое значение нужно преобразовать явно:
Текст = "Итого: " + Строка(Сумма) + " руб. за период " + Формат(ДатаНачала, "ДФ=dd.MM.yyyy");
Когда в текст подставляется несколько значений, читаемее использовать СтрШаблон() — она сама приводит параметры к строке:
Текст = СтрШаблон("Документ №%1 от %2, сумма %3",
НомерДокумента,
Формат(ДатаДокумента, "ДФ=dd.MM.yyyy"),
Формат(Сумма, "ЧГ=; ЧДЦ=2"));
Для многострочной склейки с разделителем удобны СтрСоединить() (из массива строк) и СтрРазделить() для обратной операции. Все элементы массива перед соединением должны быть строками.
Строковое представление ссылок и составных типов
Для ссылочных типов (справочники, документы, перечисления) Строка() возвращает представление объекта — то, что пользователь видит в интерфейсе. Для перечисления это синоним значения, для справочника — обычно наименование, для документа — номер и дата.
Если нужен технический идентификатор, а не представление, используйте уникальный идентификатор ссылки:
Идентификатор = Строка(Ссылка.УникальныйИдентификатор()); // GUID как строка
КодЭлемента = Строка(Ссылка.Код); // код справочника
Отдельный случай — значение Неопределено, NULL и Тип. Для Неопределено и NULL результат пустой строки, для типа — строка вида «СправочникСсылка.Контрагенты». Это полезно при диагностике: Строка(ТипЗнч(Значение)) показывает фактический тип переменной.
Выбор способа под задачу
Практическое правило выбора: для отображения пользователю достаточно Строка(), для машинной обработки — Формат() с явными параметрами, для идентификации объекта — GUID, для сложных данных — JSON или XML-сериализацию, а не ручную склейку.
Как выбрать способ
Типичные ошибки и проверка результата
Самая частая ошибка — неявное ожидание «чистого» числа: разработчик пишет Строка(Сумма) в запрос или файл, а в строке оказывается «12 345,67» с неразрывным пробелом и запятой вместо точки. Парсер на стороне-приёмнике такое не читает. Вторая типичная ситуация — дата в региональном формате по умолчанию, которая на другом компьютере выглядит иначе.
Третья группа ошибок связана со ссылками: вместо наименования ожидают код или GUID, а Строка() возвращает представление. При обмене между базами с разными наименованиями это приводит к неоднозначности.
Как проверить результат
Нет пробелов, разделитель дробной части соответствует формату приёмника
Присутствуют пробелы-разделители или запятая там, где нужна точка
Формат задан явно через ДФ и совпадает с ожиданиями приёмника
Формат зависит от настроек сеанса, на другом ПК выглядит иначе
Используется УникальныйИдентификатор()
Используется наименование, которое может совпадать у разных объектов
Быстрый способ проверить фактический результат — вывести значение через Сообщить() в толстом клиенте или в консоли кода на управляемых формах. Для отладки типа значения полезно сочетание Строка(ТипЗнч(Значение)).
Частые вопросы
Как преобразовать число в строку без пробелов между разрядами?
Используйте Формат(Число, "ЧГ="). Параметр ЧГ с пустым значением отключает группировку разрядов. Для контроля дробной части добавьте ЧДЦ, например: Формат(Сумма, "ЧГ=; ЧДЦ=2").
Как получить строку из даты в формате ГГГГ-ММ-ДД?
Примените форматную строку: Формат(Дата, "ДФ=yyyy-MM-dd"). Для даты со временем: Формат(Дата, "ДФ='yyyy-MM-dd HH:mm:ss'"). Шаблон в кавычках нужен, если в нём есть пробелы.
Почему Строка(Ссылка) не возвращает GUID?
Функция Строка() для ссылок возвращает представление объекта — наименование или номер с датой. Чтобы получить GUID, обратитесь к методу ссылки: Строка(Ссылка.УникальныйИдентификатор()).
Как преобразовать булево в строку «Да»/«Нет»?
Стандартное преобразование даст «Истина»/«Ложь». Для произвольного текста используйте условный оператор или функцию Булево в форматной строке: Формат(ЗначениеБулево, "БЛ=Нет; БИ=Да").
Что делать, если возникает ошибка «Преобразование значения к типу Строка не может быть выполнено»?
Значит, тип значения не поддерживает строковое представление — например, ДвоичныеДанные или ХранилищеЗначения. Для двоичных данных примените Base64Строка(), для сложных структур — сериализацию в JSON через ЗаписьJSON.
Как склеить несколько значений в одну строку без множества Строка()?
Используйте СтрШаблон("Текст %1 и %2", Значение1, Значение2) — параметры приводятся к строке автоматически. Для массива строк подойдёт СтрСоединить(Массив, "; ").
Что важно запомнить
Строка() — универсальное преобразование для отображения, Формат() — точный контроль вида чисел и дат для обменов и файлов. Для идентификации объектов используйте GUID, для сложных данных — JSON. Всегда проверяйте результат на отсутствие пробелов-разделителей и зависимости от региональных настроек.