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

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

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

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

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

Основная сложность в том, что перенос строки в Windows состоит из двух символов — возврата каретки (CR) и перевода строки (LF), а 1С умеет работать и с одиночным символом LF. Из-за этого текст, корректно выглядящий внутри программы, при выгрузке в файл или отправке по HTTP иногда «склеивается» в одну строку.

Ниже разобраны все рабочие способы: системный набор «Символы», конструкция Символы.ПС, переносы в строковых литералах, запросах и макетах, а также проверка результата и типичные ошибки, из-за которых переносы теряются.

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

Самый частый способ — системный набор значений «Символы». Значение Символы.ПС соответствует символу перевода строки (LF, код 10). Его вставляют в строку через конкатенацию:

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

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

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

Набор «Символы» содержит и другие полезные значения: Символы.ВК — возврат каретки (CR, код 13), Символы.Таб — табуляция, Символы.НПП — неразрывный пробел. Для Windows-совместимого переноса используется пара Символы.ВК + Символы.ПС.

Многострочные строковые литералы в коде

Если текст переноса известен заранее, удобнее объявить многострочную строку прямо в модуле. В 1С каждая новая строка литерала начинается с символа вертикальной черты |:

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

|Ваш заказ отгружен.

|С уважением, отдел продаж.";

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

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

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

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

Первый — вставить символ переноса непосредственно в текст запроса как литерал. В конструкторе запроса или в тексте модуля строковый литерал запроса может содержать реальный перевод строки:

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

"ВЫБРАТЬ

| ""Часть1

|Часть2"" КАК ПолеСПереносом

|...";

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

Если перенос нужен для сравнения или поиска в запросе (например, найти записи, где реквизит содержит перевод строки), символ переноса передают как параметр запроса: Запрос.УстановитьПараметр("Перенос", Символы.ПС), а в тексте используют ПОДОБНО "%" + &Перенос + "%" через выражение соединения.

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

В табличном макете перенос строки внутри ячейки вводится сочетанием Ctrl+Enter в режиме редактирования текста ячейки. Чтобы перенос визуально работал при выводе, у ячейки должно быть достаточно высоты строки — иначе текст обрежется.

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

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

Способы переноса строки

Символы.ПС

Универсально для кода, сообщений, табличных документов. Одиночный LF — при выгрузке в файл для Windows может потребоваться пара ВК+ПС.

Символы.ВК + Символы.ПС

Для текстовых файлов, обмена данными и протоколов, где ожидается Windows-формат конца строки (CR+LF).

Вертикальная черта |

Только для многострочных литералов в модуле. Удобно для шаблонов, но не работает вне строковых констант кода.

Ctrl+Enter в макете

Для статических текстов в ячейках табличного макета. Не подходит для программно формируемого содержимого.

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

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

Если файл формируется конкатенацией строк с Символы.ПС и затем записывается целиком, на Windows получатель может увидеть текст без переносов, потому что ожидается CR+LF. Решение — использовать пару Символы.ВК + Символы.ПС либо функцию СтрЗаменить для преобразования перед записью.

Обратная ситуация — чтение внешних файлов: в прочитанном тексте могут встречаться и CR+LF, и одиночный LF. Перед разбором текста по строкам полезно нормализовать переносы: сначала заменить Символы.ВК + Символы.ПС на Символы.ПС, затем одиночные Символы.ВК — тоже на Символы.ПС.

Проверка результата и типичные ошибки

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

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

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

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

СтрЧислоСтрок(Текст)
Норма

Возвращает ожидаемое число строк

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

Возвращает 1 — переносы отсутствуют или заменены пробелами

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

Текст выводится в несколько строк

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

Весь текст в одну строку — проверьте, не использовался ли пробел вместо Символы.ПС

Файл после выгрузки
Норма

Переносы видны в Блокноте и других редакторах

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

Переносы видны только в части редакторов — вероятно, использован одиночный LF вместо CR+LF

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

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

В коде используйте Символы.ПС, для файлов Windows — пару Символы.ВК + Символы.ПС, в модулях удобны литералы с вертикальной чертой, в макетах — Ctrl+Enter. Результат проверяйте через СтрЧислоСтрок и просмотром итогового файла.

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

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

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

Почему в тексте появляются квадратики вместо переноса?

Квадратики означают, что управляющий символ отображается, но не интерпретируется как перенос — обычно это одиночный CR или LF в элементе интерфейса, который их не обрабатывает. Замените переносы на пару CR+LF или наоборот, в зависимости от места отображения.

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

Используйте последовательную замену: сначала СтрЗаменить(Текст, Символы.ВК + Символы.ПС, " "), затем отдельно замените оставшиеся Символы.ПС и Символы.ВК на пробел. Порядок важен, иначе вместо одного пробела получится два.

Работает ли перенос строки в СКД и выражениях компоновки?

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

Как разбить текст на массив по переносам строк?

Используйте СтрРазделить(Текст, Символы.ПС) — функция вернёт массив строк. Если в исходном тексте возможны переносы CR+LF, предварительно замените их на одиночный Символы.ПС, чтобы не получить пустые элементы.

Можно ли задать перенос в строке подключения или настройках через конфигуратор?

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