ДП «Таблица» — справочник настроек¶
Полный перечень настроек ДП «Таблица»: где хранится каждая настройка, что она делает и какие есть ограничения.
Настройки таблицы (ExtParamTableCommonSettings)¶
Карточка ДП «Таблица» открывается на вкладке «Основные настройки» — общие поля параметра: имя, тип «Таблица», модуль, пример содержимого, регулярное выражение проверки и режим Excel. Опции, специфичные для таблицы, вынесены на вкладку «Дополнительные настройки».

Вкладка «Дополнительные настройки» в админке ДП.

| Настройка | Поле БД | Тип | Что делает | Ограничения |
|---|---|---|---|---|
| Ключевой столбец | KeyColumnId |
int FK → ExtParamTableSettings | Столбец для сопоставления строк при импорте и для множественного выбора | Допустимые типы: Текст, Число, Дата, Дата-время, Деньги, Телефон, Lookup, Выпадающий список, RowID. Без ключевого столбца импорт = полная перезапись |
| Использовать RowID как ключ | UseRowIdAsKeyColumn |
bit | При импорте строки сопоставляются по порядковому номеру | |
| Отображать как | DisplayMode |
int | Режим: 0 = Таблица, 1 = Ссылка. Динамический набор полей — отдельный флаг DisplayAsDynamicSetOfFields (bit) |
|
| Максимальная высота (px) | TableMaxHeight |
int | Макс высота области строк; при превышении — вертикальный скролл. По умолчанию высота строк подстраивается автоматически под содержимое ячеек (учитываются переносы текста, превью изображений, кнопки управления). Минимальная высота строки — 150px. При большом числе строк включается постраничное отображение с серверной подгрузкой данных. Предусмотрена кнопка раскрытия таблицы в модальное окно. | |
| Разрешить экспорт | ExportEnabled |
bit | Иконка экспорта в правом верхнем углу таблицы | Экспортируются только столбцы с включённым ExportEnabled |
| Разрешить импорт | ImportEnabled |
bit | Иконка импорта в правом верхнем углу таблицы | Импортируются только столбцы с включённым ImportEnabled; без ключевого столбца — полная перезапись |
| Загружать файлы в момент вкладывания | UploadWhenFileAttach |
bit | Файл загружается в БД сразу при выборе, а не при сохранении таблицы | |
| Число параллельных загрузок | NumberOfParallelDownloads |
int | Количество одновременных загрузок файлов | |
| Файловый провайдер | FileProviderId |
int FK → FileProviders | Провайдер хранения файлов для файловых колонок | Учитывается только при ручном изменении, смарт-действии «Скачать файл» и Lua. Другие смарт-действия используют провайдер по умолчанию |
| Сохранять строку после редактирования (автосохранение) | AutosaveEnabled |
bit | После Add/Delete/Edit строка сохраняется автоматически; кнопка «Сохранить» скрыта | Tab/Enter не сбрасывает выделение ячейки |
| Создавать строки в модальном окне | AddNewRowModal |
bit | При нажатии «+» открывается модальное окно для ввода значений | |
| Включить секции столбцов | IsSectionsEnabled |
bit | Включает группировку колонок в секции | Требует включённого автосохранения |
| Режим ширины по умолчанию | TableWidthDefault |
int | 0 = По умолчанию, 1 = По размеру экрана, 2 = По содержимому, 3 = По содержимому и заголовкам | |
| Скрыть кнопку добавления строк | HideAddRowsButton |
bit | Кнопка «+» скрыта; строки можно добавлять только через множественный выбор | |
| Табличный вид иерархии множественного выбора | IsHierarchyMultiselect |
bit | В окне множественного выбора показывает иерархическое дерево вместо плоского списка (если ключевой столбец ссылается на иерархический Lookup). Сортировка и группировка в режиме дерева недоступны, фильтрация работает. Дерево раскрывается до уже выбранных строк; если ничего не выбрано — открывается только корневой уровень | Требует иерархического Lookup в ключевом столбце |
| Хранить html представление | StoreHtmlPresentation |
bit | Сохранение HTML-представления в GZip для отображения в списке задач категории | Без этого флага значение не пишется в ExtParamValues.ExtParamValueGZip. Ограничение размера: HTML-снимок ограничен 6900 байт; строки, не поместившиеся в лимит, тихо отбрасываются без предупреждения. Фактическое количество строк в снимке может быть меньше RowsToRender. Данные в таблице сохраняются полностью — ограничение касается только отображения в списке задач категории и Excel-экспорта оттуда. В карточке задачи все строки отображаются корректно. |
| Режим Excel | IsExcelMode |
bit | Функция в разработке | |
| Столбец для множественного выбора | MultiselectColumnId |
int FK → ExtParamTableSettings | Ключевой Lookup-столбец для режима множественного выбора | Тип столбца = Lookup |
При режиме «Отображать как» = динамический набор полей (DisplayAsDynamicSetOfFields) таблица показывается не сеткой, а набором полей: каждая строка выводится отдельным блоком со своими подписями столбцов, строки добавляются кнопкой «Добавить строку».

