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