Приветствуем вас, уважаемые коллеги! Сегодня мы детально разберем крайне интересную и распространенную проблему, с которой часто сталкиваются разработчики при переводе старых конфигураций 1С (например, сильно доработанной «Управление торговлей 10.3») на платформу 8.3 или при интеграции управляемых форм в классические интерфейсы.
Представим типичную ситуацию: вы добавили в свойства справочника новые управляемые формы (элемента, списка, выбора) и хотите использовать их в новой обработке или отчете. Однако при попытке выбрать значение в поле ввода вместо привычного диалогового окна выбора открывается выпадающий список со всеми элементами справочника. При этом в самом низу списка присутствует гиперссылка «Показать все», но клик по ней абсолютно ни к чему не приводит — форма выбора просто отказывается открываться. Давайте вместе выясним причину этого поведения платформы «1С:Предприятие» и подробно разберем, как это исправить.
Поведение поля ввода при подборе значения в платформе 1С во многом определяется комбинацией свойств самого объекта метаданных. Перейдем в конфигуратор и проанализируем настройки справочника в разделе «Поле ввода». Здесь находятся два ключевых параметра:
Если для справочника (например, «Контрагенты») установлен Способ выбора: Быстрый выбор или включен одноименный флаг, платформа пытается оптимизировать интерфейс. Она считает, что элементов в справочнике немного, и пользователю будет проще выбрать элемент прямо из выпадающего списка без открытия тяжелой формы диалога.
Однако в старых конфигурациях или при использовании режимов совместимости это приводит к визуальному багу: ссылка «Показать все» отрисовывается, но логически блокируется платформой на уровне ядра, из-за чего форма выбора не открывается.
Решение проблемы на глобальном уровне:
Что делать, если в большинстве документов конфигурации быстрый выбор контрагентов действительно удобен и его нельзя отключать глобально для всего справочника? В платформе 1С реализована гибкая иерархия наследования настроек, которую мы можем использовать для точечного решения задачи. Рассмотрим эти уровни подробнее:
Быстрый выбор. По умолчанию там установлено значение Авто (наследовать из справочника). Мы можем принудительно установить его в значение Нет.Быстрый выбор. Переведя его в положение Нет, мы отключим выпадающий список только для этого конкретного поля на данном экране.Таким образом, мы рекомендуем не изменять глобальные свойства справочника без необходимости, а отключать быстрый выбор локально в свойствах элемента управляемой формы.
Иногда разработчики сталкиваются с тем, что быстрый выбор отключен, но кнопка выбора «...» или ссылка «Показать все» по-прежнему не реагируют на нажатия. Проанализируем типичную ошибку в программном коде управляемой формы.
При нажатии на кнопку выбора или ссылку «Показать все» платформа генерирует событие поля ввода НачалоВыбора. Если в модуле формы объявлен этот обработчик, управление передается в него. Посмотрим на некорректный пример кода:
&НаКлиенте
Процедура КонтрагентНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
// Разработчик хотел выполнить свою логику перед выбором
СтандартнаяОбработка = Ложь; // Отключение стандартного открытия формы выбора
// Но здесь отсутствует явный вызов открытия формы!
КонецПроцедуры
Установка параметра СтандартнаяОбработка = Ложь сообщает платформе, что стандартный алгоритм открытия формы выбора выполнять не нужно. Если после этого в коде не вызывается метод открытия формы, то при нажатии на «Показать все» визуально ничего не произойдет.
Чтобы исправить это, нам необходимо либо вернуть СтандартнаяОбработка = Истина (если мы просто хотели собрать параметры), либо программно вызвать открытие нужной формы:
&НаКлиенте
Процедура КонтрагентНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь; // Блокируем стандартное поведение
ПараметрыОткрытия = Новый Структура;
ПараметрыОткрытия.Вставить("РежимВыбора", Истина);
// Открываем управляемую форму выбора программно
ОткрытьФорму("Справочник.Контрагенты.ФормаВыбора", ПараметрыОткрытия, Элемент);
КонецПроцедуры
При работе в современном интерфейсе «Такси» разработчики часто путают два механизма из-за их визуального сходства. Разберем их принципиальные различия, чтобы не допускать ошибок при проектировании интерфейсов:
Для тонкой настройки поля ввода в управляемой форме интерфейса «Такси» мы можем использовать следующие свойства элемента формы:
ОтображениеКнопкиВыбора — установите значение В поле ввода, чтобы кнопка с троеточием всегда была доступна. При нажатии на нее будет открываться полноценное окно поиска.ИсторияВыбораПриВводе — если вы хотите полностью разгрузить интерфейс и запретить выпадающие списки кэша, переведите это свойство в положение Не использовать.Поскольку исходная конфигурация автора («Управление торговлей 10.3») изначально разрабатывалась под обычные формы и толстый клиент, запуск ее на платформе 8.3 происходит в режиме совместимости (например, «Версия 8.2.16» или ниже).
При работе в режиме совместимости со старыми версиями движок отрисовки управляемых форм может вести себя непредсказуемо, если сталкивается с противоречивыми настройками метаданных. Сочетание включенного флага Быстрый выбор у справочника и попытка вызвать управляемую форму выбора из контекста обычного приложения часто приводит к «зависанию» событий интерфейса. Отключение флага быстрого выбора на уровне метаданных — самый надежный и безопасный способ заставить платформу корректно инициализировать управляемую форму выбора в любых смешанных режимах работы.