Разработка и Конфигурация · 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).
Только для многострочных литералов в модуле. Удобно для шаблонов, но не работает вне строковых констант кода.
Для статических текстов в ячейках табличного макета. Не подходит для программно формируемого содержимого.
Переносы при выгрузке в файлы и обмене данными
При записи текстового файла через ТекстовыйДокумент или ЗаписьТекста метод ЗаписатьСтроку() сам добавляет разделитель строк в конце. Какой именно — зависит от параметра разделителя строк: по умолчанию используется системный разделитель платформы, но его можно задать явно.
Если файл формируется конкатенацией строк с Символы.ПС и затем записывается целиком, на Windows получатель может увидеть текст без переносов, потому что ожидается CR+LF. Решение — использовать пару Символы.ВК + Символы.ПС либо функцию СтрЗаменить для преобразования перед записью.
Обратная ситуация — чтение внешних файлов: в прочитанном тексте могут встречаться и CR+LF, и одиночный LF. Перед разбором текста по строкам полезно нормализовать переносы: сначала заменить Символы.ВК + Символы.ПС на Символы.ПС, затем одиночные Символы.ВК — тоже на Символы.ПС.
Проверка результата и типичные ошибки
Проверить, что перенос действительно вставлен, можно функцией СтрЧислоСтрок(Текст) — она возвращает количество строк с учётом символов LF. Если функция возвращает 1, а вы ожидали несколько строк, переносы потерялись.
Для отладки содержимого строки удобно вывести её через Сообщить или посмотреть значение переменной в отладчике — там управляющие символы видны как разрывы строк. При работе с файлами итоговый файл стоит открыть в редакторе, который показывает символы конца строки.
Как проверить результат
Возвращает ожидаемое число строк
Возвращает 1 — переносы отсутствуют или заменены пробелами
Текст выводится в несколько строк
Весь текст в одну строку — проверьте, не использовался ли пробел вместо Символы.ПС
Переносы видны в Блокноте и других редакторах
Переносы видны только в части редакторов — вероятно, использован одиночный LF вместо CR+LF
Что важно запомнить
В коде используйте Символы.ПС, для файлов Windows — пару Символы.ВК + Символы.ПС, в модулях удобны литералы с вертикальной чертой, в макетах — Ctrl+Enter. Результат проверяйте через СтрЧислоСтрок и просмотром итогового файла.
Частые вопросы
Как вставить перенос строки в поле ввода на форме?
Если у поля включено свойство «Многострочный режим», перенос вводится клавишей Enter (в некоторых полях — Ctrl+Enter). Без многострочного режима поле хранит текст в одну строку, и переносы при вводе игнорируются.
Почему в тексте появляются квадратики вместо переноса?
Квадратики означают, что управляющий символ отображается, но не интерпретируется как перенос — обычно это одиночный CR или LF в элементе интерфейса, который их не обрабатывает. Замените переносы на пару CR+LF или наоборот, в зависимости от места отображения.
Как убрать все переносы строк из текста?
Используйте последовательную замену: сначала СтрЗаменить(Текст, Символы.ВК + Символы.ПС, " "), затем отдельно замените оставшиеся Символы.ПС и Символы.ВК на пробел. Порядок важен, иначе вместо одного пробела получится два.
Работает ли перенос строки в СКД и выражениях компоновки?
В выражениях СКД доступен язык выражений компоновки, где строковые литералы могут содержать реальный перевод строки. Однако надёжнее формировать многострочный текст в коде и передавать его в компоновку как параметр или вычисляемое поле.
Как разбить текст на массив по переносам строк?
Используйте СтрРазделить(Текст, Символы.ПС) — функция вернёт массив строк. Если в исходном тексте возможны переносы CR+LF, предварительно замените их на одиночный Символы.ПС, чтобы не получить пустые элементы.
Можно ли задать перенос в строке подключения или настройках через конфигуратор?
В большинстве однострочных свойств конфигуратора перенос недопустим. Для многострочных значений используются специальные редакторы (например, текст макета или многострочные реквизиты), где перенос вводится напрямую.