Как реализовать систему электронной очереди задач в 1С?

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

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

Выбор архитектурного решения: Задача или Регистр?

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

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

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

Алгоритм распределения задач: Push vs Pull

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

Стратегия «Вытягивания» (Pull): Это классический вариант электронной очереди. Исполнитель, освободившись, нажимает кнопку «Взять следующую задачу». Система сама анализирует регистр и выдает наиболее приоритетную запись. Это исключает ситуацию, когда сотрудники выбирают задачи «попроще», игнорируя важные, но сложные задания.

Рассмотрим пример кода для получения следующей задачи из очереди:


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ ПЕРВЫЕ 1
    |	ОчередьЗадач.Задача КАК Задача
    |ИЗ
    |	РегистрСведений.ОчередьЗадач КАК ОчередьЗадач
    |ГДЕ
    |	ОчередьЗадач.Исполнитель = &ТекущийПользователь
    |	И ОчередьЗадач.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыЗадач.ВТопке)
    |УПОРЯДОЧИТЬ ПО
    |	ОчередьЗадач.Приоритет.Порядок ВОЗР,
    |	ОчередьЗадач.Порядок ВОЗР,
    |	ОчередьЗадач.ДатаПостановки ВОЗР";

Запрос.УстановитьПараметр("ТекущийПользователь", ПараметрыСеанса.ТекущийПользователь);
Результат = Запрос.Выполнить();

Стратегия «Проталкивания» (Push): В этом случае система автоматически назначает задачу на свободного сотрудника. Для реализации этого механизма нам потребуется регламентное задание, которое будет мониторить загрузку персонала.

Управление приоритетами и позиционирование

Часто бывает так, что несколько задач имеют одинаковый высокий приоритет. Чтобы корректно выстроить их в ряд, мы внедрим понятие позиции в приоритете. Это числовой реквизит, который позволяет «двигать» задачи внутри одной группы важности. В Библиотеке Стандартных Подсистем (БСП) для этих целей часто используется реквизит РеквизитДопУпорядочивания.

Рассмотрим, как реализовать механизм «поднятия» задачи в очереди. Нам нужно изменить значение порядка текущей задачи и скорректировать позиции остальных задач в этой же группе приоритета. Это гарантирует, что очередь останется целостной.

Определение момента освобождения сотрудника

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

Логика расчета будет следующей:

  1. Берем текущее время.
  2. Суммируем плановое время всех задач сотрудника, которые уже находятся в статусе «В работе».
  3. Добавляем время всех задач, стоящих перед выбранной задачей в очереди.
  4. Учитываем график работы сотрудника (производственный календарь), чтобы время не «наползало» на нерабочие часы.

Для визуализации этой информации идеально подходит объект ДиаграммаГанта. Посмотрим, как это выглядит на практике: по горизонтали — время, по вертикали — сотрудники. Задачи отображаются отрезками, длина которых соответствует трудоемкости. Так мы сразу увидим узкие места в нашей очереди.

Динамическое управление очередью (SLA)

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

Рассмотрим формулу расчета веса задачи:

Вес = (Приоритет * 100) + (ВремяОжиданияВМинутах / 60)

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

Использование Системы взаимодействия

Эффективная электронная очередь невозможна без оперативных уведомлений. Разберем, как использовать СистемуВзаимодействия (1С:Диалог). Как только в очередь сотрудника попадает критическая задача или когда наступает его очередь выполнять следующее задание, система должна отправить push-уведомление прямо в интерфейс 1С.

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

Заключение

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

← На главную