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

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

Как переносить строки в 1С: все способы с примерами

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

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

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

Ниже разобраны все рабочие способы: системный набор «Символы», многострочные строковые литералы, перенос в запросах, в макетах, в полях ввода и при обмене данными. Для каждого способа указаны условия применения, ограничения и типичные ошибки.

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

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

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

Перенос строки в коде через Символы.ПС и Символы.ВК

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

Пример формирования многострочного сообщения:

ТекстСообщения = "Проверка завершена." + Символы.ПС

+ "Найдено ошибок: " + КоличествоОшибок + Символы.ПС

+ "Подробности в журнале регистрации.";

Обратите внимание: переносы в исходном коде между частями выражения через «+» не создают переносов в итоговой строке. Реальный перенос в значении даёт только явная вставка Символы.ПС. Это одна из самых частых ошибок начинающих разработчиков.

bsl
Адрес = "г. Москва," + Символы.ПС + "ул. Примерная, д. 1" + Символы.ПС + "офис 101";

Многострочные строковые литералы через вертикальную черту

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

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

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

|Срок доставки — 3 рабочих дня.";

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

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

В языке запросов 1С нет отдельной функции «перенос строки», поэтому перенос вставляется либо конкатенацией с символом, переданным как параметр, либо через предопределённое значение. Практичный вариант — передать Символы.ПС в запрос параметром и соединять строки оператором «+»:

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

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

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

"ВЫБРАТЬ

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

|ИЗ

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

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

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

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

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

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

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

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

Число строк в значении
Норма

СтрЧислоСтрок(Текст) возвращает ожидаемое число строк

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

Возвращает 1 — переносы в значении отсутствуют

Отображение в табличном документе
Норма

Текст в ячейке занимает несколько строк, ничего не обрезано

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

Текст в одну строку или обрезан — проверьте свойство переноса ячейки

Текстовый файл после выгрузки
Норма

В Блокноте Windows каждая строка на своём месте

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

Весь текст в одну строку — используйте ВК+ПС вместо только ПС

Перенос в полях ввода и при работе пользователя

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

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

Перенос при выгрузке в файлы и обмене данными

При записи текстовых файлов через ЗаписьТекста переносы добавляйте явно: метод ЗаписатьСтроку() сам добавляет разделитель строк, а Записать() — нет. Если файл предназначен для системы, работающей на Linux, достаточно Символы.ПС; для Windows-программ безопаснее пара Символы.ВК + Символы.ПС. Несоответствие разделителей — стандартная причина, почему выгруженный CSV или TXT открывается «одной строкой».

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

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

Как выбрать подходящий способ

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

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

Итог

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

Перенос в значении строки создаётся только через Символы.ПС (или ВК+ПС для файлов Windows), многострочный текст в модуле оформляется вертикальной чертой |, в запросах перенос передаётся параметром, а в макетах дополнительно нужно включить перенос в свойствах ячейки. Не используйте переносы в ключевых реквизитах и всегда проверяйте результат через СтрЧислоСтрок().

Частые вопросы

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

ПС — перевод строки (LF, код 10), ВК — возврат каретки (CR, код 13). Внутри 1С для отображения достаточно ПС. Пара ВК+ПС нужна при выгрузке текстовых файлов, которые будут открываться в Windows-программах вроде Блокнота, иначе текст может отобразиться одной строкой.

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

Соедините части текста через Символы.ПС: «Сообщить("Строка 1" + Символы.ПС + "Строка 2")». В окне сообщений текст отобразится в несколько строк. Альтернатива — передать многострочный литерал с вертикальной чертой.

Почему в макете перенос есть в тексте, но ячейка его не показывает?

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

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

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

Можно ли вставить перенос строки в однострочное поле ввода?

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

Как перенести строку в наименовании элемента справочника?

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