Разработка и Конфигурация · 10 мин
Как перейти на новую строку в 1С
Как сделать перенос строки в 1С: Символы.ПС и Символы.ВК, перенос в запросах, многострочные поля, сообщениях и макетах. Примеры кода и типичные ошибки.
Перенос строки в 1С нужен в самых разных ситуациях: при выводе многострочного сообщения пользователю, формировании текста письма или печатной формы, склейке адреса из нескольких частей, записи многострочных данных в файл. Встроенный язык платформы не использует привычные многим разработчикам конструкции вроде \n — вместо этого применяются системные константы из объекта «Символы».
Основная сложность в том, что «перевод строки» — это не один символ, а целое семейство: возврат каретки (ВК), перевод строки (ПС), их комбинация ВК+ПС, а также разделители страниц и разделов. Разные подсистемы — окно сообщений, текстовый документ, запрос, макет — по-разному реагируют на каждый из них. Если выбрать не тот символ, текст вместо аккуратных строк отобразится одной сплошной строкой или, наоборот, получит лишние пустые строки.
Ниже разобраны все рабочие способы: программный перенос через Символы.ПС и Символы.ВК, многострочные строковые литералы в коде, переносы в запросах и макетах, а также ввод новой строки в интерфейсе без программирования. Отдельно рассмотрены типичные ошибки и способы проверить, какой именно символ переноса содержится в строке.
Символы переноса строки в 1С: ПС, ВК и их комбинации
Платформа 1С предоставляет системное перечисление «Символы», доступное в любом модуле встроенного языка. Для переноса строки чаще всего используются два его значения: Символы.ПС — перевод строки (аналог LF, код 10) и Символы.ВК — возврат каретки (аналог CR, код 13). Исторически Windows использует пару ВК+ПС как единый маркер конца строки, а Linux и ряд веб-технологий — только ПС.
На практике это означает следующее. Если вы формируете текст для вывода в сообщение, поле формы или макет 1С, достаточно Символы.ПС — внутри платформы он корректно отображается как новая строка. Если текст будет выгружаться во внешний файл, который затем откроют в «Блокноте» Windows или передадут в стороннюю систему, безопаснее использовать комбинацию Символы.ВК + Символы.ПС, иначе получатель может увидеть весь текст одной строкой.
Пример простого переноса в сообщении:
Сообщить("Первая строка" + Символы.ПС + "Вторая строка");
Пример с комбинацией ВК+ПС для файла:
ТекстДляФайла = "Строка 1" + Символы.ВК + Символы.ПС + "Строка 2";
Текст = Новый ТекстовыйДокумент;
Текст.УстановитьТекст(ТекстДляФайла);
Текст.Записать("C:\Temp\result.txt");
Многострочные строковые литералы в коде
Когда текст длинный и заранее известен, склейка через Символы.ПС делает код трудночитаемым. Встроенный язык поддерживает многострочные строковые литералы: каждая новая строка внутри кавычек начинается с символа вертикальной черты |. Платформа сама вставит переносы строк между фрагментами.
ТекстПисьма = "Уважаемый клиент!
|Ваш заказ сформирован и передан в доставку.
|Номер накладной: " + НомерНакладной;
Такой литерал читается почти как обычный текст. Важно помнить два правила: вертикальная черта ставится в начале каждой продолжающей строки, а пробелы после черты сохраняются в итоговой строке — поэтому лишние отступы «для красоты кода» попадут в текст. Если нужна пустая строка внутри текста, добавьте строку, состоящую только из символа |.
Признак корректного результата: при выводе переменной через Сообщить() или в поле формы каждая строка литерала отображается с новой строки, без видимых символов | и лишних пробелов в начале.
Перенос строки в запросах 1С
В языке запросов нет прямого доступа к объекту «Символы», поэтому перенос внутри запроса организуют иначе. Самый надёжный способ — передать символ переноса как параметр и использовать его в выражении:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Контрагенты.Наименование + &ПС + Контрагенты.Адрес КАК Описание
|ИЗ
| Справочник.Контрагенты КАК Контрагенты";
Запрос.УстановитьПараметр("ПС", Символы.ПС);
Альтернатива — не переносить строку в запросе вовсе, а склеивать значения уже в коде при обходе выборки. Этот вариант предпочтительнее, если дальше текст пойдёт в СКД, табличный документ или обработку, где переносы всё равно могут быть переформатированы. Чем меньше служебных символов в данных запроса, тем меньше сюрпризов при выводе.
Отдельный нюанс — поля с типом «Строка неограниченной длины», в которых пользователи хранят многострочный текст (комментарии, адреса). При выборке таких полей переносы уже содержатся в данных, и дополнительные манипуляции не нужны — достаточно не «схлопывать» их при выводе.
Как выбрать способ переноса
Перенос строки в макетах и табличных документах
В табличном документе перенос строки внутри ячейки работает, только если у ячейки включено свойство «Размещение текста» со значением «Переносить» (или аналогичное свойство «АвтоПеренос» в зависимости от версии платформы и способа заполнения). Если свойство выключено, символ ПС в тексте ячейки будет проигнорирован, и текст визуально сольётся.
При программном заполнении макета достаточно передать в параметр строку с Символы.ПС:
Область.Параметры.Адрес = "г. Москва" + Символы.ПС + "ул. Примерная, д. 1";
Если перенос не сработал, проверьте три вещи: свойство размещения текста ячейки, высоту строки (автоматическая или фиксированная — при фиксированной высоте вторая строка может быть обрезана) и отсутствие объединения ячеек с конфликтующими настройками. Для надёжности включите у области автоподбор высоты строки, чтобы табличный документ сам расширил ячейку под многострочный текст.
Как проверить результат
Каждая часть текста на своей строке, высота ячейки увеличилась
Текст в одну строку или вторая строка обрезана
Строки отображаются одна под другой
Весь текст слит в одну строку
Строки разделены
Одна сплошная строка — не хватает Символы.ВК
Перенос строки в интерфейсе без программирования
Пользователю, работающему в режиме 1С:Предприятие, перенос строки чаще всего нужен в полях ввода: комментариях, описаниях, дополнительной информации. Стандартное поведение многострочных полей — клавиша Enter завершает ввод или активирует кнопку по умолчанию, поэтому для перехода на новую строку внутри поля используется комбинация Ctrl+Enter (в некоторых полях работает и Shift+Enter).
Если поле однострочное, перенос в него вставить нельзя в принципе — платформа удалит или проигнорирует символы переноса. Признак многострочного поля: у него есть полоса прокрутки или оно занимает несколько строк по высоте. В тонком и веб-клиенте поведение клавиш может немного отличаться, поэтому при вставке многострочного текста из буфера обмена проверяйте результат визуально.
Отдельный случай — ввод многострочного текста в ячейку табличной части или таблицы значений на форме. Если колонка отображает текст одной строкой, переносы в данных сохранятся, но будут невидимы; разработчику формы нужно включить многострочный режим отображения колонки.
При копировании многострочного текста из Excel или Word в поле 1С переносы обычно сохраняются, но вместе с ними могут попасть неразрывные пробелы и символы табуляции. Если дальше строка участвует в сравнении или поиске, лишние символы дадут ложные несовпадения — очищайте текст функцией СокрЛП и при необходимости заменой.
Чтение и разбор многострочных строк
Обратная задача — разбить существующий текст по строкам — решается функцией СтрРазделить() с указанием разделителя. Для надёжности стоит учитывать оба варианта переноса, так как данные могли прийти из разных источников:
Текст = СтрЗаменить(ИсходныйТекст, Символы.ВК + Символы.ПС, Символы.ПС);
Текст = СтрЗаменить(Текст, Символы.ВК, Символы.ПС);
МассивСтрок = СтрРазделить(Текст, Символы.ПС);
Такая нормализация — стандартный приём: сначала все комбинации ВК+ПС и одиночные ВК приводятся к единому ПС, после чего разбор становится однозначным. Без неё строка, пришедшая из Windows-файла, при разделении по ПС оставит «висячие» символы ВК в конце каждого элемента массива, что сломает последующие сравнения.
Для проверки, есть ли в строке переносы, используйте СтрНайти(Текст, Символы.ПС) — значение больше нуля означает наличие хотя бы одного переноса. Количество строк можно оценить через СтрЧислоСтрок() — эта функция корректно работает с многострочными строками платформы, а СтрПолучитьСтроку(Текст, Номер) вернёт конкретную строку по номеру.
Частые вопросы о переносе строки в 1С
Что важно запомнить
Внутри платформы перенос строки задаётся через Символы.ПС, для файлов под Windows добавляйте Символы.ВК. Длинные тексты оформляйте многострочными литералами с |, в запросах передавайте символ параметром, а в макетах проверяйте свойство переноса текста ячейки. Перед разбором чужого текста нормализуйте переносы к единому виду.
Чем Символы.ПС отличается от Символы.ВК?
ПС (перевод строки, код 10) перемещает позицию вывода на новую строку, а ВК (возврат каретки, код 13) — в начало текущей строки. Внутри 1С для отображения достаточно ПС, но классический маркер конца строки в Windows — пара ВК+ПС, поэтому для внешних файлов используют комбинацию обоих символов.
Как вставить перенос строки в сообщение пользователю?
Склейте части текста через Символы.ПС: Сообщить("Шапка" + Символы.ПС + "Детали"). Окно сообщений корректно отображает такие переносы без дополнительных настроек.
Почему в ячейке табличного документа перенос не работает?
Чаще всего у ячейки не включено свойство переноса текста или задана фиксированная высота строки. Включите размещение текста с переносом и автоподбор высоты — после этого строки с Символы.ПС отобразятся многострочно.
Как перенести строку в запросе 1С?
Прямого доступа к Символы в языке запросов нет. Передайте Символы.ПС через параметр запроса и используйте его в выражении склейки, либо собирайте многострочный текст уже в коде при обходе выборки.
Как пользователю перейти на новую строку в поле комментария?
В многострочных полях ввода используйте Ctrl+Enter — обычный Enter часто завершает редактирование. В однострочное поле перенос вставить нельзя в принципе.
Как узнать, сколько строк в многострочной переменной?
Используйте функцию СтрЧислоСтрок(Текст) — она вернёт количество строк с учётом переносов. Для доступа к конкретной строке применяйте СтрПолучитьСтроку(Текст, НомерСтроки).