Перейти к содержанию

Ресурсы: бизнес-логика

Обзор

Домен resources отвечает за планирование, учёт и контроль загрузки ресурсов, связанных с задачами.

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

Бизнес-объекты

  • Ресурс задачи (TaskResources).
  • Исполнители ресурса (TaskResourcePerformers).
  • Плановые записи (TaskResourcePlanEntries).
  • Фактические записи (TaskResourceFactEntries).
  • Агрегаты факта (TaskResourceFactAggregated).
  • Лог изменений (TaskResourcesLog).

Типы ресурсов

В 1Форме все ресурсы делятся на два типа:

Тип Особенности
Трудовой (исполнители, оборудование) Количество не меняется (исполнители не нанимаются и не увольняются под задачу). Доступность определяется календарным методом (выходные, ночь). Длительность работы напрямую связана с потребностью в ресурсе («исполнитель X в течение Y часов»)
Затратный (материальные ценности, деньги) Расходуется в процессе работы — оставшееся количество уменьшается. Доступность определяется наличием. Длительность работы не связана с количеством расходуемого ресурса

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

Подтипы трудового ресурса

Подтип Назначение Связь с исполнителями
Сотрудник Работа одного или нескольких сотрудников компании. Соответствует роли «Исполнитель» в задачах Многие-ко-многим через группы сотрудников
Внешний ресурс Работа внешнего контрагента Категория-справочник с ДП «Ответственный за ресурс»
Материальный объект Устройство, оборудование, помещение, автомобиль и т.п. Категория-справочник с ДП «Ответственный за ресурс»

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

Примеры внешних/материальных ресурсов: - Ресурс «Автомобиль» → категория-справочник «Корпоративный автотранспорт» с диспетчером в поле «Ответственный за ресурс». - Ресурс «Переговорные» → категория-справочник «Переговорные комнаты» с секретарём-администратором.

Перечень доступных ресурсов хранится в системном справочнике (см. resources/admin.md). Справочник пополняется ответственными сотрудниками и администраторами.

Блок «Ресурсы» в карточке задачи

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

  • Плановые трудозатраты обычно вносит заказчик или ответственный заранее.
  • Фактические трудозатраты регистрируют исполнители после выполнения работ.

По умолчанию блок свёрнут; система запоминает текущее состояние per-пользователь и per-категория. Например, если пользователь раскрыл блок в одной задаче категории, в следующей задаче этой категории он также откроется раскрытым.

Внесение плановых трудозатрат

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

Записи в блок можно добавлять и вручную — для конкретного сотрудника или для вида ресурса в целом. Если вид ресурса не определён, выбирается «Ресурс по умолчанию».

Планирование с указанием исполнителей

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

Цвет Занятость на день
Зелёный До 50% (≤ 4 ч при 8-часовом дне)
Оранжевый 50–100% (4–8 ч)
Красный 100% и более (≥ 8 ч)

Отметить нужных исполнителей → указать общий объём (часы/дни/месяцы) → «Добавить». Если выбрано несколько исполнителей — общий объём распределяется между ними.

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

Планирование без исполнителя

Если в поле «Ресурс» выбрать вид и нажать «Добавить» без выбора исполнителей, создаётся запись на вид ресурса в целом — без сотрудника.

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

Распределение по дням

При указании общего объёма по задаче система автоматически распределяет трудозатраты равномерно с даты начала работы до срока. Если срок не задан, распределение по дням не выполняется.

Общий план можно редактировать кликом по нему — поле перейдёт в режим ввода.

Посуточный план

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

Порции для ввода: 5 мин, 15 мин, 30 мин, 1 час, 1 день. Полный круг = 1 час, половина = 30 мин и т.д. Максимум на день — лимит производственного календаря (например, 8 полных кругов при 8-часовом дне).

Внесение: выбрать порцию → кликнуть по дате нужное число раз. Удалить — иконкой × в правом верхнем углу ячейки.

Цвета: - Текущая дата — серая подсветка. - Бледно-голубой — план, рассчитанный автоматически из общего объёма. - Ярко-голубой — план, введённый вручную. - Фиолетовый — плановые трудозатраты ресурса по другим задачам.

Соотношение с общим планом: - Если сумма ручных трудозатрат больше общего плана — общий план автоматически увеличивается. - Если меньше — разница распределяется равномерно с последнего ручного дня до срока задачи. - При досрочном завершении/отклонении задачи трудозатраты на будущие дни (после закрытия) удаляются.

Быстрое внесение своего плана

Кнопка «Внести план» в блоке «Ресурсы» открывает посуточный календарь. После сохранения, если записи пользователя в блоке ещё не было, она создаётся автоматически.

Режимы планирования: Фиксированная длительность vs Фиксированные трудозатраты

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

Режим Поведение при превышении
Фиксированная длительность Срок остаётся прежним; превышающий план не сохраняется (предупреждение). Кастомная настройка NoValidateFixLengthPlan разрешает изменять план, когда фактические списания уже превысили плановые
Фиксированные трудозатраты Срок задачи автоматически сдвигается, чтобы план поместился

