Как получить дату поступления, начала работы, статус и тип задачи в 1С:Документооборот 3.0 и обрабатывать повторяющиеся записи?

Программист 1С v8.3 (Управляемые формы) 1С:Документооборот Управленческий учет IT и автоматизация бизнеса
← На главную

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

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

Получение даты поступления задачи пользователю

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

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

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


ВЫБРАТЬ
    ЗадачаИсполнителя.Ссылка,
    ЗадачаИсполнителя.ДатаСоздания КАК ДатаПоступления,
    ЗадачаИсполнителя.Исполнитель,
    ЗадачаИсполнителя.Предмет
ИЗ
    Задача.ЗадачаИсполнителя КАК ЗадачаИсполнителя
ГДЕ
    ЗадачаИсполнителя.Исполнитель = &ТекущийПользователь

В этом запросе ДатаСоздания будет являться датой, когда задача поступила соответствующему исполнителю. Если речь идет о втором исполнителе в цепочке бизнес-процесса, то для него будет создана отдельная запись в Задача.ЗадачаИсполнителя со своей ДатойСоздания, которая и будет датой поступления задачи этому второму исполнителю.

Определение даты начала работы с задачей (когда пользователь ее открыл)

Прямого поля "дата открытия задачи пользователем" в типовой конфигурации 1С:Документооборот 3.0 обычно нет. Система не фиксирует отдельно момент первого открытия задачи пользователем как отдельное поле даты.

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

  1. История выполнения задач: В интерфейсе каждой задачи исполнителя доступна "История выполнения задач". Этот механизм позволяет отследить этапы обработки документа и задачи, фиксируя различные события, которые происходят с задачей. Хотя это не прямое поле "дата открытия", по событиям в истории можно косвенно судить о начале работы.
  2. Регистры событий или История данных: Если в вашей системе настроена "История данных" для объекта ЗадачаИсполнителя или если существуют специализированные регистры событий, которые фиксируют действия пользователя (например, открытие формы объекта), то мы можем анализировать эти данные. Однако настройка "Истории данных" для подобных целей требует дополнительных усилий и может влиять на производительность системы из-за большого объема записываемой информации. Это не является типовым подходом для получения такой даты.

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

Места хранения данных о задачах в 1С:Документооборот 3.0

Информация о задачах в 1С:Документооборот 3.0 хранится в специализированных объектах метаданных и регистрах. Разберем основные из них:

  1. Объекты метаданных: Основная информация о каждой задаче исполнителя хранится в объектах типа Задача, в частности, в Документ.ЗадачаИсполнителя (хотя в ДО 3.0 концепция несколько изменилась, и это может быть более абстрактный объект, который агрегирует информацию о задаче). Эти объекты содержат такие данные, как:
    • Ссылка на задачу.
    • Исполнитель.
    • Автор задачи.
    • Предмет задачи (документ, файл, процесс и т.д.).
    • Срок выполнения.
    • Дата создания.
    • Состояние (выполнено, отменено, просрочено).
  2. Регистры сведений: В 1С используются регистры сведений для хранения необъектных данных, которые могут иметь различные измерения и ресурсы. Хотя основная информация о задаче является объектной, вспомогательные данные или кэшированные состояния могут храниться в регистрах. Для получения текущих задач, связанных с документом, рекомендуется использовать запросы к регистру задач "Задачи" или аналогичным структурам. Например, данные о ходе выполнения процессов, к которым привязаны задачи, могут храниться в специализированных регистрах.

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

Определение статуса и типа задачи

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

Статус задачи

Статус задачи в 1С:Документооборот 3.0 можно определить по нескольким полям объекта задачи. Наиболее очевидные из них:

  1. Поле Выполнено: Это булево поле, которое принимает значение Истина, если задача успешно выполнена.
  2. Поле Отменена: Это также булево поле, которое принимает значение Истина, если задача была отменена.

В списке "Задачи" в пользовательском интерфейсе также отображается общее "состояние" задачи, которое может быть более информативным, чем просто "выполнено" или "отменено" (например, "в работе", "просрочено", "принято к исполнению"). Для получения более детального состояния в запросе, нам, возможно, придется анализировать не только эти булевы поля, но и другие связанные данные, такие как срок выполнения, дата фактического выполнения и текущий этап бизнес-процесса. Например, если Выполнено = Ложь и Отменена = Ложь, но СрокИсполнения < ТекущаяДата(), то задача, скорее всего, просрочена.

Пример запроса для определения статуса:


ВЫБРАТЬ
    ЗадачаИсполнителя.Ссылка,
    ЗадачаИсполнителя.Предмет,
    ВЫБОР
        КОГДА ЗадачаИсполнителя.Выполнено
            ТОГДА "Выполнена"
        КОГДА ЗадачаИсполнителя.Отменена
            ТОГДА "Отменена"
        КОГДА ЗадачаИсполнителя.СрокИсполнения < &ТекущаяДата
            ТОГДА "Просрочена"
        ИНАЧЕ "В работе"
    КОНЕЦ КАК СтатусЗадачи
