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

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

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

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

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

Неправильный перенос строки приводит к двум типичным последствиям: либо конфигуратор выдаёт синтаксическую ошибку при проверке модуля, либо в текст попадают лишние пробелы и невидимые символы, которые потом «ломают» сравнение строк, печатные формы и обмен данными. Поэтому важно понимать не один способ, а все варианты и границы их применения.

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

Перенос строки внутри строкового литерала: вертикальная черта

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

ТекстСообщения = "Уважаемый клиент!

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

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

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

Если внутри строки нужна кавычка, она удваивается: «Он сказал: ""Привет""». Это правило работает и в многострочных литералах с вертикальной чертой.

bsl
Сообщение = "Строка 1
|Строка 2
|Строка 3";
Сообщить(Сообщение);

Программная вставка перевода строки: Символы.ПС и Символы.ВК

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

Результат = "Первая строка" + Символы.ПС + "Вторая строка";

Основные константы набора «Символы», которые используются для переносов:

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

Для подстановки значений внутрь шаблона удобнее использовать СтрШаблон вместо длинной цепочки конкатенаций — так код читается проще, а переносы остаются в шаблоне:

Текст = СтрШаблон("Контрагент: %1

|Договор: %2

|Сумма: %3", Контрагент, Договор, Сумма);

Перенос длинных выражений и вызовов процедур

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

Если ЗначениеЗаполнено(Объект.Контрагент)

И Объект.СуммаДокумента > 0

И Не Объект.ПометкаУдаления Тогда

// действия

КонецЕсли;

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

Для вызовов с большим числом параметров принято переносить каждый параметр на отдельную строку — это упрощает чтение и поиск ошибок при изменении сигнатуры процедуры:

ЗаписатьДокумент(Объект,

РежимЗаписиДокумента.Проведение,

РежимПроведенияДокумента.Оперативный);

Многострочный текст в запросах

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

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

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

"ВЫБРАТЬ

| Номенклатура.Ссылка КАК Номенклатура,

| Номенклатура.Наименование КАК Наименование

|ИЗ

| Справочник.Номенклатура КАК Номенклатура

|ГДЕ

| НЕ Номенклатура.ПометкаУдаления";

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

Перенос строки в сообщениях, макетах и текстовых документах

Метод Сообщить() выводит текст в панель сообщений. Если строка содержит Символы.ПС, перевод строки отображается корректно. То же относится к Предупреждение() и ПоказатьПредупреждение() — многострочный текст формируйте через ПС или литерал с «|».

При работе с объектом ТекстовыйДокумент переносы добавляются методами ДобавитьСтроку() (добавляет строку с переводом) или вставкой Символы.ПС внутрь текста. При записи файла через ЗаписьТекста разделитель строк можно задать явно — это как раз тот случай, где важна разница между LF и CRLF.

Запись = Новый ЗаписьТекста(ИмяФайла, КодировкаТекста.UTF8);

Запись.ЗаписатьСтроку("Первая строка");

Запись.ЗаписатьСтроку("Вторая строка");

Запись.Закрыть();

Сравнение вариантов

Вертикальная черта «|»

Подходит для статического многострочного текста прямо в коде. Ограничение: нельзя подставить переменные без разрыва литерала, пробелы после «|» попадают в значение.

Символы.ПС с конкатенацией

Подходит для динамической сборки текста из переменных. Ограничение: длинные цепочки «+ Символы.ПС +» плохо читаются.

СтрШаблон с литералом

Лучший вариант для шаблонов с подстановкой значений. Ограничение: нумерованные параметры нужно держать в правильном порядке.

Типичные ошибки и как их проверить

Самая частая ошибка — забытая вертикальная черта в начале очередной строки литерала. Конфигуратор выдаёт синтаксическую ошибку при проверке модуля, и строка в сообщении обычно указывает на место разрыва. Вторая по частоте — отступы после «|», которые незаметно попадают в текст сообщения или печатную форму.

Третья группа ошибок связана с переводами строк при обмене: текст, сформированный с ПС, внешняя программа отображает одной строкой. Диагностируется это открытием файла в редакторе, который показывает управляющие символы.

Типичные ошибки
01
Пробелы после вертикальной черты — в сообщениях и печатных формах появляются лишние отступы, строки «плывут».
02
Точка с запятой в конце первой строки перенесённого выражения — код компилируется иначе, чем ожидалось, или падает с ошибкой.
03
Использование только Символы.ПС при выгрузке файла для Windows-программы — приёмник показывает весь текст в одну строку.
04
Кавычка внутри литерала без удвоения — синтаксическая ошибка при проверке модуля.
Контрольные точки

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

Синтаксис модуля
Норма

Проверка конфигурации (Ctrl+F7 в конфигураторе) проходит без ошибок

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

Ошибка «Ожидается символ» или «Не обнаружено символа» в строке с литералом

Вывод текста
Норма

Сообщение или печатная форма показывает строки ровно, без лишних отступов

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

Строки смещены вправо или склеены в одну

Файл обмена
Норма

Внешняя программа открывает файл с корректными переносами

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

Текст в одну строку или пустые строки между каждой записью

Итог

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

Многострочный литерал оформляется вертикальной чертой «|» в начале каждой строки, динамический текст собирается через Символы.ПС, длинные выражения переносятся простым разрывом строки. Следите за пробелами после «|», не ставьте «;» в середине перенесённого оператора и выбирайте LF или CRLF под приёмника при выгрузке файлов.

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

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

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

Почему после переноса через «|» в тексте появились пробелы?

Всё, что стоит после вертикальной черты, включая пробелы-отступы, попадает в значение строки. Уберите отступы после «|» или используйте Символы.ПС с конкатенацией, если выравнивание кода важнее.

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

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

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

Да, текст запроса — обычный строковый литерал, каждая строка начинается с «|». Отступы после черты допустимы и даже желательны: для языка запросов пробелы незначимы, а читаемость повышается.

Как перенести длинное условие в операторе Если?

Просто разорвите выражение после логического оператора (И, Или) и продолжите на следующей строке — спецсимволы не нужны. Главное — не ставить точку с запятой до конца всего оператора.

Как вставить кавычку внутри многострочной строки?

Кавычка внутри строкового литерала удваивается: чтобы получить текст Он сказал: "Привет", в коде пишется "Он сказал: ""Привет""". Правило действует и для литералов с вертикальной чертой.