Разработка и Конфигурация · 10 мин
Как перенести строку в 1С: способы для кода, запросов, макетов и интерфейса
Как перенести строку в 1С: Символы.ПС, перенос в запросе, макете, поле ввода и сообщении. Примеры кода, типичные ошибки и проверка результата.
Перенос строки в 1С — задача, которая возникает в самых разных ситуациях: при выводе многострочного сообщения пользователю, формировании адреса в печатной форме, склейке текста в запросе или заполнении многострочного поля. При этом единого «символа Enter» в платформе нет — способ зависит от того, где именно нужен перенос: в коде встроенного языка, в тексте запроса, в макете или в элементе формы.
Основной инструмент разработчика — системное перечисление Символы, которое содержит набор служебных символов: Символы.ПС (перенос строки), Символы.ВК (возврат каретки), Символы.Таб (табуляция) и другие. Именно комбинация этих символов определяет, как текст будет отображаться в сообщении, файле или печатной форме.
Важно понимать: перенос, который корректно выглядит в окне сообщений, может не сработать в текстовом файле, открытом в сторонней программе, или в ячейке табличного документа. Поэтому ниже разобраны все рабочие сценарии с примерами кода, ограничениями и способами проверки результата.
Перенос строки в коде через Символы.ПС
Самый частый случай — склейка нескольких строк в одну переменную с переносами. Для этого используется конкатенация с Символы.ПС:
ТекстСообщения = "Первая строка" + Символы.ПС + "Вторая строка";
Сообщить(ТекстСообщения);
Если строк много, удобнее собирать их через СтрШаблон или массив с последующим объединением функцией СтрСоединить, где разделителем выступает тот же перенос:
Строки = Новый Массив;
Строки.Добавить("Шапка документа");
Строки.Добавить("Номер: " + НомерДокумента);
Строки.Добавить("Дата: " + ДатаДокумента);
Результат = СтрСоединить(Строки, Символы.ПС);
Такой подход читается лучше, чем длинная цепочка плюсов, и его проще расширять. Функция СтрСоединить доступна в современных версиях платформы; если конфигурация работает в режиме совместимости со старыми версиями, придётся использовать конкатенацию.
Разница между ПС, ВК и их комбинацией
Путаница между Символы.ПС и Символы.ВК — классический источник проблем при обмене данными. ПС (перевод строки, LF) и ВК (возврат каретки, CR) исторически используются в разных операционных системах: Windows применяет пару CR+LF, Linux и macOS — только LF.
Внутри самой 1С (сообщения, многострочные поля, табличные документы) достаточно Символы.ПС. Но при записи текстового файла, который будут открывать в сторонних редакторах, безопаснее использовать комбинацию:
Перенос = Символы.ВК + Символы.ПС;
Текст.ДобавитьСтроку("Строка данных"); // ДобавитьСтроку сама ставит перенос
Кстати, у объекта ТекстовыйДокумент есть метод ДобавитьСтроку(), который автоматически вставляет разделитель строк — вручную дописывать переносы при работе с файлами обычно не нужно.
Перенос строки в запросе
В тексте запроса нельзя напрямую вставить служебный символ, поэтому перенос передают через параметр. Типовой приём — объединение частей адреса или составного наименования:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Контрагенты.Наименование + &Перенос + Контрагенты.Адрес КАК Описание
|ИЗ
| Справочник.Контрагенты КАК Контрагенты";
Запрос.УстановитьПараметр("Перенос", Символы.ПС);
Альтернатива — собрать строку уже после выполнения запроса, в цикле обхода выборки. Это предпочтительнее, если дальнейшая логика всё равно обрабатывает каждую запись: меньше риск столкнуться с ограничениями типизации полей на уровне СУБД.
Учтите, что при выводе результата запроса в табличный документ перенос строки в значении поля отобразится только если для ячейки включён перенос текста — об этом ниже.
Перенос в макете и табличном документе
В табличном документе перенос строки внутри ячейки управляется двумя условиями, которые должны выполняться одновременно. Во-первых, в тексте ячейки должен присутствовать символ переноса (Символы.ПС). Во-вторых, у ячейки должно быть включено свойство размещения текста «Переносить» (в палитре свойств макета — «Перенос», в коде — Область.РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Переносить).
Если свойство не включено, текст с Символы.ПС может отобразиться в одну строку или обрезаться. При выводе через параметр макета перенос в значении параметра сохраняется, но высота строки в готовом макете статична — для растягивающихся ячеек макет должен быть спроектирован с учётом многострочного содержимого.
Для печатных форм, где заранее известно число строк (например, адрес из трёх строк), надёжнее выводить каждую строку в отдельную область макета. Это исключает проблемы с автоподбором высоты при печати и экспорте в Excel.
Как проверить результат
Каждая часть текста на своей строке в окне сообщений
Весь текст слипся в одну строку — перенос не добавлен
Текст переносится, высота строки достаточна
Текст обрезан — не включено свойство «Переносить» или мала высота строки
Строки разделены корректно
Всё в одной строке — нужен ВК+ПС вместо ПС
Перенос строки в элементах формы
Когда перенос нужен пользователю при вводе данных, а не разработчику в коде, настраивается поле формы. Для поля ввода в палитре свойств включается «Многострочный режим» — после этого пользователь сможет вставлять переносы клавишей Enter (в некоторых элементах — Ctrl+Enter, а Enter завершает редактирование).
Для надписей и заголовков, которые должны занимать несколько строк, текст задаётся с переносами либо включается автоперенос по ширине. В управляемых формах длинные надписи переносятся автоматически, если не ограничена высота элемента.
Программно установить многострочное значение в поле можно так же — присвоением строки с Символы.ПС. Если реквизит формы имеет тип «Строка» неограниченной длины, переносы сохранятся в базе данных и корректно отобразятся при повторном открытии.
Перенос при выгрузке в файлы и обмене данными
При выгрузке в CSV или текстовый формат перенос строки внутри значения опасен: большинство парсеров воспринимают его как конец записи. Если поле может содержать переносы, значение нужно обрамлять кавычками по правилам формата либо заменять переносы на пробел или иной безопасный маркер:
БезопасноеЗначение = СтрЗаменить(Описание, Символы.ПС, " ");
В XML переносы внутри текстовых узлов допустимы и сохраняются, но при сериализации через XDTO поведение зависит от настроек формата. В JSON перенос строки внутри строкового значения кодируется как \n — при записи через ЗаписьJSON платформа делает это автоматически, вручную подставлять escape-последовательности не нужно.
Как выбрать способ
Проверка и отладка переносов
Убедиться, что перенос реально присутствует в строке, можно через функцию СтрЧислоСтрок — она возвращает количество строк с учётом переносов. Если функция возвращает 1, а вы ожидали несколько строк, значит, символ переноса не был вставлен или был потерян при промежуточной обработке.
Для просмотра отдельных строк используйте СтрПолучитьСтроку(Текст, НомерСтроки). Это удобно в отладчике: можно пошагово проверить, что именно попало в каждую строку итогового текста.
При работе с файлами итоговую проверку стоит делать в целевой программе: если файл предназначен для загрузки в банк-клиент или стороннюю учётную систему, откройте его там, а не только в редакторе — редакторы часто «прощают» нестандартные разделители, а загрузчики нет.
Что важно запомнить
В коде перенос делается через Символы.ПС, в запросе — через параметр, в макете — символ плюс свойство «Переносить», в полях формы — многострочный режим. Для файлов под Windows используйте ВК+ПС, а в форматах обмена переносы внутри полей заменяйте или экранируйте.
Часто задаваемые вопросы
Как перенести строку в сообщении пользователю?
Склейте текст с Символы.ПС и передайте в Сообщить() или в объект СообщениеПользователю. Окно сообщений корректно отображает переносы, каждая часть текста выйдет с новой строки.
Почему \n не работает в строке 1С?
Встроенный язык 1С не поддерживает escape-последовательности вида \n или \t — они будут восприняты как обычные символы «обратный слэш» и «n». Вместо этого используются значения перечисления Символы: ПС, ВК, Таб.
Как убрать переносы строк из текста?
Примените СтрЗаменить(Текст, Символы.ПС, " "), а при необходимости дополнительно замените Символы.ВК на пустую строку. Это стандартный приём перед выгрузкой значений в CSV или сравнением строк.
Как посчитать количество строк в многострочном тексте?
Используйте функцию СтрЧислоСтрок(Текст). Она учитывает именно переносы строк, а не визуальное отображение. Для доступа к конкретной строке служит СтрПолучитьСтроку(Текст, Номер).
Перенос есть в коде, но в Excel из табличного документа всё в одной строке. Что делать?
Проверьте, что у ячейки табличного документа включено свойство «Переносить» (размещение текста). Без него переносы в значении игнорируются при отображении и выгрузке. Также убедитесь, что высота строки позволяет показать несколько строк текста.
Чем отличается Символы.ПС от Символы.ВК?
ПС (LF, код 10) — перевод строки, ВК (CR, код 13) — возврат каретки. Внутри 1С достаточно ПС, а для текстовых файлов, открываемых в Windows-программах, обычно требуется пара ВК+ПС, иначе текст может отобразиться одной строкой.