ИЗ
    Задача.ЗадачаИсполнителя КАК ЗадачаИсполнителя

Тип задачи

Тип задачи тесно связан с этапом бизнес-процесса, в рамках которого она была создана. В 1С:Документооборот 3.0 это часто обозначается полем ТочкаМаршрута. Каждая точка маршрута соответствует определенному действию или этапу (например, "Согласование", "Исполнение", "Подписание", "Ознакомление").

Также тип задачи можно определить через табличную часть Задача.ЗадачаИсполнителя.Предметы. Эта табличная часть содержит ссылки на объекты, к которым относится задача, и ее состав может косвенно указывать на тип. Например, если предмет задачи - это документ "Заявление", а ТочкаМаршрута - "Согласование", то тип задачи очевиден.

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


ВЫБРАТЬ
    ЗадачаИсполнителя.Ссылка,
    ЗадачаИсполнителя.Предмет,
    ЗадачаИсполнителя.ТочкаМаршрута.Наименование КАК ТипЗадачи
ИЗ
    Задача.ЗадачаИсполнителя КАК ЗадачаИсполнителя

Здесь ТочкаМаршрута.Наименование напрямую даст нам название этапа бизнес-процесса, которое обычно соответствует типу задачи.

Отчеты по задачам в 1С:Документооборот 3.0

В 1С:Документооборот 3.0 есть встроенные отчеты, которые помогают контролировать исполнительскую дисциплину и отслеживать выполнение задач. Давайте рассмотрим наиболее значимые из них:

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

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

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

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

Обработка повторяющихся записей по одной задаче

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

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

Шаг 1: Идентификация уникального "предмета"

Ключевым моментом здесь является понимание того, что несколько записей могут относиться к одному и тому же "предмету" (документу, бизнес-процессу). Поле Предмет в Задача.ЗадачаИсполнителя является важным для группировки.

Шаг 2: Группировка и выбор максимальной даты

Если у нас есть несколько записей по одному предмету, и каждая запись имеет свою дату (например, дату создания или дату изменения), мы можем получить самую последнюю запись, сгруппировав по Предмету и выбрав МАКСИМУМ(Дата).

Рассмотрим пример запроса:


// Первый запрос: получаем для каждого предмета последнюю дату создания записи задачи
ВЫБРАТЬ
    ЗадачаИсполнителя.Предмет КАК Предмет,
    МАКСИМУМ(ЗадачаИсполнителя.ДатаСоздания) КАК МаксДатаСоздания
ИЗ
    Задача.ЗадачаИсполнителя КАК ЗадачаИсполнителя
ГДЕ
    НЕ ЗадачаИсполнителя.ПометкаУдаления
СГРУППИРОВАТЬ ПО
    ЗадачаИсполнителя.Предмет

Этот запрос вернет таблицу с двумя полями: Предмет и МаксДатаСоздания, где МаксДатаСоздания будет самой поздней датой создания записи задачи для каждого уникального предмета. Таким образом, мы получаем последнюю актуальную запись по дате для каждого предмета.

Шаг 3: Соединение с исходной таблицей для получения всех полей

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


ВЫБРАТЬ
    ПоследниеЗадачи.Предмет,
    ПоследниеЗадачи.МаксДатаСоздания,
    ЗадачаИсполнителя.Исполнитель,
    ЗадачаИсполнителя.ТочкаМаршрута.Наименование КАК ТипЗадачи,
    ВЫБОР
        КОГДА ЗадачаИсполнителя.Выполнено
            ТОГДА "Выполнена"
        КОГДА ЗадачаИсполнителя.Отменена
            ТОГДА "Отменена"
        КОГДА ЗадачаИсполнителя.СрокИсполнения < &ТекущаяДата
            ТОГДА "Просрочена"
        ИНАЧЕ "В работе"
    КОНЕЦ КАК СтатусЗадачи,
    ЗадачаИсполнителя.Ссылка
ИЗ
    (ВЫБРАТЬ
        ЗадачаИсполнителя.Предмет КАК Предмет,
        МАКСИМУМ(ЗадачаИсполнителя.ДатаСоздания) КАК МаксДатаСоздания
    ИЗ
        Задача.ЗадачаИсполнителя КАК ЗадачаИсполнителя
    ГДЕ
        НЕ ЗадачаИсполнителя.ПометкаУдаления
    СГРУППИРОВАТЬ ПО
        ЗадачаИсполнителя.Предмет) КАК ПоследниеЗадачи
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ Задача.ЗадачаИсполнителя КАК ЗадачаИсполнителя
    ПО ПоследниеЗадачи.Предмет = ЗадачаИсполнителя.Предмет
    И ПоследниеЗадачи.МаксДатаСоздания = ЗадачаИсполнителя.ДатаСоздания
ГДЕ
    НЕ ЗадачаИсполнителя.ПометкаУдаления

В этом составном запросе:

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

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

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

← На главную