Типы столбцов (ExtParamTableSettings.Type)¶
Доступные типы столбцов таблицы и их особенности:
| Тип | Type (tinyint) | Особенности |
|---|---|---|
| Текст | 0 | Маска, столбец шаблона значения |
| Большой текст без форматирования | 1 | Textarea, без маски |
| Выпадающий список | 2 | Опции в ExtParamTableOptions; или ссылка на ДП через ReferencedExtParamId |
| Текст с маской | 3 | Маска: Email, Phone, пользовательскые через спецсимволы (0 = цифра, a = буква, * = любой) |
| Деньги | 4 | Поддержка итогов (EnableTotal); диапазон ±922 337 203 685 476.99 |
| Дата и время | 5 | Формат DD-MM-YYYY hh:mm для стандартного значения |
| Дата | 6 | Формат DD-MM-YYYY для стандартного значения |
| Телефон | 7 | Форматированное отображение |
| Lookup | 8 | Настройки через ReferencedExtParamId (→ ExtParams) и LookupParamSettingID (→ LookupParamSettings); поддержка смарт-фильтров, каскадных зависимостей |
| Чекбокс | 9 | bool |
| Число | 10 | Поддержка итогов (EnableTotal); диапазон ±99 999 999 999 999; настройки через ReferencedExtParamNumberSettings |
| Файл | 11 | Мультифайл, сканирование, превью, логирование действий; провайдер наследуется от таблицы |
| Виртуальная | 12 | Только для чтения; ссылка на Lookup-столбец + поле категории; наследует настройки Lookup (включая «Отображать как текст»); режим «Невидимая» не поддерживается |
| Шаблонная | 13 | Mustache-подобный шаблон: {{c123.stringValue}}; регистрозависимо; без фильтрации |
| Блок кнопок | 14 | JS-выражение или смарт-пакет; видимость/активность по колонкам или смарт-фильтру; без фильтрации |
| Выбор пользователей | 15 | Настройки через ReferencedExtParamId (→ ExtParams типа Users); перенос строк влияет на множественный выбор |
Настройки столбца (ExtParamTableSettings)¶
Вкладка «Столбцы» в админке ДП — список всех столбцов таблицы с типом, порядком, сортировкой, маской, режимом и значением по умолчанию; кнопка «Создать» добавляет новый столбец.

Клик по столбцу открывает карточку с его полными настройками.

