Почему в форме списка 1С не активен пункт «Отбор по текущему значению» и как это исправить?

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

При работе со списками документов, справочников или журналов в режиме обычного приложения разработчики и пользователи нередко сталкиваются с ситуацией, когда стандартная команда «Отбор по текущему значению» (доступная по кнопке на панели или через контекстное меню ячейки) оказывается заблокированной или неактивной для конкретного пользователя, хотя под учетной записью с полными правами функционал работает штатно. Выясним причину такого поведения платформы и рассмотрим способы решения проблемы.

Основная причина: программное отключение доступности в свойстве «НастройкаОтбора»

В обычном приложении платформа «1С:Предприятие» для табличных полей, отображающих списки данных (например, ДокументСписок или ЖурналДокументовСписок), предоставляет доступ к объекту НастройкаОтбора. Этот объект управляет тем, какие именно поля доступны пользователю для интерактивного наложения условий в диалоге отбора, а также для быстрых отборов из контекстного меню.

Если в конфигурации для разграничения видимости данных или интерфейсных настроек пользователю программно отключается доступность конкретного поля в отборе формы, то платформенное действие «Отбор по текущему значению» для соответствующей колонки также становится серым и недоступным.

Проанализируем пример кода, который часто размещается в процедурах при открытии формы или вызывается из общих модулей при инициализации интерфейса пользователя:


// Скрываем возможность отбора по менеджеру/исполнителю
Форма.ЭлементыФормы.табЖурнал.НастройкаОтбора.Менеджер.Доступность = Ложь;

В приведенном фрагменте свойству Доступность элемента настройки отбора присваивается значение Ложь. Как только эта строка отрабатывает, пользователь теряет возможность интерактивно накладывать фильтрацию по данной колонке, включая пункт «Отбор по текущему значению».

Для исправления ситуации разберем по шагам, как вернуть доступность реквизита в интерфейсе:

  1. Найдем в конфигураторе вызовы общих процедур настройки форм (часто это процедуры вроде НастроитьВидимостьКолонок() или УстановитьНастройкиПользователя(), вызываемые в событии ПриОткрытии формы списка).
  2. Проверим условия, по которым конкретному пользователю или роли отключается поле отбора.
  3. Включим доступность поля для тех категорий пользователей, которым требуется быстрая фильтрация:

// Разрешаем использование отбора по нужному реквизиту
ЭлементыФормы.Список.НастройкаОтбора.Исполнитель.Доступность = Истина;

Другие причины блокировки отбора по текущему значению

Если свойство Доступность в НастройкаОтбора не изменялось или включено, рассмотрим дополнительные факторы, которые могут блокировать работу контекстного отбора в платформе 1С:

  1. Колонка не связана с данными списка напрямую. Отбор по текущему значению активен только для колонок табличного поля, у которых свойство Данные указывает на реальный реквизит списка. Если ячейка заполняется программно в обработчиках ПриВыводеСтроки или ПриПолученииДанных (например, вычисляемый остаток или строковое представление), платформенный фильтр работать не будет.
  2. Ограничения прав на уровне реквизита (RLS и роли). Если у назначенной пользователю роли отсутствует право Просмотр на конкретный реквизит или объект метаданных, платформа автоматически блокирует любые механизмы фильтрации по данному полю.
  3. Конфликт с уже установленным отбором. Если по реквизиту уже активен сложный отбор (например, с видом сравнения ВидСравнения.ВСписке или ВидСравнения.Интервал), платформа не позволяет наложить простое равенство через клик по ячейке до тех пор, пока текущее условие не будет очищено.
  4. Особенности журналов документов. В объектах типа ЖурналДокументовСписок отбор возможен только по колонкам, которые являются графами журнала с включенным свойством Индексировать. Если колонка документа не входит в состав графы журнала, контекстный отбор по ней недоступен.
  5. Кэширование пользовательских настроек формы. Иногда причиной становятся некорректно сохранившиеся пользовательские настройки. В этом случае помогает сброс настроек через меню «Все действия» (или «Действия») — «Установить стандартные настройки».

Альтернативное решение: программная установка отбора по значению

Если стандартный механизм платформы переопределен или заблокирован интерфейсными ограничениями, отбор можно установить принудительно через обработчик нажатия собственной кнопки или горячей клавиши. Посмотрим на пример программной установки фильтра по текущей строке:


ТекущиеДанныеСписка = ЭлементыФормы.табЖурнал.ТекущиеДанные;
Если ТекущиеДанныеСписка <> Неопределено Тогда
    ЭлементОтбора = ДокументСписок.Отбор.Найти("Исполнитель");
    Если ЭлементОтбора <> Неопределено Тогда
        ЭлементОтбора.Значение = ТекущиеДанныеСписка.Исполнитель;
        ЭлементОтбора.ВидСравнения = ВидСравнения.Равно;
        ЭлементОтбора.Использование = Истина;
    КонецЕсли;
КонецЕсли;

Такой подход позволяет обойти блокировки интерфейса и наложить необходимое условие на выборку данных программно.

← На главную