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

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

Как перенести строку в 1С: способы для кода, запросов, макетов и интерфейса

Как перенести строку в 1С: Символы.ПС, перенос в запросе, макете, поле ввода и сообщении. Примеры кода, типичные ошибки и проверка результата.

Перенос строки в 1С — задача, которая возникает в самых разных ситуациях: при выводе многострочного сообщения пользователю, формировании адреса в печатной форме, склейке текста в запросе или заполнении многострочного поля. При этом единого «символа Enter» в платформе нет — способ зависит от того, где именно нужен перенос: в коде встроенного языка, в тексте запроса, в макете или в элементе формы.

Основной инструмент разработчика — системное перечисление Символы, которое содержит набор служебных символов: Символы.ПС (перенос строки), Символы.ВК (возврат каретки), Символы.Таб (табуляция) и другие. Именно комбинация этих символов определяет, как текст будет отображаться в сообщении, файле или печатной форме.

Важно понимать: перенос, который корректно выглядит в окне сообщений, может не сработать в текстовом файле, открытом в сторонней программе, или в ячейке табличного документа. Поэтому ниже разобраны все рабочие сценарии с примерами кода, ограничениями и способами проверки результата.

Перенос строки в коде через Символы.ПС

Самый частый случай — склейка нескольких строк в одну переменную с переносами. Для этого используется конкатенация с Символы.ПС:

ТекстСообщения = "Первая строка" + Символы.ПС + "Вторая строка";

Сообщить(ТекстСообщения);

Если строк много, удобнее собирать их через СтрШаблон или массив с последующим объединением функцией СтрСоединить, где разделителем выступает тот же перенос:

Строки = Новый Массив;

Строки.Добавить("Шапка документа");

Строки.Добавить("Номер: " + НомерДокумента);

Строки.Добавить("Дата: " + ДатаДокумента);

Результат = СтрСоединить(Строки, Символы.ПС);

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

Разница между ПС, ВК и их комбинацией

Путаница между Символы.ПС и Символы.ВК — классический источник проблем при обмене данными. ПС (перевод строки, LF) и ВК (возврат каретки, CR) исторически используются в разных операционных системах: Windows применяет пару CR+LF, Linux и macOS — только LF.

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

Перенос = Символы.ВК + Символы.ПС;

Текст.ДобавитьСтроку("Строка данных"); // ДобавитьСтроку сама ставит перенос

Кстати, у объекта ТекстовыйДокумент есть метод ДобавитьСтроку(), который автоматически вставляет разделитель строк — вручную дописывать переносы при работе с файлами обычно не нужно.

Перенос строки в запросе

В тексте запроса нельзя напрямую вставить служебный символ, поэтому перенос передают через параметр. Типовой приём — объединение частей адреса или составного наименования:

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| Контрагенты.Наименование + &Перенос + Контрагенты.Адрес КАК Описание

|ИЗ

| Справочник.Контрагенты КАК Контрагенты";

Запрос.УстановитьПараметр("Перенос", Символы.ПС);

Альтернатива — собрать строку уже после выполнения запроса, в цикле обхода выборки. Это предпочтительнее, если дальнейшая логика всё равно обрабатывает каждую запись: меньше риск столкнуться с ограничениями типизации полей на уровне СУБД.

Учтите, что при выводе результата запроса в табличный документ перенос строки в значении поля отобразится только если для ячейки включён перенос текста — об этом ниже.

Перенос в макете и табличном документе

В табличном документе перенос строки внутри ячейки управляется двумя условиями, которые должны выполняться одновременно. Во-первых, в тексте ячейки должен присутствовать символ переноса (Символы.ПС). Во-вторых, у ячейки должно быть включено свойство размещения текста «Переносить» (в палитре свойств макета — «Перенос», в коде — Область.РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Переносить).

Если свойство не включено, текст с Символы.ПС может отобразиться в одну строку или обрезаться. При выводе через параметр макета перенос в значении параметра сохраняется, но высота строки в готовом макете статична — для растягивающихся ячеек макет должен быть спроектирован с учётом многострочного содержимого.

Для печатных форм, где заранее известно число строк (например, адрес из трёх строк), надёжнее выводить каждую строку в отдельную область макета. Это исключает проблемы с автоподбором высоты при печати и экспорте в Excel.

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

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

Вывод в Сообщить()
Норма

Каждая часть текста на своей строке в окне сообщений

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

Весь текст слипся в одну строку — перенос не добавлен

Ячейка табличного документа
Норма

Текст переносится, высота строки достаточна

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

Текст обрезан — не включено свойство «Переносить» или мала высота строки

Текстовый файл в стороннем редакторе
Норма

Строки разделены корректно

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

Всё в одной строке — нужен ВК+ПС вместо ПС

Перенос строки в элементах формы

