# FAQ: видимость кнопки «Поставить отсутствие» в профиле

Документ — FAQ для инженеров поддержки и администраторов 1Формы: при каких условиях кнопка «Поставить отсутствие» видна в чужом/своём профиле (матрица видимости по правам), как читать ASCII-схему проверки, что запрашивать у клиента на 1-й линии, какие SQL-запросы выполнять для диагностики (спецправо `SETABSENCE`, право «Создать задачу» в calendar-категориях групп владельца), и когда обращаться в поддержку 1Ф.

## 1–2. Симптомы и матрица видимости кнопки

Пользователь спрашивает (типовые формулировки):

- «Не вижу кнопку "Поставить отсутствие" в профиле коллеги»
- «Раньше мог ставить отсутствие за другого, теперь не могу»
- «Не отображается причина отсутствия в профиле»

Матрица видимости кнопки:

Кнопка видна, если выполняется **условие 1** ИЛИ **условие 2** (оба подпункта одновременно):

| # | Условие | Где настраивается | Проверка |
|---|---------|------------------|----------|
| 1 | Просматривающий — **Администратор системы** | Свойства пользователя → «Является администратором» | признак администратора |
| 2а | У **владельца профиля** есть право «Создать задачу» хотя бы в одной календарной категории хотя бы одной своей группы | Права группы на категории | наличие права «Создать задачу» в calendar-категориях групп владельца |
| 2б | Просматривающий смотрит **свой профиль** ИЛИ имеет спецправо **`SETABSENCE`** | Свойства пользователя → Специальные права → `SETABSENCE` | свой профиль или спецправо `SETABSENCE` |

> **Условие 2** срабатывает только при одновременном выполнении **2а И 2б**.

Схема проверки (ASCII-диаграмма решения):

```
Администратор? ─────────────────────── ДА → кнопка ВИДНА
      │
     НЕТ
      │
У владельца профиля есть право
«Создать задачу» в calendar-категории
хотя бы одной группы? ──────────────── НЕТ → кнопка СКРЫТА
      │
     ДА
      │
Свой профиль ИЛИ есть SETABSENCE? ──── НЕТ → кнопка СКРЫТА
      │
     ДА
      │
кнопка ВИДНА
```

## 3. Проверки 1-й линии

Порядок диагностики:

1. **Просматривающий — администратор?** — если да, кнопка всегда должна быть видна. Нет → переходим к п.2.
2. **Чужой профиль** — проверить последовательно:
   - **У владельца профиля** есть право «Создать задачу» хотя бы в одной календарной категории хотя бы одной своей группы? (SQL-запрос в разделе 5) — если нет, кнопка скрыта независимо от остального.
   - **Просматривающий** имеет спецправо `SETABSENCE`? (AdminSPA → Свойства пользователя → Специальные права) — если есть и условие выше выполнено, кнопка должна быть видна.
3. **Свой профиль** — если просматривающий смотрит свой профиль и у него самого есть право «Создать задачу» в хотя бы одной календарной категории — кнопка видна.

## 4–6. Что запросить у клиента, база данных и когда обращаться в поддержку

Что запросить у клиента (для разбора обращения соберите):

- ID пользователя, который не видит кнопку
- ID пользователя, для которого пытаются поставить отсутствие
- Скриншот профиля (убедиться, что кнопка действительно отсутствует)

База данных — диагностические SQL-запросы:

```sql
-- Диагностика видимости кнопки «Поставить отсутствие»

-- 1. Есть ли у просматривающего (userA) спецправо SETABSENCE
select *
from dbo.SpecialPermissions sp
where sp.UserID = @userA_id
  and sp.PermissionName = 'SETABSENCE';

-- 2. Есть ли у владельца профиля (userB) право «Создать задачу»
--    хотя бы в одной календарной категории хотя бы одной своей группы
select top 1
    g.GroupID,
    s.SubCategoryID,
    s.SubCategoryName
from dbo.UsersGroups ug
         join dbo.Groups g on g.GroupID = ug.GroupID
         join dbo.GroupSubcatActions gsa on gsa.GroupID = g.GroupID
         join dbo.SubCategories s on s.SubCategoryID = gsa.SubCategoryID
         join dbo.Categories c on c.CategoryID = s.CategoryID
where ug.UserID = @userB_id
  and c.IsCalendar = 1     -- только календарные разделы
  and gsa.ActionID = 1;    -- ActionID = 1 → «Создать задачу»
```

Когда обращаться в поддержку (если настройки корректны, но проблема остаётся):

- Все условия выполнены, но кнопка не видна — вероятно, баг интерфейса; обратитесь в поддержку 1Ф.
- Кнопка видна, но при нажатии возникает ошибка — обратитесь в поддержку 1Ф.