Алгоритм расчёта нового срока (Фиксированные трудозатраты):

  1. Рассчитывается последний день суточного плана: Дата начала + (План / % загрузки по ресурсу).
  2. Берётся максимальная дата плановых часов в задаче.
  3. Из шагов 1 и 2 — максимум.
  4. Срок обновляется, если новый расчётный срок больше текущего.

Если время начала задачи не задано — для расчёта берётся время создания. Перенос срока выполняется только в исполняемом статусе (не новой, не отклонённой, не завершённой) и если новый срок не в прошлом.

Внесение фактических трудозатрат

Фактические трудозатраты фиксируются исполнителями в ходе работы или по её завершении.

Особенности: - Поддерживается только посуточное внесение; общей суммой ввести нельзя. - Открывается посуточный календарь по клику на числовое значение в колонке «Факт». - Дискретность та же: 5/15/30 мин, 1 ч, 1 день. - Зелёные круги факта по возможности замещают голубые круги плана. - При превышении факта над планом за день — отметка превышения. - При вводе доступен комментарий к дню (для плановых — недоступно). После сохранения — иконка комментария в правом верхнем углу ячейки.

Горячие клавиши: Ctrl+Alt+1 (5 мин), Ctrl+Alt+2 (10 мин), Ctrl+Alt+3 (15 мин).

Кто может вносить факт: - Заказчик/исполнитель с правом «Редактировать исполнителей». - Член группы, указанной в справочнике ресурсов в поле «Группы, обладающие правом фиксировать трудозатраты ресурса». - Администратор задач в категории. - Администратор системы.

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

При внесении факта оставшееся количество запланированных трудозатрат для исполнителя уменьшается.

Быстрое внесение своего факта: через «быструю ссылку» в блоке «Ресурсы», даже если записи пользователя в блоке ещё нет — она создастся автоматически после сохранения.

Процент занятости сотрудника

Рассчитывается автоматически как отношение общего планового значения занятости к общему количеству рабочих часов до срока завершения. Пример: задача со сроком через 2 дня (16 рабочих часов) и план 4 часа → занятость 25%.

Основные сценарии

1. Открытие блока ресурсов задачи

Пользователь видит текущий план/факт и связанных исполнителей по задаче.

2. Планирование загрузки

По подкатегории и периоду строится матрица распределения ресурсов.

3. Корректировка плана и факта

Изменения в плане/факте фиксируются в доменных таблицах и должны быть воспроизводимы в отчётах и UI.

4. Настройка ресурсной модели подкатегории

Админ определяет доступные ресурсы и связи подкатегории с ресурсными справочниками.

Бизнес-правила

  1. План и факт разделены и обновляются разными операциями.
  2. Изменение загрузки должно сохранять аудируемость (лог действий).
  3. Ресурс должен быть доступен в подкатегории, иначе назначение недопустимо.
  4. UI всегда работает с актуальным snapshot после перезагрузки данных.

Зависимости

  • tasks — задача как контейнер ресурсного плана.
  • categories — конфигурация ресурсности подкатегорий.
  • users-and-groups — исполнители/оргструктура.
  • calendar — период и нерабочие дни.

Операционные риски

  • Расхождение плана/факта между UI и БД.
  • Некорректная настройка доступности ресурса в подкатегории.
  • Частичные обновления при пакетных операциях.

Что проверять при инцидентах

  1. TaskResourcePlanEntries и TaskResourceFactEntries для проблемной задачи/периода.
  2. Наличие записи в TaskResourcesLog.
  3. Связку подкатегории с ресурсным справочником.
  4. Ответы API на reload матрицы после изменения.

Представление категории «Ресурсы»

Доступно с версии 2.262.

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

Основные правила

  • Клик по временной шкале открывает карточку задачи в модальном окне.
  • При наведении на задачу показывается подсказка с названием задачи и периодом (календарные дни, рабочие дни/часы).
  • Рабочие дни, выпавшие на субботу/воскресенье, и предпраздничные дни отображаются как рабочие (белым). Выходные и праздники — серым.
  • Для категорий типа «Ресурсы» доступно перетаскивание карточки по горизонтали (смена времени).
  • Для категорий типа «Экземпляры ресурсов» доступно также перетаскивание по вертикали (смена исполнителя/ресурса).
  • Представление обновляется онлайн при добавлении и изменении задач — без перезагрузки страницы.

Расчёт периода в подсказке

Период отображается с правилами форматирования: - Даты в одном месяце и году — месяц указан один раз: «11–12 декабря 2024 г.»; - Даты в одном году, разные месяцы — месяц у обеих дат: «11 ноября – 2 декабря 2024 г.»; - Разные годы — месяц и год у каждой даты.

