Почему окно ПоказатьВыборЭлемента открывается в свернутом виде и как это исправить

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

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

Анализ технической проблемы

Проанализируем суть происходящего. Данная ошибка не связана с кодом конкретной конфигурации, будь то «Управление нашей фирмой», «Бухгалтерия предприятия» или самописное решение. Это классический баг платформы, возникший вследствие масштабной переработки графического движка и механизмов управления геометрией окон в интерфейсе «Такси».

Проблема была официально зарегистрирована в реестре ошибок 1С под номером 000056521. Ее проявление характерно для методов ПоказатьВыборЭлемента и ВыбратьИзСписка. Выясним причину: при вызове этих методов платформа должна рассчитать координаты и размер всплывающего окна на основе содержимого списка и настроек пользователя. Однако в определенных сборках 8.3.15 алгоритм считывания параметров из хранилища SystemSettingsStorage работал некорректно, что приводило к установке минимально возможных значений (0 или 1 пиксель).

Разбор затронутых механизмов

Посмотрим на пример кода, который чаще всего вызывает подобную проблему. Обычно это асинхронный вызов выбора из списка в управляемом приложении:


&НаКлиенте
Процедура КомандаВыбора(Команда)
    Список = Новый СписокЗначений;
    Список.Добавить("Значение1", "Первый вариант");
    Список.Добавить("Значение2", "Второй вариант");
    
    ОписаниеОповещения = Новый ОписаниеОповещения("ПослеВыбора", ЭтотОбъект);
    ПоказатьВыборЭлемента(ОписаниеОповещения, Список);
КонецПроцедуры

&НаКлиенте
Процедура ПослеВыбора(ВыбранныйЭлемент, ДополнительныеПараметры) Экспорт
    Если ВыбранныйЭлемент <> Неопределено Тогда
        // Обработка выбора
    КонецЕсли;
КонецПроцедуры

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

Влияние внешних факторов: DPI и масштаб

Выясним, почему у одних пользователей баг проявляется отчетливо, а у других — нет. Исследования показывают прямую зависимость от настроек монитора. Ошибка наиболее агрессивно ведет себя в следующих случаях:

  1. Использование мониторов с высоким разрешением (High-DPI).
  2. Установка системного масштабирования Windows на уровне 125%, 150% и выше.
  3. Работа в многомониторных конфигурациях, где окна могут «запоминать» координаты за пределами текущей видимой области.

Решение проблемы через обновление платформы

Самым эффективным и правильным способом решения является обновление технологической платформы. Разберем, на какие релизы стоит ориентироваться:

Важное замечание: При выборе платформы для рабочих баз рекомендуется придерживаться требований используемой конфигурации. Если ваша БСП (Библиотека стандартных подсистем) требует версию не ниже 8.3.14, переход на последние сервисные релизы 8.3.15 будет оправданным шагом для устранения визуальных багов.

Временные меры и обходные пути

Если немедленное обновление платформы невозможно (например, из-за регламентов организации), проанализируем доступные временные меры.

1. Очистка кэша пользователя

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

  1. %AppData%\1C\1cv8
  2. %LocalAppData%\1C\1cv8

После удаления этих данных платформа принудительно пересчитает геометрию всех окон при первом запуске.

2. Использование альтернативных методов вызова

В некоторых случаях замена метода выбора на открытие полноценной формы выбора (через ОткрытьФорму) позволяет избежать использования проблемного системного окна. Рассмотрим пример:


ПараметрыВыбора = Новый Структура("ЗакрыватьПриВыборе, МножественныйВыбор", Истина, Ложь);
ОткрытьФорму("Справочник.Номенклатура.ФормаВыбора", ПараметрыВыбора, Элемент);

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

Заключение

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

  1. Проверить текущую версию платформы через меню «Справка — О программе».
  2. Если установлена версия 8.3.15 младше 8.3.15.1656, запланировать обновление.
  3. В случае невозможности обновления использовать очистку кэша как паллиативное решение.

Помните, что использование самых свежих релизов сразу после их выхода (так называемый «бета-тест» на живых базах) часто несет риски столкнуться именно с такими интерфейсными ошибками. Оптимальной стратегией остается использование стабильных релизов, рекомендованных производителем для текущей версии вашей конфигурации.

← На главную