# Ресурсы — Администрирование

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

## Механизмы администрирования

### Автоадминка / SPA-страницы

Формы автоадминки и SPA-страницы для настройки ресурсов:

| Форма / Страница | Назначение | Где находится |
|-----------------|-----------|---------------|
| Ресурсное планирование (в категории) | Включение/настройка ресурсного управления в категории | Категория → вкладка «Ресурсы» |
| Представление категории → Ресурсы (data-source-settings) | Стартовая группировка и сортировка вида Ресурсы | Категория → Настройки представления → блок «Ресурсы» |
| Масштабы представления Ресурсы | Выбор доступных масштабов | Категория → блок «Ресурсы» → кнопка шестерёнки |
| Конфигурации Планировщика | Создание/редактирование/права конфигураций планировщика | Админка → Интерфейс → Планировщик |
| Шаблоны задач (универсальные) | Создание пользовательских шаблонов для ресурсов | Админка → МП → Шаблоны задач |
| Привязка шаблонов к категории | Назначение созданных шаблонов категории | Категория → блок «Формы» → Шаблонизация |
| CustomSettings `resourcesSubcatDefaults` | Глобальная настройка приложения | Общие настройки приложения → custom-app-settings |

### API администрирования

Маршруты API для администрирования ресурсов:

| Маршрут | Методы | Назначение |
|---------|--------|------------|
| `/api/admin/subcategories/{subcatId}/resources` | GET, POST | Ресурсные категории и доступные ресурсы |
| `/api/admin/subcategories/{subcatId}/universal-templates` | GET, POST | Универсальные шаблоны и правила применения |
| `/net-core-api/datasource/resources/{subcatId}/data` | POST | Данные ресурсов для планировщика |
| `/api/tasks/tasks-for-performers` | POST | Задачи для исполнителей с планами/фактами |

## Настройки ресурсного планирования в категории

> **Где настраивается:** Категория → вкладка «Ресурсы» → опция «Ресурсное управление».
> **Доступно с версии:** v2.262+

После включения «Ресурсное управление» становятся доступны параметры:

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

### Основные параметры

Доступные параметры ресурсного планирования и их значения:

| Параметр | Описание | Значения |
|----------|----------|----------|
| Требуется подтверждение планового исполнителя | Запрос подписи владельца ресурса при назначении исполнителя | `true` / `false` |
| Метод планирования | Режим распределения объёма | `Фиксированная длительность` / `Фиксированные трудозатраты` |
| Режим плановых трудозатрат | Доступность внесения плана | `Можно вносить` / `Нельзя вносить` / `Обязательно вносить` |
| Обязательно вносить фактические трудозатраты перед завершением | Блокировка завершения задачи без факта | `true` / `false` |
| Запрещено редактировать фактические трудозатраты в терминальных статусах | Защита факта после завершения | `true` / `false` |
| Синхронизировать плановые трудозатраты | Автораспределение плана между ресурсами | `true` / `false` |
| Объёмно-календарный план зависит от персонального | Правило изменения общего плана при редактировании дневного | `true` / `false` |
| Плановые трудозатраты по умолчанию (мин) | Значение по умолчанию для ресурса | Число (минуты) |
| Отображать блок ресурсного планирования по smart-фильтру | Условие видимости блока в задаче | SmartFilter / пусто (всегда) |
| Выключить автоматическое распределение | Запрет автораспределения плана по дням | `true` / `false` |
| Разрешить списывать фактические трудозатраты в будущем | Возможность вносить факт за будущие даты | `true` / `false` |
| Не ограничивать видимость трудозатрат | Видимость трудозатрат для всех с правом просмотра | `true` / `false` |
| Уведомлять заказчика о превышении трудозатрат | Автоуведомление при превышении факта над планом | `true` / `false` |
| Группа, уведомляемая о превышении плана | Получатели уведомлений | Группа пользователей |

