1C. Разработка конфигурации «Менеджер задач». Часть 3

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

Статьи цикла:

Часть 1. Проекты и задачи
Часть 2.  Пользователи

Требование

Разработать конфигурацию «Менеджер задач»:
[…]

2. Основным рабочим местом для пользователя должна служить начальная страница, на которой:

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

[…]

Реализация требования

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

Состояния задач

Первым делом определимся и опишем необходимые состояния задач. Ранее пробовал вести задачи по всяким методикам, но в чистом виде ни одна не подошла(так наверное у многих), из всего опробованного для себя вывел следующие:

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

Действия

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

Дата и время Проект Задача Состояние Действие
01.01.2018 12:00:00 Проект 1 Задача 1 В работу Реализация ТЗ
01.01.2018 12:10:00 Проект 1 Задача 1 Выполняется Реализация ТЗ
01.01.2018 17:10:00 Проект 1 Задача 1 Проверяется Реализация ТЗ
01.01.2018 17:45:00 Проект 1 Задача 1 Выполнена Реализация ТЗ
02.01.2018 09:00:00 Проект 1 Задача 1 Проверяется Тестирование заказчиком
02.01.2018 14:00:00 Проект 1 Задача 1 Выполнена Тестирование заказчиком
02.01.2018 14:20:00 Проект 1 Задача 1 В работу Перенос в рабочую ИБ
05.01.2018 19:00:00 Проект 1 Задача 1 Выполняется Перенос в рабочую ИБ
05.01.2018 19:50:00 Проект 1 Задача 1 Выполнена Перенос в рабочую ИБ

Для возможности добавления новых действий, буду хранить в одноименном справочнике. Длинна наименования 50, справочник без иерархии и включен в состав подсистемы МенеджерЗадач.

Хранение состояний и действий

Все получившееся надо объединить и хранить, для этого создадим не зависимый регистр сведений СостоянияЗадач  с периодичностью секунда.

Измерения:

  • Пользователь (Тип Справочник.Пользователи);
  • Проект (Тип Справочник.Проекты);
  • Задача (Тип Справочник.Задачи).

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

Ресурсы:

  • Состояние (Тип Перечисления.СостоянияЗадач);
  • Действие (Тип Справочник.Действия);
  • Приоритет (Тип Число(3,0)).

Для дополнительного упорядочивания задач буду использовать числовой приоритет, для избежания подобной ситуации

Отображение всех задач

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

Создаем обработку УправлениеЗадачами, и создаем форму обработки. На форму добавим группу с видом Страницы и две подчиненные группы Страница_ТекущиеЗадачи и Страница_ВсеЗадачи с видом Страница.

Начнем с разработки отображения всех задач, в левой части будем выводить все проекты(без ограничений), в правой задачи пользователя с их статусами.

В реквизитах формы создадим динамический список ВсеЗадачи_Проекты, в основной таблицей указываем справочник Проекты.

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

Сразу настроим упорядочивание задач по полям Состояние и Наименование.

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

Все добавляем на форму и теперь форма выглядит так

Переходим к программированию, в тексте запроса динамического списка ВсеЗадачи_Задачи есть параметр &Пользователь, будем устанавливать его при создании формы на сервере

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	ВсеЗадачи_Задачи.Параметры.УстановитьЗначениеПараметра("Пользователь", ПараметрыСеанса.ТекущийПользователь);
	
КонецПроцедуры

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

&НаКлиенте
Процедура УстановитьОтборДинамическогоСписка(Список, Поле, Значение, Использование = Истина)

   Список.Отбор.Элементы.Очистить();

    ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементОтбора.ЛевоеЗначение   = Новый ПолеКомпоновкиДанных(Поле);
    ЭлементОтбора.ВидСравнения    = ВидСравненияКомпоновкиДанных.Равно;
    ЭлементОтбора.ПравоеЗначение  = Значение;
   ЭлементОтбора.Использование    = Использование;

КонецПроцедуры // УстановитьОтборДинамическогоСписка()

Остается только для элемента формы Проекты описать обработчик события ПриАктивизацииСтроки(), в котором устанавливаем отбор.

&НаКлиенте
Процедура ВсеЗадачи_ПроектыПриАктивизацииСтроки(Элемент)

    ТекущиеДанные   = Элементы.ВсеЗадачи_Проекты.ТекущиеДанные;
    Проект          = Неопределено;

    Если Не ТекущиеДанные = Неопределено Тогда 
        Проект = ТекущиеДанные.Ссылка;
    КонецЕсли;

    УстановитьОтборДинамическогоСписка(ВсеЗадачи_Задачи, "Владелец", Проект);

КонецПроцедуры

Можно запустить и проверить получившееся

В следующей части будем разбираться с текущими задачами и ведением состояний и действий задач.

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

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