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

Администрирование табличного представления задач в 1Форме: индикаторы (тикеры), избранное групп, общие параметры табличного вида и пользовательские настройки колонок и фильтров. Документ описывает отдельные SPA-страницы администрирования, страницу глобальных параметров, API администрирования, ключевые настройки и типичные ошибки конфигурации.

## Обзор

## Итоги по колонкам в настройках табличного вида

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

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

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

Домен grids охватывает настройку табличного представления задач: индикаторы (тикеры), избранное группы, общие параметры табличного вида и пользовательские настройки колонок и фильтров. Администрирование использует три механизма:

- **Отдельные SPA-страницы** — 2 формы (тикеры, избранное), зарегистрированы в дереве автоадминки и открывают собственные SPA-страницы
- **Страница глобальных параметров** — legacy-страница админки `UserTaskOnlySettings.aspx`, пункт статического меню админки
- **API администрирования** — 1 группа маршрутов (управление группами/папками избранного)

![Табличное представление задач с панелью инструментов и контекстным меню ячейки (фильтр по значению, переход, действия)](https://help.1forma.ru/help-images/grids/cat_table_context_new_02-01.png)

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

Три механизма управления настройками табличного представления: отдельные SPA-страницы, страница глобальных параметров и API администрирования.

**Глобальные параметры табличного вида:**

Legacy-страница админки `/admin/UserTaskOnlySettings.aspx`, таблица БД `dbo.UserTaskOnlySettings`. Открывается пунктом статического меню админки «Общие настройки табличного вида» (`admin-panel.json`, `parentId: interface`). Настройки темизации открываются из дерева автоадминки.

**Отдельные SPA-страницы (в дереве автоадминки):**

| Alias формы | Название | Url | Таблица БД | Папка |
|-------------|----------|-----|-----------|-------|
| `tickers` | Индикаторы | `/administration/tickers` | dbo.MenuItemTicker | Пользовательский интерфейс |
| `favourites` | Избранное группы | `/administration/favorites-groups` | dbo.UserLinks | Пользовательский интерфейс |

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

| Маршрут | Методы | Назначение |
|---------|--------|------------|
| `/api/admin/favorites/groups` | GET, POST, PUT, DELETE | Управление группами, папками и ссылками избранного |
| `/api/admin/favorites/groups/{groupId}/links` | GET, POST, PUT | Ссылки избранного внутри группы: список, добавление, обновление. У ссылки типа «Раздел» с вариантом «Раздел+Все» поле `LinkedObjectId` пустое — это и есть признак «все разделы»; в пользовательском меню такая ссылка отдаётся с `linkedObjectId = null`, и клиент раскрывает её в каталог разделов |

## Ключевые настройки

### Индикаторы (MenuItemTicker)

**Где настраивается:** SPA-страница `/administration/tickers` (пункт `tickers` в дереве автоадминки)
**Таблица БД:** `dbo.MenuItemTicker`

Подписи страницы индикаторов — заголовки, подписи кнопок, названия вкладок и тексты подтверждений удаления — берутся из ресурсных файлов SPA и показываются на языке интерфейса. См. [Локализация — Администрирование](https://help.1forma.ru/domains/localization/admin.md).

11 полей, определяющих цветовые/числовые индикаторы в навигационном меню:

| Группа полей | Что контролирует |
|-------------|------------------|
| Имя, описание | Идентификация тикера |
| Тип индикатора | Числовой / цветовой |
| Источник данных | SQL-запрос или предопределённый источник |
| Цвет, иконка | Визуальное оформление в меню |
| Привязка к пункту | К какому разделу меню привязан тикер |

**Как применяется:** тикеры обновляются периодически в реальном времени.

**Тип индикатора резолвится по коду, а не по числовому Id.** Связь индикатора с его типом (таблица `MenuItemTypes`) определяется по стабильному строковому коду (`MenuItemTypeCodes.Ticker`), а не по числовому `Id`: `Id` в `MenuItemTypes` — автоинкрементный (Identity) и **различается между площадками**. Поэтому при переносе и диагностике нельзя опираться на конкретное число `Id` типа. Ранее резолв шёл по `Id`, и на площадках, где запись `Ticker` имела `Id ≠ 3`, создание индикатора падало с ошибкой типа.

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


### Избранное группы (UserLinks)

**Где настраивается:** SPA-страница `/administration/favorites-groups` (пункт `favourites` в дереве автоадминки) или API администрирования
**Таблица БД:** `dbo.UserLinks`

18 полей: структура ссылок и папок блока «Избранное группы». Администратор настраивает набор ссылок для группы, которые отображаются у всех пользователей группы.

| Группа полей | Что контролирует |
|-------------|------------------|
| Группа, папка | Привязка к группе и иерархия |
| URL, название | Содержание ссылки |
| Тип ссылки | Задача / категория / раздел (в том числе «Раздел+Все») / пространство / внешняя |
| Порядок | Сортировка в блоке избранного |

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

**Тип ссылки «Раздел»: вариант «Раздел+Все».** Помимо выбора конкретного раздела, в списке доступен вариант «Раздел+Все» — в форме он называется «Все разделы». При его выборе поле «Представление» блокируется и очищается — представление для такой ссылки не задаётся, а сама ссылка сохраняется как указывающая на все разделы, без привязки к конкретному. При повторном открытии формы вариант «Все разделы» восстанавливается. В блоке избранного пользователя такой элемент раскрывается в полный каталог доступных ему разделов (см. [Интерфейс пользователя](https://help.1forma.ru/domains/user-ui/business.md)).

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

Тот же поиск есть и на табличных представлениях «Группы» и «Рабочие места группы» в администрировании: ввод ФИО или идентификатора пользователя оставляет группы, в которых он состоит, а на «Рабочих местах» — строки настроек этих групп.

__Редактирование структуры__

В редакторе блока «Избранное группы» поддерживается перетаскивание для перестроения дерева элементов. Администратор может:

- перемещать ссылку в другую папку;
- перемещать папку внутрь другой папки;
- менять порядок ссылок и папок на одном уровне.

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

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

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

**Как применяется:** блок «Избранное группы» формируется в навигационной панели.

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

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

### Общие настройки, колонки и фильтры

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

**Общие настройки табличного вида (UserTaskOnlySettings).**
Legacy-страница админки `/admin/UserTaskOnlySettings.aspx`. Таблица БД: `dbo.UserTaskOnlySettings`.
6 полей: глобальные параметры табличного представления задач.
Основные настройки табличного вида задаются через пользовательские колонки и фильтры; сама страница доступна по прямому адресу и из статического меню админки.

**Пользовательские настройки колонок.**
API: `/api-core/datasource/{type}/columns/save|reset`. Таблицы БД: `dbo.DataSources`, `dbo.DataSourceColumns`.
Пользователь сохраняет видимость, порядок и ширину колонок (отдельно для каждого пользователя). Настройки сбрасываются через `columns/reset`.

Видимость колонки в табличном представлении и доступность колонки в редакторе пользовательского отбора — разные настройки: скрытая колонка не показывается ни в таблице, ни в редакторе отбора, недоступная — не предлагается в редакторе. Правило описано в [business.md](https://help.1forma.ru/domains/grids/business.md), раздел «Пользовательские отборы».

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

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

![Выбор видимых колонок в табличном представлении задач](https://help.1forma.ru/help-images/grids/cat_table_fields_new_2.png)

**Общая настройка таблицы источника данных.**
API: `POST /api-core/datasource/{type}/{entityId}/table-settings/save` — для источника с сущностью, `POST /api-core/datasource/{type}/table-settings/save` — без привязки к сущности; перенос настроек прежнего формата — `POST /api-core/datasource/settings/update` и `POST /api-core/datasource/table-settings/update`. Таблица БД: `dbo.DataSourceSettings`, строка с ключом вида `Subcat_tableSettings` и пустым `UserId`.
Сохраняет общую настройку только администратор платформы: у остальных запрос отклоняется с ответом 403, а сохранённая настройка остаётся прежней. Настроенный администратором вид таблицы — состав, порядок и ширина колонок, строка итогов — применяется ко всем пользователям грида этой категории, кроме тех, у кого есть собственный сохранённый вид. В админке этот вид открывается из блока **«Таблица»** настроек категории (`administration/data-source-settings/subcat/{subcatId}`, для ДП типа «Лукап» — `administration/data-source-settings/lookup/{extParamId}`).
Свой вид грида пользователь по-прежнему сохраняет и сбрасывает сам: личная настройка хранится отдельной строкой по его идентификатору и других пользователей не затрагивает. Сброс настроек всех пользователей категории — тоже действие администратора платформы.

**Итоги по колонкам.** В настройках табличного вида категории (блок «Таблица», `administration/data-source-settings/subcat/{subcatId}`) подсчёт итогов включается флагом **«Считать итоги»**. Операция задаётся отдельно по каждой колонке в списке колонок — рядом с колонкой выбирается операция итога: **сумма, среднее, минимум, максимум** либо **«нет»** (итог по этой колонке не считается). Итог выводится закреплённой строкой внизу таблицы; если для колонки выбрано «нет», ячейка итога по ней остаётся пустой. Итоги доступны для числовых и денежных колонок. У представления «Ресурсы» механика своя: там флаг называется «Считать в группировке» и появляется только при заданной группировке, а набор операций шире — добавлены счётчики для чекбокса, лукапа и выпадающего списка, а также колонка «Итоги» в списке колонок (см. [resources/admin.md](https://help.1forma.ru/domains/resources/admin.md), раздел «Итоги по колонкам таблицы ресурсов»); для блока «Используется» источник итогов — прежний общий ключ настроек приложения. Для таблицы категории список операций зависит от типа колонки: доступны только операции, которые поддерживаются для этой колонки и могут быть рассчитаны в итоговой строке; недоступную операцию выбрать нельзя. При включённом флаге «Считать итоги» в настройке колонки отображается её действующая операция, а значение «нет» означает, что итог по колонке не рассчитывается. Сохранённые настройки, перенесённые миграцией из прежнего общего ключа, показываются как соответствующие им операции. В сохранённых настройках операция итога хранится двумя форматами — как одиночное значение («сумма») и как список значений (например, несколько операций по одной колонке). Оба формата равноправны: интерфейс и расчёт итогов понимают их одинаково, различается только запись в настройках, а не поведение. Для категорий, которым итоги перенесли из прежнего общего ключа настроек приложения, формат записи может отличаться от созданного вручную — на результат это не влияет.

**Настройка «Подзадачи» в таблице категории.** В настройках табличного вида категории (блок «Таблица», `administration/data-source-settings/subcat/{subcatId}`) есть флаг **«Подзадачи»**. Он управляет только видимостью переключателя режима подзадач в тулбаре: пока флаг выключен (по умолчанию), переключателя «Подзадачи» в панели инструментов нет. Включённый флаг показывает переключатель, а пользователь сам решает, включать ли режим, — состояние переключателя хранится отдельно, для каждой таблицы и каждого пользователя. Флаг не влияет ни на состав колонок, ни на сами данные таблицы: вне режима подзадач список выглядит и работает как обычно.

Тот же механизм хранит общий вид грида блока «Используется»: владелец настройки — строка настроек блока (`dbo.CustomTaskUsedAsEpBlockSettings`), ключи `TaskUsed` (классический вид колонок) и `TaskUsed_tableSettings` (табличное представление).

**Сохранённые фильтры.**
API: `/api-core/datasource/{type}/filters`. Таблица БД: `dbo.DataSourceFilters`.
Сохранённые фильтры и сценарии выбора. Фильтрация задач и фильтрация табличных ДП обрабатываются раздельно.

### Произвольные источники данных (DataSourceSettings)

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

> **Как настраивать** произвольный источник — колонки (названия, типы, фильтры), кнопки действий и тулбара, выгрузка в Excel — в отдельной статье [Произвольные источники данных](https://help.1forma.ru/domains/grids/custom-data-sources.md). Ниже — только где хранится настройка.

**Таблица БД:** `dbo.DataSourceSettings` (ключи вида `sptable_<имя>`)

Произвольный источник данных — это грид поверх объекта БД. Источник настраивается парой «тип + имя объекта»; тип определяет, какой ключ JSON-настройки будет заполнен:

| Тип источника | Ключ настройки | Объект на MS SQL | Объект на PostgreSQL |
|---|---|---|---|
| Таблица | `tableName` | таблица | таблица |
| Представление | `viewName` | представление | представление |
| Функция | `funcName` | функция `(userId[, taskId])` | функция `(userId[, taskId])` |
| Хранимая процедура | `spName` | хранимая процедура | одноимённая PG-функция |
| Хранимая процедура без ResultSet | `spName` + флаг | процедура без выборки | не применимо — тип не предлагается в списке типов источника |

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

- При сохранении источника в автоадминке заполняется ровно один из ключей `spName`, `funcName`, `tableName`, `viewName` — по выбранному типу, остальные три обнуляются. Ключ `paramFuncName` это сохранение не пишет и не обнуляет, поэтому он может соседствовать с любым из четырёх.
- На PostgreSQL-стендах источник типа «Хранимая процедура» работает через одноимённую функцию. В текст вызова уходит имя со схемой `dbo.`, квадратные скобки MS-нотации при сборке снимаются, а имя, квалифицированное другой схемой (`custom.foo`), остаётся как записано. Регистр в вызове сохраняется, но PostgreSQL выполняет незаквотированный идентификатор в нижнем регистре — поэтому на стенде должна существовать функция `dbo.<имя в нижнем регистре>` (источнику `[dbo].[RoadMapInSubcat]` соответствует `dbo.roadmapinsubcat`) с параметрами `(p_userid int default null, p_taskid int default null)`. Настройку источника менять не нужно.
- Те же правила записи имени действуют для источника БИ-блока «Задачи, использованные в задаче» (`CustomTaskUsedAsEpBlockSettings.SPDataSource`) — путь сборки вызова общий. Набор параметров там свой: функция получает `p_taskid`, `p_userid`, `p_showalltasks`, `p_startindex`, `p_endindex`.
- Если PG-функции с таким именем нет, запрос данных возвращает HTTP 400 «The requested data source is not available.» — это ожидаемая диагностика, а не сбой сервера.
- На PostgreSQL источник типа «Хранимая процедура без явного ResultSet» не сохраняется: и создание, и изменение отклоняются с ошибкой о том, что тип доступен только на MS SQL. Проверка срабатывает до обращения к настройке, поэтому ошибку даёт и источник, которого в системе ещё нет.
- У источника, созданного переносом иерархии задач, в настройке заполнен признак переноса (`MigratedTaskHierarchyId`), а колонки хранятся в слоте представления «Иерархия»: и по имени, и по сущности такой источник отдаёт данные своего дерева — см. [Произвольные источники данных → Источник, перенесённый из иерархии задач](https://help.1forma.ru/domains/grids/custom-data-sources.md#источник-перенесённый-из-иерархии-задач).

### Условное форматирование колонок табличных ДП (v2.266)

**Где настраивается:** API администрирования (`/api/admin/extparams/table/{tableId}/formatting-rules`)
**Таблица БД:** `dbo.ExtParamTableColumnFormattingRules` (FK → `ExtParamTableSettings.Id`)

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

**Маршруты API:**

| Метод | Маршрут | Назначение |
|-------|---------|------------|
| GET | `/api/admin/extparams/table/{tableId}/formatting-rules` | Все правила для ДП Таблица (включая неактивные) |
| POST | `/api/admin/extparams/table/{tableId}/formatting-rules` | Создание правила |
| PUT | `/api/admin/extparams/table/{tableId}/formatting-rules/{ruleId}` | Обновление правила |
| DELETE | `/api/admin/extparams/table/{tableId}/formatting-rules/{ruleId}` | Удаление правила |

`tableId` — ID самого ДП Таблица; `ColumnId` передаётся в теле запроса.

**Модель правила:**

| Поле | Тип | Описание |
|------|-----|----------|
| ColumnId | int (FK → ExtParamTableSettings.Id) | На какую колонку правило |
| RuleType | enum `EpTableFormattingRuleType` | Тип правила: числовые (GreaterThan, Between, Min/Max, …), текстовые (Contains, StartsWith, …), Duplicates |
| ValueX | string (nullable) | Первое значение условия; не используется для Min/Max/Duplicates |
| ValueY | string (nullable) | Второе значение условия; используется только для Between/Outside |
| Color | enum `EpTableFormattingColor` | Цвет (Red, Green, Yellow, …) — 12 значений палитры |
| ColorTone | enum `EpTableFormattingTone` | Тон (None, White, Light, Normal, Dark) |
| Priority | int | Приоритет: правило с меньшим Priority применяется первым |
| IsActive | bit | Активность правила |

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

Полный справочник типов правил (числовые/текстовые/универсальные), палитры цветов и тонов, логики валидации — в [справочнике настроек ДП Таблица](https://help.1forma.ru/domains/ext-params/table/settings-reference.md) (раздел «Условное форматирование колонок»).

**Очистка HTML в ячейках.** Содержимое ячеек с HTML-разметкой (HTML-колонки, значения с разметкой) очищается перед показом: скрипты, небезопасные теги и inline-стили (атрибут `style`) из разметки ячейки удаляются. Для окрашивания и оформления ячеек по значению используйте условное форматирование (выше), а не inline-стили в содержимом ячейки.

### CustomSettings — экспорт, агрегаты, права на CSV

Глобальные настройки экспорта, агрегатов и прав на CSV:

| Ключ | Тип / Default | Назначение |
|------|---------------|------------|
| `MaxExcelExportRows` | int / `50000` | Максимум строк для экспорта в Excel. При превышении — ошибка (не больше 50 000) |
| `MaxCsvExportRows` | int / `50000` | Максимум строк для экспорта в CSV (не больше 50 000) |
| `ExportAgGridAsCsv` | bool / `false` | Если `true` — кнопка «В Excel» в табличном виде категории экспортирует в **CSV** вместо XLSX |
| `MaxScriptsToCombine` | int / `10` | Лимит на объединение скриптов |
| `CompressDSSettings` | bool / `true` | Если `true` — настройки табличного вида хранятся в `DataSourceSettings.ValueGZip` (GZip). При `false` — в `Value` (JSON). Загрузка совместима с обоими режимами: сначала `ValueGZip`, потом `Value` |
| `DataSourceAggregates` | JSON | Включает строку итогов (`sum` / `avg` / `min` / `max`) для числовых и денежных колонок в блоке БИ (тип `taskUsed`). Для табличного вида категории ключ источником больше не является: операции берутся из настроек таблицы категории. Формат: `[{"type":"subcat\|taskUsed","id":N,"gridTotalColumns":{"{column}":["sum","avg","min","max"]}}]` |
| `DSUpdateCSVPermissions` | JSON | Управляет правом «Создание/обновление из CSV»: при отсутствии права кнопки скрываются. Формат: `"UseNewExtParamsAndTaskUsed":[{"subcats":[ids],"groups":[ids]}]` — категории и группы, для которых кнопки включены |
| `DoNotSelectedTaskInSummary` | bool / `false` | Если `true` — задачи из сводных разделов не добавляются в запрос |
| `CSVImportMaxThreadsCount` | int | Количество потоков для импорта задач из CSV. Увеличение ускоряет, но возможна ошибка `Specified argument was out of the range`. Рекомендация — `1` |
| `UseNewGrid` | JSON-массив правил | Включает новый грид (таблицу задач) для выбранных пользователей в выбранных контекстах. Применяется покомпонентно: каждое правило независимо, может быть задано несколько. См. структуру ниже |
| `GridColumnOperationRestrictionsDisabled` | bool / `false` | Площадочный рубильник ограничения операций по колонкам дополнительных параметров: при `true` фильтр, быстрый поиск, сортировка, группировка, итоги и список значений работают по колонкам с матрицей доступа, пакетной SQL-функцией и доступом по статусу как по обычным. Маскировка закрытых значений при этом сохраняется — см. [Гриды](https://help.1forma.ru/domains/grids/business.md) → «Отключение ограничения операций на площадке» и [Отключение ограничения операций по колонкам ДП](https://help.1forma.ru/domains/grids/column-operation-restrictions-switch.md) |

> Кастомные настройки задаются в разделе администрирования «Кастомные настройки приложения». Источник: `dbo.SettingsCustom`.

![Диалог «Постановка задач из CSV файла»: категория, файл, разделитель и сопоставление колонок](https://help.1forma.ru/help-images/grids/csv-file-01.png)

### `UseNewGrid` — структура правил

Каждый объект массива:

| Поле | Тип / Default | Назначение |
|------|---------------|------------|
| `subcats` | `int[]` | ID категорий, для которых включается новый грид. Игнорируется при `allSubcats=true` |
| `users` | `int[]` | ID пользователей, к которым применяется правило |
| `allUsers` | bool / `false` | Применить ко всем пользователям |
| `allSubcats` | bool / `false` | Новый грид для **всех** категорий |
| `myTasks` | bool / `false` | Включить в разделе «Мои задачи» |
| `tickers` | bool / `false` | Включить для тикеров (индикаторов) |

**Логика применения:** правило срабатывает для пользователя, если `users` содержит его ID **или** `allUsers=true`. При наличии хотя бы одного подходящего правила с `allSubcats=true` — новый грид включается для всех категорий; иначе — объединяются `subcats` из всех подходящих правил. Флаги `myTasks` / `tickers` ставятся в `true`, если хотя бы одно подходящее правило содержит их `true`.

**Примеры:**

Все пользователи, все категории, включая «Мои задачи» и тикеры:
```json
[{"subcats":[],"users":[],"allUsers":true,"allSubcats":true,"myTasks":true,"tickers":true}]
```

Конкретные пользователи и категории:
```json
[{"subcats":[5574],"users":[6736],"allUsers":false,"allSubcats":false,"myTasks":false,"tickers":false}]
```

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

Частые проблемы настройки грида и способы их диагностики:

| Симптом | Причина | Где проверить | SQL-диагностика |
|---------|---------|---------------|-----------------|
| Пропала колонка в гриде | Скрыта пользователем или убрана из схемы категории | `dbo.DataSourceColumns` | `select * from dbo.DataSourceColumns where DataSourceId = {dsId} and UserId = {userId}` |
| Фильтр работает в задачах, но не в ДП Таблица | Фильтрация задач и табличных ДП обрабатывается раздельно | Настройки фильтрации колонки | Проверить настройки фильтрации колонки табличного ДП |
| Избранное группы не отображается | Нет ссылок для группы пользователя | Форма `favourites` | `select * from dbo.UserLinks where GroupId = {groupId}` |
| Тикер показывает неверные данные | Некорректный источник данных тикера | Форма `tickers` | `select * from dbo.MenuItemTicker where Id = {tickerId}` |
| Неверный DataSourceType/entityId | Грид загружает «не тот» набор данных | Параметры запроса к `/api-core/datasource` | Проверить `DataSourceType` и `entityId` в запросе |
| Кнопка «В Excel» отдаёт CSV | `ExportAgGridAsCsv=true` | Кастомные настройки приложения | `select * from dbo.SettingsCustom where Name = 'ExportAgGridAsCsv'` |
| Экспорт обрывается на 50 000 строк | Достигнут лимит `MaxExcelExportRows` / `MaxCsvExportRows` | Кастомные настройки приложения | См. соответствующий ключ |
| Нет кнопок «Создание/обновление из CSV» | Нет права для текущего пользователя/категории по `DSUpdateCSVPermissions` | Кастомные настройки приложения | См. JSON-настройку выше |
| Источник «Хранимая процедура» не отдаёт данные на PG-стенде (HTTP 400) | На PG нет функции, одноимённой процедуре (`dbo.<имя в нижнем регистре>`) | Наличие функции в `pg_proc` | `select proname from pg_proc p join pg_namespace n on n.oid=p.pronamespace where n.nspname='dbo' and p.proname='<имя_в_нижнем_регистре>'` |
| Колонка ДП выбрана в настройках, но в гриде не выводится и ошибки нет | ДП не привязан к категории или не попал в денормализацию — такие колонки исключаются из выборки, в журнал пишется предупреждение с их именами | Привязка ДП к категории; состав колонок денормализованной таблицы | `select name from sys.columns where object_id = object_id('dbo.TasksInSubcat{subcatId}Denormalized')` |

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

Смежные разделы:

- [Справочник фильтров](https://help.1forma.ru/domains/grids/filters-reference.md) — типы фильтров для колонок грида
