При переходе на платформу 1С:Предприятие 8.3.20 и выше многие разработчики столкнулись с неприятной особенностью: привычные всплывающие подсказки для длинных текстовых полей внезапно изменили свое поведение. Там, где раньше (например, на версии 8.3.18) пользователь видел удобное «желтое облако» с полным текстом в несколько строк, теперь отображается узкая однострочная полоса, в которой текст не помещается целиком.
Интересной особенностью является то, что если навести курсор на самую границу элемента управления, подсказка может отобразиться корректно (в многострочном виде), но при наведении в центр поля — она снова становится однострочной. В этой статье мы подробно разберем причины такого поведения платформы и выясним, как вернуть информативные подсказки программными методами.
Выясним причину таких изменений. Начиная с версии 8.3.20, разработчики платформы внедрили масштабные обновления в механизмы отрисовки интерфейса «Такси». Это было необходимо для унификации работы тонкого клиента и веб-клиентов. В рамках этой оптимизации была пересмотрена логика так называемых автоматических подсказок (Value Tips).
Ранее платформа всегда пыталась вывести содержимое текстового поля целиком в виде многострочного блока. Теперь же логика разделилась:
МногострочныйРежим, платформа считает, что значение является компактным, и выводит его в одну строку, чтобы не перекрывать другие элементы формы.Посмотрим на пример кода, который вызывает подобную ситуацию:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
МассивСлов = Новый Массив;
МассивСлов.Добавить("Раз хочу чтоб везде полная подсказка была");
МассивСлов.Добавить("Два если навести курсор мыши на текстовый элемент...");
МассивСлов.Добавить("Три: А если навести курсор на границу элемента, то вот такую");
// Текст содержит переносы строк
Объект.Реквизит1 = СтрСоединить(МассивСлов, Символы.ПС);
КонецПроцедуры
В данном случае, если в свойствах элемента формы Реквизит1 не установлен флаг Многострочный режим, мы получим именно ту проблему, о которой идет речь: обрезание текста в подсказке.
Проанализируем самый простой вариант решения. Платформа 8.3.20+ ориентируется на свойство элемента Многострочный режим. Если вы включите этот флаг, подсказка снова начнет отображаться корректно (многострочно).
Однако этот способ подходит не всегда. Часто дизайн формы требует, чтобы само поле ввода визуально оставалось однострочным и компактным, а полная информация была доступна только во всплывающем окне. Включение многострочности изменит высоту элемента на форме, что может испортить верстку.
Рассмотрим более гибкий и надежный метод. Чтобы гарантировать отображение всего текста в «желтом облаке» при наведении на любую часть поля, мы можем использовать программное изменение форм и свойство элемента формы Подсказка (Tooltip).
Суть метода: Платформа всегда отдает приоритет явно заполненному свойству Подсказка перед автоматическим предпросмотром значения. Если мы программно запишем текст из реквизита в подсказку элемента, она будет отображаться по старым правилам.
Разберем по шагам, как это реализовать:
ПриСозданииНаСервере или ПриЧтенииНаСервере добавим код заполнения.ПриИзменении.Пример программной реализации:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Заполняем реквизит данными
Объект.Реквизит1 = "Это очень длинный текст," + Символы.ПС + "который должен отображаться целиком в подсказке.";
// Принудительно устанавливаем этот же текст в свойство Подсказка элемента формы
Элементы.Реквизит1.Подсказка = Объект.Реквизит1;
// Важно: убедитесь, что свойство ОтображениеПодсказки установлено в "Авто" или "Всплывающая"
Элементы.Реквизит1.ОтображениеПодсказки = ОтображениеПодсказки.Авто;
КонецПроцедуры
&НаКлиенте
Процедура Реквизит1ПриИзменении(Элемент)
// Если пользователь отредактировал текст, обновляем подсказку на клиенте
Элемент.Подсказка = Объект.Реквизит1;
КонецПроцедуры
Посмотрим на ситуацию шире. В новых версиях платформы разработчики рекомендуют использовать объект Расширенная подсказка. Это позволяет не только выводить текст, но и форматировать его. Если автоматическая подсказка работает некорректно, мы можем настроить элемент так, чтобы он всегда использовал расширенную подсказку.
Для этого в конфигураторе выделите нужное поле ввода, найдите в свойствах Расширенная подсказка и установите нужные параметры отображения. Однако программный метод (Способ 2) является более универсальным, так как не требует ручной настройки каждого поля в визуальном редакторе.
Стоит также учитывать влияние настройки Компактный режим интерфейса (Настройки — Параметры — Внешний вид). Если в вашей базе включен компактный режим, платформа еще более агрессивно сокращает любые всплывающие элементы. В этом случае использование явного заполнения свойства Подсказка через Элементы.ИмяПоля.Подсказка становится практически единственным способом заставить платформу показать многострочный текст.
Подведем итог:
Изменение поведения подсказок в 1С 8.3.20 — это не баг, а часть новой стратегии оптимизации интерфейса. Для решения проблемы «обрезанных» подсказок мы рекомендуем всегда дублировать длинный текст из реквизита в свойство Подсказка элемента формы. Это гарантирует пользователю доступ к полной информации без необходимости «выцеливать» курсором границу поля ввода.