Почему фильтр по исполнителю в задачах 1С работает не так, как ожидается, и как им управлять?

Программист 1С v8.3 (Управляемые формы)
← К списку

При работе с задачами в системе 1С:Предприятие мы часто сталкиваемся с необходимостью эффективно управлять их адресацией и фильтрацией. Нередко возникает ситуация, когда стандартные механизмы отбора задач по исполнителю ведут себя неочевидным образом, особенно когда требуется временно отключить такой фильтр. Давайте вместе разберем эту проблему и выясним, как ее решить.

Мы проанализируем, как устроена система адресации задач в 1С, какую роль играют параметры сеанса и виртуальные таблицы, а также рассмотрим практические способы управления фильтрами с помощью Системы Компоновки Данных (СКД) и программных механизмов.

Основные принципы адресации задач в 1С

Прежде чем углубляться в детали фильтрации, давайте рассмотрим, как задачи адресуются исполнителям в 1С. Задачи — это не просто документы, а мощный инструмент для организации рабочих процессов и планирования действий пользователей. Ключевым понятием здесь является система адресации, которая определяет, кому именно предназначена та или иная задача.

В 1С различают два основных вида адресации:

  1. Жесткая адресация: В этом случае исполнитель задачи назначается конкретно при ее создании. Мы явно указываем, кто должен выполнить задачу.
  2. Произвольная (ролевая) адресация: Задача назначается не конкретному сотруднику, а, например, отделу, должности или определенной роли. Система затем самостоятельно определяет конечных исполнителей на основе предопределенных правил.

Для хранения и управления этими правилами адресации обычно используется регистр сведений "Адресация" (или аналогичный регистр, зависящий от конфигурации), который содержит актуальную информацию о соответствии исполнителей структурным подразделениям, ролям и другим реквизитам адресации.

Определение конкретного исполнителя задачи осуществляется с помощью нескольких важных свойств объекта метаданных "Задача":

Роль параметра сеанса "Текущий исполнитель"

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

Параметры сеанса в 1С предназначены для хранения значений в течение текущего сеанса работы пользователя. Они часто используются для ограничения доступа к данным или для отбора данных в запросах, действующих для данного пользователя. При входе пользователя в систему в параметр сеанса "Текущий исполнитель" автоматически записывается текущий пользователь. Это значение становится ключевым для многих механизмов платформы, в том числе для отбора задач.

Виртуальная таблица "ЗадачиПоИсполнителю"

Для удобства работы с задачами в 1С существует специальная виртуальная таблица "ЗадачиПоИсполнителю". Она является частью объекта метаданных "Задача" и предназначена для возврата списка задач, адресованных конкретному пользователю. Мы должны понимать, что эта виртуальная таблица автоматически использует значение параметра сеанса, указанного в свойстве "Текущий исполнитель" объекта метаданных "Задача", для формирования своей выборки.

Это означает, что когда мы обращаемся к таблице "ЗадачиПоИсполнителю", система уже "знает", кто является текущим пользователем, и автоматически фильтрует задачи, показывая только те, которые предназначены ему. Это очень удобно для стандартных списков задач пользователя, но может вызывать вопросы, когда нам нужно временно отключить этот отбор.

Особенности фильтрации и отключения отбора по исполнителю

Теперь давайте выясним причину, по которой отключение отбора по исполнителю может показаться неочевидным, как это было замечено в исходной теме форума. Суть проблемы кроется в работе виртуальной таблицы "ЗадачиПоИсполнителю".

Как мы уже выяснили, эта таблица по умолчанию использует параметр сеанса "Текущий исполнитель". Если мы попытаемся передать в нее условие отбора по исполнителю, или, наоборот, отключить его, мы столкнемся с тем, что выборка уже сформирована с учетом текущего пользователя. Справка 1С по параметру Исполнитель для виртуальной таблицы "ЗадачиПоИсполнителю" часто указывает: "Если не указан, то выбирается из параметра сеанса, установленного в свойстве 'Текущий исполнитель' объекта метаданных задачи." Это подтверждает, что параметр сеанса является приоритетным, если явный исполнитель не задан.

