# Лента в шапке — диагностика

Диагностический документ для случаев, когда у пользователя пропала «Лента» в интерфейсе 1Формы.
Охватывает два разных элемента (панель навигации и блок корп. сети), порядок приоритетов
сборки интерфейса, SQL-запросы для проверки рабочих мест групп, глобальные ключи `SettingsCustom`,
API-снимок для обращения в поддержку, мини-чеклист тикета и справочник query-параметров SPA.
Для инженеров поддержки и администраторов.

## 1. Диагностика ленты: уточнение типа и приоритеты сборки интерфейса

В интерфейсе обычно путают два разных элемента:

1. `Лента` в основной панели навигации (верхняя/боковая панель).
2. `Блок "Лента корп. сети"` в левом меню.

Это разные настройки и разные поля в БД.

Логика видимости строится в таком порядке:

1. Глобальные настройки приложения (`SettingsCustom`), включая ключи интерфейса.
2. Рабочее место группы (`UserGroupSettings`) с учётом `Priority` при нескольких группах.
3. Персональные пользовательские настройки (`UserSettings` / `UserUISettings`) — для части параметров интерфейса.
4. Дефолты новых пользователей (`UsersNewDefaultSettings`) для параметров, отмеченных как «только для новых».

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

## 2. Что проверять для «Ленты» в верхней шапке

### 2.1 Проверка по группам пользователя

Основное поле для проверки: `dbo.UserGroupSettings.LentaVisible`.
Сопутствующие поля (элемент может «исчезнуть визуально», если меняется способ показа панели):
`NavigationPanelVisible`, `NavigationPanelPosition`, `NavigationPanelColor`.

```sql
declare @user_id int = 0; -- подставить user id

select
        ug.UserID,
        ug.GroupID,
        g.Name as GroupName,
        ugs.ID as GroupWorkspaceId,
        ugs.Priority,
        ugs.LentaVisible,
        ugs.NavigationPanelVisible,
        ugs.NavigationPanelPosition,
        ugs.NavigationPanelColor
from dbo.UserGroups ug
join dbo.Groups g
        on g.GroupID = ug.GroupID
left join dbo.UserGroupSettings ugs
        on ugs.GroupId = ug.GroupID
where ug.UserID = @user_id and
      isnull(ug.IsDeleted, cast(0 as bit)) = cast(0 as bit)
order by
        case when ugs.Priority is null then -1 else ugs.Priority end desc;
```

Что смотреть:
- есть ли вообще РМГ у группы;
- какое РМГ победит по `Priority`;
- какое значение `LentaVisible` у победившего РМГ.

## 3. Что проверять для «Ленты корп. сети»

### 3.1 SQL-проверка

Проверяемые поля: `dbo.UserGroupSettings.CorporateNetworkFeedVisibleType`, `dbo.UsersNewDefaultSettings.IsCorporateNetworkFeedVisible`.
Важно: для этого блока действует правило «применяется только для новых пользователей»; для существующих используется отдельный сброс через интерфейс.

```sql
declare @user_id int = 0; -- подставить user id

select
        ug.UserID,
        ug.GroupID,
        g.Name as GroupName,
        ugs.Priority,
        ugs.CorporateNetworkFeedVisibleType
from dbo.UserGroups ug
join dbo.Groups g
        on g.GroupID = ug.GroupID
left join dbo.UserGroupSettings ugs
        on ugs.GroupId = ug.GroupID
where ug.UserID = @user_id and
      isnull(ug.IsDeleted, cast(0 as bit)) = cast(0 as bit)
order by
        case when ugs.Priority is null then -1 else ugs.Priority end desc;

select top (1)
        unds.IsCorporateNetworkFeedVisible
from dbo.UsersNewDefaultSettings unds;
```

## 4. Глобальные ключи, которые часто проверяют ошибочно

`TopMenuItemsHidingSettings` скрывает:
- `Contacts`;
- `Create`;
- `History`;
- `ProfileLinks`;
- `Reports`;
- `SearchPanel`.

