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

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

Как переносить строку в 1С

Разбираем перенос строки в 1С: Символы.ПС и Символы.ВК, перенос в запросах, многострочных полях и макетах, типичные ошибки и проверка результата.

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

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

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

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

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

Типичный пример — формирование сообщения из нескольких строк:

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

+ "Найдено ошибок: " + КоличествоОшибок + Символы.ПС

+ "Подробности в журнале регистрации.";

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

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

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

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

Строки.Добавить("Состав изменён");

Строки.Добавить("Итог: " + Итог);

Текст = СтрСоединить(Строки, Символы.ПС);

Многострочные строковые литералы и символ «|»

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

ТекстПисьма = "Уважаемый клиент!

|Ваш заказ собран и передан в доставку.

|Номер накладной: " + НомерНакладной;

Обратите внимание: пробелы перед символом | (отступ кода) в результат не попадают, а вот пробелы после | — попадают в строку целиком. Это частая причина «лесенки» в тексте, когда строки визуально сдвинуты. Если нужен аккуратный текст без лишних пробелов, начинайте содержимое сразу после вертикальной черты.

Ограничение приёма: литерал с «|» удобен для статичных шаблонов, но не подходит, когда число строк заранее неизвестно. В таком случае возвращайтесь к массиву и СтрСоединить.

Типичные ошибки
01
Пробелы после вертикальной черты «|» попадают в текст — строки выглядят сдвинутыми вправо
02
Использование Символы.ПС там, где внешняя система ждёт пару ВК+ПС, — файл открывается одной длинной строкой
03
Конкатенация десятков строк оператором «+» вместо СтрСоединить — код трудно читать и править
04
Ожидание переноса в однострочном поле ввода — там перевод строки либо игнорируется, либо заменяется пробелом

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

В языке запросов 1С нет прямого аналога Символы.ПС, поэтому склеить многострочный текст прямо в тексте запроса нельзя. Рабочий приём — передать символ переноса параметром и соединить строки оператором конкатенации +:

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

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

"ВЫБРАТЬ

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

|ИЗ

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

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

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

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

Как выбрать действие

Нужны 2–3 статичные строки текста в кодеИспользуйте многострочный литерал с символом «|»
Число строк заранее неизвестно или формируется в циклеСобирайте строки в массив и соединяйте СтрСоединить(Массив, Символы.ПС)
Перенос нужен прямо в результате запросаПередайте Символы.ПС параметром и соедините оператором «+»
Текст уходит в текстовый файл для сторонней программыПроверьте, какой формат конца строки ожидает приёмник: ПС или ВК+ПС

Перенос строки в макетах и печатных формах

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

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

Отдельный случай — вывод в текстовый макет или в файл. Здесь платформа при записи может преобразовывать концы строк в зависимости от настроек объекта ЗаписьТекста. Если файл предназначен для системы, которая строго требует Windows-переносы, явно используйте Символы.ВК + Символы.ПС при формировании содержимого.

Многострочные поля ввода и отображение пользователю

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

При выводе текста через Сообщить или в элемент «Надпись» переносы Символы.ПС отображаются корректно. А вот при выводе в однострочные элементы (заголовок, колонка таблицы) перевод строки может быть заменён пробелом или вовсе отброшен — это нормальное поведение платформы, а не ошибка в вашем коде. Если в таблице нужно показать многострочный текст, включите для соответствующей колонки свойство отображения в несколько строк и настройте высоту строк.

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

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

Отображение в сообщении или надписи
Норма

Каждая логическая строка начинается с новой строки

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

Текст слипся в одну строку или видны лишние пробелы в начале строк

Многострочное поле ввода
Норма

Enter добавляет строку, текст сохраняется с переносами

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

Enter завершает редактирование, переносы пропадают после записи

Печатная форма
Норма

Весь текст виден, строки не обрезаны

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

Нижние строки скрыты из-за фиксированной высоты строки макета

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

Файл открывается в приёмнике с корректными переносами

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

Всё содержимое — одна строка или появились лишние пустые строки

Частые ошибки и ограничения

Самая распространённая ошибка — ожидать, что один и тот же символ переноса сработает везде одинаково. На практике контекст решает всё: Символы.ПС отлично работает внутри платформы, но при обмене файлами иногда требуется пара ВК + ПС, а в некоторых форматах (например, при выгрузке в XML или JSON) переводы строк внутри значений могут требовать экранирования, которое платформа выполняет автоматически при сериализации.

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

Наконец, помните про функцию СтрЗаменить как инструмент нормализации: если текст пришёл извне с непредсказуемыми переносами, имеет смысл привести все варианты к одному виду перед обработкой, заменив Символы.ВК + Символы.ПС на Символы.ПС, а затем удалив одиночные Символы.ВК.

Итог

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

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

Частые вопросы

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

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

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

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

Можно ли вставить перенос строки прямо в тексте запроса?

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

Почему в печатной форме многострочный текст обрезан?

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

Как убрать лишние переносы строк из текста, полученного извне?

Нормализуйте текст через СтрЗаменить: сначала замените пару Символы.ВК + Символы.ПС на Символы.ПС, затем одиночные Символы.ВК на Символы.ПС. После этого при необходимости замените Символы.ПС на пробел или нужный разделитель.

Что лучше для склейки множества строк: «+» или СтрСоединить?

Для двух-трёх строк разницы нет, но при большом количестве лучше собрать строки в массив и применить СтрСоединить с разделителем Символы.ПС. Код получается короче, легче правится и не создаёт лишних промежуточных строк в цикле.