Разработка и Конфигурация · 9 мин
Как переносить строку в коде 1С: все рабочие способы
Как переносить строку в коде 1С: вертикальная черта в литералах, Символы.ПС, перенос длинных выражений и строк в запросах. Примеры, ошибки и проверка результата.
Перенос строки в коде 1С — задача, с которой сталкивается каждый разработчик уже на первых этапах работы. Причина в том, что в языке 1С нет привычного по другим языкам символа конкатенации вроде «+» с экранированием «\n»: здесь используются собственные механизмы — вертикальная черта внутри строковых литералов, системный набор «Символы» и особые правила переноса длинных выражений.
Неправильный перенос строки приводит к двум типичным последствиям: либо конфигуратор выдаёт синтаксическую ошибку при проверке модуля, либо в текст попадают лишние пробелы и невидимые символы, которые потом «ломают» сравнение строк, печатные формы и обмен данными. Поэтому важно понимать не один способ, а все варианты и границы их применения.
Ниже разобраны перенос внутри строкового литерала через вертикальную черту, программная вставка перевода строки через Символы.ПС, перенос длинных выражений и вызовов процедур, особенности многострочного текста в запросах, а также типичные ошибки и способы проверить результат.
Перенос строки внутри строкового литерала: вертикальная черта
Основной способ записать многострочный текст прямо в коде — вертикальная черта «|». Она ставится в начале каждой строки литерала, начиная со второй. Первая строка открывается обычной кавычкой, последняя закрывается кавычкой, а все промежуточные начинаются с символа «|».
ТекстСообщения = "Уважаемый клиент!
|Ваш заказ сформирован и передан в доставку.
|Срок доставки — 3 рабочих дня.";
Важная особенность: текст после вертикальной черты попадает в строку без начальных пробелов. Если написать «| Ваш заказ...» с отступом, эти пробелы сохранятся в значении. Это частая причина «кривого» вывода в сообщениях и печатных формах, когда разработчик выравнивает код по отступу, не замечая, что пробелы уходят в сам текст.
Если внутри строки нужна кавычка, она удваивается: «Он сказал: ""Привет""». Это правило работает и в многострочных литералах с вертикальной чертой.
Сообщение = "Строка 1
|Строка 2
|Строка 3";
Сообщить(Сообщение);Программная вставка перевода строки: Символы.ПС и Символы.ВК
Когда текст собирается динамически — из переменных, реквизитов, результатов функций — литерал с вертикальной чертой не подходит. В этом случае строки склеиваются оператором «+», а перевод строки вставляется через системный набор констант «Символы».
Результат = "Первая строка" + Символы.ПС + "Вторая строка";
Основные константы набора «Символы», которые используются для переносов:
- Символы.ПС — перевод строки (LF), стандартный вариант внутри 1С;
- Символы.ВК — возврат каретки (CR), отдельно почти не используется;
- Символы.ВК + Символы.ПС — комбинация CRLF, нужная для файлов и протоколов, ориентированных на Windows;
- Символы.Таб — табуляция, для выравнивания или формирования TSV-данных.
Для подстановки значений внутрь шаблона удобнее использовать СтрШаблон вместо длинной цепочки конкатенаций — так код читается проще, а переносы остаются в шаблоне:
Текст = СтрШаблон("Контрагент: %1
|Договор: %2
|Сумма: %3", Контрагент, Договор, Сумма);
Перенос длинных выражений и вызовов процедур
Отдельный случай — когда нужно перенести не текст, а сам код: длинное условие, вызов функции с множеством параметров, длинную конкатенацию. Здесь никакие спецсимволы не нужны: компилятор 1С позволяет разрывать выражение практически в любом месте, где стоит оператор или запятая.
Если ЗначениеЗаполнено(Объект.Контрагент)
И Объект.СуммаДокумента > 0
И Не Объект.ПометкаУдаления Тогда
// действия
КонецЕсли;
Точка с запятой ставится только в конце всего оператора. Если случайно поставить её в конце первой строки перенесённого выражения, компилятор воспримет следующую строку как отдельный оператор — и либо выдаст ошибку, либо, что хуже, код выполнится не так, как задумано.
Для вызовов с большим числом параметров принято переносить каждый параметр на отдельную строку — это упрощает чтение и поиск ошибок при изменении сигнатуры процедуры:
ЗаписатьДокумент(Объект,
РежимЗаписиДокумента.Проведение,
РежимПроведенияДокумента.Оперативный);
Многострочный текст в запросах
Текст запроса в 1С — это обычный строковый литерал, поэтому к нему применяется то же правило вертикальной черты. Каждая строка запроса начинается с «|»:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Номенклатура,
| Номенклатура.Наименование КАК Наименование
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| НЕ Номенклатура.ПометкаУдаления";
Здесь отступы после вертикальной черты не вредят: для языка запросов пробелы незначимы, поэтому выравнивание текста запроса — общепринятая практика, улучшающая читаемость. Это принципиальное отличие от литералов, текст которых выводится пользователю: там лишние пробелы видны в результате.
Перенос строки в сообщениях, макетах и текстовых документах
Метод Сообщить() выводит текст в панель сообщений. Если строка содержит Символы.ПС, перевод строки отображается корректно. То же относится к Предупреждение() и ПоказатьПредупреждение() — многострочный текст формируйте через ПС или литерал с «|».
При работе с объектом ТекстовыйДокумент переносы добавляются методами ДобавитьСтроку() (добавляет строку с переводом) или вставкой Символы.ПС внутрь текста. При записи файла через ЗаписьТекста разделитель строк можно задать явно — это как раз тот случай, где важна разница между LF и CRLF.
Запись = Новый ЗаписьТекста(ИмяФайла, КодировкаТекста.UTF8);
Запись.ЗаписатьСтроку("Первая строка");
Запись.ЗаписатьСтроку("Вторая строка");
Запись.Закрыть();
Сравнение вариантов
Подходит для статического многострочного текста прямо в коде. Ограничение: нельзя подставить переменные без разрыва литерала, пробелы после «|» попадают в значение.
Подходит для динамической сборки текста из переменных. Ограничение: длинные цепочки «+ Символы.ПС +» плохо читаются.
Лучший вариант для шаблонов с подстановкой значений. Ограничение: нумерованные параметры нужно держать в правильном порядке.
Типичные ошибки и как их проверить
Самая частая ошибка — забытая вертикальная черта в начале очередной строки литерала. Конфигуратор выдаёт синтаксическую ошибку при проверке модуля, и строка в сообщении обычно указывает на место разрыва. Вторая по частоте — отступы после «|», которые незаметно попадают в текст сообщения или печатную форму.
Третья группа ошибок связана с переводами строк при обмене: текст, сформированный с ПС, внешняя программа отображает одной строкой. Диагностируется это открытием файла в редакторе, который показывает управляющие символы.
Как проверить результат
Проверка конфигурации (Ctrl+F7 в конфигураторе) проходит без ошибок
Ошибка «Ожидается символ» или «Не обнаружено символа» в строке с литералом
Сообщение или печатная форма показывает строки ровно, без лишних отступов
Строки смещены вправо или склеены в одну
Внешняя программа открывает файл с корректными переносами
Текст в одну строку или пустые строки между каждой записью
Что важно запомнить
Многострочный литерал оформляется вертикальной чертой «|» в начале каждой строки, динамический текст собирается через Символы.ПС, длинные выражения переносятся простым разрывом строки. Следите за пробелами после «|», не ставьте «;» в середине перенесённого оператора и выбирайте LF или CRLF под приёмника при выгрузке файлов.
Частые вопросы
Как перенести строку внутри сообщения пользователю?
Соберите текст с помощью Символы.ПС между частями или используйте литерал с вертикальной чертой. Оба варианта корректно отображаются в панели сообщений и в окнах предупреждений.
Почему после переноса через «|» в тексте появились пробелы?
Всё, что стоит после вертикальной черты, включая пробелы-отступы, попадает в значение строки. Уберите отступы после «|» или используйте Символы.ПС с конкатенацией, если выравнивание кода важнее.
Чем отличается Символы.ПС от Символы.ВК?
ПС — это перевод строки (LF), ВК — возврат каретки (CR). Внутри 1С достаточно ПС, а для файлов, которые читают Windows-программы, часто требуется пара ВК+ПС (CRLF), иначе текст отображается одной строкой.
Можно ли переносить строку в тексте запроса?
Да, текст запроса — обычный строковый литерал, каждая строка начинается с «|». Отступы после черты допустимы и даже желательны: для языка запросов пробелы незначимы, а читаемость повышается.
Как перенести длинное условие в операторе Если?
Просто разорвите выражение после логического оператора (И, Или) и продолжите на следующей строке — спецсимволы не нужны. Главное — не ставить точку с запятой до конца всего оператора.
Как вставить кавычку внутри многострочной строки?
Кавычка внутри строкового литерала удваивается: чтобы получить текст Он сказал: "Привет", в коде пишется "Он сказал: ""Привет""". Правило действует и для литералов с вертикальной чертой.