Длительность считается в рабочих днях (выходные и праздники исключаются). Полные дни — 5 дн., неполные — рабочими часами с округлением до сотых: 4.25 ч.. При 100% загрузке за день засчитывается 1 рабочий день, даже если выделено больше нормы (24 часа при 8-часовом дне). Если остаток превышает дневную норму — округляется до +1 дня.

Часовые пояса

Все события и производственный календарь отображаются в часовом поясе текущего пользователя, при этом сами данные привязаны к исходному поясу. Например, рабочий день, запланированный с 10:00 по UTC+3, для пользователя UTC+13 показывается с 22:00. При создании события через клик в интерфейсе система автоматически интерпретирует намерение и устанавливает время в рабочем поясе пользователя.

План / Факт

Пользователь может переключаться между режимами «План» и «Факт». При ручном внесении трудозатрат система автоматически определяет дату начала аллокации: от начала рабочего дня с учётом уже внесённых за день трудозатрат. Если время превышает остаток дня — запись сдвигается так, чтобы завершаться в 24:00.

Добавление часов

Кнопка «+» в пустой ячейке открывает окно добавления трудозатрат или карточку создания задачи (зависит от настроек администратора).

  • Для масштаба «Расписание» реализован механизм контроля занятости (овербукинг): нельзя создать аллокацию, если рабочий день ресурса уже полностью занят ранее запланированной нагрузкой.
  • Доступность кнопки «+» зависит от права на создание задач в категории.

Масштабы

Масштаб Описание
Годы По годам с разбивкой по кварталам
Месяцы По месяцам
Месяцы/недели По месяцам с разбивкой по первому дню недели
Недели По неделям
Неделя По дням (по умолчанию)
День По дням с возможностью установки на часы
Расписание По календарным неделям

Администратор может предопределить доступные масштабы и масштаб по умолчанию.

Фильтрация и отборы

  • По статусам основного маршрута: все, активные, закрытые, отклонённые.
  • По преднастроенным отборам категории.
  • По роли пользователя: исполнитель, заказчик, акцептант, «в параметрах».
  • Фильтрация по значениям дополнительных параметров через чипы.
  • Флаг «Ресурсы только с аллокациями» — скрывает ресурсы без назначений в отфильтрованных задачах (не работает в масштабах «День» и «Расписание»).

Контекстное меню ресурса

Действие Описание
Редактировать событие Окно редактирования события
Копировать / Вырезать / Удалить событие Операции с аллокацией через буфер обмена
Прервать событие Прерывание аллокации

Поиск

Кнопка лупы в панели инструментов раскрывает поле поиска. Поиск ведётся: - по полям карточки ресурса в правой части представления; - по типу ресурса (название типа или исполнитель) — в левой табличной части.

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

Меню действий и контекстное меню колонки

Кнопка меню в панели инструментов:

Действие Описание
Вид по умолчанию Сброс персональных настроек таблицы (сортировка, группировка, порядок колонок) к настройкам категории
Расширенное добавление Добавляет дополнительное пространство в строку — кнопка «+» доступна даже при наличии назначенного ресурса в слоте
Ресурсы только с аллокациями Скрывает ресурсы без назначений в задачах, попавших в текущие фильтры. Не работает в масштабах «День» и «Расписание»

Правая кнопка мыши по заголовку колонки таблицы ресурсов:

Действие Описание
Колонки Список основных и дополнительных параметров; отметка управляет видимостью колонки
Спрятать колонку Временно скрывает выбранную колонку (восстановление — через «Колонки»)
Группа по возрастанию / убыванию Группировка данных по выбранной колонке
Убрать группу Сброс группировки

Табель трудозатрат (пользовательский)

Сводный личный табель трудозатрат пользователя — интерактивная матрица «задача × день» за неделю/день. Доступен из профиля пользователя (вкладка «Ресурсы» или через навигацию).

Состав табеля

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

Опция «Все активные задачи» — показывает все активные задачи, где пользователь является исполнителем.

Если у пользователя нет доступа к задаче, трудозатраты по ней видны, но вместо текста — «(Текст задачи скрыт)».

Режимы отображения

Режим Что показывается
Фактические трудозатраты И план, и факт
Плановые трудозатраты Только план

Цветовая кодировка ячеек: - 🔵 Голубой — плановые трудозатраты - 🟢 Зелёный — фактические в рамках плана - 🔴 Красный — фактические, превышающие план на день

Полный круг ≈ 1 ч., половина ≈ 30 мин.

Навигация и периоды

  • Переключение периода — стрелки назад/вперёд.
  • Дискретность: Неделя, Рабочая неделя (5 дней), День.

Ввод трудозатрат

Клик по ячейке на пересечении задачи и даты — открывает окно ввода (тот же интерфейс, что и в посуточном календаре блока «Ресурсы» в карточке задачи). Логика автоопределения времени начала — см. раздел «Добавление часов» выше.

Кнопка Действие
Добавить задачу (+) Добавить активную задачу-исполнителя в табель
Сохранить Сохранить все изменения (активна при наличии несохранённых данных)
Отменить Откатить несохранённые изменения
Обновить Перезагрузить табель