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