# Ресурсы

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



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

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

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



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


Работа с ресурсами строится вокруг нескольких сущностей:

- Ресурс задачи — какой ресурс задействован.
- Исполнители ресурса — кто выполняет работу.
- Плановые записи — сколько времени запланировано.
- Фактические записи — сколько времени фактически потрачено.
- Сводные данные по факту — агрегированные фактические трудозатраты.
- История изменений — журнал действий с ресурсами задачи.


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

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

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

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


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

Трудовой ресурс делится на три подтипа:

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

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

**Примеры внешних/материальных ресурсов:**

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

Перечень доступных ресурсов хранится в системном справочнике (см. [resources/admin.md](https://help.1forma.ru/domains/resources/admin.md)). Справочник пополняется ответственными сотрудниками и администраторами.

![Карточка ресурса в справочнике: тип «Трудовой» и выбор подтипа](https://help.1forma.ru/help-images/resources/resources_reference-01.png)


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

**Ресурс** — количественная мера возможности выполнения какой-либо деятельности (см. деление на трудовые и затратные типы выше).

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

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

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

![Блок «Ресурсы» в карточке задачи: план и факт по исполнителям](https://help.1forma.ru/help-images/resources/labor_effort-1.png)


### Ресурсы подзадач

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

После клика по ссылке показываются заголовок «Ресурсы подзадач» и строки подзадач. Слева у каждой строки — стрелка: свёрнутая подзадача помечена стрелкой вправо, раскрытая — вниз. По умолчанию все подзадачи свёрнуты. Клик по стрелке или по названию подзадачи раскрывает и сворачивает её таблицу; клик по номеру задачи открывает саму подзадачу и список при этом не переключает. Подзадачи без ресурсов в списке не показываются.

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

**Работа с ресурсами подзадач — только для чтения.** План, факт, исполнителя и ресурс подзадачи изменить из карточки родительской задачи нельзя: ячейки выглядят как обычный текст, клик по ним ничего не делает, кнопок добавления, удаления и выбора исполнителя нет. Трудозатраты вносятся в самой подзадаче — в её блоке «Ресурсы». Ссылкой в таблице подзадач остаётся только номер задачи.

Список ограничен прямыми подзадачами: подзадачи второго уровня в него не попадают, закрытые не показываются.

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

### Просмотр ресурсов подзадач

Если у задачи есть прямые подзадачи с плановыми или фактическими трудозатратами, в блоке «Ресурсы» рядом с добавлением ресурса появляется кнопка **«Показать подзадачи»**. По нажатию кнопка добавления ресурсов скрывается, а вместо неё появляется кнопка возврата к обычному виду; под основной таблицей открывается плоский список прямых подзадач с их планом и фактом.

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

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

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

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


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

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

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

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

Поле объёма можно оставить пустым — запись добавится с планом 0. Это удобно, когда сотрудника нужно закрепить за задачей заранее, а часы распределить позже: посуточным планом или табелем. Если же в поле введено значение, числом не являющееся — буквы, символы, переполнение вида «1e999», — показывается уведомление «Введите корректное время», и запись не добавляется; пустое поле ошибкой не считается. То же правило действует при правке плана прямо в строке таблицы. При такой ошибке план не сохраняется и на сервер не отправляется: исправьте время и повторите добавление или правку.

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



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

**Строка без исполнителя и её план.** У записи на вид ресурса в целом — в том числе когда в дневном плане ресурс указан повторно — своя строка без исполнителя, и план в ней нулевой. Чужой план в такую строку не подтягивается: система не ищет план по числу минут записи, поэтому случайное совпадение числа минут с идентификатором сотрудника не покажет в строке его план. Сумма строки считается только для записей с исполнителем — по паре «ресурс и исполнитель».

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

Посуточный план тоже ведётся отдельно по каждому ресурсу: дни, введённые для сотрудника в одном ресурсе, не смешиваются с его днями в другом ресурсе той же задачи. Сохранение или очистка вручную введённых дней по одному ресурсу не затрагивает дни того же сотрудника по другим ресурсам.


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

Для плановых трудозатрат действует то же правило: план **себе** в недоступную задачу не сохраняется.


### Распределение по дням и Посуточный план

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

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

**Ноль — значение плана, а не «план не задан».** Сохранённый ноль остаётся нулём и возвращается в блок ресурсов как `0`, а не пустым полем. Обнуляется только выбранный исполнитель: планы соседних исполнителей того же ресурса и планы других ресурсов задачи не меняются. Записи посуточного плана обнулённого исполнителя тоже становятся нулевыми по каждому дню, а не исчезают из календаря. При автоматическом пересчёте посуточных планов ноль не подменяется планом соседнего исполнителя по тому же ресурсу и не разъезжается на соседей, а расчёт срока задачи ноль не двигает.

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



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


Открывается из блока ресурсов кнопкой посуточного календаря. Календарь показывает трудозатраты **одного сотрудника в рамках одного ресурса** — не вида ресурса целиком: если сотрудник назначен на несколько ресурсов, у каждого — свой набор дней. Календарь, открытый из строки ресурса, показывает и сохраняет дни только этого ресурса: дни того же сотрудника по другому ресурсу задачи в него не попадают и при сохранении не перезаписываются. План, записанный до поресурсного учёта — с неуказанным ресурсом или с ресурсом, который уже не совпадает с привязкой сотрудника, — при открытии календаря по текущему ресурсу не теряется и не задваивает день. С правами можно планировать не только себе, но и другим.

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

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

**Цвета:**

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

![Посуточный план: круги-порции по дням и выбор размера порции](https://help.1forma.ru/help-images/resources/effort_plan-1.png)

**Соотношение с общим планом:**

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


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

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



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


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



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


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

| Режим | Поведение при превышении |
|---|---|
| **Фиксированная длительность** | Срок остаётся прежним; превышающий план не сохраняется (предупреждение). Администратор может разрешить изменять план, когда фактические списания уже превысили плановые (см. [admin.md](https://help.1forma.ru/domains/resources/admin.md)) |
| **Фиксированные трудозатраты** | Срок задачи **автоматически сдвигается**, чтобы план поместился |

Нулевой план допустим и в режиме «Фиксированные трудозатраты»: ресурс с планом 0 и процентом загрузки 0 проходит проверку и сохраняется без ошибки. Нулевой процент загрузки допустим только при нулевом плане — при ненулевом плане процент задаётся в диапазоне 1–100.

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

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

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


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

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

**Особенности:**

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

![Внесение факта: зелёные круги факта, красная отметка превышения, комментарий к дню](https://help.1forma.ru/help-images/resources/fixed_labor-01.png)

**Горячие клавиши:** `Ctrl+Alt+1` (5 мин), `Ctrl+Alt+2` (10 мин), `Ctrl+Alt+3` (15 мин) записывают факт сразу, без открытия окна: текущему пользователю за сегодня. Если запись за сегодня уже есть, минуты прибавляются к ней, поэтому повторные нажатия накапливают время; если записи нет — она создаётся. `Ctrl+7` открывает окно внесения факта с произвольным значением. Сочетания не срабатывают, пока курсор стоит в поле комментария или открыто окно внесения факта.

**Кто может вносить факт:**

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

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

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

**Поресурсное списание фактических трудозатрат**

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

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

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

**Доступ к задаче обязателен при внесении себе.** Перечисленные права позволяют вносить трудозатраты, но запись **себе** дополнительно требует доступа к самой задаче. Если задачи нет в области видимости пользователя, запись отклоняется с ошибкой доступа, и в фактических трудозатратах ничего не сохраняется.

Ограничение действует на всех способах внесения: в блоке «Ресурсы» карточки задачи, через представление категории «Ресурсы» и через «быстрое внесение своего факта». Запись **за другого** исполнителя проверяется иначе и видимости задачи не требует.

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


### Таймер ресурса (start / stop)

Таймер — ещё один способ внести фактические трудозатраты: вместо нажатий «+5 мин» и ручного ввода времени сотрудник включает отсчёт на задаче и выключает его, когда работа закончена. Списание делает сервер — по времени работы таймера.

**Один таймер на пользователя.** Активный таймер хранится на сервере, поэтому он один и тот же в любом браузере и на любом устройстве, где пользователь вошёл в систему: запустив отсчёт на работе, сотрудник увидит тот же тик дома, а повторный запуск в другом окне не создаст второй таймер. Пока таймер запущен на одной задаче, запуск на другой отклоняется. Состояние таймера (задача, ресурс, время старта) можно запросить с сервера, поэтому клиент, открытый позже, отрисовывает уже идущий отсчёт с исходного времени старта.

**Что сохраняется при запуске:** задача и — если указан — ресурс задачи. Ресурс проверяется так же, как при ручном внесении факта: если ресурса нет в ресурсном плане задачи или он недоступен для планирования, запуск отклоняется понятной ошибкой, и таймер не создаётся. Запустить таймер можно только на доступной пользователю задаче. Если нажать запуск несколько раз почти одновременно (повторный клик, две вкладки), сработает один запуск, остальные получат обычный отказ «таймер уже запущен» — без внутренней ошибки.

**Остановка и запись факта.** При остановке система считает длительность, округляет её до 5 минут и записывает факт за дату остановки — тем же способом, что и ручное внесение: если за этот день по этому ресурсу запись уже есть, время прибавляется к ней, если записи нет — она создаётся. Если таймер запускали с выбором ресурса — время прибавляется к факту этого ресурса; если без выбора — к факту исполнителя по **ресурсу по умолчанию**. Ранее сохранённое время за этот день не теряется в обоих случаях. Дата записи — день остановки таймера, а не день старта; прибавление к существующему факту согласовано с поведением быстрого внесения, поэтому повторные списания за один день накапливаются.

**Если таймер не запущен**, остановка ничего не делает: повторный стоп без активного старта не создаёт второго факта и не задваивает списание. Стоп, который не смог записать факт — например, день закрыт для правки или задача закрыта, — запись не выполняет и таймер оставляет: сотрудник может повторить остановку после устранения причины. Если остановка не проходит из-за отказа записи и повторить её нельзя, таймер можно **снять без записи факта** и запустить новый на другой задаче: пока такой возможности нет в интерфейсе, это делается через API снятия таймера.

**Границы.** Время работы одного таймера ограничено сверху: слишком долгий отсчёт — забытый таймер — обрезается, чтобы остановка оставалась возможной, а факт за сутки не выходил за суточный лимит.

Таймер описан с двух сторон: как серверная основа — в этом разделе, как кнопки в интерфейсе — в подразделе «Таймер в панели ресурсов» ниже. Снятие таймера без записи факта доступно через серверный запрос; кнопки в интерфейсе для этого пока нет.

#### Таймер в панели ресурсов

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

**Как читается счётчик.** Пока отсчёт меньше часа, время показано минутами и секундами — «05 мин 12 сек». С момента, когда набрался час, формат меняется на часы и минуты — «1:05», секунд в нём больше нет. Счётчик идёт сам, нажимать ничего не нужно.

**Состояние хранится на сервере.** Таймер привязан к пользователю, а не к вкладке браузера: откройте ту же задачу в другом браузере или перезагрузите страницу — отсчёт продолжится с того же момента. Открыли другую задачу — в ней таймер не тикает, пока не нажать «Старт».

**Остановка.** По нажатию «Стоп» время округляется до 5 минут и записывается в трудозатраты за тот день, когда вы остановили таймер, тем же ресурсом, что и при ручном внесении факта. Дополнительно подтверждать запись не нужно. Если таймер шёл дольше 8 часов, перед записью появится вопрос «Вы уверены?» — так выглядят и забытый таймер, и переработка, поэтому лучше проверить.

**Перенос на другую задачу.** Если в этот момент таймер уже идёт на другой задаче, при нажатии «Старт» система спросит, точно ли переключить логирование, и назовёт задачу, где счёт идёт сейчас. Отказ оставляет прежний таймер работающим.

**Границы.** Кнопки таймера есть только в обновлённой карточке задачи; на старой странице карточки таймер запустить нельзя. Если остановка не удалась (например, день закрыт для правки или задача закрыта), таймер остаётся запущенным, а запись не выполняется — остановку можно повторить позже.

### Автоопределение даты начала внесения трудозатрат

При ручном внесении плановых или фактических трудозатрат — в блоке ресурсов задачи или в [табеле](#табель-трудозатрат-пользовательский) — система автоматически определяет дату и время начала выделения ресурса. Алгоритм один и тот же для плана и для факта.

**Логика:**

1. Анализируются плановые или фактические трудозатраты пользователя (или задачи) за текущий день.
2. Дата начала рассчитывается как время старта рабочего дня по производственному календарю с учётом суммы уже внесённых за этот день трудозатрат.
3. Если ресурс ещё не распределён и это **первая запись за день**, датой начала назначается **первый рабочий час** по производственному календарю.
4. Все последующие записи добавляются строго **последовательно**, в порядке внесения, **без временных разрывов** — независимо от того, вводил ли пользователь их в реальном времени или в конце дня. Например: сначала внесено 2 часа на «Задачу 1», затем 1 час на «Задачу 2», 5 минут на «Задачу 3» и снова 5 минут на «Задачу 1» — система разместит их друг за другом, начиная с первого рабочего часа.
5. Если добавленная запись **не умещается** в оставшееся время суток, её начало смещается так, чтобы она завершалась ровно в **24:00**. Например, разовое внесение 23 часов при 8-часовом рабочем дне приведёт к тому, что запись начнётся в 1:00 и закончится в 00:00 (00:00 следующего дня — это то же, что 24:00 текущего).
6. Последующие записи за этот день, если они есть, рассчитываются стандартно — от начала рабочего дня. Подобные ситуации с переполнением считаются редкими и не требуют пересчёта остальных записей.

Рассчитанные дата и время начала отображаются в [представлении категории «Ресурсы»](#представление-категории-ресурсы).



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



Работа с ресурсами укладывается в несколько типовых сценариев:



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



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


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



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


Изменения в плане и факте сохраняются и отражаются в отчётах и в интерфейсе.



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


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


## Бизнес-правила и Связи с другими доменами

В основе работы с ресурсами лежит несколько правил:

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

**Каталог ресурсов и связанные категории.** Список исполнителей каталога, ресурсы категории и связанные категории отдаются только тем, у кого есть право просмотра категории. Пользователь без этого права получает отказ, а не пустой список: данные не читаются. Если сотрудник пришёл по конкретной задаче категории, к которой у него есть доступ, данные отдаются — доступ считается по задаче. Пропали исполнители каталога, ресурсы категории или связанные категории — первым делом проверьте право просмотра категории у группы сотрудника, а не настройки ресурсов; если право есть, проверьте, с каким идентификатором задачи пришёл запрос.



**Связи с другими доменами**


Ресурсы опираются на смежные домены:

- [tasks/business.md](https://help.1forma.ru/domains/tasks/business.md) — задача как контейнер ресурсного плана.
- [categories/business.md](https://help.1forma.ru/domains/categories/business.md) — настройка ресурсов в категориях.
- [users-and-groups/business.md](https://help.1forma.ru/domains/users-and-groups/business.md) — исполнители и оргструктура.
- [calendar/business.md](https://help.1forma.ru/domains/calendar/business.md) — период и нерабочие дни.

Диагностика и настройка ресурсной модели — в [admin.md](https://help.1forma.ru/domains/resources/admin.md).


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

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

![Представление «Ресурсы»: ресурсы слева, шкалы задач справа, контекстное меню события](https://help.1forma.ru/help-images/resources/resource_context_menu.png)


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

Поведение представления подчиняется нескольким правилам:

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


### Строка «Не назначено»

В таблице ресурсов может появляться отдельная строка **«Не назначено»**. В неё попадают назначения без исполнителя — то, что по задаче запланировано или отражено без привязки к конкретному ресурсу.

Строка показывается не всем: она добавляется только тем строкам таблицы, у которых за период представления действительно есть такая неназначенная загрузка — плановая или фактическая, смотря какие отборы «План» и «Факт» включены. Если по ресурсу все задачи за период распределены по исполнителям, строки «Не назначено» у него не будет. Учитываются задачи, доступные текущему пользователю.

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


### Конфиденциальные задачи в таблице ресурсов

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

Если у категории включён выборочный режим конфиденциальности, конфиденциальная задача, на которую пользователь не подписан, в таблицу не попадает: её номера, категории и плановых и фактических часов в выдаче нет, полоса назначения на шкале не показывается. Это не маскировка — задачи просто нет в выборе, поэтому скрывать в ней нечего. Отличие от табличного представления заметно: там такая задача остаётся в списке с закрытым текстом и значениями, здесь её нет вовсе. Если у сотрудника задача пропала из таблицы ресурсов, нужно проверить подписку, а не права на категорию.

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

Подписчик конфиденциальной задачи видит её и её часы как обычно. Владелец задачи отписаться от неё не может, поэтому часы своей конфиденциальной задачи он тоже видит. Категории с выключенной конфиденциальностью и с режимом «Каждая задача конфиденциальна» работают как прежде: во втором режиме задачи и до этого попадали в ресурсы только подписчикам.

То же правило действует в своде ресурсов раздела, который собирает задачи всех доступных категорий раздела.

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

Период отображается с правилами форматирования:

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

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


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

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

**Чем ограничена длина создаваемой аллокации.** Аллокация, созданная кнопкой «+» по пустой ячейке шкалы, отсчитывает окончание по производственному календарю в часовом поясе профиля пользователя, а не по поясу браузера: результат одинаков при поясе браузера UTC, Europe/Moscow или America/Anchorage, если пояс профиля один и тот же. Клик в нерабочее время удлиняет аллокацию до конца рабочего окна тех же суток по поясу профиля. Длина задаётся нижним делением шкалы: на масштабе «День» клик даёт один час, на «Неделе», «Месяце» и крупнее — не менее одного рабочего дня, причём пресеты с недельным нижним делением дают ту же длину, что и «Неделя», а не рабочую неделю.

При рабочем дне, настроенном с 00:00 до 24:00 (1440 минут), в масштабе «День» полосу распределения можно растягивать до самых границ суток. В масштабах «Неделя», «Месяц» и «Квартал» остановка курсора на отметке 00:00 (начало или конец дня) корректно фиксирует границу распределения без появления лишнего часа на соседнем дне.

В масштабе «Расписание» шкала показывает одну календарную неделю, и её границы отсчитываются по часовому поясу пользователя, а не по поясу браузера. Из этого следует, что аллокация, занимающая в исходном поясе полные сутки, у пользователя в другом поясе ложится на два соседних дня.


**Что считается в поясе профиля.** Суточное дробление события и определение выходных дней выполняются по часовому поясу пользователя (профиля), а не браузера. В масштабе «День» это значит: при включённом дроблении событие распадается на полосы по суткам пояса профиля без перекрытий, а правый край полосы стоит по времени окончания в том же поясе; при выключенном дроблении событие показывается одной сплошной полосой. При пересечении выходных полоса по-прежнему прерывается — это общее правило, и оно тоже считается по поясу профиля.

**Предел недельной шкалы.** В масштабе «Расписание» полосы прилипают к границам суточных делений шкалы, поэтому по недельной шкале нельзя ждать точного правого края по времени окончания или отсутствия перекрытия при поясе профиля, смещённом относительно пояса браузера. Это ограничение масштаба, а не незакрытый дефект: точные гарантии действуют в масштабе «День».

**Смена пояса в сессии.** Если часовой пояс профиля изменить в открытой сессии, шкала пересчитывается сразу, без перезагрузки страницы.

### План / Факт и Добавление часов

**Строка «Не назначено».** Если у ресурса есть план, но ни один исполнитель не назначен, в таблице ресурсов появляется отдельная строка «Не назначено». Она показывается рядом с реальными исполнителями того же ресурса, а не вместо них; удалить эту строку нельзя, потому что исполнителя у неё нет. План по ней редактируется как обычно, а факт доступен только для просмотра: значение показывается, если сервер его вернул, но изменить его из этой строки нельзя.

**Планирование без исполнителя («Не назначено»).** Ресурсное представление бывает трёх видов: по конечным ресурсам (помещения, техника), по типу ресурса и по задачам, которые используют ресурсы. Строка «Не назначено» работает во всех трёх по одному правилу: она появляется у того типа ресурса, по которому за период представления есть плановая загрузка без исполнителя, и не появляется, если все задачи распределены по исполнителям.

Типы ресурсов не смешиваются: если по задаче запланированы часы без исполнителя на два типа ресурса, в представлении по конечным ресурсам будет две строки «Не назначено» — по одной на каждый тип, и часы одного типа в строку другого не попадают.

Первую плановую полоску без исполнителя удобнее создавать из представления по типу ресурса: там при создании исполнитель не выбирается, и полоска сразу закрепляется за парой «задача и тип ресурса». После этого строка «Не назначено» появляется и в представлении по конечным ресурсам. Так же можно внести запись без сотрудника в блоке «Ресурсы» карточки задачи — выбрав вид ресурса и не отмечая исполнителей.

В строке «Не назначено» плановую полоску можно передвинуть по времени, удалить и перенести на строку конкретного исполнителя — так работа закрепляется за ним. Фактические трудозатраты на «Не назначено» не вносятся: система отвечает «Невозможно внести трудозатраты для неназначенного исполнителя».

**Чем различаются представления.** В представлении по типу ресурса показываются плановые полоски, закреплённые за видом ресурса в целом: новая полоска, созданная кнопкой «+» на шкале типа ресурса, сохраняется без исполнителя. В представлении по конечным ресурсам строка «Не назначено» появляется у типа ресурса, только если за выбранный период по нему уже есть хотя бы одно назначение без исполнителя, — если все планы закреплены за сотрудниками, строки не будет, чтобы не загромождать таблицу; в появившейся строке можно создавать назначения, менять их длительность и границы и переносить полоски на строки конкретных исполнителей. В представлении по задачам, использующим ресурсы, строка «Не назначено» есть у каждого доступного типа ресурса — так резервируют часы по категориям специалистов до подбора команды.

Режим отбора переключается списком в верхней части экрана: в нём три пункта — **План**, **Факт** и **План/Факт**; выбранный пункт отмечен галочкой, и его подпись стоит в кнопке списка.

- **План** — на шкале только плановые назначения.
- **Факт** — только фактические.
- **План/Факт** — плановые и фактические интервалы на одной шкале рядом, поэтому видно, где фактическая работа разошлась с планом.

Выбор любого пункта перезагружает события на шкале, а положение и масштаб шкалы при этом сохраняются.

| Отбор | Что видно | Что можно делать |
|-------|-----------|------------------|
| **План** | Только плановые назначения | Переносить, растягивать, править и удалять |
| **Факт** | Только фактические назначения | То же |
| **План/Факт** | Плановые и фактические назначения одновременно | Только смотреть: перенос, растягивание, создание и удаление недоступны |

Режим «План/Факт» нужен, чтобы сравнить, где работа шла по плану, а где вышла за него: плановое и фактическое назначения по одной задаче показываются рядом, отдельными отрезками. При ручном внесении трудозатрат система автоматически определяет дату и время начала выделения ресурса (последовательное размещение записей, сдвиг к 24:00 при переполнении дня) — подробнее см. [Автоопределение даты начала внесения трудозатрат](#автоопределение-даты-начала-внесения-трудозатрат).

Пока выбран режим «План/Факт», редактирование недоступно: нельзя создать назначение протяжкой по пустой области или кнопкой «+», открыть меню события и окно редактирования, перетащить назначение по времени и между ресурсами, изменить длительность, удалить назначение, скопировать, вырезать или вставить его. Чтобы вернуть обычные операции, переключитесь в «План» или «Факт». В сравнительном режиме плановое и фактическое назначения одной задачи собираются в одну компактную группу без заголовка и кнопки раскрытия; если у задачи несколько интервалов одного вида, все они остаются внутри своей группы, а разные ресурсы и исполнители одной задачи дают отдельные группы. В плоских режимах шкала возвращается к обычному виду с прежней высотой строк.

**Как выглядят полосы.** По каждой задаче рисуется плотная группа из двух полос — плановой и фактической; названия у группы нет и раскрывающего плюсика тоже нет. Если задача занимает несколько интервалов одного вида, все они остаются под своей группой, а не сворачиваются в одну длинную полосу. Когда есть только план или только факт, показывается имеющаяся полоса: план без пары остаётся серым, факт — в цвете своего шаблона, группа при этом не скрывается.

**Цвет плановой полосы** показывает, куда ушёл факт: факт закончился позже плана — полоса плана красная, раньше плана — зелёная, даты окончания совпали — серая. Сравниваются именно даты окончания; дата начала и длительность на цвет не влияют. Если плановых отрезков несколько, цвет считается по самому позднему окончанию. Цвет факта берётся из шаблона ресурса — как и в режиме «Факт».



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


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

**Длительность нового назначения.** Назначение, созданное кнопкой «+», начинается с кликнутого деления шкалы и занимает одно деление. Если деление — час (например, на масштабе «День»), назначение длится час; более крупное деление — день, неделя, месяц — пересчитывается в рабочее время, но не короче одного рабочего дня. Длина создаваемого назначения не зависит от часового пояса браузера: она считается по поясу профиля пользователя.

**Контроль занятости (масштаб «Расписание»).** Для масштаба «Расписание» нельзя создать новое назначение, если рабочий день ресурса уже полностью занят ранее запланированной нагрузкой. Например, если на исполнителя на день уже запланировано 4 часа, добавлять назначения можно, пока суммарное время планов не превысит 8 часов; при 8 часах запланированной работы кнопка «+» для этого дня недоступна.

**Доступность кнопки «+».** Зависит от права пользователя на создание задач. Система анализирует права для всех категорий, включённых в представление: кнопка доступна, если право на создание задач есть хотя бы в одной из них; если ни в одной — кнопка недоступна. Если администратор задал конкретную целевую категорию для новых задач, доступность «+» определяется правом на создание задач **именно в этой категории**, а не в любой из категорий представления. В меню выбора категории для новой задачи отображаются только категории, в которых у пользователя есть право на создание задач.

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

![Окно добавления трудозатрат в ячейке временной шкалы](https://help.1forma.ru/help-images/resources/subcat_resources_grid-02.png)


### Масштабы

Доступно несколько масштабов временной шкалы:

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

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

<img src="https://help.1forma.ru/help-images/resources/view_resources_-005.png" alt="Выбор масштаба временной шкалы" width="360">

**Позиция шкалы.** При открытии представления «Ресурсы» временная шкала центрируется на текущей дате. При переключении масштаба шкала снова возвращается к текущей дате — прокрутка, сделанная в предыдущем масштабе, не сохраняется.

### Граница между таблицей и шкалой

Границу между таблицей ресурсов слева и временной шкалой справа можно перетаскивать — так пользователь решает, сколько места занимает каждая часть.

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

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

### Итоги таблицы ресурсов

Для колонок таблицы ресурсов можно задать операцию итога — тогда под списком выводится строка итогов. Набор операций зависит от типа колонки: по числу, деньгам и проценту доступны сумма, среднее, минимум и максимум; по чекбоксу — количество включённых и количество выключенных или пустых; по лукапу, выпадающему списку и комбобоксу — число строк со значениями, без значений и число уникальных значений. Операции задаются администратором в настройках вида (см. [admin.md](https://help.1forma.ru/domains/resources/admin.md), раздел «Итоги по колонкам таблицы ресурсов»): пока в колонке стоит «Выкл», итог по ней не считается, а флаг «Считать в группировке» отключает выбранные операции сразу у всех колонок. Пока этот флаг выключен, строки итогов под таблицей нет: он управляет расчётом итогов для всего вида, а не только для групп. Флаг появляется при заданной группировке; если группировку убрать, флаг сбрасывается и строка итогов исчезает.

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

**Где находится строка итогов.** Итоги выводятся строкой под списком ресурсов — в таблице слева. Временная шкала задач справа итогов не имеет: числа в ячейках шкалы остаются числами ячеек.

**Чем считается итог.** Значения итогов считает сервер по всей выборке, попавшей в таблицу под текущими фильтрами, и присылает их вместе со строками. Браузер не пересчитывает итог по загруженным строкам, поэтому на длинных списках итог не равен сумме видимых строк и не меняется при прокрутке и подгрузке следующих ресурсов: подгружаются строки, а не новый расчёт.

**Итог и отборы.** В выборку итога входят те же ресурсы, что остались в таблице после всех отборов, — фильтров колонок, быстрого поиска и флага «Ресурсы только с аллокациями». Если после отбора строк не осталось, счётчики показывают 0, а числовые итоги — прочерк: считать нечего. Номер страницы и подгрузка следующих ресурсов на итог не влияют: он считается по всей выборке сразу. Если дополнительная выборка для расчёта итогов не удалась, таблица отдаётся с пустыми итогами, а не с нулями.

**Что видно при отсутствии значения.** Если по колонке в выборке нечего считать, в ячейке итога стоит прочерк — это не ноль. Ноль и прочерк означают разное: ноль означает, что значение есть и оно нулевое, прочерк — что итог по колонке не выводится.

**Что видно при группировке.** Строка итогов одна на всю таблицу и показывает итог по всей выборке, независимо от того, как ресурсы разложены по группам. Итога внутри каждой группы таблица не показывает — в группах видны только счётчики строк. Названия колонок в строке итогов повторяют колонки таблицы, поэтому итог сразу читается вместе со своей величиной. Подписи операций в настройках вида — «Сумма», «Среднее», «Минимум», «Максимум», «Количество включённых (true)», «Количество выключенных (false) или пустых», «Строк со значениями», «Строк без значений», «Уникальных значений».

### Утилизация ресурсов

Кнопка **«Утилизация»** в панели инструментов показывает суммарную загрузку ресурсов. Экран делится по горизонтали пополам: сверху остаётся планировщик, снизу открывается таблица утилизации. Слева в ней перечислены ресурсы, справа — ячейки временных сегментов текущего масштаба шкалы; в ячейке выводится сумма часов всех аллокаций ресурса за этот период, поэтому складывать загрузку вручную не нужно. Ширина левой колонки совпадает с таблицей ресурсов планировщика.

Повторное нажатие кнопки закрывает таблицу и возвращает планировщику всю высоту. Пока идёт первая загрузка данных, кнопка недоступна. Цветовой индикации перегрузки в таблице нет — ячейки показывают только числа.

При включённой группировке строк в таблицу утилизации каждое назначение входит один раз: общая полоса задачи не складывается со своими вложенными планом и фактом, а строки, объединённые в группу, не считаются дважды. Поэтому переключение режимов «План», «Факт» и «План/Факт» не меняет загрузку ресурса на одних и тех же данных, а кнопка «+» в частично свободной ячейке ведёт себя одинаково во всех трёх режимах. У строк-заголовков групп кнопки нет, и назначение, полностью закрывающее ячейку, занимает её целиком.

### Фильтрация и отборы и Контекстное меню ресурса

Задачи на шкале можно отобрать по нескольким критериям:

- По статусам основного маршрута: все, активные, закрытые, отклонённые.
- По преднастроенным отборам категории.
- По роли пользователя: исполнитель, заказчик, акцептант, «в параметрах».
- Фильтрация по значениям дополнительных параметров через фильтры-чипы.
- Фильтр по дополнительному параметру Lookup или MultiLookup работает так же, как в канбане: выбирается несколько связанных задач, у Lookup достаточно совпадения с любой из них, у MultiLookup — когда в задаче есть все выбранные значения, а дополнительные значения не мешают. Список полей и преобразование выбранного значения в запрос общие для ресурсов, канбана, календаря и табличного представления — см. «Общее меню фильтров по дополнительным параметрам» в [справочнике по фильтрации](https://help.1forma.ru/domains/grids/filters-reference.md).
- Фильтр по параметру «Выбор из списка» и по параметру «Выбор пользователя» работает так же, как в канбане: открывается список значений, значение выбирается из него, а не вводится текстом; в отбор уходит идентификатор выбранной записи, а в чипе показывается название.
- Флаг «Ресурсы только с аллокациями» — скрывает ресурсы без назначений в отфильтрованных задачах. Назначения берутся не за всю историю, а за загруженный период: при открытии представления это текущий год, при прокрутке шкалы в соседние годы период расширяется до целых лет, и недостающие строки догружаются к уже показанным — назначения и строки, которые вы видели, остаются на месте, шкала не перезагружается и не «моргает». Если прокрутка быстро проходит несколько границ лет подряд, запрос уходит один — на итоговый период. Возврат внутрь уже загруженного периода нового запроса не делает. В масштабах «День» и «Расписание» ограничение по годам не применяется, а при выключенном флаге поведение прежнее.



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


По правому клику на событии доступны действия:

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


### Поиск

Кнопка лупы в панели инструментов раскрывает поле поиска. Поиск ведётся:

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

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

![Поиск по ресурсам и задачам на временной шкале](https://help.1forma.ru/help-images/resources/resources_search.png)


### Временная шкала при группировке ресурсов

Группировка строк таблицы ресурсов меняет только левую часть представления: строки ресурсов собираются под заголовками групп по выбранному полю группировки, группы раскрываются и сворачиваются. Временная шкала справа рисуется так же, как без группировки, на всех масштабах — «День», «Неделя», «Месяц», «Квартал», «Год», «Три года» и «Расписание»:

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

Сводных полос по периоду («N задач · M ч») шкала не строит ни при каком масштабе: состав периода виден по отдельным полосам задач, отдельного окна со списком задач ячейки нет.

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

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

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

![Меню действий: вид по умолчанию, расширенное добавление, ресурсы только с аллокациями](https://help.1forma.ru/help-images/resources/subcat_view_resources_actions.png)

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

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

**Сортировка по заголовкам.** Щелчок по заголовку колонки таблицы ресурсов сортирует строки по этой колонке, Ctrl+щелчок добавляет колонку к уже выбранной сортировке, Ctrl+Alt+щелчок убирает её из сортировки. Сортировать можно основные колонки с текстом, числами, датами и флажками, колонки задачи, категории, автора, исполнителей, приоритета, статуса и подразделения, а также колонки дополнительных параметров типов «Текст», «Число», «Деньги», «Дата», «Дата и время», «Флажок», «Выпадающий список» (в том числе с редактированием), Lookup и Multilookup. **Сортировка ресурсных колонок — на сервере.** Колонки, которые относятся к исполнителю ресурса — «Ресурс», «Орг.структура», «Должность», «Руководитель», — сортируются на сервере: одной сортировки по такой колонке достаточно, чтобы представление запросило список целиком и показало строки в том порядке, в котором их вернул сервер. Порядок пустых значений и правила сортировки кириллицы при этом серверные — те же, что в остальных таблицах платформы. Если среди ключей сортировки есть хотя бы одна ресурсная колонка, представление загружает список одним запросом (до 10 000 строк), а не страницами по 300 строк — это заметно по индикатору загрузки и по появлению строк сразу всем списком. Когда сортировка задана только по колонкам задачи, категории, статуса, срока или дополнительного параметра, представление по-прежнему подгружает строки страницами.

**Строка итогов и отбор «только с аллокациями».** Итог считается по оставшимся после этого отбора ресурсам: если строк не осталось, счётчики равны 0, а числовые итоги показываются прочерком.

**Колоночная фильтрация в таблице ресурсов.** В меню заголовка колонки доступна фильтрация; она выполняется на сервере и применяется ко всему набору строк, сохраняя постраничную нарезку таблицы.

- **Колонка «Ресурс»** фильтрует строки по видимой подписи исполнителя или названию ресурса, а не по названию задачи. Условие применяется ко всему сформированному набору ресурсов, а не только к отображаемым строкам страницы.
- **Строка «Не назначено»** считается пустым значением подписи: она отбирается условиями «пусто», исключается условием «не пусто», а при текстовых условиях сравнивается со своей отображаемой подписью.
- **Набор операций** в меню колонки — только те, что поддерживает сервер: содержит, не содержит, начинается с, заканчивается на, равно, не равно, пусто, не пусто. Некорректные параметры фильтрации отклоняются с сообщением об ошибке, а не отдают неотфильтрованный набор.
- **Итоги** под таблицей ресурсов пересчитываются по выборке, соответствующей применённому фильтру.

Выбранная сортировка сохраняется вместе с остальными настройками представления и подставляется при следующем открытии, в том числе когда диапазон дат на шкале расширяется и строки подгружаются заново. Снимается она действием «Вид по умолчанию»; клик по заголовку идёт по кругу «по возрастанию → по убыванию → без сортировки». Сортировка по названию ресурса задаётся полем «Сортировка» в настройках вида.

Порядок строк при открытии представления задаёт поле «Сортировка» в настройках вида.

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

**Ширина колонок.** Ширину колонки таблицы ресурсов можно менять, потянув за границу заголовка. У каждой колонки есть нижний предел, ниже которого она не сужается: у колонок с кнопками он заметный — там должны помещаться сами кнопки, — у остальных небольшой. Предел не зависит от настроек вида: включение и снятие группировки его не меняют, колонку можно сузить так же, как без группировки. Заданная вручную ширина запоминается в персональных настройках представления и применяется при следующем открытии; сбрасывается она вместе с остальным видом — действием «Вид по умолчанию».

**Позиция списка при группировке.** Клик по строке заголовка группы раскрывает или сворачивает её, не меняя позицию просмотра: страница не возвращается в начало, список остаётся там же, где был до нажатия, и строки выше и ниже группы не сдвигают его к первой строке. Это относится к раскрытию и сворачиванию отдельных групп; пункты «Развернуть все группы» и «Свернуть все группы» контекстного меню заголовка колонки работают со всем списком сразу.

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

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



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



Сводный личный табель трудозатрат пользователя — интерактивная матрица «задача × день» за выбранный период. Открывается из профиля пользователя, адрес — `/user/time-sheet`. Слева закреплены колонки с данными задачи: номер задачи ссылкой, название и теги бейджами под ним, категория, статус бейджем в цвете статуса, назначенный ресурс, плановые начало и срок (дата первой строкой, время второй — если время не задано или равно 00:00, выводится только дата) и суммарные «Факт / План» за период. Справа — сетка дней, внизу закреплена строка «Итого».

### Где виден активный таймер

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

**Вкладка «Трудозатраты» в профиле.** Откройте свой профиль и вкладку «Трудозатраты» — здесь открывается табель. Над таблицей виден активный таймер и рядом с ним номер задачи, в которую идёт логирование. Номер кликабельный: перейдите по нему в задачу — там будет тот же идущий таймер, так легко вспомнить, чем вы занимались. Кнопка «Стоп» останавливает таймер, время уходит в задачу, а страница трудозатрат перерисовывается под новую запись.

Запустить таймер из профиля нельзя: отсюда неясно, в какую задачу логировать время. Старт — только в панели ресурсов карточки задачи.

**Шапка табеля.** На странице табеля полоса активного таймера стоит в шапке, между поиском и тикерами ввода: время и кнопка «Стоп». При наведении на полосу видно, по какой задаче идёт счёт. Если таймер не запущен, полосы нет — пустой блок не занимает места, отдельной настройки «показывать или скрывать» не существует.


### Состав табеля и Режимы отображения

По умолчанию в табель попадают:

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

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

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



**Слои ввода**


Активный слой ввода переключается чипами в панели инструментов:

| Слой | Что делает внесение |
|-------|-----------------|
| **Факт** | Внесение регистрирует отработанное время поверх плана |
| **План** | Внесение корректирует плановые часы дня |

**Цветовая кодировка ячеек:**

- 🔵 Голубой — запланированные трудозатраты без факта
- 🟢 Зелёный — акцептованный факт
- 🟡 Жёлтый — факт без акцепта
- 🔴 Красный — превышение плана
- ⚪ Серый — ввод по ячейке заблокирован

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

Ячейку можно показывать кружками или числами — переключатель в панели инструментов. В числовом виде выводятся факт и план.

Единицы переключаются там же: **Часы** — значения в часах и минутах, **Дни** — доля от нормы этого рабочего дня по производственному календарю в процентах (например, 6 часов при норме 7 — 86%). В день с нулевой нормой процент не считается, показываются часы.


### Навигация и периоды и Ввод трудозатрат

Перемещаться по табелю можно так:

- Переключение периода — стрелки назад/вперёд.
- Масштаб периода: **Рабочая неделя** (5 дней), **Неделя** (7 дней), **День**, **Месяц**; по умолчанию открывается **Рабочая неделя**. В масштабе «День» период — один день, стрелки сдвигают его на сутки, «Сегодня» возвращает на текущий день.
- Период загружается вместе с последним днём — пятницей рабочей недели, воскресеньем, последним днём месяца, поэтому итоги за период совпадают с прежним табелем трудозатрат.

Сетка учитывает производственный календарь: выходные и праздники выделены, у предпраздничного дня норма сокращена. Подсказка на заголовке дня показывает норму часов или помечает день нерабочим. Текущий день выделяется в шапке колонки.



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


В панели инструментов выбирается объём быстрого ввода — 5 минут, 15 минут, 30 минут, 1, 2, 4 или 8 часов; по умолчанию выбран 1 час. Порция 5 минут вносит пять минут: в кружках это сектор 1/12 полного круга, в числовом виде — «5м». Клик по ячейке дня вносит этот объём в активный слой; чтобы заполнить сразу несколько дней или задач, выделите диапазон ячеек и нажмите Enter — объём применится ко всем незаблокированным ячейкам выделения.

Правый клик по ячейке открывает пункт «Редактировать»: в окне задаются «План, минут», «Факт, минут» и комментарий, независимо от активного слоя. Ячейка с комментарием помечается.

Несохранённые ячейки подсвечиваются; пока правки не сохранены, рядом с «Сохранить» доступна «Отмена», сбрасывающая их все. При попытке уйти со страницы или переключить слой система предупредит о несохранённых изменениях и предложит сохранить их или сбросить. Остановка активного таймера из шапки табеля — та же команда, что и «Сохранить», поэтому с несохранёнными правками она спрашивает отдельно: сохранить их и остановить таймер либо отменить остановку — тогда таймер продолжает идти, а правки остаются на месте. Варианта «остановить и выбросить правки» в этом окне нет; подробнее — в разделе «Где виден активный таймер».

При ручном внесении плановых и фактических трудозатрат в табеле дата и время начала выделения ресурса определяются автоматически: расчёт ведётся от первого рабочего часа производственного календаря, записи размещаются последовательно без разрывов, при переполнении дня запись смещается к 24:00. Алгоритм идентичен применяемому в блоке «Ресурсы» — подробное описание см. в разделе [Автоопределение даты начала внесения трудозатрат](#автоопределение-даты-начала-внесения-трудозатрат).

| Кнопка | Действие |
|--------|----------|
| Дополнительные задачи | Меню «…»: список задач, доступных для списания. Клик добавляет задачу строкой в табель; уже добавленные помечены и недоступны |
| Все активные задачи | Меню «…»: показать все активные задачи, где пользователь исполнитель |
| Сохранить | Сохранить все изменения (активна при наличии несохранённых данных) |
| Отмена | Сбросить все несохранённые изменения |
| Информация | Меню «…»: легенда цветов и подсказка по вводу |
| Экспорт CSV | Меню «…»: выгрузка данных табеля в файл |

### Где открывается табель

Основной адрес табеля — `/user/time-sheet`; пункты «Табель трудозатрат» в меню аватара и в боковом меню ведут туда же. Вкладка «Трудозатраты» в профиле пользователя показывает табель **того пользователя, чей профиль открыт**: ФИО в шапке табеля здесь не выводится, а таблица занимает область вкладки без второй карточки внутри. Права на чужой табель — те же, что и в блоке «Ресурсы» карточки задачи: в нём видно только то, что пользователю доступно.

### Шапка табеля

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