Пункта `Lenta` в этом ключе нет.

Проверить актуальные значения:

```sql
select
        sc.[Key],
        sc.[Value]
from dbo.SettingsCustom sc
where lower(sc.[Key]) in (
        'topmenuitemshidingsettings',
        'socialnetworkssettings',
        'spacesettings'
);
```

### 4.1 Прочие CustomSettings интерфейса

Дополнительные ключи CustomSettings, влияющие на интерфейс:

| Ключ | Тип / По умолчанию | Эффект |
|------|---------------|--------|
| `HelperCustomLink` | string / `""` | Если задан непустой URL — иконка Help (правый верхний угол) ведёт на эту ссылку вместо стандартной справки |
| `HideOldGantt` | bool | Скрывает в проектной задаче кнопку перехода к старому интерфейсу проектного управления (остаётся только переход к новому) |
| `HideUserInfoButton` | bool / `false` | Скрывает пункт «Инфо пользователя» в контекстном меню при клике на имя в комментариях, в ДП «Выбор пользователя» и «Адресаты Email» |
| `HideUserVoipToken` | bool | Скрывает `VoipToken` в API-ответах данных о пользователях (для интеграций без необходимости передавать токен) |
| `HideDefaultTags` | bool / `false` | Скрывает в ленте комментариев теги по умолчанию (название категории и статус задачи) |
| `HideEmptyEpOnNtf` | bool / `true` | Включает на всю систему настройку «Скрыть на NTF при пустом значении» для ДП. При `false` — управление переходит на уровень категории |
| `highCharts` | bool | Если `true` — графики и диаграммы рендерятся через HighCharts; иначе — через ApexCharts |
| `BrandSettings` | JSON | Настройки корпоративного стиля. Генерируется автоматически из общих настроек приложения при сохранении логотипов и параметров (горизонтальный/вертикальный, светлая/тёмная тема, ширина панели). Прямое редактирование не рекомендуется — обновлять через интерфейс |

