Подготовка к аттестации 1С:Специалист по платформе 1С 8.3: как реализовать отображение списка невыполненных задач пользователя

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

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

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

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

Рассмотрим подробнее, как выполнить эти требования.

Как отобразить на форме список задач

Создадим форму списка задачи:

Создание формы списка задачи

Рисунок 1 – Создание формы списка задачи

Основной реквизит в созданной форме – динамический список:

Реквизит формы типа ДинамическийСписок

Рисунок 2 – Реквизит формы типа ДинамическийСписок

Обратимся к свойствам динамического списка, в качестве свойства ОсновнаяТаблица укажем ЗадачиИсполнителям.ЗадачиПоИсполнителю:

Настройка основной таблицы динамического списка

Рисунок 3 – Настройка основной таблицы динамического списка

Это виртуальная таблица для объекта метаданных Задача, которая возвращает список задач, назначенных конкретному пользователю.

Для того, чтобы такой динамический список работал, система должна понимать, для какого пользователя следует отображать список задач. Поэтому необходимо для объекта метаданных ЗадачиИсполнителям (ранее созданный объект типа Задача) указать значение свойства Текущий исполнитель на закладке Адресация окна редактирования объекта:

Свойство «Текущий исполнитель» объекта метаданных «Задача»

Рисунок 4 – Свойство «Текущий исполнитель» объекта метаданных «Задача»

В этом свойстве нужно указать параметр сеанса, где хранится текущий исполнитель, для которого нужно получить список задач.

Создадим новый параметр сеанса, назовем его ТекущийПользователь (тип – СправочникСсылка.ФизическиеЛица):

Параметр сеанса «Текущий пользователь»

Рисунок 5 – Параметр сеанса «Текущий пользователь»

На закладке Адресация для объекта метаданных ЗадачиИсполнителям (объект типа Задача) укажем в качестве свойства Текущий исполнитель созданный параметр сеанса:

Указание для Задачи значения свойства «Текущий исполнитель»

Рисунок 6 – Указание для Задачи значения свойства «Текущий исполнитель»

Рассмотрим кратко, как работает виртуальная таблица ЗадачиПоИсполнителю.

Система получает значение параметра сеанса, указанного в свойстве Текущий исполнитель. Все задачи, у которых Основной реквизит адресации (Исполнитель) равен значению параметра сеанса ТекущийПользователь, попадают в результат виртуальной таблицы.

Затем система ищет задачи, у которых не указан основной реквизит адресации (Исполнитель), но значения остальных реквизитов адресации точно совпадают со значениями измерений регистра адресации.

Для лучшего понимания работы виртуальной таблицы рассмотрим отвлеченный конкретный пример. В регистр адресации внесены следующие записи:

Заполнение регистра адресации

Рисунок 7 – Заполнение регистра адресации

Существуют следующие задачи исполнителей:

Перечень задач

Рисунок 8 – Перечень задач

Пусть текущим пользователем является Иванов, тогда в виртуальную таблицу ЗадачиПоИсполнителю попадут следующие задачи:

Задачи пользователя Иванов

Рисунок 9 – Задачи пользователя Иванов

Если текущим пользователем является Петров, в виртуальную таблицу ЗадачиПоИсполнителю попадут следующие задачи:

Задачи пользователя Петров

Рисунок 10 – Задачи пользователя Петров

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

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

Реквизит формы «Список» типа «ДинамическийСписок»

Рисунок 11 – Реквизит формы «Список» типа «ДинамическийСписок»

Настройка динамического списка

Рисунок 12 – Настройка динамического списка

В настройках установим отбор по значению поля Выполнена равному Ложь:

Настройка отбора записей динамического списка

Рисунок 13 – Настройка отбора записей динамического списка

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

Рассмотрим два варианта установки значения параметра сеанса ТекущийПользователь для решения поставленной задачи.

Как вручную установить значение параметра сеанса

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

Создадим форму списка справочника ФизическиеЛица. Создадим команду формы: УстановитьТекущегоПользователя:

Создание команды формы списка справочника «Физические лица»

Рисунок 14 – Создание команды формы списка справочника «Физические лица»

Вынесем добавленную команду на форму:

Размещение созданной команды на форме

Рисунок 15 – Размещение созданной команды на форме

В обработчике команды УстановитьТекущегоПользователя выполним установку значения параметра сеанса:

&НаКлиенте Процедура УстановитьТекущегоПользователя(Команда) УстановитьТекущегоПользователяНаСервере(Элементы.Список.ТекущаяСтрока); КонецПроцедуры &НаСервереБезКонтекста Процедура УстановитьТекущегоПользователяНаСервере(Исполнитель) ПараметрыСеанса.ТекущийПользователь = Исполнитель; КонецПроцедуры

В пользовательском режиме назначим Иванова текущим пользователем:

Установка текущего пользователя

Рисунок 16 – Установка текущего пользователя

В форме списка «Задачи исполнителям» будут отображаться задачи для выбранного текущего исполнителя Иванова:

Задачи исполнителя (текущего пользователя)

Рисунок 17 – Задачи исполнителя (текущего пользователя)

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

Ошибка, возникающая при неустановленном значении параметра сеанса

Рисунок 18 – Ошибка, возникающая при неустановленном значении параметра сеанса

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