Таким образом, прямое "отключение" отбора по исполнителю для этой виртуальной таблицы может быть затруднено, поскольку она изначально предназначена для фильтрации по текущему пользователю.

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

  1. Создание двух разных форм списка задач: Для полного списка задач мы можем использовать обычную таблицу задач, не задействуя виртуальную таблицу "ЗадачиПоИсполнителю". В этом случае мы будем строить запрос к основной таблице задач и самостоятельно управлять всеми отборами. Для списка задач текущего пользователя, напротив, мы можем использовать форму, основанную на "ЗадачиПоИсполнителю".
  2. Гибкое управление отборами через СКД: Это более универсальный подход, который мы рассмотрим подробнее.

Управление отборами в Системе Компоновки Данных (СКД)

Система Компоновки Данных (СКД) предоставляет мощные инструменты для создания отчетов и динамических списков, позволяя гибко управлять параметрами и отборами. Именно здесь мы можем найти решение для управления фильтром по исполнителю.

Давайте разберем по шагам, как это работает:

  1. Условия с параметрами: В запросах СКД мы можем использовать условия с параметрами, заключая их в фигурные скобки. Например, чтобы отфильтровать задачи по конкретному исполнителю, мы можем написать условие следующим образом: {ГДЕ Исполнитель = &Исполнитель}. Знак амперсанда & указывает на то, что Исполнитель является параметром компоновки данных.
  2. Программное управление параметрами: Одним из ключевых преимуществ СКД является возможность программно управлять ее настройками, включая параметры. Мы можем включать или выключать использование параметра, а также устанавливать его значение. Это дает нам полный контроль над фильтрацией.
  3. Пользовательские настройки: Параметры СКД можно включить в пользовательские настройки. Это позволит пользователям самостоятельно выбирать значения параметров или отключать их использование через стандартный интерфейс формы, например, через "Настройка списка" или "Изменить форму". В этом случае параметр будет выводиться в группе настроек, и пользователь сможет быстро им управлять.

Пример программного управления параметром СКД

Теперь давайте посмотрим на конкретный пример кода, который демонстрирует, как программно отключить использование параметра "Исполнитель" в СКД, основываясь на сообщении форума.

Предположим, у нас есть динамический список (Список) на форме, который использует СКД, и в его запросе есть параметр &Исполнитель. Если мы хотим временно отключить отбор по этому параметру, мы можем использовать следующий код:


// Получаем доступ к компоновщику настроек динамического списка
КомпоновщикНастроек = Список.КомпоновщикНастроек;

// Находим параметр "Исполнитель" в текущих настройках данных
// Для этого создаем временный объект ПараметрКомпоновкиДанных с именем "Исполнитель"
ПараметрИсполнитель = КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Исполнитель"));

// Если параметр найден, устанавливаем его использование в Ложь
Если ПараметрИсполнитель <> Неопределено Тогда
    ПараметрИсполнитель.Использование = Ложь;
КонецЕсли;

Разберем этот код подробнее:

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

Динамическая адресация задач (дополнительный аспект)

В некоторых продвинутых конфигурациях 1С, например, в 1С:CRM, существует механизм динамической адресации задач. Это более сложный способ определения исполнителей, который позволяет программно определять их в момент создания задачи по заданному алгоритму.

Для реализации динамической адресации может использоваться предопределенная роль исполнителей "Динамическая адресация". Список конкретных исполнителей в этом случае может задаваться в дополнительном свойстве задачи, например, ИсполнителиДинамическойАдресации. Алгоритм формирования списка исполнителей пишется на встроенном языке 1С в обработчике "При создании задач", который настраивается в параметрах точки карты маршрута бизнес-процесса. Этот механизм позволяет создавать очень гибкие и адаптивные процессы назначения задач, но выходит за рамки простой фильтрации по текущему исполнителю.

Мы надеемся, что это подробное объяснение поможет вам лучше понять механизмы адресации и фильтрации задач в 1С и эффективно управлять ими в своих конфигурациях.

← К списку