В процессе разработки и поддержки управляемых форм на платформе «1С:Предприятие 8.3» программисты часто сталкиваются с ситуацией, когда стандартные механизмы командной панели начинают вести себя непредсказуемо. Одной из таких неприятных проблем является «залипание» или полная неработоспособность кнопки сброса отбора (команда «Отменить поиск» или «Снять отбор») в динамическом списке. Рассмотрим подробнее сценарий, в котором это происходит: пользователь устанавливает фильтр, по которому в базе данных не находится ни одной записи, список становится пустым, и после этого стандартная кнопка очистки перестает реагировать на нажатия. Проанализируем причины этого поведения и разберем по шагам способы решения данной проблемы.
Данная проблема не является ошибкой программного кода конкретной конфигурации, а представляет собой известный баг платформы «1С:Предприятие 8.3». Эта ошибка наиболее часто встречается в версиях, начиная с 8.3.16 и заканчивая сборками ветки 8.3.20. Проанализируем технические нюансы возникновения этой ситуации:
ДинамическийСписок.Если обновление платформы до версии 8.3.21 и выше невозможно, самым надежным способом будет создание собственной кнопки для сброса фильтров. Разберем, как реализовать этот механизм правильно. Вместо использования стандартной кнопки «Отменить поиск», мы добавим свою команду на панель и пропишем в ней принудительную очистку всех настроек компоновщика.
Посмотрим на пример кода, который необходимо разместить в модуле управляемой формы:
&НаКлиенте
Процедура КомандаСброситьОтбор(Команда)
СброситьНастройкиДинамическогоСпискаНаСервере();
Элементы.Список.Обновить();
КонецПроцедуры
&НаСервере
Процедура СброситьНастройкиДинамическогоСпискаНаСервере()
// Очищаем пользовательские настройки (фильтры, установленные через "Найти")
Список.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Очистить();
// Очищаем фиксированные отборы, если это необходимо
// Список.КомпоновщикНастроек.Настройки.Отбор.Элементы.Очистить();
// Сбрасываем стандартный поиск платформы
Список.КомпоновщикНастроек.ЗагрузитьНастройки(Список.КомпоновщикНастроек.ПолучитьНастройки());
КонецПроцедуры
В данном коде мы используем метод Обновить() для элемента формы, что заставляет платформу принудительно перечитать данные с сервера, игнорируя «зависшее» визуальное состояние. Важно помнить, что очистка ПользовательскиеНастройки затрагивает именно те фильтры, которые пользователь вводит интерактивно.
Интересной особенностью данного бага является то, что визуальный компонент (кнопка) может не работать, в то время как системное прерывание поиска продолжает функционировать. Попробуем предложить пользователям использовать комбинацию клавиш Ctrl + Q. Во многих случаях это сочетание клавиш вызывает системную процедуру отмены поиска в обход графического интерфейса командной панели, что позволяет вернуть список в исходное состояние без переоткрытия формы.
Иногда проблему удается решить путем изменения настроек самого элемента формы. Рассмотрим несколько параметров, которые влияют на стабильность работы кнопок:
Автообновление (с интервалом, например, 60 секунд) может «подталкивать» форму к обновлению своего состояния, однако этот метод не является идеальным, так как увеличивает нагрузку на сервер.Подводя итоги, мы выяснили, что основной причиной некорректной работы кнопки сброса является программная ошибка в определенных релизах платформы 1С. Для исправления ситуации мы рекомендуем:
КомпоновщикНастроек через отдельную кнопку на форме.Используя эти методы, вы обеспечите стабильную работу интерфейса для пользователей и избавите их от необходимости постоянно перезапускать форму списка при ошибочном поиске.