Разработка и Конфигурация · 12 мин
Как в 1С перенести текст на новую строку
Способы переноса текста на новую строку в 1С: Символы.ПС, Символ(10), перенос в макетах, полях ввода и СКД. Примеры кода, ошибки и проверка результата.
Задача перенести текст на новую строку в 1С возникает в самых разных ситуациях: при формировании сообщений пользователю, заполнении многострочных полей, выводе печатных форм, построении отчётов в СКД и обмене данными. В зависимости от контекста используются разные механизмы — от системного перечисления Символы до свойств элементов формы и специальных конструкций в макетах.
Главная сложность в том, что универсального «одного символа» не существует: встроенный язык работает с символами перевода строки и возврата каретки, а визуальное отображение переноса зависит ещё и от того, куда именно выводится текст. Строка, корректно показанная в сообщении, может «схлопнуться» в одну строку в поле формы, если у элемента не включён многострочный режим.
Ниже разобраны основные способы переноса строки: в коде на встроенном языке, при выводе сообщений, в макетах и печатных формах, в форматированном документе, в запросах и СКД, а также типичные ошибки и способы проверить результат. Примеры приведены для управляемых форм актуальных типовых конфигураций, но большинство приёмов работает и в обычных формах.
Какие символы переноса строки существуют в 1С
Во встроенном языке 1С для работы с переносами предусмотрено системное перечисление Символы. Чаще всего используются два его значения: Символы.ПС — перевод строки (аналог LF, код 10) и Символы.ВК — возврат каретки (аналог CR, код 13). Для платформы корректным разделителем строк в многострочных текстах считается комбинация Символы.ВК + Символы.ПС, хотя одиночный Символы.ПС в большинстве случаев тоже отображается как перенос.
Альтернативный вариант — функция Символ(Код), которая возвращает символ по его числовому коду: Символ(10) соответствует переводу строки, Символ(13) — возврату каретки. Этот способ используют реже, в основном когда нужно работать с нестандартными управляющими символами или при разборе текстов, полученных из внешних систем.
Важно различать символ переноса и визуальный перенос. Символ Символы.ПС — это данные в строке. А вот отобразится ли он как новая строка, зависит от того, куда выводится текст: сообщение пользователю покажет перенос всегда, а однострочное поле ввода — проигнорирует или заменит пробелом.
Перенос строки в коде: конкатенация и многострочные литералы
Самый распространённый способ — склеить строки оператором «+» с символом переноса между ними. Такой приём удобен, когда текст собирается динамически, например из нескольких реквизитов объекта.
ТекстСообщения = "Ошибка в документе: " + ДокументСсылка
+ Символы.ПС + "Проверьте заполнение табличной части.";
Сообщить(ТекстСообщения);
Второй способ — многострочный строковый литерал. В модуле текст в кавычках можно записывать в несколько строк исходного кода: каждая новая строка кода, начинающаяся с символа «|» (вертикальная черта), продолжает литерал, а перенос добавляется автоматически. Вертикальная черта в начале первой строки не обязательна, но обязательна для всех последующих.
Текст = "Первая строка
|Вторая строка
|Третья строка";
Третий вариант — собрать текст из массива строк через СтрСоединить, указав разделитель. Это удобно, когда количество строк заранее неизвестно, например при выводе списка ошибок проверки.
МассивСтрок = Новый Массив;
МассивСтрок.Добавить("Итоги проверки:");
МассивСтрок.Добавить("Не заполнено поле Контрагент");
МассивСтрок.Добавить("Не указана дата отгрузки");
Текст = СтрСоединить(МассивСтрок, Символы.ПС);
- 1Определите, куда выводится текст: сообщение, поле формы, макет, файл
- 2Для сообщения или файла сформируйте строку через Символы.ПС или СтрСоединить
- 3Для поля формы включите многострочный режим у элемента
- 4Для макета настройте размещение текста в ячейке
- 5Проверьте результат в интерфейсе или открыв полученный файл
Перенос строки в поле формы и в сообщениях пользователю
Многострочное поле ввода
Если текст с переносами присваивается реквизиту формы или объекта, а на экране всё выводится одной строкой, причина почти всегда в настройках элемента формы. У поля ввода есть свойство МногострочныйРежим (в палитре свойств — «Многострочный режим»). Пока оно выключено, переносы в данных игнорируются визуально.
Порядок настройки: откройте форму в конфигураторе, выделите поле ввода, в палитре свойств установите «Многострочный режим» в «Да». Полезно заодно настроить высоту элемента или растягивание по вертикали, чтобы пользователь видел несколько строк без прокрутки. Если поле связано с реквизитом типа «Строка» ограниченной длины, убедитесь, что длина строки в метаданных достаточна для всего текста с переносами — лишний текст будет обрезан при записи.
Сообщения и предупреждения
Процедуры Сообщить(), ПоказатьПредупреждение() и объект СообщениеПользователю корректно отображают символы переноса без дополнительных настроек. Достаточно вставить Символы.ПС в текст — в окне сообщения текст появится на новой строке. Это самый простой способ проверить, что перенос в строке действительно есть: выведите её через Сообщить.
Перенос текста в табличном документе и печатных формах
В макетах типа «Табличный документ» перенос текста внутри ячейки управляется свойством ячейки РазмещениеТекста. Если в параметр ячейки выводится длинная строка, а она обрезается или уходит за границу, откройте свойства ячейки в макете и установите размещение текста в значение «Переносить» (перенос по словам). Тогда текст будет автоматически переноситься по ширине ячейки, а высота строки при выводе может подстраиваться.
Чтобы принудительно начать новую строку внутри ячейки, вставьте в выводимый текст Символы.ПС — табличный документ отобразит его как разрыв строки при включённом переносе. Если перенос не срабатывает, проверьте два момента: размещение текста в ячейке должно допускать перенос, а высота строки макета не должна быть жёстко зафиксирована в одну строку.
Для печатных форм, формируемых программно через ТабличныйДокумент.Вывести(), действуют те же правила: источник переносов — либо символы ПС в данных, либо автоперенос по ширине ячейки. Комбинация обоих подходов даёт предсказуемый результат: явные переносы для логических блоков, автоперенос — для длинных наименований.
Перенос строки в форматированном документе
Форматированный документ (например, поле «Комментарий» в некоторых типовых объектах или описание в HTML-подобном виде) устроен иначе: это не просто строка, а структура из абзацев. Перенос строки здесь создаётся добавлением нового абзаца, а не символом ПС.
При программной работе используется объект ФорматированныйДокумент: метод Добавить() с типом элемента «ПереводСтроки» или добавление нового абзаца формируют новую строку. Если нужно перенести текст из обычной строки с символами ПС в форматированный документ, удобно использовать метод УстановитьТекст() — он сам преобразует переводы строк в структуру абзацев. Обратное преобразование выполняется методом ПолучитьТекст(), который вернёт строку с символами переноса.
При обмене данными между объектами с обычными строковыми реквизитами и форматированными документами переносы часто теряются. Перед записью проверяйте, какой тип у реквизита-приёмника, и преобразуйте текст соответствующим методом.
Перенос строки в запросах и СКД
В языке запросов нет прямого литерала для символа переноса, но его можно передать как параметр. В запросе используется функция СИМВОЛ(КодСимвола) — например, СИМВОЛ(10) вернёт перевод строки, и его можно склеивать с полями через оператор «+» при условии приведения типов к строке.
В СКД (системе компоновки данных) отображение переносов зависит от настроек поля. Даже если в данных есть символы ПС, ячейка отчёта может показывать текст в одну строку. Откройте настройки отчёта, выберите нужное поле и в параметрах оформления установите «Размещение текста» — «Переносить». Для вычисляемых полей, где текст собирается выражением, символ переноса добавляется через СИМВОЛ(10) прямо в выражении.
Учтите ограничение: перенос по ширине в СКД работает только когда задана или вычисляется достаточная высота строки. Если строки отчёта «схлопываются», проверьте автоотступ и настройки высоты в оформлении, а также отсутствие группировок, принудительно обрезающих содержимое.
Частые ошибки и как проверить результат
Наиболее частая ошибка — ожидать перенос там, где он не поддерживается. Однострочные поля ввода, заголовки, наименования в списках и многие представления ссылок физически не отображают многострочный текст: переносы либо игнорируются, либо заменяются пробелами. Прежде чем менять код, убедитесь, что элемент интерфейса вообще способен показать несколько строк.
Вторая типичная проблема — смешение символов при обмене с внешними системами. Текст из файла, подготовленного в другой программе, может содержать только ВК, только ПС или их комбинацию. При чтении таких файлов полезно нормализовать переносы: заменить Символы.ВК + Символы.ПС на Символы.ПС через СтрЗаменить, а затем работать уже с единообразным разделителем.
Третья ошибка — использование СтрЧислоСтрок и СтрПолучитьСтроку без учёта того, какие именно символы считаются разделителями. Эти функции ориентируются на переводы строк, поэтому «грязный» текст с одиночными ВК может дать неожиданный подсчёт строк.
Как проверить результат
Сообщить(Текст) показывает текст в несколько строк
Текст выводится одной строкой — символа переноса нет
Поле с многострочным режимом показывает все строки
Видна одна строка — проверьте свойства элемента
Ячейка переносит текст по ширине и по ПС
Текст обрезан — проверьте РазмещениеТекста и высоту строки
Как выбрать действие
Что важно запомнить
Перенос строки в 1С создаётся символом Символы.ПС (или связкой ВК+ПС) в данных, а его видимость зависит от места вывода: многострочный режим поля, размещение текста в ячейке макета, оформление поля в СКД. Сначала проверяйте наличие символа в строке через Сообщить, затем — настройки элемента отображения.
Частые вопросы
Чем отличается Символы.ПС от Символы.ВК?
Символы.ПС — перевод строки (код 10), Символы.ВК — возврат каретки (код 13). Исторически разные системы используют разные разделители: Windows — пару ВК+ПС, Unix-подобные — только ПС. В 1С для многострочных текстов принято использовать ПС, а при обмене с внешними файлами — приводить переносы к единому виду, чтобы корректно работали СтрЧислоСтрок и СтрПолучитьСтроку.
Почему перенос есть в строке, но в поле на форме его не видно?
У поля ввода выключен многострочный режим. Откройте форму в конфигураторе, выделите поле и установите свойство «Многострочный режим» в «Да». Дополнительно проверьте, что реквизит имеет достаточную длину строки и не является неограниченной строкой, отображаемой однострочным элементом.
Как перенести текст на новую строку в ячейке табличного документа?
Два способа: вставить Символы.ПС в выводимый текст для принудительного разрыва или установить в свойствах ячейки макета «Размещение текста» — «Переносить», чтобы текст переносился автоматически по ширине. Для надёжного результата обычно совмещают оба подхода и не фиксируют жёстко высоту строки.
Можно ли сделать перенос строки прямо в запросе?
Да, через функцию СИМВОЛ(10), склеивая её с полями оператором «+». При этом поля должны быть строкового типа или приведены к строке. Учтите, что увидеть перенос получится только там, где он поддерживается отображением: в многострочных полях, табличных документах или при настроенном оформлении в СКД.
Как убрать лишние переносы строк из текста?
Используйте СтрЗаменить: замените Символы.ПС на пробел или пустую строку. Если текст пришёл из внешнего источника, сначала замените комбинацию Символы.ВК + Символы.ПС на Символы.ПС, затем уберите одиночные ВК, и только после этого удаляйте или заменяйте оставшиеся переводы строк — иначе часть разделителей останется.
Работает ли перенос строки в наименовании элемента справочника?
Технически символ ПС можно записать в наименование, но стандартные списки и поля выбора отображают наименование в одну строку, поэтому перенос либо не будет виден, либо ухудшит представление объекта. Для многострочной информации лучше использовать отдельные реквизиты, например «Описание» или «Комментарий» с многострочным полем ввода.