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

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

Многострочная строка в 1С: способы создания и примеры кода

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

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

Чаще всего многострочный текст нужен при формировании запросов, длинных сообщений пользователю, шаблонов писем, текстов XML и JSON, а также при выводе подсказок в интерфейсе. От выбранного способа зависит читаемость кода, скорость его поддержки и даже корректность результата — например, лишние пробелы в запросе могут изменить его текст.

Ниже разобраны рабочие варианты с примерами кода, указаны типичные ошибки и способы проверить, что строка сформирована правильно.

Способ 1. Вертикальная черта в строковом литерале

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

ТекстСообщения = "Первая строка сообщения.

|Вторая строка сообщения.

|Третья строка сообщения.";

В результате переменная ТекстСообщения содержит три строки, разделённые символами переноса. Важно понимать: перенос в значении строки появляется из-за реального перевода строки в редакторе кода, а вертикальная черта лишь разрешает синтаксис продолжения.

Если перенос в значении не нужен, а строка просто не помещается в ширину экрана, черту ставят без фактического разрыва текста — тогда значение получится однострочным, но код останется читаемым:

ДлинныйТекст = "Это очень длинный текст, "

|+ "который продолжается на следующей строке кода.";

Способ 2. Символы.ПС и конкатенация

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

Текст = "Шапка документа" + Символы.ПС

+ "------------------------" + Символы.ПС

+ "Итого: " + Формат(СуммаИтого, "ЧДЦ=2");

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

Для кроссплатформенной переносимости предпочтителен именно Символы.ПС: он корректно обрабатывается и на Windows, и на Linux-сервере, тогда как комбинация Символы.ВК + Символы.ПС имитирует Windows-перенос CRLF, что не всегда нужно.

Способ 3. СтрШаблон для подстановки значений

Когда в многострочный текст нужно вставить значения переменных, удобнее функция СтрШаблон: она заменяет маркеры %1, %2 и далее на переданные параметры. В сочетании с вертикальной чертой получается читаемый шаблон:

ТекстПисьма = СтрШаблон("Уважаемый %1!

|Ваш заказ №%2 от %3 принят в работу.

|Сумма к оплате: %4 руб.",

Покупатель, НомерЗаказа, Формат(ДатаЗаказа, "ДЛФ=D"), Сумма);

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

Сравнение способов

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

Лучший выбор для статичных текстов и запросов; не подходит для условного добавления строк

Символы.ПС + конкатенация

Гибкое формирование в циклах и по условиям; код получается более громоздким

СтрШаблон

Идеален для текстов с подстановкой переменных; требует следить за порядком параметров

Текстовый макет / СтрСоединить

Для больших шаблонов и массивов строк; требует дополнительной структуры данных

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

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

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

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

"ВЫБРАТЬ

| Товары.Ссылка КАК Товар,

| Товары.Цена КАК Цена

|ИЗ

| Справочник.Товары КАК Товары

|ГДЕ

| Товары.Цена > &МинЦена";

Обратите внимание: строки внутри запроса разделяются пробелами или переносами, и случайное «склеивание» слов (например, «ЦенаИЗ») из-за потерянного пробела приведёт к ошибке запроса. Поэтому при ручной правке текста проверяйте стыки строк.

Типичные ошибки
01
Пропущена вертикальная черта в начале строки — компилятор выдаёт ошибку «Ожидается символ ';'»
02
Лишние пробелы в начале строки после «|» попадают в значение и портят текст запроса или XML
03
Использование Символы.ВК + Символы.ПС везде подряд — на Linux-сеансе лишний CR может мешать обработке текста
04
Перепутан порядок параметров в СтрШаблон — в текст подставляются не те значения

Как проверить, что строка сформирована правильно

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

КоличествоСтрок = СтрЧислоСтрок(ТекстСообщения);

Для Номер = 1 По КоличествоСтрок Цикл

Сообщить(СтрПолучитьСтроку(ТекстСообщения, Номер));

КонецЦикла;

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

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

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

СтрЧислоСтрок(Текст)
Норма

Возвращает ожидаемое число строк

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

Возвращает 1 — переносы потеряны

Выполнение запроса
Норма

Запрос выполняется без ошибки синтаксиса

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

Ошибка «ожидается выражение» — слиплись слова на стыке строк

Вывод сообщения пользователю
Норма

Текст отображается с переносами в нужных местах

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

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

Ограничения и частые проблемы

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

При записи многострочного текста в файл через ЗаписьТекста переносы сохраняются как есть. А вот при передаче текста в XML или JSON переносы могут требовать экранирования — штатные средства сериализации (ЗаписьXML, ЗаписьJSON) делают это автоматически, но при ручной сборке текста легко получить невалидный документ.

Итог и ответы на вопросы

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

Итог

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

Многострочная строка в 1С делается символом «|» в начале строки, переносы в значении создаются реальными переводами строки или Символы.ПС, а для подстановки значений используйте СтрШаблон. Проверяйте результат через СтрЧислоСтрок.

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

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

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

Скорее всего, в начале строки отсутствует символ «|». Без него 1С считает строковый литерал завершённым и воспринимает продолжение как отдельный оператор.

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

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

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

Примените СтрЗаменить(Текст, Символы.ПС, " ") для замены переносов пробелами или СокрЛП к каждой строке при обходе через СтрПолучитьСтроку. Для удаления пустых строк удобно собрать текст заново через массив и СтрСоединить.

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

Да, это стандартная практика: конструктор запросов сам формирует текст с вертикальной чертой. Главное — следить, чтобы на стыках строк не слипались слова из-за отсутствия пробелов.

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

У элемента формы не включён многострочный режим. Откройте свойства поля ввода и установите свойство «МногострочныйРежим» в значение Истина — переносы начнут отображаться.