Как исправить некорректное отображение выпадающих списков и меню в 1С 8.3.15

Программист 1С v8.3 (Управляемые формы) 1С:Управление нашей фирмой IT и автоматизация бизнеса
← На главную

При переходе на новые версии платформы 1С:Предприятие пользователи и разработчики часто сталкиваются с неожиданными изменениями в поведении интерфейса. Одной из наиболее заметных и неприятных проблем в ветке 8.3.15 стал так называемый «глюк интерфейса», когда при нажатии на кнопки выбора или создания (например, в списках документов контрагента) выпадающее меню отображается некорректно: оно может растягиваться на весь экран, иметь микроскопический размер или возникать со значительным смещением относительно курсора.

В этой статье мы подробно разберем причины возникновения этой ситуации, проанализируем технические нюансы работы графического движка платформы и рассмотрим пошаговые инструкции по исправлению данной ошибки.

Выясняем причину возникновения графических искажений

Прежде всего, проанализируем ситуацию: почему проблема начала проявляться именно начиная с версии 8.3.15? В этой версии разработчики «1С» представили масштабное обновление графического движка и механизмов отрисовки интерфейса «Такси». Целью было улучшение производительности и поддержка современных стандартов отображения, однако на ранних сборках это привело к конфликтам с алгоритмами расчета координат динамических элементов.

Проблема затрагивает преимущественно элементы, которые формируются программно. Рассмотрим, как это работает «под капотом». В конфигурациях, таких как 1С:Управление нашей фирмой (УНФ), многие кнопки (например, кнопка «Создать») не являются жестко заданными командами на форме. Вместо этого используется динамическое построение меню. Когда пользователь нажимает кнопку, система вызывает метод ПоказатьВыборИзМеню или ПоказатьВыборЭлемента.

Именно в момент вызова этих методов платформа должна рассчитать координаты «контейнера», в котором будет отображен список. В первых релизах 8.3.15 (вплоть до версии 8.3.15.1656) этот расчет происходил с ошибкой, что приводило к визуальному хаосу.

Влияние масштабирования Windows (High DPI)

Дополнительным фактором, усугубляющим проблему, является использование мониторов с высоким разрешением (4K) и настроек масштабирования Windows (например, 125% или 150%). Разберем механизм этого конфликта:

  1. Система Windows передает приложению коэффициент масштабирования.
  2. Платформа 1С пытается пересчитать внутренние единицы измерения (логические пиксели) в физические пиксели экрана.
  3. Новый движок версии 8.3.15 в некоторых сценариях дважды применял коэффициент масштабирования или, наоборот, игнорировал его для вложенных объектов.

В результате пользователь видел «растянутое» меню, которое невозможно было использовать для выбора документов.

Способ 1: Обновление платформы (Основное решение)

Самым эффективным и правильным решением является обновление технологической платформы. Разработчики «1С» признали наличие багов (например, ошибка №10214652) и выпустили исправления. Проанализируем хронологию исправлений:

Поэтому, если вы столкнулись с подобным поведением интерфейса, первым делом проверьте номер вашей сборки и выполните обновление до актуального релиза в рамках вашей ветки или выше.

Способ 2: Настройка масштабирования в свойствах ярлыка

Если по каким-то причинам оперативное обновление платформы невозможно (например, из-за жестких требований инфраструктуры), рассмотрим альтернативный метод — переопределение настроек высокого DPI для исполняемого файла 1С.

Разберем процесс по шагам:

  1. Закройте все запущенные сеансы 1С.
  2. Перейдите в каталог установки платформы (обычно это C:\Program Files\1cv8\номер_версии\bin\).
  3. Найдите файл 1cv8.exe и нажмите на него правой кнопкой мыши.
  4. Выберите пункт «Свойства», затем перейдите на вкладку «Совместимость».
  5. Нажмите кнопку «Изменить параметры высокого DPI».
  6. Установите галочку в пункте «Переопределите режим масштабирования высокого разрешения».
  7. В выпадающем списке выберите значение «Приложение».

Этот метод заставляет Windows отдавать управление масштабированием самой платформе, что часто устраняет искажения динамических окон, хотя сам текст интерфейса может стать немного мельче.

Способ 3: Изменение настроек компактности интерфейса

Иногда глюк отрисовки связан с некорректным расчетом отступов в конкретном режиме интерфейса. Попробуем изменить режим отображения:

  1. Зайдите в главное меню 1С (три полоски или кнопка «Сервис»).
  2. Выберите пункт «Настройки» — «Параметры».
  3. В поле «Внешний вид» переключите значение (например, с «Компактный» на «Обычный» или наоборот).
  4. Перезапустите программу.

Это заставляет платформу перестроить дерево визуальных элементов и может временно «вылечить» проблему некорректных размеров всплывающих окон.

Техническая деталь для разработчиков: Программный вызов меню

Если вы являетесь разработчиком и хотите понять, почему ваша форма ведет себя подобным образом, проанализируйте код вызова меню. Проблема обычно возникает в конструкциях следующего вида:


СписокВыбора = Новый СписокЗначений;
СписокВыбора.Добавить("РасходнаяНакладная", "Расходная накладная");
СписокВыбора.Добавить("ЗаказПокупателя", "Заказ покупателя");

Оповещение = Новый ОписаниеОповещения("ПослеВыбораМеню", ЭтотОбъект);

// Именно здесь в ранних 8.3.15 происходил сбой отрисовки
ПоказатьВыборИзМеню(Оповещение, СписокВыбора, Элементы.КнопкаСоздать);

В данном примере параметр Элементы.КнопкаСоздать указывает платформе, «откуда» должно выпадать меню. Ошибка движка приводила к тому, что координаты этой кнопки определялись неверно относительно границ экрана. Если вы не можете обновить платформу, попробуйте изменить способ вызова, используя ПоказатьВыборЭлемента для другого связанного объекта, либо временно заменить динамическое меню на фиксированные кнопки на командной панели.

Дополнительные рекомендации

Проанализируем еще несколько моментов, которые могут помочь в стабилизации работы системы:

Подводя итог, можно сказать, что ситуация с «глюком» в интерфейсе 8.3.15 — это классический пример «болезни роста» новой технологии. Единственным системным решением остается переход на исправленную версию платформы (минимум 8.3.15.1656), так как это устраняет саму причину ошибки в программном коде движка 1С.

← На главную