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