> Помимо логотипов ключ `BrandSettings` несёт глобальные политики навигации и боковой панели: положение панели по умолчанию, список разрешённых цветов-токенов, права пользователя менять положение и цвет и скрывать боковую панель. В `app-settings.json` они отдаются секцией `branding`. Разбор полей — в [settings-custom.md](https://help.1forma.ru/domains/system/settings-custom.md).
| `CKEditorCustomConfigPath` | string | Путь к пользовательскому конфигу CKEditor для ДП «Большой текст с форматированием» (своя панель кнопок, плагины и т. п.) |
| `IsFeedsViewOnly` | bool | Если `true` — в Избранном по клику на категорию открывается **Лента** (Таблица скрыта); в дереве «Мои задачи» отображаются только Заказчик/Исполнитель/Подписка, скрываются Согласования и Задачи подчинённых. Используется для упрощённых рабочих мест |
| `EmptyFeedPlaceholderURL` | string (URL) | Картинка-заглушка пустой ленты (задач, чатов, категории). Если не задана — стандартная иконка |
| `EnableAllTabsNotifications` | bool / `null` | Управление push-уведомлениями: `true` — во все вкладки браузера, включая фоновые; `false` — только в активную; **не указано** — показывать всегда (поведение по умолчанию) |
| `ToDoListSettings` | JSON | Конфигурация ДП Multilookup со схемой «Чек-лист»: соответствие ID категории шаблонов и ID ДП с шаблоном (`{"TaskNotesExtParamId":N,"TemplateTasksExtParamId":N,"TemplatesSubcatId":N}`) |

| `FaviconBadgeMode` | string / `full` | Режим счётчика непрочитанных на фавиконе вкладки: `full` (замена фавикона счётчиком), `overlay` (фавикон с мини-бейджем в углу), `off` (статичный значок без счётчика и мигания; число остаётся в заголовке вкладки) |
| `NavigationAppearanceSettings` | JSON | Снимок экрана «Настройки навигации и сайдбара» (§4.2). На оформление интерфейса не влияет: политики навигации и боковой панели применяются из ключа `BrandSettings`

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

Слоты логотипов: горизонтальный логотип отображается в боксе высотой 40 px и шириной до 200 px, вертикальный — в боксе 40 × 40 px; изображение вписывается с сохранением пропорций. |

### 4.2 Экран «Настройки навигации и сайдбара»

Экран администратора с общими настройками оформления панели навигации и боковой панели. Маршрут — `/administration/navigation-appearance-settings`, доступ закрыт гардом `AuthAdminGuard`. В административной панели экран открывается двумя пунктами с одинаковым названием: в разделе «Интерфейс» статического меню панели и в папке «Системные настройки» дерева форм администрирования.

Состав экрана:

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

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

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

Кнопка «Сохранить и опубликовать» доступна, только когда в форме есть несохранённые изменения и ни один файл не загружается. Значения сохраняются отдельным ключом `NavigationAppearanceSettings`. Оформление интерфейса собирается из ключа `BrandSettings` (§4.1): если после сохранения на экране вид панели навигации или сайдбара не изменился, проверять надо `BrandSettings`, а не ключ экрана.

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

Логотип из слотов экрана показывается целиком, без обрезки: изображение всегда вписывается в бокс с сохранением пропорций и центрируется, поэтому логотип не «съедается» по краям при несовпадении пропорций. Горизонтальный слот размещает логотип в области высотой 40 px и шириной до 200 px, вертикальный — в квадратной области 40 × 40 px.

## 5. Диагностический снимок и чеклист

Чтобы быстро локализовать причину, при обращении в поддержку зафиксируйте ответы следующих API-вызовов:

1. `GET /api/user/settings`
2. `GET /api/user/group-workspace-inserts`
3. `POST /api/favorite/menu`
4. (для админ-валидации) `GET /api/admin/user-group-settings/{id}/user-ui-settings`

Мини-чеклист для тикета «не видна Лента в верхней шапке»:

1. Уточнить, какая именно лента пропала: основная `Лента` или `Лента корп. сети`.
2. Собрать effective РМГ пользователя по `Priority`.
3. Проверить `LentaVisible` (для основной ленты) или `CorporateNetworkFeedVisibleType` (для корп. ленты).
4. Проверить, не изменено ли положение/видимость панели (`NavigationPanelVisible`, `NavigationPanelPosition`).
5. Для корп. ленты подтвердить, применялся ли сброс настроек для текущих пользователей.
6. Приложить API-снимок и SQL-выгрузку при обращении в поддержку 1Ф.
7. Если боковая панель «сама» открепилась: спросить, было ли явное действие пользователя — кнопка в панели навигации, переключатель в панели или «Настройки интерфейса». Состояние закрепления хранится в настройках пользователя и меняется только этими действиями; временные скрытия (просмотр файла справа в чате, узкое окно) настройку не меняют. Механика — в user-ui/frontend.md, раздел «Закрепление боковой панели».

## 6. Брендирование и сниппеты стилей

### 6.1 Веб-реализация брендирования

При инициализации SPA загружается файл `ui.json`. Затем система генерирует CSS-переменные и устанавливает их в `:root`. Имена переменных соответствуют токенам из `ui.json` и макетов; при переключении темы значения переменных перезаписываются.

| Группа | Переменные / правило | Назначение |
|--------|----------------------|------------|
| Текст | `--onsurface-primary`, `--onsurface-secondary`, `--onsurface-tertiary` | Основной, вторичный текст и подсказки |
| Контейнеры | `--container-primary`, `--oncontainer-primary` | Фон контейнера и текст на нём |
| Разделители | `--outline-base`, `--outline-shallow`, `--outline-deep` | Рамки и разделители |
| Transition | `--vh-transition-duration`, `--vh-transition-timing-function`, `--vh-transition-all`, `--vh-transition-bg`, `--vh-transition-colors` | Плавность анимаций |
| Тени | `--shadow-{color}` | Генерируются, если для цвета в `ui.json` задан `shadowMode` |
| Состояния | `{color}-hover`, `{color}-click`, `{color}-selected` | Генерируются через `color-mix()` из базового цвета и цветов состояний |
| Отступы и радиусы | tokens `spacing` и `radius` | Значения считаются от базового `space-100` / `radius-100` = `8px` |

⚠️ Если у элемента при изменении состояния меняются размеры или отступы, не используйте общий `--vh-transition-all`: задавайте transition на конкретные свойства, иначе анимация может выглядеть некорректно.

### 6.2 Сниппеты стилей

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

| Значение | CSS-эффект |
|----------|------------|
| `Default` | Нет стиля |
| `Success` | `background-color:#dff0d8` |
| `Info` | `background-color:#d9edf7` |
| `Warning` | `background-color:#fcf8e3` |
| `Danger` | `background-color:#f2dede` |
| `TotalsRow` | `font-weight: bold` |
| `BackRed` | `background-color: pink` |
| `BackGreen` | `background-color: lightgreen` |
| `BackBlue` | `background-color: lightblue` |
| `BackYellow` | `background-color: gold` |
| `TextRed` | `color: red` |
| `TextGreen` | `color: green` |

Дополнительно можно задавать цвет текста и фон в формате `Color#ХХХХХХ` и `Background#ХХХХХХ`, а высоту строки — в формате `HeightXXXpx`.

```text
Color#ff0000,Background#00ff00
Color#ff0000,Height40px
```

⚠️ Если нужно задать несколько CSS-атрибутов, перечисляйте их через пробел. Если нужно задать несколько snippet-значений, перечисляйте их через запятую.

## 7. Каталог query-параметров SPA (deep links)

Используется для построения ссылок из писем, виджетов, отчётов, публикаций и сторонних систем в конкретные представления 1Формы.

### 7.1 Общий формат

Базовый формат deep-link:

```
https://{адрес_1Формы}/{модуль}?{parameters}
https://{адрес_1Формы}/{endpoint_with_params}?{parameters}
```

Несколько параметров соединяются `&`. Все основные параметры обязательны (исключение — взаимоисключающие `TasksForExtParamID` и `TasksForLookupColumnId` для lookup'а). Дополнительные параметры можно задавать выборочно.

⚠️ Если ссылка строится для контекстов, где `?`, `&` и пр. служебные символы интерпретируются интерфейсом (например, `~/spa/link?url=...`), их нужно URL-кодировать:

| Символ | Код | Символ | Код |
|--------|-----|--------|-----|
| `?` | `%3F` | `=` | `%3D` |
| `&` | `%26` | пробел | `%20` |
| `$` | `%24` | `[` | `%5B` |
| `/` | `%2F` | `]` | `%5D` |

`%` сам по себе передаётся как `%25` (используется в фильтрах вида `f_task=%25{текст}%25`).

Переадресация на API-метод: `~/spa/entry/signin?fromUrl={api_url}` — выполняет переадресацию на API после авторизации. Используется, например, в выгрузках Excel: ссылка из ДП «Файл» имеет вид `https://адрес_1Формы/api/files/download/?redirect=1`. К URL добавляется `?auth=true` — при ошибке 401 автоматически открывается страница логина (с v2.257 адрес страницы — в ключе `AuthTokenLoginUrl` в `appsettings.json`).

### 7.2 Список задач, ленты, иерархии

Ссылки на списки задач, ленты и иерархические представления:

| Назначение | URL | Ключевые параметры |
|------------|-----|-----|
| Список задач категории / раздела | `~/spa/tasks/subcat/{subcatId}/grid` <br> `~/spa/tasks/category/{categoryId}/grid` | — |
| Смарт-отбор в списке | `~/spa/tasks/subcat/{subcatId}/grid?SmartQueryId={id}` | `SmartQueryId` |
| Отбор по статусам | `?ActiveMode=isOpened` / `isClosed` / `isRejected` / пусто (все) | Совмещается с `SmartQueryId` |
| Фильтр по колонке (`%25...%25`) | `?f_{columnName}=%25текст%25` | `task` (текст), `exception` (лог) и т.д. |
| Сводный раздел | `~/spa/tasks/summary/{summaryId}/grid` | — |
| «Я исполнитель» / «Я заказчик» / «Я подписчик» | `~/spa/tasks/{YouPerformerTasks\|FromYou\|Subscribed}/grid?all=false&feedType={Performer\|Owner\|All}` | — |
| «На подписи» / «Согласованные» / «Отклонённые» / «Запрошенные» | `~/spa/tasks/{ToSign\|Signed\|Declined\|Requested}/grid` или `~/spa/resolutions` | — |
| Задачи подчинённых | `~/spa/tasks/YourGroups/grid?OrgUnitId={all\|id}` | Также: `YourGroupsOverdue`, `YourGroupsActiveSigns`, `YourGroupsSignSigns`, `YourGroupsOverdueSigns`, `YourGroupsRefusedSigns` |
| Главная лента | `~/1FMain.aspx` <br> `~/spa/feeds/{extp}` | `extp`: `default`, `tasks`, `comments`, `unread`, `lenta`, `questions` |
| Лента категории/раздела | `~/spa/tasks/subcat/{id}/feeds` <br> `~/spa/tasks/category/{id}/feeds` | — |
| Иерархия задач | `~/spa/task-hierarchy/{id}` | См. [Иерархия задач](https://help.1forma.ru/domains/tasks/business.md) |
| Таймлайн | `~/spa/tasks/{taskId}/timeline` <br> `~/spa/noframe/tasks/{taskId}/timeline` | — |
| Гант категории/раздела | `~/spa/tasks/subcat/{id}/gantt` <br> `~/spa/tasks/category/{id}/gantt` | См. [Гант — руководство](https://help.1forma.ru/domains/pm/tutorial.md) |
| Календарное представление категории | `~/spa/tasks/subcat/{id}/calendar` <br> `~/spa/tasks/category/{id}/calendar` | iframe-режим: `~/Syndicate.aspx?forceURL=Scheduler.aspx?SubcatId={id}&HideHeader=true` |
| Канбан категории | `~/spa/tasks/subcat/{id}/kanban` | См. [Канбан — настройка](https://help.1forma.ru/domains/kanban/admin.md) |
| Канбан исполнителя | `~/spa/kanban/user/performer/{userId}` | До 100 задач каждого типа (на сегодня / на завтра / по сроку) |
| Канбан по публикации | `~/spa/kanban/{publicationAlias}` | — |
| Чат-вид категории | `~/spa/subcat/{id}/chat` | — |

⚠️ Параметр `f_*` применяется поверх ранее сохранённых фильтров грида и не сбрасывает их. Если результат пустой — очистите фильтры через «Очистить всё». Совместимость со старым `newcustomgrid.aspx?TaskTextFilter=…` — через `f_task=…%25`.

### 7.3 Карточка задачи и создание

Ссылки на карточку задачи и форму создания:

| Назначение | URL | Параметры |
|------------|-----|-----|
| Открыть карточку (SPA) | `~/spa/tasks/{TaskID}` | `layoutMode`: `mtf` / `mtf-thread` / `mtf-only-thread` |
| Открыть карточку (старый) | `~/MainTaskForm.aspx?TaskID={id}` | `TemplateID` — пользовательскый шаблон |
| Без шапки и меню | `~/spa/noframe/tasks/{TaskID}` | + `uiTheme=light\|dark` (только при `layoutMode=mtf-only-thread`) |
| Создание задачи (SPA) | `~/spa/newtask/{SubcatId}` <br> `~/spa/noframe/newtask/{SubcatId}` | См. ниже |
| Создание задачи (старый) | `~/NewTask.aspx?SubcatID={id}` | См. ниже |

**Дополнительные параметры создания (`newtask`, `NewTask.aspx`):**

| Параметр | Описание |
|----------|----------|
| `OrderedTime` | Срок в формате `dd.MM.yyyy%20HH:mm` |
| `TemplateID` | Пользовательский шаблон карточки новой задачи |
| `SourceTaskID` | Родительская задача |
| `CommentID` | Первый комментарий в задаче |
| `UserID` | Заказчик (от пользователя) |
| `LinkedID` | Связанная задача |
| `TaskText` | Текст задачи |
| `ExtParamString` | Значения ДП (см. ниже) |

**Формат `ExtParamString`:**

- Скаляр: `$Ext{ID_ДП}${значение}` (несколько ДП склеиваются подряд).
- Multilookup: `$Ext{ID_ДП}$[ID_1,ID_2,...]`.
- Таблица (JSON): `$Ext{ID_ДП}${"rows":[{"c{ID_колонки}":"значение",...}]}`. Применяется только к колонкам с режимом ≠ `ReadOnly` и ≠ `Invisible`; smart-колонки игнорируются и считаются автоматически; виртуальные — заполняются; URL имеет приоритет над `DefaultValue` категории; допускается комбинация скалярных ДП и таблицы.

### 7.4 Встречи (новые), календарь, планировщик

`~/spa/meeting/new/1507` (или `~/spa/noframe/meeting/new/1507`) — `1507` — ID системной категории «Календарь».

| Параметр | Формат / значения |
|----------|-------------------|
| `Title` | Текст |
| `RequiredAttendees` | ID пользователей через запятую |
| `Start`, `End` | `YYYY-MM-DDTHH:mm:ss.sss` |
| `IsAllDayEvent` | `0` / `1` |
| `Location` | Текст |
| `FreeBusyState` | `Free` / `Tentative` / `Busy` / `OOF` / ~~`WorkingElsewhere`~~ |
| `LinkedTaskId` | Номер задачи |
| `Description` | Текст |
| `Attachment` | ID файлов через запятую |

| Прочее | URL |
|--------|-----|
| Календарь пользователя | `~/spa/user/profile/{userId}?tab=calendar` |
| Планировщик встреч | `~/spa/scheduling-assistant?users={ID,ID,...}` (или `~/spa/noframe/scheduling-assistant`) |

### 7.5 Файлы, Диск, опросы

Ссылки на просмотр файлов, Диск и опросы:

| Назначение | URL | Параметры |
|------------|-----|-----|
| Просмотр файла Office (`doc/docx/ppt/pptx/xls/xlsx`) | `~/spa/file/{fileID}?mode=view` <br> `~/spa/noframe/file/{fileID}?mode=view` | `mode`: `view` / `edit`; `taskId`, `extParamId`, `folderId`, `versionId` |
| Просмотр графики/PDF/MP4 (`jpg/png/pdf/mp4`) | `~/spa/file/{fileID}/1` <br> `~/spa/noframe/file/{fileID}/1` | — |
| Документ в Р7 | `~/r7/?fileId={id}&mode=edit&taskId={id}&extParamId={id}` | — |
| Главная Диска (полный / краткий) | `~/spa/disk` / `~/spa/disk/short` | + `noframe`-варианты |
| Диск задачи | `~/spa/disk/Task/{TaskID}` | — |
| Редактор опроса | `~/spa/survey/creator/?surveyTaskId={id}` | + `noframe` |
| Прохождение опроса | `~/spa/survey?assignmentTaskId={id}` | + `noframe` |
| Файловое хранилище (устаревшее) | `~/spaex.aspx/file-storage/{FolderType}/{FolderId}` | `FolderType`: `Root`, `Folder`, `UserRoot`, `UserFolder`, `Shared`, `TaskRoot`, `Category`, `Subcategory`, `Task`, `LinkedToTask`. Параметры: `view=gallery`, `onlySpaStyles=1`, `showlefttree=1` |

### 7.6 Чаты, подписи, почта и пользователи

**Чаты:**

| Назначение | URL | Параметры |
|------------|-----|-----|
| Создать чат | `~/spa/chat/new?with={ID,ID,...}&name={имя}&msg={текст}` | Несколько `with=...`; в групповом чате `msg` задаёт название чата, а не сообщение |
| Приватный чат с пользователем | `~/spa/chat/new?with={userId}&private=true&msg={текст}` | `msg` — текст в поле ввода созданного чата, не публикуется |

**Подписи, почта, пользователи, оргструктура:**

| Назначение | URL |
|------------|-----|
| Запрошенные подписи (список) | `~/spa/tasks/ToSign/grid` |
| Рабочее место акцептанта | `~/spa/resolutions` |
| Почтовая папка | `~/Emails/EmailList.aspx?FolderID={id}` |
| Просмотр письма | `~/Emails/EmailView.aspx?EmailID={id}` |
| Справочник сотрудников | `~/spa/org/list/workers` (publicationAlias) |
| Профиль пользователя | `~/spa/user/profile/{userId}` |
| Орг.структура | `~/spa/org/chart2/` или `~/spa/org/chart/{publicationAlias}` |

### 7.7 Порталы, виджеты, пространства

Ссылки на порталы, виджеты и страницы пространств:

| Назначение | URL |
|------------|-----|
| Портал Flex | `~/spa/noframe/portal/{portalID}?{filter_params}` |
| Портал Dashboard | `~/spa/portal/{portalID}?{filter_params}` или `~/spa/noframe/portal/{portalID}` (без задвоения панели индикаторов изнутри SPA) |
| Виджет (вне портала) | `~/spa/portal/block/{BlockID}` или `~/SinglePortalBlock.aspx?BlockID={id}` |
| Виджет в контексте задачи | `~/SinglePortalBlock.aspx?BlockID={id}&TaskID={taskID}` |
| Новость в портале | `~/spa/portal/{portalId}?widgetId={widgetId}&taskId={taskId}` |
| Настройки виджета | `~/administration/widget-settings/{id}` |
| Краткая статья пространства (noframe) | `~/spa/noframe/spaces/subcat/{SubcatID}/short?pageId={PageId}` |

**Параметры фильтров портала / виджета** (одинаковый формат):

```
f{paramID}_v={value}        # значение
f{paramID}_r=1              # сделать read-only (0 — нет)
```

| Тип параметра | Пример (`paramID=11`) |
|---------------|------------------------|
| строка | `f11_v=test` |
| число | `f11_v=2` |
| дата | `f11_v=25.06.2018` |
| период | `f11_v=from:25.06.2018;to:20.06.2018` |
| пользователь / орг.ст. / выпадающий / группа | `f11_v=[1,2,3]` |
| категория | `f11_v=cat:[1,2,3];subcat:[11,22,33]` |

⚠️ Не поддерживается для виджета **Smart Html** и для **Таблицы** с настроенными кнопками. Значения из URL имеют приоритет над значениями по умолчанию фильтра.

### 7.8 Отчёты

Ссылки на просмотр и экспорт отчётов:

| Назначение | URL |
|------------|-----|
| Просмотр отчёта | `~/spa/report/new/{ReportID}` или `~/MVC/ReportView/{ReportID}?{params}` |
| Экспорт отчёта | `~/MVC/ReportExport/{ReportID}?format={fmt}&{params}` |

**Форматы экспорта:** `pdf`, `html`, `csv`, `image` (jpg), `dbf`, `xml`, `json`, `mht`, `odf`, `ods`, `odt`, `xls`, `docx`, `rtf`, `pptx`, `xaml`, `txt`, `svg`, `ps`, `ppml`.

**Параметры фильтра отчёта** (отличаются от портального — добавляется имя):

```
f{paramID}_{Name}_v={value}      # имя регистрозависимо
f{paramID}_r=1                   # read-only
```

⚠️ В фильтре «категория» **нельзя указать ID раздела** — только список категорий раздела. Для просмотра ID параметра — настройки фильтра.

## Связанные документы

См. также:

- [Пользователи и группы — администрирование](https://help.1forma.ru/domains/users-and-groups/admin.md)
- [Системные настройки](https://help.1forma.ru/domains/system/admin.md)
- [Социальная сеть — администрирование](https://help.1forma.ru/domains/social-network/admin.md)
