При переходе на новые версии платформы 1С:Предприятие пользователи и разработчики часто сталкиваются с неожиданными изменениями в поведении интерфейса. Одной из наиболее заметных и неприятных проблем в ветке 8.3.15 стал так называемый «глюк интерфейса», когда при нажатии на кнопки выбора или создания (например, в списках документов контрагента) выпадающее меню отображается некорректно: оно может растягиваться на весь экран, иметь микроскопический размер или возникать со значительным смещением относительно курсора.
В этой статье мы подробно разберем причины возникновения этой ситуации, проанализируем технические нюансы работы графического движка платформы и рассмотрим пошаговые инструкции по исправлению данной ошибки.
Прежде всего, проанализируем ситуацию: почему проблема начала проявляться именно начиная с версии 8.3.15? В этой версии разработчики «1С» представили масштабное обновление графического движка и механизмов отрисовки интерфейса «Такси». Целью было улучшение производительности и поддержка современных стандартов отображения, однако на ранних сборках это привело к конфликтам с алгоритмами расчета координат динамических элементов.
Проблема затрагивает преимущественно элементы, которые формируются программно. Рассмотрим, как это работает «под капотом». В конфигурациях, таких как 1С:Управление нашей фирмой (УНФ), многие кнопки (например, кнопка «Создать») не являются жестко заданными командами на форме. Вместо этого используется динамическое построение меню. Когда пользователь нажимает кнопку, система вызывает метод ПоказатьВыборИзМеню или ПоказатьВыборЭлемента.
Именно в момент вызова этих методов платформа должна рассчитать координаты «контейнера», в котором будет отображен список. В первых релизах 8.3.15 (вплоть до версии 8.3.15.1656) этот расчет происходил с ошибкой, что приводило к визуальному хаосу.
Дополнительным фактором, усугубляющим проблему, является использование мониторов с высоким разрешением (4K) и настроек масштабирования Windows (например, 125% или 150%). Разберем механизм этого конфликта:
В результате пользователь видел «растянутое» меню, которое невозможно было использовать для выбора документов.
Самым эффективным и правильным решением является обновление технологической платформы. Разработчики «1С» признали наличие багов (например, ошибка №10214652) и выпустили исправления. Проанализируем хронологию исправлений:
Поэтому, если вы столкнулись с подобным поведением интерфейса, первым делом проверьте номер вашей сборки и выполните обновление до актуального релиза в рамках вашей ветки или выше.
Если по каким-то причинам оперативное обновление платформы невозможно (например, из-за жестких требований инфраструктуры), рассмотрим альтернативный метод — переопределение настроек высокого DPI для исполняемого файла 1С.
Разберем процесс по шагам:
C:\Program Files\1cv8\номер_версии\bin\).1cv8.exe и нажмите на него правой кнопкой мыши.Этот метод заставляет Windows отдавать управление масштабированием самой платформе, что часто устраняет искажения динамических окон, хотя сам текст интерфейса может стать немного мельче.
Иногда глюк отрисовки связан с некорректным расчетом отступов в конкретном режиме интерфейса. Попробуем изменить режим отображения:
Это заставляет платформу перестроить дерево визуальных элементов и может временно «вылечить» проблему некорректных размеров всплывающих окон.
Если вы являетесь разработчиком и хотите понять, почему ваша форма ведет себя подобным образом, проанализируйте код вызова меню. Проблема обычно возникает в конструкциях следующего вида:
СписокВыбора = Новый СписокЗначений;
СписокВыбора.Добавить("РасходнаяНакладная", "Расходная накладная");
СписокВыбора.Добавить("ЗаказПокупателя", "Заказ покупателя");
Оповещение = Новый ОписаниеОповещения("ПослеВыбораМеню", ЭтотОбъект);
// Именно здесь в ранних 8.3.15 происходил сбой отрисовки
ПоказатьВыборИзМеню(Оповещение, СписокВыбора, Элементы.КнопкаСоздать);
В данном примере параметр Элементы.КнопкаСоздать указывает платформе, «откуда» должно выпадать меню. Ошибка движка приводила к тому, что координаты этой кнопки определялись неверно относительно границ экрана. Если вы не можете обновить платформу, попробуйте изменить способ вызова, используя ПоказатьВыборЭлемента для другого связанного объекта, либо временно заменить динамическое меню на фиксированные кнопки на командной панели.
Проанализируем еще несколько моментов, которые могут помочь в стабилизации работы системы:
/ClearCache или удалите папки из %AppData%\1C\1cv8\.АвтоМаксимальнаяШирина и АвтоМаксимальнаяВысота. Хотя в интерфейсе «Такси» они работают иначе, чем в старых формах, установка фиксированных значений иногда помогает «зажать» форму в нужные рамки.Подводя итог, можно сказать, что ситуация с «глюком» в интерфейсе 8.3.15 — это классический пример «болезни роста» новой технологии. Единственным системным решением остается переход на исправленную версию платформы (минимум 8.3.15.1656), так как это устраняет саму причину ошибки в программном коде движка 1С.