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