| Настройка | Поле БД | Тип | Что делает |
|---|---|---|---|
| ID | ID |
int PK | Идентификатор столбца |
| Имя | Name |
varchar | Название столбца в UI |
| Порядок | OrderID |
int | Порядок расположения; 0 = по порядку создания |
| Тип | Type |
tinyint | Тип данных (см. таблицу выше) |
| Режим | Mode (в API) / Locked + IsHidden (в БД) |
— | Необязательно / Обязательно / Только для чтения / Скрытая / Невидимая |
| Значение по умолчанию | DefaultValue |
varchar | Пустое / Фиксированное / смарт-выражение (DefaultValueSmartExpressionId) |
| Смарт-выражение | SmartExpressionId |
int FK | Вычисление значения; вычисляется после сохранения «не-смарт» столбцов; порядок — по OrderID. При наличии смарт-выражения режим «Обязательно» для столбца недоступен |
| Маска | Mask |
varchar | Для текстовых столбцов; новая таблица: 0=цифра, a=буква, *=любой |
| Столбец шаблона значения | TemplateColumnId (в ExtParamTableTextColumnSettings) |
int FK | Ссылка на Lookup/Текст столбец с шаблоном RegEx; только для типа Текст |
| Ширина | ColumnWidth |
int | 0 = авто, 1/2/4/6 = диапазон растягивания, другие = px |
| Макс высота | — | — | Устаревшее, не используется |
| Выравнивание | Align |
tinyint | 0=лево, 1=центр, 2=право, 3=ширина (не поддерж. в новой таблице) |
| Прикрепить слева | Locked |
int | Фиксация столбца при горизонтальной прокрутке |
| Итого | EnableTotal |
bit | Строка итогов под таблицей; только Число и Деньги |
| Сортировка по умолчанию | DefaultSort |
int (enum SortTypeEnum) |
0 = нет (None), 1 = по возрастанию (Ascending), −1 = по убыванию (Descending); только один столбец; пересортировка срабатывает автоматически после любого изменения значения в строке (ручное редактирование или смарт-кнопка) |
| Участвует в группировке, порядок | DefaultGroupingOrder |
int NULL | Номер позиции в группировке таблицы по умолчанию; пусто — столбец не участвует в группировке. Чем больше число, тем глубже уровень вложенности. Не применяется при включённом режиме секций — приоритет за секциями |
| Разрешить экспорт | ExportEnabled |
bit | Столбец участвует в экспорте; скрытые не экспортируются |
| Разрешить импорт | ImportEnabled |
bit | Столбец участвует в импорте; скрытые и только для чтения не импортируются |
| Перенос строк | UseLineBreak (в API) |
bit | Текст переносится по ширине вместо обрезки; для Users — ограничение одним пользователем |
| Название секции | SectionId |
int FK → ExtParamTableSections | Принадлежность к секции |
| Видимость в закрытой секции | IsVisibleInClosedSection (в API) |
bit | Столбец виден когда секция свёрнута |
| Видимость в открытой секции | IsVisibleInOpenSection (в API) |
bit | Столбец виден когда секция развёрнута |
| Участвует в поиске | IsUsedInSearch (в БД) |
bit | Управляет двумя механизмами: (1) Поиск «в полях» — столбец включается в полнотекстовый поиск по задачам категории в режиме «в полях»; (2) Фильтр «Содержит» на колонке ДП Таблица в списке задач категории — поиск ведётся только по строкам столбцов, у которых флаг включён. Если флаг отключён у всех столбцов, фильтр «Содержит» вернёт 0 задач. Фильтры «Нет значения» и «Есть значение» от этого флага не зависят. Диагностика: если фильтрация по содержимому ДП Таблица не работает / поиск «в полях» не находит значения из таблицы — первым делом проверить этот флаг. Также требуется настроенный шаблон (ItemTemplate) и StoreHtmlPresentation = true. См. Списки задач → Решение проблем (§ 1.3). |
| Логировать действия с файлами | IsLogFileReadsAction (в API) |
bit | Запись в журнал Диск; только для типа Файл |
| Локализованное название | LocalizedNameId |
int FK → LocalizedBusinessObjects | Перевод названия столбца |
| Ссылка на ДП | ReferencedExtParamId |
int FK → ExtParams | Для Lookup, Select, Users, Number — ДП-источник настроек |
| Виртуальная: Lookup-столбец | VirtualColumnReferencedLookupColumnId |
int FK | Lookup-столбец, из которого берётся ссылка на задачу |
| Виртуальная: ДП категории | VirtualColumnReferencedExtParamId |
int FK → ExtParams | Поле категории для отображения |
| Настройки Lookup | LookupParamSettingID |
int FK → LookupParamSettings | Полные настройки Lookup (фильтры, каскады, вид) |
| Источник данных | DataSource, DataValueField, DataTextField |
varchar | Для Выпадающего списка — SQL или набор опций |
| Set of elements as DataSource | SetOfElementsAsDataSource (в API) |
bit | Опции берутся из ExtParamTableOptions |
Режимы столбца подробнее. «Обязательно» — в пользовательском режиме поле выделяется курсивом; проверка действует только в рамках ДП «Таблица» и только для новых и изменённых в текущем сеансе строк, поэтому не блокирует создание задачи; пустые обязательные ячейки в ранее существовавших строках подсвечиваются красным, но сохранению не мешают. «Скрытая» — столбец не отображается и недоступен для вычислений, к нему не обращается автоматизация. «Невидимая» — столбец скрыт от пользователя, но доступен автоматизации; не поддерживается для типов «Виртуальная» и «Шаблонная».
Дополнительные настройки столбцов по типам¶
Lookup¶
Настраивается через создание/выбор ДП типа Lookup (ReferencedExtParamId). Наследует все настройки ДП Lookup: категория, смарт-фильтр, каскадные зависимости, вид.
Выбор пользователей¶
Настраивается через создание/выбор ДП типа Users (ReferencedExtParamId). Настройки: группы, фильтры пользователей.
Выпадающий список¶
Варианты: через ExtParamTableOptions (локальные опции) или через ReferencedExtParamId → ДП типа List.
Файл¶
Настройки файлового столбца:
| Настройка | Описание |
|---|---|
| Разрешить сканирование | Иконка сканирования при добавлении строки |
| Создавать системные копии при акцепте подписи | Системная копия файла при подписании |
| Отображать превью для картинок | Превью с размерами; не работает для мультифайл |
| Мультифайл | Несколько файлов в ячейке |
| Работа с Word | Наследует настройки ДП «Файл» (блок «Работа с файлами Word») |
Число¶
Настраивается через ДП типа Число (ReferencedExtParamId). Диапазон: ±99 999 999 999 999.
Деньги¶
Настраивается через ДП типа Деньги (ReferencedExtParamId). Диапазон: ±922 337 203 685 476.99.
Виртуальная¶
Столбец только для чтения, отображающий поле из задачи, на которую ссылается Lookup-столбец:
| Настройка | Описание |
|---|---|
| Lookup-столбец | Уже настроенный Lookup-столбец в этой таблице |
| ДП категории | Параметр из категории, на которую смотрит Lookup |
| Превью (для файлового ДП) | Высота/ширина превью, флаг отображения |
Режим: только для чтения. Режим «Невидимая» не поддерживается.
Если виртуальная колонка отображает значение ДП из связанной задачи, то при изменении этого ДП значение в таблице обновляется в реальном времени у всех пользователей, у которых задача открыта сейчас или была открыта в течение последнего часа. Автообновление не работает для проектных ДП-Таблиц (настроенных через ProjectTableJSONExtParamID).
Шаблонная¶
Mustache-подобный шаблон для объединения в одном столбце данных из нескольких других столбцов таблицы. Синтаксис: текст1 {{c123.stringValue}} текст2 {{c456.stringValue}}, где 123 и 456 — ID столбцов. Запись регистрозависима (stringValue — верно, StringValue — нет). Принципы шаблонов — по документации Mustache. В пользовательском режиме фильтрация по шаблонному столбцу невозможна.
Блок кнопок¶
Столбец с кнопками действий (JS-выражение или смарт-пакет):
| Настройка | Описание |
|---|---|
| Имя | Текст на кнопке (если нет иконки) или подсказка (если есть) |
| Описание | Подсказка при отсутствии иконки |
| Иконка | Из набора /spa/content-icons |
| JavaScript выражение | JS-код; доступны event.originalEvent, event.data, event.block.reload/freeze/unfreeze. Через event.data доступны поля строки по названию столбца таблицы (например, event.data.isActive) |
| Колонка идентификатора (int) | Столбец, возвращающий ID объекта; в смарт-пакете доступен как параметр «Идентификатор объекта». Имя столбца должно точно совпадать с именем поля в возвращаемом наборе данных (например, TaskID), регистрозависимо |
| Пакеты действий | Смарт-пакет по нажатию; в его смарт-выражениях доступны параметры события: идентификатор объекта (из столбца идентификатора или ID строки), строка с JSON-объектом, ID кнопки, параметры текущего пользователя |
| URL | Смарт-выражение → URL для модального окна после смарт-пакета. Адрес относительный (/spa/tasks/12345) или абсолютный (https://…/spa/tasks/12345); абсолютный — только по https |
| Колонка видимости (bool) | Столбец, определяющий видимость кнопки |
| Колонка активности (bool) | Столбец, определяющий активность кнопки |
| Сообщение при успехе | Текст после успешного выполнения |
| Сообщение при ошибке | Текст при ошибке |
| Информационное сообщение при нажатии | Подтверждение перед выполнением |
| Режим видимости | Смарт-фильтр: Блокировать (disabled) или Скрыть (hidden) |
JS или смарт-пакет — взаимоисключающие. Фильтрация по столбцу невозможна. При нажатии все кнопки автоблокируются; разблокировка через event.block.unfreeze(). Вызов методов веб-сервисов из JS-выражений описан в отдельном разделе руководства администратора.
Секции столбцов (ExtParamTableSections)¶
Группировка столбцов в сворачиваемые секции:

| Настройка | Поле БД | Описание |
|---|---|---|
| Имя | SectionName |
Название секции |
| Порядок | SectionOrder |
Порядок расположения |
| По умолчанию развёрнуто | IsDefaultExpanded |
Секция развёрнута или свёрнута |
Требования: включён флаг IsSectionsEnabled и AutosaveEnabled в настройках таблицы.
Для каждого столбца: SectionId + IsVisibleInClosedSection + IsVisibleInOpenSection.
В карточке задачи столбцы выводятся сгруппированными под общими заголовками секций.

Множественный выбор (Multiselect)¶
Настройка: MultiselectColumnId → Lookup-столбец в таблице.

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

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

В карточке задачи множественный выбор вызывается кнопкой на панели инструментов таблицы.
![]()
Откроется окно со списком значений ключевого столбца; отмеченные строки добавляются в таблицу по кнопке «Применить».

Кнопка множественного выбора не отображается в следующих случаях:
- В задаче активны настройки «Ограничить добавление новых строк» или «Ограничить удаление строк» (из настроек ДП в подкатегории).
- Таблица открыта в НТФ (форме постановки задачи) — кнопка не отображается до момента создания задачи. Это ожидаемое ограничение, не баг.
Большой объём значений. Если ключевой Lookup-столбец смотрит на большой справочник или категорию с множеством задач, окно множественного выбора станет неудобным. Ограничить набор отображаемых значений можно смарт-фильтром в настройках Lookup-столбца.
Права доступа к столбцам¶
По группам пользователей (ExtParamTableSettingsInSubcatGroupPermissions)¶
Настраивается для каждого столбца и подкатегории. Режим контроля: GroupAccessControlMode.
По статусам задачи (ExtParamTableSettingsInSubcatStatePermissions)¶
Настраивается для каждого столбца и подкатегории. Включается флагом StateAccessControlEnabled.
Тип доступа: чтение или запись.
Динамическая обязательность¶
Вкладка «Динамическая обязательность» задаёт правила, по которым отдельные ячейки строк ДП «Таблица» становятся обязательными к заполнению по условию: если в строке выполнены проверки по значениям других столбцов, то значение в целевой колонке этой строки обязательно.
Признак обязательности вычисляется на уровне строки — одно и то же поле в разных строках может быть обязательным или нет в зависимости от значений соседних ячеек той же строки. Незаполненная обязательная ячейка блокирует сохранение строки, в том числе при добавлении строки через модальное окно.

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

Операторы сравнения: = (равно), ≠ (не равно), > (больше), < (меньше), ≥ (больше или равно), ≤ (меньше или равно), пусто, не пусто, содержит, не содержит.
Правило удаляется кнопкой «Удалить» в его карточке, отдельное условие — кнопкой × рядом с ним.
Хранение: правила — в ExtParamTableRequiredRules (TargetColumnId, LogicOperator, IsActive), условия — в ExtParamTableRequiredConditions (RuleId, ConditionColumnId, CompareOperator, CompareValue).
Условное форматирование колонок (ExtParamTableColumnFormattingRules)¶
Позволяет раскрашивать ячейки таблицы по условиям (по аналогии с Excel): «больше N — красным», «совпадает с X — зелёным», «в диапазоне A..B — жёлтым» и т.п. Правила задаются для каждой колонки ДП Таблица.
Где настраивается: в админке — на странице настроек ДП Таблица (см. ниже «Интерфейс настройки в админке»); программно — через Admin API (маршрут /api/admin/extparams/table/{tableId}/formatting-rules).
Таблица БД: dbo.ExtParamTableColumnFormattingRules (FK → ExtParamTableSettings.Id).
Интерфейс настройки в админке¶
Редактор правил встроен в страницу настроек ДП: когда открыты настройки ДП с типом Таблица, появляется секция управления правилами форматирования. Правила сохраняются вместе с остальными настройками ДП.
Что видит администратор:
- Кнопка «+ Добавить правило» в шапке секции.
- Список карточек-правил (если правил нет — пустое состояние «Правил нет»). Карточки автоматически пересортированы по приоритету.
- В каждой карточке: заголовок «Правило N», чекбокс «Активно» и кнопка «Удалить» (с подтверждением; удаляется сразу).
Поля карточки:
| Поле | Контрол | Поведение |
|---|---|---|
| Колонка | выпадающий список с поиском | Список только форматируемых колонок: Число, Деньги (числовые) и Текст (текстовая). Остальные типы колонок в список не попадают |
| Тип правила | выпадающий список с поиском | Состав зависит от типа выбранной колонки: для числовой — 11 вариантов (больше/меньше/между/вне диапазона + минимум/максимум + дубликаты), для текстовой — 7 вариантов (содержит/начинается/… + дубликаты). При смене колонки несовместимый тип сбрасывается на первый доступный |
| Значение X | число (для числовых) / текст (для текстовых) | Скрыто для «Минимум»/«Максимум»/«Дубликаты». Обязательное для остальных |
| Значение Y | число / текст | Появляется только для «Между»/«Вне диапазона». Обязательное. Должно быть больше X (иначе ошибка «X должен быть меньше Y») |
| Цвет | выпадающий список | 12 вариантов (Default, Primary, Red, …, Grey) |
| Тон | выпадающий список | 5 вариантов (None, White, Light, Normal, Dark) |
| Приоритет | число, ≥0 | Обязательное. При выходе из поля карточки пересортировываются по новому значению |
Сохранение. Изменения правил применяются при сохранении формы ДП: новые правила создаются, удалённые — удаляются, изменённые — обновляются. При ошибке любой операции показывается сообщение.
Поля правила¶
Состав одного правила условного форматирования (хранится в ExtParamTableColumnFormattingRules):
| Поле БД | Тип | Описание |
|---|---|---|
Id |
int identity PK | |
ColumnId |
int NOT NULL, FK → ExtParamTableSettings.Id | На какую колонку правило |
RuleType |
tinyint, enum EpTableFormattingRuleType |
Тип правила — см. ниже |
ValueX |
nvarchar(500) NULL | Первое значение условия (число/текст); для Min/Max/Duplicates — не используется |
ValueY |
nvarchar(500) NULL | Второе значение условия (для Between/Outside — верхняя граница); иначе не используется |
Color |
nvarchar(50) NOT NULL | Цвет — см. ниже |
ColorTone |
nvarchar(50) NOT NULL | Тон цвета — см. ниже |
Priority |
int NOT NULL | Приоритет: при пересечении условий первым применяется правило с меньшим значением |
IsActive |
bit DEFAULT 1 | Активность правила |
Типы правил (RuleType)¶
Числовые — применимы только к колонкам типа Число и Деньги:
| Значение | Описание | Что требуется |
|---|---|---|
| GreaterThan (0) | Значение > X | ValueX |
| LessThan (1) | Значение < X | ValueX |
| GreaterOrEqual (2) | Значение ≥ X | ValueX |
| LessOrEqual (3) | Значение ≤ X | ValueX |
| Equal (4) | Значение = X | ValueX |
| NotEqual (5) | Значение ≠ X | ValueX |
| Between (6) | X ≤ Значение ≤ Y | ValueX + ValueY |
| Outside (7) | Значение < X или > Y | ValueX + ValueY |
| Min (20) | Минимум в колонке | — |
| Max (21) | Максимум в колонке | — |
Текстовые — применимы только к колонкам типа Текст, Большой текст без форматирования, Текст с маской:
| Значение | Описание | Что требуется |
|---|---|---|
| Contains (10) | Содержит подстроку | ValueX |
| NotContains (11) | Не содержит | ValueX |
| StartsWith (12) | Начинается с | ValueX |
| EndsWith (13) | Заканчивается на | ValueX |
| TextEqual (14) | Точное равенство (строка) | ValueX |
| TextNotEqual (15) | Точное неравенство (строка) | ValueX |
Универсальные — любой тип колонки:
| Значение | Описание | Что требуется |
|---|---|---|
| Duplicates (22) | Подсветить дубликаты в колонке | — |
Цвет (Color) и тон (ColorTone)¶
Color: Default, Primary, Red, Pink, Purple, Green, Yellow, Orange, Blue, Cyan, Brown, Grey — 12 значений.
ColorTone: None, White, Light, Normal, Dark — модификатор насыщенности.
Это те же палитры, что используются в портальных виджетах. В БД оба поля хранятся как строковые имена значений (Color, ColorTone).
Методы API¶
Управление правилами форматирования через Admin 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 самого ДП Таблица (ExtParams.Id), а не ID колонки. ID колонки передаётся в теле запроса.
Валидация при сохранении¶
При сохранении правила проверяется:
| Проверка | Когда срабатывает |
|---|---|
ДП с указанным tableId имеет тип «Таблица» |
Передан ID не-таблицы |
| Колонка принадлежит этой таблице | Попытка создать правило для чужой колонки |
| Тип правила совместим с типом колонки | Например, «Содержит» для колонки Число |
| Тип правила — допустимое значение | Передан неизвестный код правила |
| Цвет и тон — допустимые значения | Передан неизвестный цвет/тон |
ValueX указан для правил, требующих X |
Пустой ValueX для «Больше» и пр. |
ValueY указан для «Между»/«Вне диапазона» |
Пустой ValueY |
ValueX пустой для «Минимум»/«Максимум»/«Дубликаты» |
Лишний ValueX |
ValueY пустой для всех правил, кроме «Между»/«Вне диапазона» |
Лишний ValueY |
| Не более 50 правил на одну колонку | Попытка создать 51-е правило |
| При изменении/удалении: правило принадлежит таблице из запроса | tableId не совпадает с фактической таблицей правила |
При нарушении правило не сохраняется, API возвращает ошибку с локализованным сообщением (ru/en).
Применение правил в таблице¶
Алгоритм для каждой ячейки:
- Берётся список правил форматирования колонки.
- Отбрасываются неактивные.
- Активные сортируются по приоритету (меньше — раньше).
- Для каждого правила по порядку проверяется условие; применяется первое подходящее — его цвет и тон задают подсветку ячейки. Если ни одно не подошло — ячейка без подсветки. Правила не комбинируются.
Агрегаты «Минимум»/«Максимум»/«Дубликаты» считаются по видимым строкам таблицы; группы и строки итогов исключаются. Поэтому при фильтрации или группировке набор видимых строк меняется и подсветка минимума/максимума пересчитывается.
Особенности правил:
- «Между»/«Вне диапазона»: порядок ValueX и ValueY на результат не влияет.
- «Содержит»/«Не содержит»/«Начинается с»/«Заканчивается на» при пустом значении не срабатывают (и через интерфейс сохранить такое правило нельзя).
- «Точное равенство»/«Точное неравенство» работают и с пустой строкой как с допустимым значением.
Журнал изменений¶
Любое изменение правила (создание, изменение, удаление) записывается в журнал администрирования. Журнал доступен через интерфейс «Журнал администрирования» или таблицу AdminActionLog.
Ограничения¶
Что нужно учитывать при настройке условного форматирования:
- Форматирование поддерживается только для колонок Число, Деньги и Текст. Для остальных типов колонок (Большой текст без форматирования, Текст с маской, Lookup, MultiLookup, Дата и т.д.) правила в интерфейсе создать нельзя. У столбцов Lookup и MultiLookup цвет берётся из связанной задачи или справочника по прежней логике, а не из этой вкладки.
- «Минимум»/«Максимум»/«Дубликаты» считаются по видимым строкам, а не по всем данным таблицы. При фильтрации или группировке набор видимых строк меняется — подсветка пересчитывается.
- Лимит 50 правил на одну колонку. При попытке создать 51-е правило — ошибка.
- Дубликаты правил не запрещены: можно создать два правила с одинаковым условием, различающихся только приоритетом и цветом; сработает то, что выше по приоритету. При одинаковом приоритете применяется первое совпавшее правило (в порядке создания).
- Для правил «Между»/«Вне диапазона» значение Y должно быть строго больше X.
Шаблон в табличных представлениях (ExtParamTableTemplate)¶
Для отображения ДП Таблица в списке задач категории. Настраивается на вкладке «Шаблон в табличных представлениях»: флаги «Использовать шаблон», «Отображать кол-во строк», «Хранить html представление», число отображаемых строк и заголовок.

| Настройка | Поле БД | Описание |
|---|---|---|
| Использовать шаблон | Enabled |
Активация шаблона |
| Отображать количество строк | RenderTotalRows |
Показ общего числа строк |
| Количество отображаемых строк | RowsToRender |
Сколько первых строк выводить; 0 = пустой объект, без HTML. При 0 изменения значений ДП также не порождают UPDATE-запросов к ExtParamValues (экономия БД при больших таблицах без шаблона) |
| Заголовок | HeaderTemplate |
HTML в начале |
| Шаблон строки | ItemTemplate |
HTML с тегами <cell columnid="..."> для каждой строки |
| Разделитель | SeparatorTemplate |
HTML между строками |
| Футер | FooterTemplate |
HTML в конце |
| Хранить html представление | → StoreHtmlPresentation в CommonSettings |
GZip-хранение в ExtParamValues.ExtParamValueGZip |
| Синхронизировать существующие задачи | — | Пересчёт HTML для существующих задач при изменении шаблона |
Шаблон строки собирается из тегов <cell columnid="..."> подстановкой названий столбцов; ниже задаются разделитель между строками и футер.

HTML-представление хранится в ExtParamValues.ExtParamValueGZip. При денормализации → ExtParamNativeValue. Фоновое задание TableExtParamValuesGZipCompressJob каждые 3 минуты сжимает по 10000 строк.
Значение ДП Таблица не хранится в ExtParamValues.ExtParamValue и TasksInSubcatXXXDenormalized.ExtParamXXXValue. Наличие в ExtParamXXXNativeValue зависит от флага «Хранить html представление».
Импорт/экспорт Excel¶
Экспорт: выгрузка в XLS. Первая строка — названия столбцов. Lookup — текст задачи. Файл — ссылка на файл.
Импорт: XLS/XLSX, одна страница.
| Режим | Описание |
|---|---|
| С заголовками (опция включена) | Сопоставление по названиям столбцов |
| Без заголовков (опция выключена) | Сопоставление по порядку столбцов |
Важно:
- Без ключевого столбца: полная перезапись (все строки удаляются, загружаются новые)
- С ключевым столбцом: строки матчатся по ключу (обновление + добавление новых)
- Файловые столбцы при импорте игнорируются
- Lookup при импорте: можно использовать текст задачи или ID задачи
- Скрытые и только для чтения столбцы не импортируются
- Имена столбцов не должны содержать лишних пробелов
Поведение при сбое импорта¶
Если при импорте Excel возникает исключение на уровне БД (например, на PostgreSQL — Npgsql.PostgresException), запрос завершается с HTTP 200, в ImportResultDto.Errors возвращается сообщение «Ошибка импорта.», и существующий диалог результатов импорта показывает его поверх МТФ. Технические детали (код, inner exception, стек) попадают только в журнал приложения. Данные таблицы при этом не меняются — транзакция не коммитится. Ранее (до 2.268.x) такие исключения уходили как HTTP 500 и порождали вторичный ObjectDisposedException из-за разрушения DI-scope.
Значение по умолчанию — два уровня¶
Для ДП «Таблица» есть два независимых механизма задания дефолтных значений.
1. Предзаполненные строки при создании задачи (уровень ДП в категории)¶
Настраивается в AdminSPA на странице настроек ДП категории → поле «Значение по умолчанию». При создании задачи (НТФ) таблица будет открыта с уже заполненными строками.
Формат: JSON-строка вида {"rows":[{"c{ID}":"значение",...},...]}, где ID — числовой идентификатор столбца (ExtParamTableSettings.ID).
Узнать ID столбца: в AdminSPA → настройки ДП → вкладка «Столбцы» → навести на название столбца или открыть инструменты разработчика браузера (Network → запрос настроек ДП, поле id в объекте столбца).
Примеры:
// Одна предзаполненная строка, столбцы 123 и 456
{"rows":[{"c123":"Текст по умолчанию","c456":"42"}]}
// Две строки
{"rows":[{"c123":"Строка 1"},{"c123":"Строка 2"}]}
Форматы для конкретных типов столбцов:
- Текст, Большой текст — строка:
"Привет" - Число, Деньги — строка с числом:
"42"или"3.14" - Дата —
"DD-MM-YYYY", например"01-01-2026" - Дата и время —
"DD-MM-YYYY hh:mm", например"01-01-2026 09:00" - Чекбокс —
"true"/"false" - Lookup — ID задачи:
"12345" - Выпадающий список — значение опции:
"Опция 1"
Этот JSON перекрывает глобальный
DefaultValueсамого ДП. Если таблица находится в категории с настроенным JSON — используется он; глобальный дефолт ДП игнорируется.
2. Значение по умолчанию при добавлении строки пользователем (уровень столбца)¶
Настраивается на вкладке «Столбцы» → поле «Значение по умолчанию» конкретного столбца (ExtParamTableSettings.DefaultValue или DefaultValueSmartExpressionId). Применяется каждый раз, когда пользователь добавляет новую строку в таблицу — уже существующие строки не затрагиваются.
Поддерживает смарт-выражение (FK DefaultValueSmartExpressionId) для динамического вычисления.
Варианты значения: «Оставить пустым» (только для новой таблицы, формат 2.256+), фиксированное значение или смарт-выражение. Фиксированное значение задаётся в особом формате, отличном от смарт-выражений:
- Дата —
DD-MM-YYYY; - Дата и время —
DD-MM-YYYY hh:mm; - Lookup —
{"ID задачи":"Текст"}(например{"123":"Продажа"}); - Выпадающий список —
{"Значение":"Текст"}(например{"2":"Встреча"}).