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

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

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

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

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

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

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

Символы переноса строки в 1С: ПС, ВК и их комбинации

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

На практике это означает следующее. Если вы формируете текст для вывода в сообщение, поле формы или макет 1С, достаточно Символы.ПС — внутри платформы он корректно отображается как новая строка. Если текст будет выгружаться во внешний файл, который затем откроют в «Блокноте» Windows или передадут в стороннюю систему, безопаснее использовать комбинацию Символы.ВК + Символы.ПС, иначе получатель может увидеть весь текст одной строкой.

Пример простого переноса в сообщении:

Сообщить("Первая строка" + Символы.ПС + "Вторая строка");

Пример с комбинацией ВК+ПС для файла:

ТекстДляФайла = "Строка 1" + Символы.ВК + Символы.ПС + "Строка 2";

Текст = Новый ТекстовыйДокумент;

Текст.УстановитьТекст(ТекстДляФайла);

Текст.Записать("C:\Temp\result.txt");

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

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

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

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

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

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

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

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

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

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

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

"ВЫБРАТЬ

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

|ИЗ

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

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

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

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

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

Как выбрать способ переноса

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

Перенос строки в макетах и табличных документах

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

При программном заполнении макета достаточно передать в параметр строку с Символы.ПС:

Область.Параметры.Адрес = "г. Москва" + Символы.ПС + "ул. Примерная, д. 1";

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

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

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

Вывод многострочного текста в табличный документ
Норма

Каждая часть текста на своей строке, высота ячейки увеличилась

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

Текст в одну строку или вторая строка обрезана

Сообщение пользователю
Норма

Строки отображаются одна под другой

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

Весь текст слит в одну строку

Файл, открытый в Блокноте Windows
Норма

Строки разделены

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

Одна сплошная строка — не хватает Символы.ВК

Перенос строки в интерфейсе без программирования

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

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

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

При копировании многострочного текста из Excel или Word в поле 1С переносы обычно сохраняются, но вместе с ними могут попасть неразрывные пробелы и символы табуляции. Если дальше строка участвует в сравнении или поиске, лишние символы дадут ложные несовпадения — очищайте текст функцией СокрЛП и при необходимости заменой.
ПЗ
Практическое замечание

Чтение и разбор многострочных строк

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

Текст = СтрЗаменить(ИсходныйТекст, Символы.ВК + Символы.ПС, Символы.ПС);

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

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

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

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

Типичные ошибки
01
Использование \n в строке — в 1С это не управляющая последовательность, а два обычных символа, которые попадут в текст
02
Перенос только через Символы.ПС при записи файла для Windows — в Блокноте текст отобразится одной строкой
03
Отключённое свойство переноса текста в ячейке макета — символы ПС есть, но визуально строка одна
04
Разбор текста по ПС без предварительной замены ВК+ПС — в элементах массива остаются лишние символы возврата каретки
05
Попытка вставить перенос в однострочное поле — символы теряются без предупреждения

Частые вопросы о переносе строки в 1С

Итог

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

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

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

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

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

Склейте части текста через Символы.ПС: Сообщить("Шапка" + Символы.ПС + "Детали"). Окно сообщений корректно отображает такие переносы без дополнительных настроек.

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

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

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

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

Как пользователю перейти на новую строку в поле комментария?

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

Как узнать, сколько строк в многострочной переменной?

Используйте функцию СтрЧислоСтрок(Текст) — она вернёт количество строк с учётом переносов. Для доступа к конкретной строке применяйте СтрПолучитьСтроку(Текст, НомерСтроки).