Переход на новые версии платформы 1С:Предприятие часто приносит не только новые возможности, но и неожиданные визуальные дефекты. Одной из самых обсуждаемых проблем при переходе на ветку 8.3.17 стало некорректное отображение выпадающих списков в ПолеВвода на обычных формах. Пользователи столкнулись с тем, что даже если в списке всего один элемент, система принудительно добавляет пустую строку в конце и отображает вертикальную полосу прокрутки.
В этой статье мы подробно разберем, почему возникает этот эффект, проанализируем технические причины и рассмотрим все доступные способы решения — от системных обновлений до временных «костылей».
Давайте выясним причину такого поведения интерфейса. Данная проблема официально признана ошибкой платформы и зарегистрирована под номером 10222416 (в некоторых источниках 000068205). Она специфична для «Толстого клиента» и обычного интерфейса, работающего в режимах совместимости Версия 8.2 или Версия 8.2.16.
Суть дефекта заключается в некорректном расчете высоты выпадающего окна (ComboBox) движком отрисовки. Платформа резервирует лишние пиксели под горизонтальный скролл или дополнительные отступы, которые не требуются. В результате системное окно Windows, в котором отрисовывается список, считает, что контент не помещается, и активирует вертикальную полосу прокрутки.
Ситуация осложняется на мониторах с высоким разрешением (High DPI). Если в настройках Windows установлено масштабирование интерфейса (например, 125% или 150%), ошибка проявляется практически в 100% случаев из-за математических погрешностей при округлении высоты элементов.
Проанализируем самый надежный способ исправления. Поскольку проблема носит платформенный характер, исправить её на уровне кода конфигурации для всех форм сразу крайне трудозатратно. Разработчики 1С выпустили исправления в следующих релизах:
8.3.18.1128 и выше проблема полностью устранена.8.3.17.1851 или более поздних патчей этой ветки.После обновления платформы никакие дополнительные действия с конфигурацией не требуются — списки выбора начнут отображаться корректно автоматически.
Если по каким-то причинам оперативное обновление платформы невозможно, рассмотрим вариант программного вмешательства. Мы можем принудительно указать количество строк, которые должны отображаться в выпадающем списке. Для этого используется свойство ВыпадающийСписокКоличествоСтрок.
Посмотрим на пример кода, который можно добавить в процедуру ПриОткрытии формы для конкретного проблемного поля:
Процедура ПриОткрытии()
// Устанавливаем количество строк явно, чтобы подавить авторасчет
ЭлементыФормы.ПолеВводаТипЦен.ВыпадающийСписокКоличествоСтрок = 5;
КонецПроцедуры
Важный нюанс: Этот метод требует изменения каждой формы, где наблюдается проблема, что в больших конфигурациях (например, УТ 10.3 или БП 2.0) может быть нецелесообразно.
Рассмотрим ситуацию, упомянутую автором темы: изменение стиля помогает только новым элементам. Это происходит из-за того, что старые элементы управления могут иметь жестко заданные свойства шрифта, которые перекрывают общие стили конфигурации.
Попробуйте выполнить следующие действия:
MS Shell Dlg, попробуйте изменить его на Arial или Segoe UI размера 8 или 9.%AppData%\1C\1Cv8\Иногда изменение шрифта на более «узкий» позволяет платформе корректно вписать текст в отведенную область без активации скролла.
Разберем еще один системный метод, который часто выручает администраторов старых систем. Вы можете запустить 1С с параметром командной строки, который отключает современные стили оформления элементов управления 1С, возвращая их к стандартному виду Windows.
В настройках запуска информационной базы в поле "Дополнительные параметры запуска" добавьте:
/NoPlatformStyle
Это изменит визуальный вид кнопок и полей ввода на более «классический» (в стиле Windows 2000/XP), но в большинстве случаев это полностью убирает ошибки рендеринга ComboBox, так как за отрисовку начинает отвечать исключительно операционная система без вмешательства графического движка платформы 8.3.17.
Подводя итог, мы видим, что проблема с полосой прокрутки — это чистый баг платформы 8.3.17.1496. Если вы столкнулись с этой ситуацией, наиболее эффективным алгоритмом действий будет:
8.3.17.1851 или 8.3.18.x. Это снимет проблему раз и навсегда./NoPlatformStyle как временная мера.Помните, что режим совместимости 8.2.16 в сочетании с новыми релизами 8.3 — это всегда зона риска для обычного интерфейса, поэтому такие визуальные артефакты стоит ожидать и в будущем при миграции на новые ветки платформы.