Многие разработчики при переходе на платформу 1С:Предприятие 8.3.18 и выше сталкиваются с неприятной особенностью: текст в элементах планировщика, который раньше корректно отображался в несколько строк, внезапно вытягивается в одну линию. При этом стандартные символы переноса строк, такие как Символы.ПС, перестают интерпретироваться системой как команда к разрыву строки. В этой статье мы подробно разберем, почему так происходит и как адаптировать ваш код под новые реалии платформы.
Для начала выясним, почему поведение системы изменилось. Начиная с версии 8.3.18, компания «1С» провела масштабное обновление элемента управления Планировщик. Это было связано с переходом на новые механизмы отрисовки интерфейса (в частности, на использование Chromium-based движков в тонком и веб-клиенте). Эти изменения позволили добавить поддержку типа ФорматированнаяСтрока для большинства текстовых свойств планировщика.
В старых версиях платформы планировщик работал с обычным типом Строка и пытался самостоятельно обрабатывать спецсимволы. Теперь же механизм отрисовки стал более строгим: если свойству передана обычная строка, она воспринимается как сплошной текст без форматирования. Символы переноса (LF/CRLF) могут просто игнорироваться или заменяться пробелами, так как движок ожидает явного указания структуры текста через объект форматирования.
Самый простой и эффективный способ вернуть перенос строк — это явно преобразовать значение свойства Текст элемента планировщика в объект ФорматированнаяСтрока. Рассмотрим, как это реализовать в коде программного заполнения планировщика.
Допустим, ранее ваш код выглядел так:
// Старый подход, который перестал работать в 8.3.18
ЭлементПланировщика.Текст = "Заявка №123" + Символы.ПС + "Клиент: ООО «Вектор»";
Чтобы исправить ситуацию, нам нужно обернуть строку в конструктор форматированной строки. Разберем по шагам, как это сделать правильно:
// Новый подход для платформы 8.3.18+
ТекстДляОтображения = "Заявка №123" + Символы.ПС + "Клиент: ООО «Вектор»";
ЭлементПланировщика.Текст = Новый ФорматированнаяСтрока(ТекстДляОтображения);
Важный момент: Даже если вы используете простую строку с символами Символы.ПС, передача ее в конструктор Новый ФорматированнаяСтрока() заставляет платформу проанализировать содержимое и корректно отрисовать переносы.
Проанализируем более надежный способ формирования многострочного текста, который гарантирует корректную работу во всех режимах (тонкий, веб-клиент). Вместо конкатенации строк через «+» мы можем передать в конструктор массив элементов. Это позволяет не только разделять строки, но и задавать разный цвет или шрифт для разных частей текста.
Посмотрим на пример реализации через массив:
МассивСоставаТекста = Новый Массив;
МассивСоставаТекста.Добавить("Первая строка текста");
МассивСоставаТекста.Добавить(Символы.ПС); // Явное добавление переноса
МассивСоставаТекста.Добавить("Вторая строка текста (подробности)");
// Устанавливаем форматированную строку из массива
ЭлементПланировщика.Текст = Новый ФорматированнаяСтрока(МассивСоставаТекста);
Такой подход считается «лучшей практикой» в современной разработке на 1С, так как он минимизирует ошибки интерпретации спецсимволов движком отрисовки.
Если ваши пользователи создают элементы планировщика интерактивно (мышкой на форме), вы можете заметить, что введенные ими переносы строк также не сохраняются. Выясним, как это исправить. В платформе 8.3.18 появилось новое свойство элемента формы Планировщик — ТипТекстаНовыхЭлементов.
Для корректной работы выполните следующие действия:
ТипТекстаНовыхЭлементов.Это гарантирует, что любой текст, введенный пользователем вручную, будет сразу сохраняться в нужном формате, поддерживающем многострочность.
Стоит отметить, что поведение планировщика сильно зависит от настройки Режим совместимости вашей конфигурации. Рассмотрим ситуацию подробнее:
ФорматированнаяСтрока становится обязательным стандартом для реализации многострочного текста во всех элементах планировщика, включая шкалу времени и измерения.Если основной текст элемента слишком велик и не умещается даже с переносами, разберем еще один прием. В платформе (начиная с 8.3.17) появилась интересная возможность в ИнтервалахФона (Background Intervals). В отличие от основных элементов, текст в интервалах фона поддерживает автоматический перенос по словам (word wrap), если это позволяет ширина колонки.
Вы можете использовать это для вывода фоновой информации:
Интервал = Планировщик.ИнтервалыФона.Добавить(НачалоПериода, КонецПериода);
Интервал.Текст = "Очень длинное описание, которое автоматически распределится по ширине ячейки фона";
Мы выяснили, что отсутствие переноса текста в 8.3.18 — это не ошибка, а следствие перехода на более современный механизм отображения. Чтобы исправить проблему в вашем прикладном решении, придерживайтесь следующих правил:
Новый ФорматированнаяСтрока() при программной установке свойства Текст.ТипТекстаНовыхЭлементов в конфигураторе для интерактивных действий пользователей.Применение этих простых шагов позволит вам вернуть привычный вид планировщика и сделать интерфейс ваших решений более удобным для конечных пользователей.