⚠️ **Выключить автоматическое распределение** необходимо, если категория используется как источник для Планировщика с блоком нераспределённых задач. При отключённом параметре незакрытый остаток плановых затрат перераспределяется по дням при внесении факта задним числом.

### Справочник ресурсов и ресурс по умолчанию

> **Ресурс по умолчанию:** вкладка «Ресурсы» → блок «Ресурс по умолчанию» (v2.262+).
> **Справочник:** категория «Справочник ресурсов» (раздел Системный, тип «Ресурсы»).

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

1. Выбрать одну или несколько категорий-справочников в «Категории ресурсов» (доступны категории с типом «Ресурсы»).
2. После сохранения в поле «Ресурс по умолчанию» выбирается экземпляр ресурса из указанных категорий.

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

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

При создании новой записи в справочнике указываются ключевые параметры: название ресурса и обязательно тип ресурса (`Трудовой` / `Затратный`). Для трудовых ресурсов дополнительно отображается поле «Подтип».

![Карточка ресурса в «Справочнике ресурсов»: тип, подтип (Сотрудник / Внешний ресурс / Материальный объект) и параметры](https://help.1forma.ru/help-images/resources/resources_reference-01.png)

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

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

- **Сотрудник** — работа одного или нескольких сотрудников компании; соответствует роли «Исполнитель» в задачах.
- **Внешний ресурс** — работа внешнего контрагента.
- **Материальный объект** — устройство, оборудование, помещение, автомобиль и т.п.

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

**Рекомендуемые настройки:**

- Администраторам — полные права на категорию.
- Пользователям — только право на просмотр.
- Режим установки срока: «Отключён».

**Дополнительные параметры Справочника ресурсов:**

| ДП | Тип | Описание |
|----|-----|----------|
| Тип ресурса | Выпадающий список | `Трудовой` / `Затратный` |
| Подтип | Выпадающий список | `Сотрудник` / `Внешний ресурс` / `Материальный объект` (только для Трудовых) |
| Основные исполнители | Выбор пользователей | Группа орг. структуры — основные исполнители ресурса |
| Дополнительные исполнители | Выбор пользователей | Группа орг. структуры — дополнительные исполнители |
| Владелец ресурса | Выбор пользователей | Ответственный за распределение ресурса |
| Внутренний исполнитель | Выпадающий список | Связь записи Справочника ресурсов с категорией экземпляров |
| Количество ресурса | Число | Доступное количество (только для Затратных) |
| Единица измерения | Строка | `день`, `час`, `минута` и т.д. |
| Стоимость | Деньги | Стоимость единицы |
| Стоимость сверхурочно | Деньги | Стоимость единицы сверхурочно |
| Группы, обладающие правом планировать ресурс | Выбор пользователей (группы) | Ограничение на планирование ресурса |

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

### Связь ресурсов с исполнителями и приоритет прав

В зависимости от подтипа трудового ресурса для него задаются связи со справочниками системы. Установление таких связей выполняется в режиме администрирования системными администраторами.

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

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

Примеры:

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

Приоритет прав планирования ресурса:

1. Сам пользователь всегда может вносить свои плановые трудозатраты.
2. Участники групп, указанных в параметре «Группы, обладающие правом планировать ресурс» — для данного ресурса/исполнителя.
3. Редактировать плановые трудозатраты могут: администраторы, заказчик задачи, сотрудники с правом назначать исполнителей.
4. Назначать исполнителей по ресурсу могут: администраторы, сотрудники с правом назначать исполнителей.

### Порядок настройки блока ресурсов и учёт отсутствий

Последовательность настройки блока ресурсов:

1. Создать категорию ресурсов (тип «Ресурс»), если отсутствует.
2. Создать связь категории с категорией ресурсов на вкладке «Ресурс по умолчанию».
3. Добавить категорию ресурсов в сводный раздел (общие настройки → Сводный раздел типов ресурсов).
4. Для материальных объектов — создать категорию экземпляров (тип «Экземпляры ресурсов»).
5. Добавить категорию экземпляров в сводный раздел (общие настройки → Сводный раздел экземпляров ресурсов).
6. При создании экземпляров выбрать Тип ресурса экземпляра (автоматический ДП, источник — сводный раздел типов ресурсов).

**Для сотрудников** пункты 4–6 не нужны (хранятся в служебной таблице пользователей).

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

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

## Пользовательские шаблоны задач для Ресурсов

> **Где настраивается:** МП → Шаблоны задач → Создать.
> **Доступно с версии:** v2.262+

Для представления категории «Ресурсы» можно создать два динамических шаблона:
1. **Шаблон карточки ресурса** — отображение бара события на таймлайне.
2. **Шаблон подсказки (tooltip)** — всплывающая подсказка при наведении.

### Структура JSON карточки ресурса

Динамический шаблон карточки ресурса создаётся в МП → Шаблоны задач с параметрами: Контекст `Cell`, Тип `dynamic`, Категория — целевая категория.

| Параметр | Значение для ресурсов |
|----------|----------------------|
| Контекст | `Cell` |
| Тип | `dynamic` |
| Категория | Категория, для которой создаётся шаблон |

Тело динамического шаблона — JSON трехуровневой структуры: `sections` → `blocks` → `elements`.

**Базовый шаблон карточки ресурса:**

```json
{
  "contexts": [
    {
      "context": "resources",
      "settings": {
        "templateClass": "resources"
      },
      "sections": [
        {
          "blocks": [
            { "alias": "rightIcon", "elements": [] },
            { "alias": "leftIcon", "elements": [] },
            { "alias": "leftTop", "elements": [] },
            { "alias": "rightTop", "elements": [] },
            { "alias": "leftMid", "elements": [] },
            { "alias": "rightMid", "elements": [] },
            { "alias": "leftBottom", "elements": [] },
            { "alias": "rightBottom", "elements": [] }
          ]
        }
      ]
    }
  ]
}
```

**Обязательно:** `"context": "resources"`, `"templateClass": "resources"`.

Блоки позиционирования (8 слотов):

| Alias | Позиция | Примечание |
|-------|---------|------------|
| `leftIcon` | Большая левая иконка | Для иконок задач из ДП Lookup/Multilookup |
| `rightIcon` | Большая правая иконка | |
| `leftTop` | Текст сверху слева | Текстовые элементы |
| `rightTop` | Текст сверху справа | Выравнивание по правому краю |
| `leftMid` | Текст посередине слева | |
| `rightMid` | Текст посередине справа | Выравнивание по правому краю |
| `leftBottom` | Текст снизу слева | |
| `rightBottom` | Текст снизу справа | Выравнивание по правому краю |

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

### Параметры elements шаблона карточки

Параметры элемента (elements) задают источник данных, вид отображения, форматы дат и настройки карточки:

**Источники данных**

| Параметр | Описание | Значения |
|----------|----------|----------|
| `type` | Тип источника данных | `extparam` / `barParam` |
| `dataKey` | ID ДП (для `extparam`) или `selfDatetime` (для `barParam`) | число / строка |
| `name` | Название ДП | строка |
| `style` | Формат даты/времени (`barParam`) | см. ниже |

**viewMode (вид отображения)**

| Значение | Описание |
|----------|----------|
| `icon` | Иконка |
| `iconSet` | Набор иконок |
| `compact` | Текст задачи значения ДП Lookup (Multilookup — через запятую) |
| `userList` | Значения ДП Выбор пользователей |
| `userList1` | Список имён с аватарами |
| `userList2` | Список имён с аватарами и должностью |

**Форматы дат (style для barParam)**

| Стиль | Пример |
|-------|--------|
| `date` | «1 января» / «1 января — 10 декабря» |
| `dateTime` | «1 января с 10:00 до 18:00» / «С 1 января 10:00 до 10 декабря 18:00» |
| `time` | «10:00–18:00» |
| `startTime` | «10:00» |
| `endTime` | «18:00» |
| `duration` | «9 ч» / «2 д» / «2 д 4 ч» |
| `fullDuration` | «24 ч» — полная аллокация в часах без обрезки по рабочему времени |

**Настройки (settings)**

| Параметр | Описание | Значения |
|----------|----------|----------|
| `taskIcon` | Отображение иконки задачи в ДП | `true` / `false` |
| `valueGetter` | Отдаёт значение как есть | `"$self"` |
| `eventColor` | Цвет карточки | См. ниже «Приоритет цветов» |
| `rowHeight` | Высота строки | `XS`, `SM`, `MD`, `LG`, `XL`, `XXL` |
| `truncate` | Обрезка текста троеточием | `true` (по умолчанию) / `false` |
| `showLabel` | Отображать название параметра | `true` / `false` |
| `selectUsers` | Только аватары пользователей (при `viewMode: "iconSet"`) | `true` / `false` |
| `viewMode` | Вид списка пользователей | `userList1` / `userList2` (при `"viewMode": "userList"`) |
| `needToSeparate` | Разделение полосок событий по масштабу | См. ниже |
| `sourceSubcatId` | ID категории, для которой применяется шаблон | число |

**needToSeparate** — перечисление масштабов, при которых события дробятся по одному дню:

| Значение | Масштаб |
|----------|---------|
| `weekAndDay` | Неделя |
| `weekAndMonth` | Месяцы/недели |
| `weekDateAndMonth` | Недели |
| `monthAndYear` | Месяцы |
| `year` | Годы |
| `hourAndDay` | День |
| `weekAndDaySchedule` | Расписание |

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

**Приоритет цвета карточки (eventColor)** — если в шаблоне заданы все три настройки, приоритет:

1. **`resourceTypeColor`** — цвет из типа ресурса (`true`/`false`). Применяется мгновенно, так как тип категории известен заранее.
2. **`taskColor`** — цвет задачи, наследуемый от категории (`true`/`false`).
3. **`extParam`** — значение цвета из ДП Lookup (ID ДП в качестве значения). При создании задачи, пока значение ДП неизвестно — серый цвет.

Если ни одно свойство не задано — синий для плановых ресурсов, зелёный для фактических.

### Шаблон подсказки (tooltip) и привязка к категории

**Базовый шаблон:**

```json
{
  "contexts": [
    {
      "context": "resources-tooltip",
      "settings": {
        "templateClass": "resources-tooltip",
        "columnB": { "align": "right" }
      },
      "sections": [
        {
          "blocks": [
            { "alias": "columnA", "elements": [] },
            { "alias": "columnB", "elements": [] }
          ]
        }
      ]
    }
  ]
}
```

**Обязательно:** `"context": "resources-tooltip"`, `"templateClass": "resources-tooltip"`.

Блоки: `columnA` (первая колонка), `columnB` (вторая колонка). Для `columnB` можно задать выравнивание `"align": "right"` / `"align": "left"`.

Параметры elements соответствуют шаблону карточки ресурса, за исключением ограничения по высоте (для подсказок его нет).

> **Привязка шаблона:** Категория → блок «Формы» → «Шаблонизация».

1. Выбрать созданные шаблоны из списка.
2. В колонке «Клиент» выбрать `all`.
3. Активировать опцию «Активность правила».

## Пользовательская настройка приложения resourcesSubcatDefaults

Настройка `resourcesSubcatDefaults` увязывает подкатегории представления «Ресурсы» с шаблонами, ДП и режимами создания задач.

> **Где настраивается:** Общие настройки приложения → custom-app-settings.
> **Ключ:** `resourcesSubcatDefaults`

Формат:

```json
"resourcesSubcatDefaults": [
  {
    "subcatId": int,
    "newTaskSubcatId": int,
    "postTaskMode": "newTaskForm",
    "ignoreCreateAllocation": true|false,
    "resourceExtendAddEnable": true|false,
    "performerExtParamId": int,
    "DatetimeFromExtParamId": int,
    "DatetimeToExtParamId": int,
    "createOnly": true|false
  }
]
```

### Параметры

Поля настройки `resourcesSubcatDefaults`:

| Параметр | Тип | Описание |
|----------|-----|----------|
| `subcatId` | int | ID категории в представлении «Ресурсы» |
| `newTaskSubcatId` | int или массив | ID категории для новых задач. Если право на создание отсутствует — кнопка `+` скрывается |
| `postTaskMode` | string | `"newTaskForm"` — открывать карточку новой задачи. Если не задан — стандартное окно добавления ресурсов |
| `ignoreCreateAllocation` | bool | Отключение создания задач по кнопке `+` |
| `resourceExtendAddEnable` | bool | Включение расширенного добавления (кнопка в меню многоточия) |
| `performerExtParamId` | int | ID ДП Lookup (источник — категория со значениями исполнителей) |
| `DatetimeFromExtParamId` | int | ID ДП «Дата и время» — автозаполнение датой начала распределения |
| `DatetimeToExtParamId` | int | ID ДП «Дата и время» — автозаполнение датой окончания |
| `createOnly` | bool | Режим «только создание»: создание и просмотр, изменение перетаскиванием запрещено |

**Пример:**

```json
"resourcesSubcatDefaults": [
  {
    "subcatId": 61360,
    "newTaskSubcatId": [61430],
    "postTaskMode": "newTaskForm",
    "ignoreCreateAllocation": true,
    "resourceExtendAddEnable": true,
    "performerExtParamId": 96360,
    "DatetimeFromExtParamId": 96820,
    "DatetimeToExtParamId": 96830,
    "createOnly": true
  }
]
```

## Планировщик

> **Где настраивается:** Меню «Интерфейс» → Планировщик.
> **Интерфейс:** таблица настроенных конфигураций с CRUD.

### Создание/редактирование конфигурации

#### Источник данных расписания

Параметры источника данных конфигурации Планировщика:

| Параметр | Описание |
|----------|----------|
| Имя | Название конфигурации |
| Категории | Одна или несколько категорий, задачи из которых определяют занятость ресурсов |
| Фильтр по ресурсам | Выбор ресурсов из справочника (категория «Справочник ресурсов» раздела «Системный») |
| Группировка (уровень 1 и 2) | `Задача` / `Ресурс` / `Доп. параметр` (последний — после выбора категории). Для «Ресурс»/«Доп. параметр» — дополнительное поле выбора |
| Отображать незапланированные ресурсы | Показывать ресурсы без задач |
| Скрывать выходные дни | Исключение выходных/праздников из отображения |
| Планирование по дням | `вкл` — задачи на несколько дней в отдельных ячейках; `выкл` — объединены в одну |
| Отображать суммарный план в календарной ячейке | Суммарный план на день для данного ресурса (включая неотображаемые по фильтру задачи) |
| Показывать блок незапланированных задач | Список задач с общим планом, не распределённых по дням (перетаскиванием на ресурс/дату) |
| Разрешить планирование ресурсов | Перетаскивание задач между ячейками |
| ID внешнего объекта | Автозаполняется. Используется для настройки прав доступа |

⚠️ **Перетаскивание работает только если последний параметр группировки — «Ресурс». Перетаскивание не работает в просроченных задачах и задачах без срока.**

⚠️ **Для планирования через Планировщик в категории должно быть отключено автоматическое распределение ресурсов** (флажок «Выключить автоматическое распределение» на вкладке «Ресурсное планирование»).

#### Настройки визуализации

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

| Параметр | Описание |
|----------|----------|
| Имя | Название варианта |
| Настройки визуализации бара | Позиции (8 слотов): `Не показывать`, `Задача`, `План`, `Факт`, `Доп. параметр`, `Ресурс` |
| Цвет | Определение цвета задачи: текстовый ДП с `#RRGGBB`, числовой ДП (40–48 = палитра), `Задача`/`План`/`Факт`/`Ресурс`/`Тип ресурса` — автоматический |
| Период выбора данных | Текущая неделя, Следующая неделя, Текущий месяц, Текущий год и пр. |
| Период детализации | `Дни`, `Месяцы`, `Годы` |
| Масштаб | `Минимум`, `1/4`, `1/2`, `3/4`, `Максимум` |

### Фильтрация, подсказка и права доступа Планировщика

Фильтрация, устаревшая всплывающая подсказка и права доступа настраиваются на этапе создания конфигурации Планировщика после сохранения источника данных.

> Описание настроек фильтрации — в [Смарт-фильтры — администрирование](https://help.1forma.ru/domains/smart-filters/admin.md).

Динамический отбор данных при просмотре. Условия настраиваются через конструктор фильтров.

Всплывающая подсказка в конфигурации Планировщика — устаревшее, не используется.

Настройка прав — по кнопке рядом с ID внешнего объекта в списке конфигураций. Открывается стандартное окно выдачи прав на внешний объект.

## Помощник по планированию (mini-timetable)

> **Где открывается:** через избранные ссылки (SPA). Формат ссылки — `?scheduler` в query string.
> **Что показывает:** таблицу занятости сотрудников по плановым трудозатратам.

Функциональность:

- **Источник данных:** задачи из категорий, указанных в настройках планировщика + данные по плановым затратам выбранных ресурсов.
- **Распределение задач:** руководитель или администратор перетаскивает задачи из блока нераспределённых в ячейки сотрудников и дат.
- **Блок нераспределённых задач:** задачи с общим планом, не распределённые по дням (опция «Отображать незапланированные ресурсы» / «Разрешить планирование ресурсов»).
- **Суммарный план в ячейке:** итог плановых трудозатрат на день по сотруднику. При превышении нормы рабочих часов — выделяется красным.
- **Категории** — все категории раздела подразделения. Задачи из других категорий — серым цветом.

⚠️ **Работа планировщика зависит от настроек ресурсного планирования в категориях-источниках** (см. «Настройки ресурсного планирования в категории» выше). Имеют значение настройки синхронизации плановых трудозатрат.

## Источник данных и масштабы представления Ресурсы

> **Источник данных:** Категория → Настройки «Вид» → блок «Ресурсы» (v2.262+).
> **Масштабы:** Категория → блок «Ресурсы» → кнопка шестерёнки → настройки доступных масштабов.

Настройки источника данных аналогичны настройкам табличного вида категории, за исключением блока дополнительных настроек.

Колонки таблицы настраиваются так же, как в табличном виде категории, вместе с постоянными фильтрами по коду и названию колонки и кнопкой скрытия невидимых полей — см. [«Колонки табличного вида»](https://help.1forma.ru/domains/categories/admin.md#колонки-табличного-вида).

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

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

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

Доступные значения масштабов и их описание — в [Календарь — администрирование](https://help.1forma.ru/domains/calendar/admin.md) (раздел «Масштабы представлений «Календарь» и «Ресурсы»»).

Там же — описание механизма запоминания выбора и флаг «Отображать задачи в терминальном статусе».

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

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

| Тип колонки | Доступные значения |
|---|---|
| Число, Деньги, Процент | Выкл; Сумма; Среднее; Минимум; Максимум |
| Чекбокс | Выкл; Количество включённых (true); Количество выключенных (false) или пустых |
| Лукап, Выпадающий список, Комбобокс | Выкл; Строк со значениями; Строк без значений; Уникальных значений |
| Остальные типы | Выкл; Строк со значениями; Строк без значений |

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

Заданные операции и флаг сохраняются вместе с остальными настройками вида и восстанавливаются при повторном открытии. Итоговые значения выводятся в строке итогов таблицы ресурсов.

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


## Типичные ошибки настройки

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

| Симптом | Причина | Где проверить |
|---------|---------|---------------|
| Невозможно внести трудозатраты | Пустой справочник ресурсов | Справочник ресурсов → создать запись |
| Не отображается блок ресурсного планирования | SmartFilter не возвращает `true` | Настройки категории → вкладка «Ресурсы» → «Отображать блок ресурсного планирования по smart-фильтру» |
| Планировщик не показывает задачи | В категории-источнике включено автоматическое распределение | Категория → вкладка «Ресурсы» → «Выключить автоматическое распределение» |
| Перетаскивание не работает | Последний уровень группировки — не «Ресурс» | Настройки конфигурации Планировщика → Группировка |
| Кнопка `+` не отображается в Ресурсах | У пользователя нет права на создание в `newTaskSubcatId` | CustomSettings `resourcesSubcatDefaults` / права категории |
| Карточка ресурса серая | `eventColor: extParam`, ДП не заполнен при создании | Заполнить ДП Lookup с цветом и сохранить задачу |
| Карточка ресурса нестандартного цвета | Цвет из типа ресурса не совпадает с ожидаемым | Настройки категории → Тип категории → цвет |
| Пользователь не может внести себе трудозатраты | Нет доступа к задаче: запись себе требует видимости задачи, даже если право на внесение есть | Проверить область видимости задачи для этого пользователя |

## Связи таблиц трудозатрат (модель данных)

Трудозатраты и ресурсное планирование хранятся в группе таблиц `TaskResource*`. Ключевая особенность: **ресурс — это задача** из категории «Справочник ресурсов», поэтому `ResourceId` (и `PerformerTaskId` — карточка ресурса-исполнителя) ссылаются на `Tasks`, а не на отдельную таблицу ресурсов. `TaskResources` хранит привязку ресурсов к задаче, `TaskResourcePlanEntries` — план по датам, `TaskResourceFactEntries` — факт по датам (с утверждением через `TaskResourceFactResolutions`), `TaskResourceFactAggregated` — суммарный факт по задаче, `TaskResourceLockedFactEntries` — закрытые для правки периоды. Пунктир — логическая связь, не закреплённая внешним ключом БД.

```mermaid
graph LR
    TR["TaskResources — ресурсы по задаче"]
    PLAN["TaskResourcePlanEntries — план по датам"]
    FACT["TaskResourceFactEntries — факт по датам"]
    AGG["TaskResourceFactAggregated — суммарный факт"]
    LOCK["TaskResourceLockedFactEntries — закрытые периоды"]
    RES["TaskResourceFactResolutions — резолюции утверждения"]
    T["Tasks — задачи и ресурсы"]
    U["Users — пользователи"]

    TR -- "TaskId" --> T
    TR -. "ResourceId" .-> T
    PLAN -- "TaskId, ResourceId, PerformerTaskId" --> T
    PLAN -- "PerformerUserId, SessionUserId" --> U
    FACT -- "TaskId, ResourceId, PerformerTaskId" --> T
    FACT -- "PerformerUserId, SessionUserId, ApprovedBy" --> U
    FACT -- "ResolutionId" --> RES
    AGG -- "TaskId, ResourceId, PerformerTaskId" --> T
    AGG -- "PerformerUserId" --> U
    LOCK -- "TaskId, PerformerTaskId" --> T
    LOCK -- "PerformerUserId, SessionUserId" --> U
    LOCK -. "ResourceId" .-> T
```

Полная схема с атрибутами всех полей — в [system/db-er-diagrams.md](https://help.1forma.ru/domains/system/db-er-diagrams.md#трудозатраты-ресурсное-планирование).
