При работе с платформой 1С:Предприятие версии 8.3.18 и выше, многие пользователи и разработчики столкнулись с неожиданным изменением в поведении компонента Планировщик. Если раньше текст в элементах планировщика мог автоматически переноситься по словам, то после обновления на версию 8.3.18 он стал обрезаться по краю элемента, что значительно ухудшает читаемость и удобство использования.
В этой статье мы подробно разберем, в чем заключается проблема, выясним возможные причины такого поведения и рассмотрим различные подходы к ее решению, включая предложенный пользователями обходной путь и информацию об официальных исправлениях.
После перехода на версию платформы 1С 8.3.18, разработчики обратили внимание, что текст, размещенный в прямоугольных блоках элементов планировщика на форме, перестал автоматически переноситься по словам. Вместо этого, длинные текстовые строки просто обрезаются, становясь нечитаемыми. Это вызывает серьезные неудобства, особенно когда в элементы планировщика необходимо выводить значительный объем информации.
Мы, как и многие другие, можем изучить
Синтакс-Помощник (СП) по свойствам объекта Планировщик и его ЭлементаПланировщика. К сожалению, мы не обнаружим там прямых свойств или методов, которые управляли бы автоматическим переносом текста именно для элементов. Это отсутствие очевидного механизма усложняет поиск стандартного решения проблемы.
Чтобы понять, почему возникла эта проблема, давайте проанализируем изменения, внесенные в функционал планировщика в версии 8.3.18. Согласно документации и информации от разработчиков, в этой версии были значительно расширены возможности работы с планировщиком. Среди ключевых нововведений:
Эти обширные изменения, затрагивающие механизмы отрисовки и взаимодействия с элементами планировщика, по всей видимости, повлияли на алгоритмы отображения текста. Возможно, в процессе рефакторинга или добавления новой функциональности, стандартное поведение по автоматическому переносу текста в элементах было непреднамеренно изменено или вовсе отключено.
Один из первых логичных шагов, когда сталкиваешься с проблемами отображения текста, это попробовать использовать форматированные строки. Ведь если платформа поддерживает их, возможно, через них можно управлять переносом.
Мы можем попытаться задать текст элемента планировщика как форматированную строку, надеясь, что механизм форматирования учтет переносы. Однако, как показывает практика и опыт других пользователей, автоматических переносов это не дает. Если мы хотим, чтобы текст переносился, нам придется явно указывать символы переноса внутри самой форматированной строки.
Например, чтобы принудительно перенести строку, мы должны использовать специальный символ:
// Пример создания форматированной строки с явным переносом
ТекстЭлемента = Новый ФорматированнаяСтрока;
ТекстЭлемента.Добавить("Часть текста 1" + Символы.ПС + "Часть текста 2");
// Затем этот текст присваивается элементу планировщика
// ЭлементПланировщика.Текст = ТекстЭлемента;
Это означает, что нам придется вручную парсить исходные строки, определять места для переносов и вставлять Символы.ПС, что является довольно трудоемким и не всегда эстетичным решением, особенно для динамического контента.
В версии 8.3.18 для реквизита формы типа "Планировщик" было реализовано новое свойство ТипТекстаНовыхЭлементов. Это свойство позволяет указать, какой тип текста (обычный или форматированный) может вводиться в новые элементы планировщика, создаваемые пользователем интерактивно.
Теоретически, можно предположить, что это свойство или связанные с ним механизмы могли бы влиять на управление переносом текста. Однако, в доступной документации и форумах нет прямых указаний на то, что изменение ТипТекстаНовыхЭлементов напрямую решает проблему автоматического переноса уже отображаемого текста. Тем не менее, при отладке и поиске решения, мы всегда можем поэкспериментировать с этим свойством, чтобы исключить его влияние.
Поскольку прямого и простого решения для автоматического переноса текста в самих элементах планировщика не нашлось, сообщество разработчиков часто прибегает к так называемым "костылям" или обходным путям. Один из таких ingenious (изобретательных) подходов был предложен пользователем и заслуживает нашего внимания.
Суть "костыля" заключается в использовании функционала интервалов фона ячеек планировщика. С версии 8.3.17 в фон ячеек планировщика стало можно выводить текст, и этот текст, что критически важно, автоматически переносится по словам. Мы можем использовать эту особенность для создания импровизированного режима просмотра длинного текста.
Создаем переключатель режима просмотра: На форме, где расположен планировщик, мы можем добавить элемент управления, например, флажок (чекбокс) с надписью "Показать полный текст" или "Режим чтения". Этот флажок будет управлять переключением между режимом редактирования элементов и режимом просмотра полного текста.
Обработчик изменения флажка: При изменении состояния этого флажка, мы будем выполнять следующие действия:
&НаКлиенте
Процедура ПереключательРежимаЧтенияПриИзменении(Элемент)
Если Элементы.ПереключательРежимаЧтения.Значение Тогда
// Активируем режим чтения
ОтобразитьПолныйТекстВФоне();
Иначе
// Возвращаем обычный режим редактирования
ОчиститьФонИОтобразитьЭлементы();
КонецЕсли;
КонецПроцедуры
Функция ОтобразитьПолныйТекстВФоне():
В этой функции мы будем делать следующее:
Видимость в Ложь или, если элементы не должны быть полностью скрыты, мы можем изменить их цвет фона на прозрачный, а цвет текста на невидимый, чтобы они не мешали чтению.ИнтервалыФона объекта Планировщик, чтобы избежать наложения и устаревшей информации.ИнтервалыФона: Для каждого логического события или записи, которая должна быть отображена в планировщике, мы создаем новый объект ИнтервалФонаПланировщика.Начало и Конец, соответствующие временному интервалу, в котором должен быть показан текст.Текст, передавая в него полную строку текста, которую мы хотим отобразить. Именно этот текст будет автоматически переноситься по словам в фоне ячейки.ЦветФона, ЦветТекста и Шрифт, чтобы обеспечить хорошую читаемость.ИнтервалФонаПланировщика в коллекцию Планировщик.ИнтервалыФона.Примерный псевдокод для этой функции:
&НаКлиенте
Процедура ОтобразитьПолныйТекстВФоне()
// Скрываем или делаем элементы планировщика невидимыми
Для Каждого ЭлементПл Из Планировщик.Элементы Цикл
ЭлементПл.Видимость = Ложь; // Или задаем прозрачный фон и невидимый текст
КонецЦикла;
Планировщик.ИнтервалыФона.Очистить();
// Пример заполнения фона на основе данных (например, из таблицы значений)
Для Каждого СтрокаДанных Из МоиДанныеПланировщика Цикл
НовыйИнтервалФона = Планировщик.ИнтервалыФона.Добавить();
НовыйИнтервалФона.Начало = СтрокаДанных.ДатаНачала;
НовыйИнтервалФона.Конец = СтрокаДанных.ДатаОкончания;
НовыйИнтервалФона.Текст = СтрокаДанных.ПолныйТекстСобытия; // Этот текст будет переноситься!
НовыйИнтервалФона.ЦветФона = Новый Цвет(240, 240, 240); // Светло-серый фон
НовыйИнтервалФона.ЦветТекста = Новый Цвет(0, 0, 0); // Черный текст
// НовыйИнтервалФона.Шрифт = Новый Шрифт(...);
КонецЦикла;
КонецПроцедуры
Функция ОчиститьФонИОтобразитьЭлементы():
Эта функция возвращает планировщик в обычное состояние:
Видимость в Истина или восстанавливаем их исходные цвета.ИнтервалыФона: Удаляем все интервалы фона, чтобы они не мешали работе с элементами.Примерный псевдокод:
&НаКлиенте
Процедура ОчиститьФонИОтобразитьЭлементы()
Для Каждого ЭлементПл Из Планировщик.Элементы Цикл
ЭлементПл.Видимость = Истина; // Или восстанавливаем исходные стили
КонецЦикла;
Планировщик.ИнтервалыФона.Очистить();
КонецПроцедуры
Таким образом, мы получаем два режима работы: режим редактирования (где элементы видны, но текст обрезается) и режим просмотра (где элементы скрыты, а читаемый, перенесенный текст отображается в фоне ячеек). Это, безусловно, "костыль", но он эффективно решает проблему читаемости длинного текста до появления официального исправления.
Важным источником информации о проблемах и их решениях является официальный баг-трекер 1С. В обсуждении упоминается ошибка с номером 000098200 на
bugboard.v8.1c.ru (актуальный адрес -
bugboard.1c.ru). Однако, как было отмечено одним из пользователей, это исправление касалось "Элементов измерения", а не напрямую "Элементов планировщика". Хотя это не одно и то же, есть надежда, что разработчики 1С, занимаясь похожими компонентами, могли попутно исправить и проблему с переносом текста в планировщике.
Мы настоятельно рекомендуем регулярно проверять обновления платформы 1С:Предприятие. При каждом новом релизе выпускается список изменений и исправленных ошибок. Внимательно изучайте этот список, особенно разделы, касающиеся компонента "Планировщик" или общего механизма отображения текста. Весьма вероятно, что в одной из будущих версий платформы проблема с автоматическим переносом текста в элементах планировщика будет официально исправлена, что сделает все "костыли" ненужными.
Для получения самой актуальной и подробной информации по работе с планировщиком и его свойствами, а также по вопросам, связанным с отображением текста, всегда обращайтесь к официальной документации по платформе "1С:Предприятие" соответствующей версии на сайте ИТС.
Проблема с отсутствием автоматического переноса текста в элементах планировщика 1С, появившаяся в версии 8.3.18, является достаточно неприятной, но не безвыходной. Пока официальное исправление не будет выпущено, мы можем использовать предложенный обходной путь с интервалами фона ячеек для обеспечения читаемости длинного текста.
Продолжайте следить за обновлениями платформы и официальной документацией. Разработчики 1С постоянно улучшают платформу, и, скорее всего, эта проблема будет решена в одном из следующих релизов, что позволит нам использовать компонент "Планировщик" с полным комфортом и функциональностью.