При работе с задачами в системе 1С:Предприятие мы часто сталкиваемся с необходимостью эффективно управлять их адресацией и фильтрацией. Нередко возникает ситуация, когда стандартные механизмы отбора задач по исполнителю ведут себя неочевидным образом, особенно когда требуется временно отключить такой фильтр. Давайте вместе разберем эту проблему и выясним, как ее решить.
Мы проанализируем, как устроена система адресации задач в 1С, какую роль играют параметры сеанса и виртуальные таблицы, а также рассмотрим практические способы управления фильтрами с помощью Системы Компоновки Данных (СКД) и программных механизмов.
Прежде чем углубляться в детали фильтрации, давайте рассмотрим, как задачи адресуются исполнителям в 1С. Задачи — это не просто документы, а мощный инструмент для организации рабочих процессов и планирования действий пользователей. Ключевым понятием здесь является система адресации, которая определяет, кому именно предназначена та или иная задача.
В 1С различают два основных вида адресации:
Для хранения и управления этими правилами адресации обычно используется регистр сведений "Адресация" (или аналогичный регистр, зависящий от конфигурации), который содержит актуальную информацию о соответствии исполнителей структурным подразделениям, ролям и другим реквизитам адресации.
Определение конкретного исполнителя задачи осуществляется с помощью нескольких важных свойств объекта метаданных "Задача":
Адресация: Это свойство обычно содержит ссылку на регистр сведений, который хранит правила адресации.Основной реквизит адресации: Один из реквизитов адресации задачи, который однозначно указывает на конкретного сотрудника-исполнителя.Текущий исполнитель: Это свойство играет особую роль. Если оно не указано явно при создании задачи, его значение берется из параметра сеанса, установленного в свойстве "Текущий исполнитель" объекта метаданных задачи. Процесс определения основного реквизита адресации из остальных реквизитов адресации называется разыменованием.Одним из важнейших элементов в механизме фильтрации задач является параметр сеанса "Текущий исполнитель" (или, как его часто называют, "ТекущийПользователь"). Давайте разберем его значение.
Параметры сеанса в 1С предназначены для хранения значений в течение текущего сеанса работы пользователя. Они часто используются для ограничения доступа к данным или для отбора данных в запросах, действующих для данного пользователя. При входе пользователя в систему в параметр сеанса "Текущий исполнитель" автоматически записывается текущий пользователь. Это значение становится ключевым для многих механизмов платформы, в том числе для отбора задач.
Для удобства работы с задачами в 1С существует специальная виртуальная таблица "ЗадачиПоИсполнителю". Она является частью объекта метаданных "Задача" и предназначена для возврата списка задач, адресованных конкретному пользователю. Мы должны понимать, что эта виртуальная таблица автоматически использует значение параметра сеанса, указанного в свойстве "Текущий исполнитель" объекта метаданных "Задача", для формирования своей выборки.
Это означает, что когда мы обращаемся к таблице "ЗадачиПоИсполнителю", система уже "знает", кто является текущим пользователем, и автоматически фильтрует задачи, показывая только те, которые предназначены ему. Это очень удобно для стандартных списков задач пользователя, но может вызывать вопросы, когда нам нужно временно отключить этот отбор.
Теперь давайте выясним причину, по которой отключение отбора по исполнителю может показаться неочевидным, как это было замечено в исходной теме форума. Суть проблемы кроется в работе виртуальной таблицы "ЗадачиПоИсполнителю".
Как мы уже выяснили, эта таблица по умолчанию использует параметр сеанса "Текущий исполнитель". Если мы попытаемся передать в нее условие отбора по исполнителю, или, наоборот, отключить его, мы столкнемся с тем, что выборка уже сформирована с учетом текущего пользователя. Справка 1С по параметру Исполнитель для виртуальной таблицы "ЗадачиПоИсполнителю" часто указывает: "Если не указан, то выбирается из параметра сеанса, установленного в свойстве 'Текущий исполнитель' объекта метаданных задачи." Это подтверждает, что параметр сеанса является приоритетным, если явный исполнитель не задан.
Таким образом, прямое "отключение" отбора по исполнителю для этой виртуальной таблицы может быть затруднено, поскольку она изначально предназначена для фильтрации по текущему пользователю.
Если нам требуется предоставить пользователю возможность видеть как полный список задач без отбора по исполнителю, так и список задач только текущего пользователя, обычно применяют следующие подходы:
"ЗадачиПоИсполнителю". В этом случае мы будем строить запрос к основной таблице задач и самостоятельно управлять всеми отборами. Для списка задач текущего пользователя, напротив, мы можем использовать форму, основанную на "ЗадачиПоИсполнителю".Система Компоновки Данных (СКД) предоставляет мощные инструменты для создания отчетов и динамических списков, позволяя гибко управлять параметрами и отборами. Именно здесь мы можем найти решение для управления фильтром по исполнителю.
Давайте разберем по шагам, как это работает:
{ГДЕ Исполнитель = &Исполнитель}. Знак амперсанда & указывает на то, что Исполнитель является параметром компоновки данных.Теперь давайте посмотрим на конкретный пример кода, который демонстрирует, как программно отключить использование параметра "Исполнитель" в СКД, основываясь на сообщении форума.
Предположим, у нас есть динамический список (Список) на форме, который использует СКД, и в его запросе есть параметр &Исполнитель. Если мы хотим временно отключить отбор по этому параметру, мы можем использовать следующий код:
// Получаем доступ к компоновщику настроек динамического списка
КомпоновщикНастроек = Список.КомпоновщикНастроек;
// Находим параметр "Исполнитель" в текущих настройках данных
// Для этого создаем временный объект ПараметрКомпоновкиДанных с именем "Исполнитель"
ПараметрИсполнитель = КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Исполнитель"));
// Если параметр найден, устанавливаем его использование в Ложь
Если ПараметрИсполнитель <> Неопределено Тогда
ПараметрИсполнитель.Использование = Ложь;
КонецЕсли;
Разберем этот код подробнее:
Список.КомпоновщикНастроек: Мы получаем доступ к объекту КомпоновщикНастроек, который управляет настройками СКД для нашего динамического списка.КомпоновщикНастроек.Настройки.ПараметрыДанных: Это коллекция всех параметров, определенных в настройках СКД.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Исполнитель")): Метод НайтиЗначениеПараметра позволяет найти существующий параметр по его имени. Важно передать ему новый объект ПараметрКомпоновкиДанных с тем же именем, что и искомый параметр в СКД.ПараметрИсполнитель.Использование = Ложь;: Если параметр найден, мы устанавливаем его свойство Использование в Ложь. Это указывает СКД, что данный параметр не должен применяться при формировании запроса, тем самым отключая соответствующий отбор.Таким образом, мы можем программно управлять логикой фильтрации, предоставляя пользователю возможность видеть как свои задачи, так и задачи других сотрудников, при необходимости.
В некоторых продвинутых конфигурациях 1С, например, в 1С:CRM, существует механизм динамической адресации задач. Это более сложный способ определения исполнителей, который позволяет программно определять их в момент создания задачи по заданному алгоритму.
Для реализации динамической адресации может использоваться предопределенная роль исполнителей "Динамическая адресация". Список конкретных исполнителей в этом случае может задаваться в дополнительном свойстве задачи, например, ИсполнителиДинамическойАдресации. Алгоритм формирования списка исполнителей пишется на встроенном языке 1С в обработчике "При создании задач", который настраивается в параметрах точки карты маршрута бизнес-процесса. Этот механизм позволяет создавать очень гибкие и адаптивные процессы назначения задач, но выходит за рамки простой фильтрации по текущему исполнителю.
Мы надеемся, что это подробное объяснение поможет вам лучше понять механизмы адресации и фильтрации задач в 1С и эффективно управлять ими в своих конфигурациях.
← К списку