При работе с системой 1С:Документооборот 3.0 часто возникает необходимость получить детальную информацию о задачах, их жизненном цикле, статусах и исполнителях. В этой статье мы подробно рассмотрим, как получить дату поступления задачи пользователю, определить дату начала работы с задачей, узнать ее статус и тип, а также каким образом обрабатывать ситуации, когда по одной задаче появляется несколько записей.
Для эффективного анализа и отчетности, а также для контроля исполнительской дисциплины, критически важно уметь извлекать эти данные из системы. Мы будем ориентироваться на возможности платформы 1С:Предприятие 8.3 с управляемыми формами, поскольку 1С:Документооборот 3.0 построен на ее основе.
Датой поступления задачи пользователю фактически является дата ее создания в списке задач конкретного исполнителя. В 1С:Документооборот 3.0 эта информация хранится в объекте метаданных, который отвечает за задачи исполнителей. Давайте рассмотрим, как мы можем получить эту дату.
Основной объект, который нас интересует, это Задача.ЗадачаИсполнителя. В данном объекте содержится информация о каждой задаче, адресованной конкретному исполнителю. Чтобы получить дату поступления задачи, мы должны обратиться к полю, которое фиксирует момент создания записи задачи для этого исполнителя. Обычно это поле называется ДатаСоздания или аналогично.
Для получения этой даты в запросе к базе данных 1С, мы можем использовать следующий подход:
ВЫБРАТЬ
ЗадачаИсполнителя.Ссылка,
ЗадачаИсполнителя.ДатаСоздания КАК ДатаПоступления,
ЗадачаИсполнителя.Исполнитель,
ЗадачаИсполнителя.Предмет
ИЗ
Задача.ЗадачаИсполнителя КАК ЗадачаИсполнителя
ГДЕ
ЗадачаИсполнителя.Исполнитель = &ТекущийПользователь
В этом запросе ДатаСоздания будет являться датой, когда задача поступила соответствующему исполнителю. Если речь идет о втором исполнителе в цепочке бизнес-процесса, то для него будет создана отдельная запись в Задача.ЗадачаИсполнителя со своей ДатойСоздания, которая и будет датой поступления задачи этому второму исполнителю.
Прямого поля "дата открытия задачи пользователем" в типовой конфигурации 1С:Документооборот 3.0 обычно нет. Система не фиксирует отдельно момент первого открытия задачи пользователем как отдельное поле даты.
Однако, это не означает, что мы совершенно не можем отследить начало работы с задачей. Мы можем посмотреть на несколько альтернативных источников информации:
ЗадачаИсполнителя или если существуют специализированные регистры событий, которые фиксируют действия пользователя (например, открытие формы объекта), то мы можем анализировать эти данные. Однако настройка "Истории данных" для подобных целей требует дополнительных усилий и может влиять на производительность системы из-за большого объема записываемой информации. Это не является типовым подходом для получения такой даты.Таким образом, для получения даты начала работы с задачей вам, скорее всего, придется анализировать не прямое поле, а косвенные признаки, такие как первое изменение статуса, первое присвоение комментария или, при наличии, данные из истории изменений объекта.
Информация о задачах в 1С:Документооборот 3.0 хранится в специализированных объектах метаданных и регистрах. Разберем основные из них:
Задача, в частности, в Документ.ЗадачаИсполнителя (хотя в ДО 3.0 концепция несколько изменилась, и это может быть более абстрактный объект, который агрегирует информацию о задаче). Эти объекты содержат такие данные, как:
Для работы с данными о задачах программно мы в основном будем использовать запросы к объекту Задача.ЗадачаИсполнителя или к объектам бизнес-процессов, которые порождают эти задачи.
Для полноценного контроля за задачами нам необходимо знать их текущий статус и тип. 1С:Документооборот 3.0 предоставляет для этого соответствующие механизмы.
Статус задачи в 1С:Документооборот 3.0 можно определить по нескольким полям объекта задачи. Наиболее очевидные из них:
Выполнено: Это булево поле, которое принимает значение Истина, если задача успешно выполнена.Отменена: Это также булево поле, которое принимает значение Истина, если задача была отменена.В списке "Задачи" в пользовательском интерфейсе также отображается общее "состояние" задачи, которое может быть более информативным, чем просто "выполнено" или "отменено" (например, "в работе", "просрочено", "принято к исполнению"). Для получения более детального состояния в запросе, нам, возможно, придется анализировать не только эти булевы поля, но и другие связанные данные, такие как срок выполнения, дата фактического выполнения и текущий этап бизнес-процесса. Например, если Выполнено = Ложь и Отменена = Ложь, но СрокИсполнения < ТекущаяДата(), то задача, скорее всего, просрочена.
Пример запроса для определения статуса:
ВЫБРАТЬ
ЗадачаИсполнителя.Ссылка,
ЗадачаИсполнителя.Предмет,
ВЫБОР
КОГДА ЗадачаИсполнителя.Выполнено
ТОГДА "Выполнена"
КОГДА ЗадачаИсполнителя.Отменена
ТОГДА "Отменена"
КОГДА ЗадачаИсполнителя.СрокИсполнения < &ТекущаяДата
ТОГДА "Просрочена"
ИНАЧЕ "В работе"
КОНЕЦ КАК СтатусЗадачи
ИЗ
Задача.ЗадачаИсполнителя КАК ЗадачаИсполнителя
Тип задачи тесно связан с этапом бизнес-процесса, в рамках которого она была создана. В 1С:Документооборот 3.0 это часто обозначается полем ТочкаМаршрута. Каждая точка маршрута соответствует определенному действию или этапу (например, "Согласование", "Исполнение", "Подписание", "Ознакомление").
Также тип задачи можно определить через табличную часть Задача.ЗадачаИсполнителя.Предметы. Эта табличная часть содержит ссылки на объекты, к которым относится задача, и ее состав может косвенно указывать на тип. Например, если предмет задачи - это документ "Заявление", а ТочкаМаршрута - "Согласование", то тип задачи очевиден.
В 1С:Документооборот 3.0 была внедрена единая карточка задачи, которая динамически адаптируется под разные типы задач, что упрощает их идентификацию в пользовательском интерфейсе. Программно мы можем получить тип, обратившись к свойству ТочкаМаршрута задачи или к метаданным самой задачи, которая содержит информацию о ее предназначении.
ВЫБРАТЬ
ЗадачаИсполнителя.Ссылка,
ЗадачаИсполнителя.Предмет,
ЗадачаИсполнителя.ТочкаМаршрута.Наименование КАК ТипЗадачи
ИЗ
Задача.ЗадачаИсполнителя КАК ЗадачаИсполнителя
Здесь ТочкаМаршрута.Наименование напрямую даст нам название этапа бизнес-процесса, которое обычно соответствует типу задачи.
В 1С:Документооборот 3.0 есть встроенные отчеты, которые помогают контролировать исполнительскую дисциплину и отслеживать выполнение задач. Давайте рассмотрим наиболее значимые из них:
Если данные в типовых отчетах не устраивают или кажутся неверными, мы всегда можем:
Задача.ЗадачаИсполнителя и связанных с ними. Это позволит нам полностью контролировать выборку и агрегацию данных.В 1С:Документооборот 3.0 была значительно обновлена система исполнительской дисциплины, появились новые механизмы контроля, которые могут быть полезны для более точного мониторинга.
В процессе работы с задачами, особенно если пользователи имеют возможность редактировать задачи, перезапускать бизнес-процессы или выполнять другие действия, которые генерируют новые записи для одной и той же логической задачи, мы можем столкнуться с проблемой нескольких записей, где нам нужна только одна, наиболее актуальная. Например, если задача редактировалась несколько раз, нам нужна последняя версия этой задачи.
Для решения этой проблемы в запросах мы будем использовать группировку и агрегатные функции. Наша цель – получить одну запись, представляющую собой последнюю актуальную информацию по конкретному "предмету" задачи (например, документу или бизнес-процессу).
Ключевым моментом здесь является понимание того, что несколько записей могут относиться к одному и тому же "предмету" (документу, бизнес-процессу). Поле Предмет в Задача.ЗадачаИсполнителя является важным для группировки.
Если у нас есть несколько записей по одному предмету, и каждая запись имеет свою дату (например, дату создания или дату изменения), мы можем получить самую последнюю запись, сгруппировав по Предмету и выбрав МАКСИМУМ(Дата).
Рассмотрим пример запроса:
// Первый запрос: получаем для каждого предмета последнюю дату создания записи задачи
ВЫБРАТЬ
ЗадачаИсполнителя.Предмет КАК Предмет,
МАКСИМУМ(ЗадачаИсполнителя.ДатаСоздания) КАК МаксДатаСоздания
ИЗ
Задача.ЗадачаИсполнителя КАК ЗадачаИсполнителя
ГДЕ
НЕ ЗадачаИсполнителя.ПометкаУдаления
СГРУППИРОВАТЬ ПО
ЗадачаИсполнителя.Предмет
Этот запрос вернет таблицу с двумя полями: Предмет и МаксДатаСоздания, где МаксДатаСоздания будет самой поздней датой создания записи задачи для каждого уникального предмета. Таким образом, мы получаем последнюю актуальную запись по дате для каждого предмета.
После того как мы получили пары "предмет-максимальная дата", нам необходимо соединить этот временный результат с исходной таблицей Задача.ЗадачаИсполнителя, чтобы получить все остальные поля (исполнитель, тип задачи, статус и т.д.) именно для той записи, которая соответствует этой максимальной дате.
ВЫБРАТЬ
ПоследниеЗадачи.Предмет,
ПоследниеЗадачи.МаксДатаСоздания,
ЗадачаИсполнителя.Исполнитель,
ЗадачаИсполнителя.ТочкаМаршрута.Наименование КАК ТипЗадачи,
ВЫБОР
КОГДА ЗадачаИсполнителя.Выполнено
ТОГДА "Выполнена"
КОГДА ЗадачаИсполнителя.Отменена
ТОГДА "Отменена"
КОГДА ЗадачаИсполнителя.СрокИсполнения < &ТекущаяДата
ТОГДА "Просрочена"
ИНАЧЕ "В работе"
КОНЕЦ КАК СтатусЗадачи,
ЗадачаИсполнителя.Ссылка
ИЗ
(ВЫБРАТЬ
ЗадачаИсполнителя.Предмет КАК Предмет,
МАКСИМУМ(ЗадачаИсполнителя.ДатаСоздания) КАК МаксДатаСоздания
ИЗ
Задача.ЗадачаИсполнителя КАК ЗадачаИсполнителя
ГДЕ
НЕ ЗадачаИсполнителя.ПометкаУдаления
СГРУППИРОВАТЬ ПО
ЗадачаИсполнителя.Предмет) КАК ПоследниеЗадачи
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Задача.ЗадачаИсполнителя КАК ЗадачаИсполнителя
ПО ПоследниеЗадачи.Предмет = ЗадачаИсполнителя.Предмет
И ПоследниеЗадачи.МаксДатаСоздания = ЗадачаИсполнителя.ДатаСоздания
ГДЕ
НЕ ЗадачаИсполнителя.ПометкаУдаления
В этом составном запросе:
ПоследниеЗадачи) находит для каждого предмета самую позднюю дату создания задачи.Задача.ЗадачаИсполнителя по двум условиям: совпадение Предмета и совпадение ДатыСоздания с МаксДатойСоздания. Это гарантирует, что мы получим только ту одну запись, которая является самой свежей для каждого предмета.Таким образом, даже если пользователь редактировал или перезапускал задачу, и это привело к появлению нескольких записей, данный подход позволяет нам получить единственную, наиболее актуальную запись со всей необходимой информацией.
Мы рассмотрели ключевые аспекты работы с задачами в 1С:Документооборот 3.0, начиная от получения базовых дат и статусов, заканчивая продвинутыми методами обработки данных. Эти знания позволят вам более эффективно контролировать исполнительскую дисциплину и анализировать потоки работ в вашей организации.