Когда перенос нужен пользователю при вводе данных, а не разработчику в коде, настраивается поле формы. Для поля ввода в палитре свойств включается «Многострочный режим» — после этого пользователь сможет вставлять переносы клавишей Enter (в некоторых элементах — Ctrl+Enter, а Enter завершает редактирование).

Для надписей и заголовков, которые должны занимать несколько строк, текст задаётся с переносами либо включается автоперенос по ширине. В управляемых формах длинные надписи переносятся автоматически, если не ограничена высота элемента.

Программно установить многострочное значение в поле можно так же — присвоением строки с Символы.ПС. Если реквизит формы имеет тип «Строка» неограниченной длины, переносы сохранятся в базе данных и корректно отобразятся при повторном открытии.

Типичные ошибки
01
Использование \n как в других языках — в 1С это не escape-последовательность, а просто два печатных символа
02
Забытое свойство «Переносить» у ячейки макета — перенос в тексте есть, но отображается одной строкой
03
Перенос только через Символы.ПС при записи файла для Windows-программ — файл открывается в одну строку
04
Вставка переноса в поле ограниченной длины — часть текста вместе с переносами обрезается при записи

Перенос при выгрузке в файлы и обмене данными

При выгрузке в CSV или текстовый формат перенос строки внутри значения опасен: большинство парсеров воспринимают его как конец записи. Если поле может содержать переносы, значение нужно обрамлять кавычками по правилам формата либо заменять переносы на пробел или иной безопасный маркер:

БезопасноеЗначение = СтрЗаменить(Описание, Символы.ПС, " ");

В XML переносы внутри текстовых узлов допустимы и сохраняются, но при сериализации через XDTO поведение зависит от настроек формата. В JSON перенос строки внутри строкового значения кодируется как \n — при записи через ЗаписьJSON платформа делает это автоматически, вручную подставлять escape-последовательности не нужно.

Маршрут решения

Как выбрать способ

Нужно вывести многострочное сообщение или собрать строку в кодеИспользуйте конкатенацию с Символы.ПС или СтрСоединить с разделителем ПС
Перенос нужен в результате запросаПередайте Символы.ПС через параметр запроса и склейте поля
Перенос в печатной формеВключите «Переносить» у ячейки макета или выведите строки в отдельные области
Файл будет открываться в сторонних Windows-программахИспользуйте пару Символы.ВК + Символы.ПС как разделитель строк
Данные уходят в CSV или обмен с фиксированной структурой строкЗамените переносы внутри полей на пробелы или экранируйте по правилам формата

Проверка и отладка переносов

Убедиться, что перенос реально присутствует в строке, можно через функцию СтрЧислоСтрок — она возвращает количество строк с учётом переносов. Если функция возвращает 1, а вы ожидали несколько строк, значит, символ переноса не был вставлен или был потерян при промежуточной обработке.

Для просмотра отдельных строк используйте СтрПолучитьСтроку(Текст, НомерСтроки). Это удобно в отладчике: можно пошагово проверить, что именно попало в каждую строку итогового текста.

При работе с файлами итоговую проверку стоит делать в целевой программе: если файл предназначен для загрузки в банк-клиент или стороннюю учётную систему, откройте его там, а не только в редакторе — редакторы часто «прощают» нестандартные разделители, а загрузчики нет.

Итог

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

В коде перенос делается через Символы.ПС, в запросе — через параметр, в макете — символ плюс свойство «Переносить», в полях формы — многострочный режим. Для файлов под Windows используйте ВК+ПС, а в форматах обмена переносы внутри полей заменяйте или экранируйте.

Часто задаваемые вопросы

Как перенести строку в сообщении пользователю?

Склейте текст с Символы.ПС и передайте в Сообщить() или в объект СообщениеПользователю. Окно сообщений корректно отображает переносы, каждая часть текста выйдет с новой строки.

Почему \n не работает в строке 1С?

Встроенный язык 1С не поддерживает escape-последовательности вида \n или \t — они будут восприняты как обычные символы «обратный слэш» и «n». Вместо этого используются значения перечисления Символы: ПС, ВК, Таб.

Как убрать переносы строк из текста?

Примените СтрЗаменить(Текст, Символы.ПС, " "), а при необходимости дополнительно замените Символы.ВК на пустую строку. Это стандартный приём перед выгрузкой значений в CSV или сравнением строк.

Как посчитать количество строк в многострочном тексте?

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

Перенос есть в коде, но в Excel из табличного документа всё в одной строке. Что делать?

Проверьте, что у ячейки табличного документа включено свойство «Переносить» (размещение текста). Без него переносы в значении игнорируются при отображении и выгрузке. Также убедитесь, что высота строки позволяет показать несколько строк текста.

Чем отличается Символы.ПС от Символы.ВК?

ПС (LF, код 10) — перевод строки, ВК (CR, код 13) — возврат каретки. Внутри 1С достаточно ПС, а для текстовых файлов, открываемых в Windows-программах, обычно требуется пара ВК+ПС, иначе текст может отобразиться одной строкой.