Каждый разработчик 1С рано или поздно сталкивается с загадочным поведением интерфейса управляемых форм. Одной из таких неприятных и неочевидных проблем является внезапный отказ кнопок "Еще" и "Управление поиском" в командной панели динамического списка (например, в справочнике Номенклатура или документах). Кнопки визуально доступны, нажимаются, но контекстное меню не раскрывается, оставляя пользователя в недоумении. При этом добавление любой стандартной кнопки (например, "Обновить") на саму панель чудесным образом возвращает интерфейс к жизни.
В этой статье мы подробно разберем, почему возникает эта проблема, проанализируем её технические причины, связанные с багами платформы «1С:Предприятие 8», а также рассмотрим по шагам все возможные способы решения и обходные пути.
Описанное поведение не связано с ошибками в коде вашей конфигурации или неверной настройкой прав доступа. Это официально зарегистрированная ошибка платформы 1С версии 8.3.17.1386 (код ошибки 10222095). Она воспроизводится при следующих условиях:
ОтображениеСтрокиПоиска.ПоложениеВКоманднойПанели у них установлено в значение В дополнительном подменю (они спрятаны под кнопку "Еще").В этой ситуации фокус ввода и обработка кликов мыши на веб-клиенте или тонком клиенте распределяются некорректно. Платформа «залипает» на строке поиска, визуально подсвечивая кнопку "Еще", но физически не инициализируя выпадающее меню при нажатии.
Самый надежный и правильный способ устранения проблемы — обновление платформы «1С:Предприятие 8» до актуального релиза. Ошибка была официально исправлена в версии 8.3.17.1496. Если вы используете более новые ветки платформы (например, 8.3.18, 8.3.20, 8.3.23 и выше), убедитесь, что у вас установлены актуальные релизы этих веток, так как в ранних сборках баг также мог проявляться.
Если быстро обновить платформу на сервере невозможно (например, из-за жесткого регламента обновлений или отсутствия подписки ИТС), перейдем к рассмотрению обходных путей (workarounds).
Давайте попробуем «обмануть» логику платформы, изменив порядок элементов управления в конфигураторе. Нам нужно сделать так, чтобы дополнение строки поиска не было самым первым элементом в коллекции панели.
Рассмотрим этот процесс по шагам:
Номенклатура).СписокКоманднаяПанель).ОтображениеСтрокиПоиска пустую декорацию (например, картинку без изображения или надпись без текста) или обычный разделитель.Автозаполнение у командной панели и настроим состав элементов вручную, разместив строку поиска после любой другой кнопки.После изменения порядка элементов фокус при открытии формы будет распределяться корректно, и кнопка "Еще" восстановит свою работоспособность.
Хорошим решением с точки зрения юзабилити и обхода бага будет полный вынос строки поиска за пределы командной панели таблицы. Рассмотрим, как это сделать:
ОтображениеСтрокиПоиска из командной панели в эту новую группу.Такой подход не только решит проблему с кнопкой "Еще", но и сделает интерфейс более современным, так как строка поиска получит больше свободного пространства на экране.
Если форма является типовой, а вносить изменения напрямую в конфигурацию поставщика не хочется (чтобы не усложнять последующие обновления), мы можем скорректировать командную панель программно при создании формы на сервере. Для этого используем расширение конфигурации.
Проанализируем пример кода, который добавляет фиктивный элемент на панель для смещения фокуса:
&НаСервере
Процедура Инт_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
// Проверим наличие командной панели на форме
КоманднаяПанель = Элементы.Найти("СписокКоманднаяПанель");
Если КоманднаяПанель <> Неопределено Тогда
// Создаем декорацию-разделитель, чтобы строка поиска не была первой
ИмяДекорации = "ВспомогательныйРазделитель";
Если Элементы.Найти(ИмяДекорации) = Неопределено Тогда
НовыйЭлемент = Элементы.Вставить(ИмяДекорации, Тип("ДекорацияФормы"), КоманднаяПанель, КоманднаяПанель.ПодчиненныеЭлементы[0]);
НовыйЭлемент.Вид = ВидДекорацииФормы.Рамка;
НовыйЭлемент.Ширина = 1;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Этот код вставляется в модуль управляемой формы через механизм расширений (с аннотацией &НаСервере и вызовом &После оригинального метода ПриСозданииНаСервере). Он динамически создает невидимый или минимальный по размеру элемент в самом начале панели, предотвращая проявление бага.
Часто разработчики сталкиваются с ситуацией: на локальной машине копия базы работает идеально, а у клиентов на терминальном сервере кнопка "Еще" не нажимается. Рассмотрим причины такого расхождения:
%userprofile%\AppData\Local\1C\1cv8
%userprofile%\AppData\Roaming\1C\1cv8
Применяя описанные методики исправления и обхода ошибок платформы, вы сможете быстро вернуть работоспособность интерфейса управляемых форм и обеспечить комфортную работу пользователей.