Чтобы такая ошибка не возникала, можно в модуле сеанса инициализировать параметр сеанса при помощи пустой ссылки на справочник Физические лица:

Процедура УстановкаПараметровСеанса(ТребуемыеПараметры) ПараметрыСеанса.ТекущийПользователь = Справочники.ФизическиеЛица.ПустаяСсылка(); КонецПроцедуры

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

Список задач, для которых исполнитель не определен

Рисунок 19 – Список задач, для которых исполнитель не определен

Таким образом, текущего пользователя можно назначать вручную. При этом в списке задач отображаются только задачи, касающиеся текущего пользователя.

Как автоматически установить значение параметра сеанса по данным информационной базы

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

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

Создание роли ПолныеПрава

Рисунок 20 – Создание роли ПолныеПрава

В Конфигураторе создадим двух пользователей (Иванов и Петров) и назначим им роль ПолныеПрава:

Создание пользователей информационной базы

Создание пользователей информационной базы

Рисунок 21 – Создание пользователей информационной базы

При запуске конфигурации в пользовательском режиме нужно выполнить проверку, не является ли имя текущего пользователя пустым. Если имя текущего пользователя заполнено, то находим в справочнике ФизическиеЛица элемент, Код которого совпадает с именем текущего пользователя.

Параметру сеанса ТекущийПользователь присваиваем найденное значение (ссылку на элемент справочника ФизическиеЛица). Если такого элемента в справочнике нет, то нужно его создать, а ссылку на созданный элемент присвоить параметру сеанса.

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

Процедура УстановкаПараметровСеанса(ИменаПараметровСеанса) ТекущийПользователь = ПользователиИнформационнойБазы.ТекущийПользователь(); Имя = ТекущийПользователь.Имя; Если Имя = "" Тогда ПараметрыСеанса.ТекущийПользователь = Справочники.ФизическиеЛица.ПустаяСсылка(); Иначе СсылкаНаФизическоеЛицо = Справочники.ФизическиеЛица.НайтиПоКоду(Имя); Если СсылкаНаФизическоеЛицо = Справочники.ФизическиеЛица.ПустаяСсылка() Тогда НовоеФизическоеЛицо = Справочники.ФизическиеЛица.СоздатьЭлемент(); НовоеФизическоеЛицо.Код = ТекущийПользователь.Имя; НовоеФизическоеЛицо.Наименование = ТекущийПользователь.Имя; НовоеФизическоеЛицо.Записать(); ПараметрыСеанса.ТекущийПользователь = НовоеФизическоеЛицо.Ссылка; Иначе ПараметрыСеанса.ТекущийПользователь = СсылкаНаФизическоеЛицо; КонецЕсли; КонецЕсли; КонецПроцедуры

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

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

Как разместить список задач на рабочем столе

К решению аттестационной задачи предъявляются следующие требования:

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

Сначала разместим созданную форму списка объекта конфигурации ЗадачиИсполнителям на рабочем столе. Для этого из контекстного меню корневого элемента конфигурации выберем пункт Открыть рабочую область начальной страницы:

Выбор команды «Открыть рабочую область начальной страницы»

Рисунок 22 – Выбор команды «Открыть рабочую область начальной страницы»

В открывшемся окне выберем форму списка задачи:

Выбор формы списка объекта «ЗадачиИсполнителям» в рабочей области начальной страницы

Рисунок 23 – Выбор формы списка объекта «ЗадачиИсполнителям» в рабочей области начальной страницы

Запустим приложение в пользовательском режиме. На начальной странице отобразятся невыполненные задачи текущего пользователя:

Невыполненные задачи пользователя Иванова

Рисунок 24 – Невыполненные задачи пользователя Иванова

Однако кроме списка задач по исполнителю необходимо вывести полный список задач. Поэтому в окне настроек объекта конфигурации ЗадачиИсполнителям очистим поле для формы списка задачи:

Очистка поля для формы списка задачи в окне настроек

Рисунок 25 – Очистка поля для формы списка задачи в окне настроек

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

Общий список задач

Рисунок 26 – Общий список задач

Таким образом, необходимые формы отображаются – поставленная задача решена.

В следующем блоке материалов разберем, как реализовать отображение карты маршрута в форме бизнес процесса.

Курс, в котором разобраны все подводные камни аттестации

Cтатья подготовлена по материалам нового курса – Подготовка к аттестации 1С:Специалист по Платформе 1С:Предприятие 8.3 (2019).

Понравилось? Хотите больше?

Предложение актуально до вечера пятницы, 28 декабря!

2 комментариев о “Подготовка к аттестации 1С:Специалист по платформе 1С 8.3: как реализовать отображение списка невыполненных задач пользователя

  1. qwed сказал:

    А зачем вы 2 раза дергаете справочник запросом и ищите по имени физлицо?

    СсылкаНаФизическоеЛицо = Справочники.ФизическиеЛица.НайтиПоКоду(Имя);

    Далее если физ лицо не найдено, то создаете физ лицо,
    иначе
    опять обращаетесь в справочник и ищите физ лицо, хотя можно было использовать уже найденное
    ПараметрыСеанса.ТекущийПользователь = Справочники.ФизическиеЛица.НайтиПоКоду(Имя);
    А надо ПараметрыСеанса.ТекущийПользователь = СсылкаНаФизическоеЛицо;

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

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