Разработка и Конфигурация · 10 мин
Как вставить символ переноса строки в 1С
Как вставить символ переноса строки в 1С: Символы.ПС, Символ(10), многострочные литералы, перенос в макетах и печатных формах. Примеры кода и разбор ошибок.
Перенос строки в 1С встречается повсюду: в сообщениях пользователю, в текстах печатных форм, в подписях картинок, в полях комментариев и при формировании файлов. Проблема в том, что обычное нажатие Enter внутри строкового литерала не всегда даёт ожидаемый результат, а разные механизмы платформы интерпретируют перенос по-разному.
Во встроенном языке 1С есть несколько способов вставить символ переноса: через системное перечисление Символы.ПС, функцию Символ() с кодом символа, многострочные строковые литералы и специальные приёмы для макетов и форматированных документов. Каждый вариант имеет свои границы применения — то, что работает в сообщении, может не сработать в текстовом файле или в Excel-выгрузке.
Ниже разобраны все рабочие способы с примерами кода, типичные ошибки и способы проверить, что перенос действительно попал в строку.
Символы.ПС — основной способ переноса строки
Наиболее правильный и читаемый способ — системное перечисление Символы со значением ПС (перевод строки). Оно возвращает символ LF (код 10), который платформа использует как стандартный разделитель строк.
ТекстСообщения = "Первая строка" + Символы.ПС + "Вторая строка";
Сообщить(ТекстСообщения);
Перечисление Символы содержит и другие полезные значения: ВК — возврат каретки (CR, код 13), Таб — табуляция, НПП — неразрывный пробел. Их можно комбинировать, когда требуется классическая Windows-последовательность CR+LF.
Преимущество Символы.ПС перед «магическими» символами в том, что код остаётся читаемым и переносимым: разработчик, который откроет ваш модуль через год, сразу поймёт намерение, а не будет гадать, какой невидимый символ спрятан в строке.
Функция Символ() и коды переноса
Альтернативный способ — встроенная функция Символ(Код), которая возвращает символ по его коду Unicode. Для переноса строки используется код 10 (LF), для возврата каретки — код 13 (CR).
Текст = "Шапка" + Символ(13) + Символ(10) + "Тело письма";
// Эквивалентно: Символы.ВК + Символы.ПС
Пара CR+LF важна при формировании текстовых файлов для сторонних систем: старые Windows-программы и некоторые банковские форматы ожидают именно такую последовательность. Одиночный LF в таких файлах может отображаться как склеенный текст без переносов.
Проверить, какие именно символы содержит строка, можно функцией КодСимвола() — она возвращает код символа на указанной позиции. Это удобно при отладке, когда перенос «вроде есть», но текст выводится одной строкой.
Текст = "Строка1" + Символы.ВК + Символы.ПС + "Строка2";
Для Позиция = 1 По СтрДлина(Текст) Цикл
Сообщить("Позиция " + Позиция + ": код " + КодСимвола(Текст, Позиция));
КонецЦикла;Многострочные строковые литералы
Встроенный язык позволяет записать многострочный текст прямо в литерале, не склеивая строки оператором «+». Для этого каждая строка литерала начинается с вертикальной черты |, а перенос в исходном коде становится переносом в значении строки.
ТекстПисьма = "Уважаемый клиент!
|Ваш заказ сформирован.
|Сумма к оплате: 1 500 руб.";
Такой приём удобен для длинных шаблонов: текстов писем, SQL-подобных запросов, сообщений об ошибках. Строка читается в коде так же, как будет выглядеть результат, что упрощает поддержку.
Важная деталь: перенос строки внутри литерала добавляет символ LF в значение. Если шаблон редактируется в конфигураторе, убедитесь, что лишние пробелы после вертикальной черты не попадают в текст — они станут частью строки.
Перенос строки в макетах и печатных формах
В табличных документах и макетах печатных форм перенос работает иначе. Если текст выводится через параметр макета, символы LF внутри значения обычно отображаются корректно, но ячейка должна позволять многострочный вывод: у области макета должна быть достаточная высота, а для ячейки — не запрещён перенос текста.
Если текст в печатной форме выводится одной строкой и обрезается, проверьте свойство ячейки «Переносить» (автоперенос) в макете. Без него длинный текст с переносами может визуально сливаться или уходить за границы ячейки.
Для форматированного документа простого символа LF недостаточно — там строки разделяются абзацами. Перенос создаётся методом Добавить() с типом элемента «ПереводСтроки» или разбиением текста на абзацы. Это отдельная модель, и прямое присваивание строки с LF даст другой результат, чем ожидается.
Перенос при выгрузке в файлы и обмене данными
При записи текстовых файлов через ЗаписьТекста или ТекстовыйДокумент разделитель строк можно задать явно. У объекта ЗаписьТекста есть параметр конструктора «РазделительСтрок», а у ТекстовыйДокумент метод Записать() принимает тип файла и разделитель.
Запись = Новый ЗаписьТекста(ИмяФайла, КодировкаТекста.UTF8, Символы.ВК + Символы.ПС);
Запись.ЗаписатьСтроку("Первая строка");
Запись.ЗаписатьСтроку("Вторая строка");
Запись.Закрыть();
Метод ЗаписатьСтроку() сам добавляет разделитель после каждой строки — вставлять Символы.ПС в конец текста при этом не нужно, иначе получите двойные переносы и пустые строки в файле.
При выгрузке в Excel через табличный документ перенос внутри ячейки требует LF в тексте и включённого переноса в ячейке. Если файл открывается, а текст склеен — чаще всего дело в отсутствии авторазмера строки, а не в самом символе переноса.
- 1Определите, какой разделитель ожидает принимающая система: LF или CR+LF.
- 2Создайте ЗаписьТекста с нужным разделителем строк в конструкторе.
- 3Пишите строки методом ЗаписатьСтроку() без ручного добавления Символы.ПС.
- 4Закройте запись и откройте файл в редакторе, показывающем служебные символы.
- 5Убедитесь, что переносы на месте и нет пустых строк.
Как проверить результат и разобраться с ошибками
Самая частая жалоба — «перенос вставил, а текст всё равно одной строкой». Причина почти всегда не в символе, а в месте отображения: поле ввода в режиме одной строки, ячейка макета без переноса, элемент формы с отключённым многострочным режимом.
Для диагностики выведите строку через СтрЧислоСтрок() — функция считает строки, разделённые символом переноса. Если функция возвращает 2 и больше, а на экране одна строка, проблема в визуальном элементе, а не в данных.
Если СтрЧислоСтрок(Текст) > 1 Тогда
// Переносы в строке есть — ищем проблему в отображении
КонецЕсли;
Обратная задача — убрать лишние переносы из текста, полученного извне. Используйте СтрЗаменить(Текст, Символы.ПС, " ") для замены переносов пробелами или СокрЛП() для обрезки переносов по краям строки.
Как проверить результат
СтрЧислоСтрок() возвращает ожидаемое количество строк
Возвращает 1 — перенос не попал в строку, проверьте конкатенацию
Текст показан в несколько строк
Одна строка — включите многострочный режим или РастягиватьПоВертикали
Переносы видны в редакторе с отображением служебных символов
Пустые строки или склейка — неверный разделитель строк
Часто задаваемые вопросы
Чем Символы.ПС отличается от Символы.ВК?
Символы.ПС — это символ LF (код 10), перевод строки. Символы.ВК — возврат каретки CR (код 13). Внутри платформы 1С стандартным разделителем считается LF, а пара CR+LF нужна в основном для файлов, которые читают внешние Windows-программы.
Как вставить перенос строки в сообщение пользователю?
Склейте части текста через Символы.ПС и передайте результат в Сообщить() или в объект СообщениеПользователю. Например: Сообщить("Ошибка в строке 5" + Символы.ПС + "Проверьте заполнение суммы"). Окно сообщений корректно отображает такие переносы.
Почему перенос не работает в поле ввода на форме?
У элемента формы «Поле ввода» должен быть включён многострочный режим (свойство МногострочныйРежим), иначе символы переноса хранятся в данных, но не отображаются. Дополнительно проверьте свойство РастягиватьПоВертикали, чтобы поле показывало несколько строк по высоте.
Как убрать все переносы строк из текста?
Используйте СтрЗаменить: Текст = СтрЗаменить(Текст, Символы.ПС, " "). Если в тексте встречается и CR, замените и его: СтрЗаменить(Текст, Символы.ВК, ""). Для удаления переносов только по краям строки достаточно СокрЛП().
Работает ли перенос строки в запросах 1С?
Перенос внутри текстового литерала в запросе задаётся так же — через вертикальную черту в многострочном литерале или через конкатенацию с Символы.ПС в параметре. Сам по себе запрос не требует специальных символов: переносы в тексте запроса нужны только для читаемости кода.
Что использовать для переноса в форматированном документе?
В форматированном документе строки разделяются абзацами, а не символом LF. Используйте метод Добавить() с типом элемента «ПереводСтроки» внутри абзаца либо создавайте новый абзац для каждой строки текста. Прямая вставка строки с Символы.ПС не даст ожидаемого визуального результата.
Что важно запомнить
Стандартный способ переноса строки в 1С — Символы.ПС; для файлов под Windows добавляйте Символы.ВК. В многострочных литералах используйте вертикальную черту, а при записи файлов не дублируйте переносы — ЗаписатьСтроку() добавляет разделитель сама. Если перенос есть в данных, но не виден, проверяйте настройки отображения: многострочный режим поля или перенос текста в ячейке макета.