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

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

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

Как вставить перевод строки в 1С: Символы.ПС, Символ(10), переносы в запросах, макетах и полях ввода. Примеры кода, различия платформ и типичные ошибки.

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

Основная сложность в том, что «перевод строки» — это не один символ. В Windows строка исторически завершается парой символов CR+LF (возврат каретки и перевод строки), в Linux и macOS — только LF. Платформа 1С умеет работать с обоими вариантами, но при обмене с внешними системами разница становится заметной.

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

Какие символы отвечают за перевод строки в 1С

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

  • Символы.ПС — перевод строки, LF, код символа 10;
  • Символы.ВК — возврат каретки, CR, код символа 13;
  • Символы.Таб — табуляция, часто используется вместе с переносами при формировании текстовых файлов.

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

Проверить, какой именно символ содержится в строке, можно функцией КодСимвола(Строка, НомерСимвола): значение 10 означает ПС, значение 13 — ВК. Это полезно при разборе текста, пришедшего из файла или из веб-сервиса.

Перевод строки в коде: конкатенация и многострочные литералы

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

ТекстСообщения = "Документ не проведён." + Символы.ПС

+ "Проверьте заполнение обязательных полей.";

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

Для длинных текстов удобнее собирать строки в массив и соединять их функцией СтрСоединить, указав разделитель:

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

Строки.Добавить("Шапка отчёта");

Строки.Добавить("Строка данных");

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

Такой подход быстрее многократной конкатенации в цикле и проще читается. Обратная операция — разбить многострочный текст на строки — выполняется через СтрРазделить(Текст, Символы.ПС) либо через СтрЧислоСтрок и СтрПолучитьСтроку, если текст пришёл из поля ввода или файла.

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

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

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

ВЫБРАТЬ

"Первая строка

|Вторая строка" КАК МногострочныйТекст

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

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

В интерактивном режиме перенос строки в многострочном поле ввода вставляется сочетанием Ctrl+Enter. Обычное нажатие Enter в большинстве форм завершает редактирование или перемещает фокус, поэтому пользователи часто не могут вставить перенос и пишут текст в одну строку.

Чтобы поле вообще принимало несколько строк, у элемента формы должно быть включено свойство «Многострочный режим» (МногострочныйРежим = Истина). Дополнительно полезно настроить свойство «Растягивать по вертикали» и высоту, чтобы пользователь видел весь текст. Если многострочный режим выключен, символы переноса в значении реквизита могут сохраниться, но отображаться будут в одну строку.

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

Как включить многострочное поле на форме
  1. 1
    Откройте форму в конфигураторе и выделите поле ввода
  2. 2
    В палитре свойств установите «Многострочный режим» в значение «Да»
  3. 3
    При необходимости увеличьте высоту элемента и включите растягивание по вертикали
  4. 4
    Сохраните форму и проверьте в режиме предприятия: перенос вставляется через Ctrl+Enter

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

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

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

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

Перевод строки при работе с файлами и обменом

При записи текстовых файлов объект ЗаписьТекста по умолчанию использует системный разделитель строк. Метод ЗаписатьСтроку добавляет разделитель автоматически, а Записать пишет текст как есть — переносы нужно вставлять самостоятельно. Разделитель можно задать явно параметром конструктора, что важно при подготовке файлов для систем с жёсткими требованиями к формату.

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

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

Сравнение вариантов переноса

Символы.ПС (LF)

Стандарт внутри 1С: сообщения, поля ввода, макеты. Не подходит для внешних систем, требующих CRLF

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

Нужен для файлов и протоколов Windows-формата. Внутри полей 1С может давать лишние пустые строки при отображении

Символ | в запросе

Только для многострочных литералов в тексте запроса, динамически не формируется

Типичные ошибки и как их проверить

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

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

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

Типичные ошибки
01
Склейка строк через запятую с пробелом вместо Символы.ПС — текст выводится в одну строку
02
Использование CRLF внутри базы — лишние пустые строки в полях и сообщениях
03
Перенос вставлен, но у ячейки макета не включён перенос текста — на печати видна только первая строка
04
Разбор текста через СтрРазделить по ПС без предварительной нормализации CRLF — пустые элементы массива
Контрольные точки

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

Вывод текста через Сообщить
Норма

Каждая часть на отдельной строке

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

Текст в одну строку — перенос не вставлен

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

Число строк совпадает с ожидаемым

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

Вдвое больше строк — в тексте CRLF, нужна нормализация

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

Все строки видны, высота строки подстроилась

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

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

FAQ

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

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

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

Нажмите Ctrl+Enter во время редактирования поля. Если сочетание не работает и текст остаётся в одну строку, у поля не включён многострочный режим — это настраивается разработчиком в свойствах элемента формы.

Почему в сообщении пользователю текст выводится одной строкой?

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

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

Используйте СтрЗаменить: сначала замените сочетание Символы.ВК + Символы.ПС на Символы.ПС, затем при необходимости замените двойные ПС на одинарные в цикле или удалите пустые строки после СтрРазделить. Для полной замены переносов на пробелы достаточно одной замены ПС на " ".

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

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

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

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

Итог

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

Внутри 1С перевод строки — это Символы.ПС; CRLF оставьте для внешних систем. В запросах работает символ |, в полях — Ctrl+Enter при включённом многострочном режиме, в макетах — перенос текста в свойствах ячейки. Если перенос «не виден», в большинстве случаев проблема в настройках отображения, а не в данных.