Перейти к содержанию

Порталы — Администрирование

Домен portal охватывает настройку портальных страниц, блоков, фильтров, JS/CSS includes и прав доступа. Администрирование использует:

  • Пользовательская SPA-страница — 1 форма (порталы), зарегистрирована в дереве автоадминки, но открывает собственную SPA-страницу
  • API администрирования — 10+ групп маршрутов (управление порталами, блоками, фильтрами, includes, правами)

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

Пользовательская SPA-страница (в дереве автоадминки)

Форма автоадминистрирования, открывающая SPA-редактор порталов:

Alias формы Название Url Таблица БД Папка
portals Порталы /administration/portals/editor dbo.PortalGridTemplates Пользовательский интерфейс

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

Маршруты для управления порталами, блоками, фильтрами, includes и правами:

Маршрут Методы Назначение
/api/admin/portals GET, POST, PUT, DELETE Список и базовая конфигурация порталов
/api/admin/portals/blocks GET, POST, PUT, DELETE Настройки блоков
/api/admin/portals/blocks/filters GET, POST, PUT, DELETE Фильтры блоков
/api/admin/portals/{portalId}/includes GET, POST, PUT, DELETE Подключаемые JS/CSS includes
/api/portals/{portalId}/view/groups GET, POST, DELETE Ограничение просмотра по группам

Управление портальными страницами

Создание и редактирование

Портальная страница служит для размещения портальных блоков (виджетов). В отличие от портала, страницы подчиняются законам адаптивной верстки — их поведение определяется способностью менять ширину/высоту и порядок следования для наилучшего заполнения пространства.

Создание: кнопка «Добавить портал» → ввести название → ОК. Название должно быть уникальным — при попытке создать дубль выводится сообщение об ошибке.

Создание портальной страницы: кнопка «Добавить портал» и поле названия

Меню управления страницей:

Кнопка Описание
Добавить портал Новая портальная страница
Добавить виджет Новый виджет
Создать раздел Раздел для группировки виджетов (тематический: СЭД, Маркетинг, ServiceDesk и т.п.)
Переименовать Переименовать портал
Дизайнер Выбрать режим верстки: Flex, Dashboard, CSS Grid, Board
Настроить вставки (js и css) Редактор JS/CSS инклудов для конкретного портала
Доступ Ограничение видимости портала по группам пользователей
Удалить Удалить портальную страницу
Сохранить модуль Привязать портал к модулю (если модуль не выбран — портал относится к глобальному)

⚠️ Порталы в дизайне Flex и в дизайне Dashboard/CSS Grid имеют разный синтаксис адресной строки. Добавление портала в избранное и назначение стартового портала выполняются через РМГ (Реестры/Масштабируемые группы), не через интерфейс редактора портала — кнопка «Добавить в избранное» в редакторе была удалена как нерабочая. Если ссылка на портал в РМГ была настроена, а потом режим отображения портала изменился — нужно удалить прежнюю ссылку и добавить новую.

Редактирование. Чтобы изменить портал, выберите его в выпадающем списке редактора — рядом с названием в скобках показаны уникальный ID портала и тип дизайнера.

Выбор портала из выпадающего списка: рядом с названием — ID и тип дизайнера

Откроется интерфейс редактирования: рабочая область с сеткой и панель инструментов.

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

Для смены конструктора нажмите кнопку выбора типа дизайнера (Flex, Dashboard, CSS Grid, Board).

Выбор типа конструктора при редактировании портальной страницы

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

Стартовая страница

Чтобы портальная страница отображалась при входе в систему и при нажатии на логотип — в «Общих настройках приложения» (sys_general_settings) в параметре «Стартовая страница» указать ссылку на портальную страницу (1 — это ID портальной страницы).

Параметр «Стартовая страница» в общих настройках приложения

Разделы виджетов

При создании виджета указывается его принадлежность одному или нескольким разделам. Разделы нужны для организации и удобного поиска. На любой портал можно добавить виджеты из любых разделов. Виджет без раздела отображается в разделе «Без раздела».

⚠️ При удалении раздела удаляются также все принадлежащие ему виджеты. Если виджет принадлежит нескольким разделам — при удалении одного виджет сохраняется в остальных.

Различие «удалить с портала» и «полное удаление»

Два способа убрать виджет с портала:

  • Удалить с портала — виджет продолжает существовать и принадлежать своим разделам. В любой момент его можно снова добавить.
  • Полное удаление — виджет перестает существовать, восстановить нельзя. Полностью удалить виджет нельзя, пока он размещён хотя бы на одном портале — при попытке выводится предупреждение с названиями и ID этих порталов.

Реестр виджетов (v2.268+)

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

Как открыть. Администрирование → пункт меню «Виджеты». Также в редакторе порталов есть кнопка «Все виджеты», открывающая реестр.

Колонки грида: ID, Название, Активен (признак включённости), Тип, Модуль, Секции, Группы доступа (группы, которым выдан доступ к виджету). Над гридом — поиск по названию.

Действия со строкой (клик или правая кнопка мыши):

  • Открыть — переход в настройки виджета.
  • Где используется — окно со списком порталов, на которых размещён виджет (если нигде не размещён — «—»).
  • Удалить — полное удаление виджета. Если виджет размещён хотя бы на одном портале, удаление невозможно: выводится сообщение «Удаление невозможно» со списком этих порталов. Если виджет нигде не используется — запрашивается подтверждение, после чего виджет удаляется и список обновляется. Это та же логика полного удаления, что описана выше.

Переход к настройкам из пользовательского режима

К настройкам можно перейти прямо из пользовательского интерфейса — администратору доступны пункты контекстного меню (правая кнопка мыши).

Клик правой кнопкой по пустой области портала открывает пункт «Настроить портал».

Пункт «Настроить портал» в контекстном меню пустой области портала

Клик правой кнопкой по виджету открывает пункт «Настроить виджет» — он ведёт в дополнительные настройки виджета.

Пункт «Настроить виджет» в контекстном меню виджета

Конструкторы портальных страниц

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

Конструктор Dashboard

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

Интерфейс портальной страницы в режиме Dashboard

Кнопки управления:

Кнопка Действие
Добавить виджет Открыть окно добавления виджета (по умолчанию — поиск по всем разделам, включая «Без раздела», с поиском по ID виджета; ID виджета отображается рядом с его названием в списке результатов)
Сохранить Сохранить изменения
Сбросить пользовательские настройки Удалить все пользовательские переопределения — портал вернётся к административному виду
Очистить шаблон Удалить все виджеты с сетки (кнопка на панели инструментов справа)
Убрать выделение Снять выбор виджета на сетке
Скрыть/отобразить правую панель Переключение панели инструментов

Добавление существующего виджета — кнопка в правом верхнем углу сетки; уже добавленные в текущий портал виджеты отмечены галочкой.

Окно добавления виджетов на портал в режиме Dashboard

Типы сетки (6):

Тип Описание
На весь экран Сетка занимает всю доступную область
Вертикальная прокрутка Прокрутка по вертикали
Горизонтальная прокрутка Прокрутка по горизонтали
Фиксированная Фиксированный размер
Фиксированная по вертикали Фиксирована по вертикали
Фиксированная по горизонтали Фиксирована по горизонтали

Параметры сетки:

Параметр Описание
Отступ (px) Расстояние между ячейками по горизонтали и вертикали
Внешний отступ Внешние отступы со всех сторон (размер = отступ между ячейками)
Показывать сетку Всегда / При изменении размеров / Никогда
Мобильный экран (px) Ширина при отображении на мобильном экране
Ширина колонки (px) Ширина одной колонки
Высота строки (px) Высота одной строки
Макс. число колонок Максимальное число колонок (задаётся для каждого размера экрана)
Мин. число колонок Минимальное число колонок (задаётся для каждого размера экрана)
Поведение при перемещении «Менять местами» или «Толкать»

Параметры виджета на уровне сетки:

Параметр Описание
Перетаскивание Разрешить пользователям перетаскивать виджет
Изменение размеров Разрешить пользователям изменять размеры
Колонок макс./мин. Макс./мин. число колонок, которые может занимать виджет
Строк макс./мин. Макс./мин. число строк, которые может занимать виджет

После добавления виджета его настройки открываются по кнопке в правом верхнем углу блока, удаление с портала — по кнопке в правом нижнем углу.

Виджет на портальной странице в режиме Dashboard

⚠️ КРИТИЧНО: 5 контрольных точек адаптивности. Расположение виджетов настраивается отдельно для каждого размера экрана:

Точка Колонки по умолчанию
Не выбран
xs 1 колонка
sm 2 колонки
md 4 колонки
lg 8 колонок
xl 12 колонок

⚠️ Если для одного из размеров экрана расположение виджетов не настроено — на соответствующем устройстве виджеты НЕ будут отображаться. Для вертикального расположения экрана в большинстве случаев используется размер xs.

Конструктор CSS Grid (v2.266+)

Дизайнер CSS Grid используется для создания адаптивных портальных страниц с разнородными виджетами. В отличие от Dashboard и Board, CSS Grid позволяет комбинировать несколько стратегий в рамках одной страницы.

Интерфейс портальной страницы в режиме CSS Grid

Кнопки управления: добавление блока, сохранение, удаление выделенного блока, перемещение блока на уровень выше/ниже.

Три типа блоков:

Тип Описание
Виджет Элемент с фиксированными размерами. Не растягивается. При изменении ширины экрана автоматически занимает место в плотной плиточной сетке. Виджет может быть только один.
Секция Занимает всю ширину строки, делит её на пропорциональные части. Шаблоны: 1/1, 1/full, full/1. В секцию можно добавить множество виджетов.
Контейнер Решает проблему динамического контента. Помещаются виджеты с ролевой видимостью. При скрытии виджета для конкретного пользователя в макете не образуется пустых мест.

Блок-контейнер в режиме CSS Grid

Автоматическое расположение элементов:

Правило Описание
По строкам Элементы заполняются построчно (по умолчанию)
По колонкам Элементы заполняются по колонкам
По строкам + принудительное складывание Построчное с принудительным складыванием

Настройка автоматического расположения элементов (режим CSS Grid)

Режимы заполнения пространства:

Режим Описание
По контенту Элементы распределяются без пустых областей (по умолчанию)
Пустотой Сохраняется пустое место до появления достаточного пространства для нового элемента

Режимы заполнения пространства (режим CSS Grid)

Размеры виджетов в CSS Grid:

Параметр Описание
Шаблон Предустановленный размер из дизайна конкретного виджета. Размеры, нарушающие вёрстку, в список не включаются.
Во всю ширину Виджет занимает всю ширину сетки. Параметр «Начать с новой строки» не применяется.
Кастом Произвольный размер. Допустимые значения колонок и строк: 2, 4, 6, 8, 12. Исключение: Баннер-кнопка в режиме Кастом — высота 1 строка.

Для секций и для виджетов с шириной «во всю ширину» дополнительно доступен явный выбор фиксированной высоты из списка (2, 4, 6, 8, 12).

Таблица размеров 13 типов виджетов:

Тип виджета Доступные варианты Шаблоны (колонки × строки) По умолчанию
Кнопка-тикер Шаблон 2×2, 4×2, 2×4, 4×4
Баннер-кнопка Шаблон 1×2, 2×1, 2×2, 4×1, 4×2, 2×4, 4×4, 6×4, 4×6, 6×6 Из настроек виджета
Календарь New Шаблон 2×2, 4×2, 4×4 Из настроек виджета
Контакты Шаблон Из настроек виджета Из настроек виджета
Счётчики Шаблон Из настроек виджета Из настроек виджета
Список задач Шаблон 4×2, 4×4, 4×6, 6×4, 6×6 4×4
Избранное Шаблон 4×2, 4×4, 4×6, 6×4, 6×6 4×4
Новости Шаблон, Кастом 4×4, 6×6, 12×6, 12×8 12×8
Лента социальной сети Шаблон, Кастом 4×6, 6×8, 6×12, 8×12
Фильтр Во всю ширину
Группа виджетов Кастом, Во всю ширину 4×4
Все остальные Кастом, Во всю ширину 4×4

Параметр «Начать с новой строки» — доступен для виджетов с фиксированной шириной (не «во всю ширину»). При включении виджет всегда начинает отрисовываться с первой колонки строки сетки.

Виджет, добавленный в портальную страницу (режим CSS Grid)

Адаптивные контрольные точки:

Ширина экрана Поведение
≥ 960px Стандартная сетка (12 колонок)
< 960px Ширина 6 колонок (для секций с шириной 6)
< 600px Ширина 2/4 колонки (для секций с шириной 2 или 4)

⚠️ Секции с шаблоном 1/1 на мобильных: при перестроении на малых экранах виджеты встают один под другим и каждый наследует высоту, заданную для всей секции.

Секция с шаблоном 1/1 (режим CSS Grid)

Подробнее: portal-api-cookbook.md (таблица TypeId), academy-dashboards.md (краткие описания типов).

Конструктор Board

Board-дизайнер позволяет создавать портальные страницы с вкладками, в которых располагаются объединённые в секции дашборды.

Интерфейс портальной страницы в режиме Board: рабочая область и боковая панель структуры

Структура (боковая панель):

Элемент Описание
Портал Корневой элемент. Название редактируется. Недоступен для удаления.
Страницы Вкладки на уровне портала. Каждая отображает Board-портал. В списке недоступны порталы типа Flex и другие Dashboard-порталы.
Навигация Ссылки-«хлебные крошки» над заголовком портала. Несколько ссылок разделяются символом /. Поля: текст ссылки, URL.
Секции Встраивают Dashboard-порталы. Поля: название, фиксированная высота, показ заголовка, ссылка в заголовке, выбор Dashboard-портала, категория для создания задачи (добавляет кнопку «+»).
Группы Содержат секции и становятся внутренними вкладками. Имена групп НЕ видны на портале — только в конструкторе. Удаление группы удаляет все её секции.

Страница-вкладка создаётся вводом названия в поле «Добавить страницу» (Enter); в её списке порталов доступны только Board-порталы.

Пример настроенных страниц-вкладок в режиме Board

Ссылка навигации добавляется вводом названия в поле «Добавить ссылку» (Enter); у каждой задаются текст и адрес.

Добавление ссылок навигации на портал в режиме Board

Секция настраивается выбором Dashboard-портала, фиксированной высоты, показа заголовка и — опционально — категории для кнопки «+» создания задачи.

Настройки новой секции в режиме Board

Сгруппированные секции отображаются как внутренние вкладки портала.

Секции, объединённые в группы (с дашбордами), в режиме Board

⚠️ Ограничения Board:

  • Виджет нельзя добавить напрямую в Board — сначала добавить в Dashboard, потом встроить секцией.
  • Секцию нельзя переместить в группу — нужно создать группу, затем создать секцию внутри.
  • Секции в группе не поддерживают «Категорию для создания задачи».

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

Flex-конструктор (устаревший)

⚠️ Устаревший режим. Адаптивная верстка контейнерами. Основной элемент — родительский контейнер с дочерними. Управление через контекстное меню (ПКМ). Не поддерживается в новом конструкторе. Упомянут для полноты — новые порталы рекомендуется создавать в CSS Grid или Dashboard.

Типы портальных блоков (виджетов)

Полная таблица TypeId — portal-api-cookbook.md. Ниже — параметры каждого типа.

Создание и общие настройки виджета

Новый виджет создаётся кнопкой «Добавить виджет» в панели инструментов конструктора. В форме создания доступна вкладка «Основные настройки»; после сохранения добавляется вкладка «Дополнительные настройки» с набором параметров под выбранный тип.

Форма создания нового виджета: вкладка «Основные настройки»

Окно настроек существующего виджета открывается из его блока на портале. Состав параметров зависит от типа виджета; общие для всех:

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

Окно настроек виджета (состав зависит от типа виджета)

Общие свойства контейнера виджета

Применяются ко всем типам виджетов:

Свойство Тип Назначение
title string Заголовок виджета
legend string Содержимое легенды в нижней части виджета. При IsLegendFromSmart = 0 — фиксированный текст с Markdown-разметкой (иконки, картинки, форматирование). При IsLegendFromSmart = 1 — содержимое формируется смарт-выражением через LegendSmartId. Если оба пусты — блок легенды не отображается
hint (она же hintTaskId) number Id задачи 1Ф для контекстной справки. При клике на иконку подсказки открывается указанная задача — как модальная карточка или как пространство (если задача является пространством). Если задача не существует или нет доступа, иконка не появляется

Поля хранятся в JSON-настройках виджета (отдельных колонок в БД не добавлено). Распространены на все типы виджетов: календарь, график, контакты, счётчики, избранное, Гант, новости, smart-html и др.

Легенда настраивается в дополнительных параметрах виджета. В отличие от старого поля «Футер» (FooterText), легенда поддерживает Markdown-форматирование и управляется смарт-выражениями. При IsLegendFromSmart = 1 фиксированный текст из Legend игнорируется.

Блок поиска задач

Источник данных: смарт-фильтр или хранимая процедура.

Пример блока поиска задач на портальной странице

Параметр Описание
Показывать счетчик Счетчик числа задач
Открывать по клику Задачи как ссылки
Фильтр задач Смарт-фильтр или хранимая процедура
Сортировка Поле + смарт-выражение + порядок + вывод пустых
Группировка Поле + выводимое значение (только для шаблона «Список»)
Шаблон Список (по умолчанию) или Карточки
Тип содержимого Задача (по умолчанию) или Новость
Категория для создания задачи Кнопка создания задачи в указанной категории
Кнопки управления Контекстные кнопки для действий над задачами

Дополнительные настройки блока поиска задач

Параметры шаблона «Карточки»: ширина карточки (px), ID ДП картинки/видео/ссылки на видео, ID ДП для доп. текста/анонса, текст задачи для доп. текста, ID ДП ссылка, отображать теги, ID задачи, дата создания, срок, приоритет, заказчик, исполнитель, индикатор «Я ответственный», картинки, показывать только мои задачи, показывать все задачи.

⚠️ Если настроены кнопки управления с условиями видимости — источник данных должен быть хранимая процедура (не смарт-фильтр).

Хранимая процедура: должна возвращать TaskID + любые колонки для кнопок управления. Параметры задач не нужны — подтягиваются по TaskID. Принимает @UserID int, @XmlParam xml (необязательные).

Фильтрация данных не поддерживается.

Список задач (v2.262+)

Отображает список задач текущего пользователя из одного из 8 источников. Название блока формируется автоматически по выбранному источнику; стрелка в правом верхнем углу раскрывает полный список, клик по задаче открывает её в модальном окне.

Список задач на портальной странице

Источники:

Источник Описание
Задачи на сегодня Исполнитель = текущий пользователь, срок = сегодня (включая просроченные)
Активные задачи Исполнитель = текущий пользователь
Недавние задачи Последние задачи, с которыми взаимодействовал пользователь
Новые задачи из категории Задачи из выбранной категории, сортировка по дате создания
Отбор в категории Общий отбор или конкретная категория + смарт-отбор
Просроченные задачи Истекший срок, исполнитель = текущий пользователь
Задачи на подписи Запрошена подпись у текущего пользователя
Избранные задачи Добавленные в избранное

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

Дополнительные настройки:

Параметр Описание
Отображать задач Количество от 1 до 6. По умолчанию — зависит от размера блока
Показывать количество задач Синий тикер (общее число) + красный тикер (просроченные). Показываются только если задач больше, чем «Отображать задач». Для «Недавние задачи» недоступна
Сортировка Тип + поле (список формируется автоматически при выборе источника)

Окно настройки виджета «Список задач»

Фильтрация данных не поддерживается.

Таблица

Источник данных — хранимая процедура (MSSQL) или SQL-функция (PostgreSQL). Поддержка смарт-кнопок для действий над строками.

Пример блока «Таблица» на портальной странице

Базовые настройки виджета

Основные параметры виджета «Таблица»:

Окно дополнительных настроек таблицы

Параметр Описание
Хранимая процедура Название без схемы и квадратных скобок (рядом — кнопка перехода к редактированию SQL-запроса)
Автовысота строк Высота строк по содержимому
Автовысота таблицы Высота виджета по количеству строк
Автовысота дриллдауна Высота всплывающего окна детализации
Количество строк итогов ⚠️ Временно не работает с v2.256
Брать стиль строки из Колонка с описанием стиля форматирования (см. ниже «Стилизация»)
Брать ссылку для строки из Колонка со ссылкой (открыть в текущей вкладке)
Открывать в модальном окне Если включено — ссылка из «Брать ссылку из» открывается в модалке
Счетчик значений Выключено / Количество строк / Smart (смарт-выражение → скалярное int)
Цвет счётчика (только если Счётчик = Smart) info (синий), warning (оранжевый), default (серый), error (красный)
Отображать кнопку обновления По умолчанию выключено. Обновление учитывает текущие фильтры

Параметры хранимой процедуры

Сигнатура источника данных и процедуры детализации:

Параметр Тип Назначение
@XmlParam xml (readonly) Значения фильтра, привязанного к виджету
@DrillDownField varchar(max) = null Название столбца SQL, по которому кликнул пользователь (когда одна процедура обслуживает разные drilldown'ы)
@DrillDownParams varchar(max) = null История значений по уровням вложенной детализации (поддержка кнопки «Назад»)
@UserID int = null Пользователь, для которого формируются данные

⚠️ Все имена и значения регистрозависимые. taskId вместо taskID приведёт к ошибке. Для SPA-порталов первая буква имени параметра в SQL приходит строчной (в aspx — TaskId, в SPA — taskId).

⚠️ PostgreSQL: хранимые процедуры как источник табличных данных не поддерживаются. Используются SQL-функции (CREATE FUNCTION ... RETURNS TABLE/RECORD). Имя без [], точное соответствие имён и типов параметров. Параметры xml должны быть объявлены как xml, не text. Для PG детализация — отдельная функция; работа с фильтрами — через dbo.ssl_get_filter_param_by_name(xmlparam::xml, 'period') (вместо crm_repGetParams в MSSQL).

Настройки колонок

Каждая строка в таблице настроек — одна колонка. Первая (левая) колонка — кнопки (если настроены). Порядок меняется перетаскиванием.

Базовые поля строки колонки:

Поле Назначение
Отображать Если выключено — колонка не показывается
Столбец SQL Имя колонки в результате процедуры
Имя Заголовок в интерфейсе
Ширина колонки В % от общей ширины таблицы
Колонка для функции DrillDown По какой колонке строится детализация. Взаимоисключающее с «Брать ссылку из» — одновременно нельзя

Общие настройки колонки (по кнопке «шестерёнка»):

Поле Эффект
Тип колонки Обычная / Десятичное число
Выравнивание текста По левому краю / по центру / по правому. Заголовок — по той же стороне
Название группы колонок Объединяет соседние колонки в общий заголовок верхнего уровня
Брать стилизацию из колонки Колонка с CSS-атрибутами для значения в данной колонке
Брать класс из колонки Колонка с CSS-классом
Режим фильтрации Отсутствует (default) / Обычный / Excel
Показывать нули Если выключено — 0 отображается как пустая ячейка
Вырезать теги Текст без html-тегов
Переносить текст на другую строку При заданной ширине: либо перенос по словам, либо обрезка
Длина дробной части Количество знаков после запятой для колонки типа «Десятичное число». Значение от 0 до 10

Локализация названия группы колонок. Значение поля «Название группы колонок» можно локализовать — рядом с полем доступна кнопка локализации (так же, как для заголовков самих колонок). Локализованные названия групп переносятся при экспорте/импорте портального блока между средами. Применимо к виджетам «Таблица» и «Гант».

Форматы вывода даты:

Формат Пример (для 20.04.2024)
DD.MM.YYYY 20.04.2024
DD.MM.YYYY, HH:mm:ss.sss 20.04.2024, 12:30:00
YYYY 2024
MMMM апрель
MMMM YYYY апрель 2024
DD 04
dddd суббота

Форматы числа:

Формат 1.71 1234.56
0 2 1235
0,0 2 1 235
0.0 1,7 1234,6
0,0.0 2 1 234,6
0.00 1,71 1234,56

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

Изображение: колонка значения, ширина/высота в px/%, стиль (рамка, радиус), выравнивание.

Индикатор:

Поле Назначение
Тип индикатора Текст (по умолчанию) или Иконка (только набор Material; имя иконки — в колонке значения, со строчной буквы)
Колонка цвета Колонка с цветом фона в HEX (#XXXXXX)
Колонка значения Колонка со значением (текст или имя иконки)
Стиль Рамка, радиус закругления
Выравнивание Слева / справа от значения колонки

График: колонка возвращает JSON с типом (polyline / bar / pie), точками и стилизацией. Пример:

{ "type": "bar",
  "points": [
    {"x":1, "y":2, "color":"#FF0000"},
    {"x":2, "y":4, "color":"#00FF00"}
  ]
}

В SQL обычно формируется через FOR JSON PATH, WITHOUT_ARRAY_WRAPPER.

Стилизация строк и колонок

Поле в источнике данных, заданное в «Брать стиль строки из» / «Брать стилизацию из колонки», возвращает текстовое значение. Поддерживаемые типовые значения:

Значение Эффект
Default Без стиля
Success background-color: #dff0d8 (зелёный)
Info background-color: #d9edf7 (голубой)
Warning background-color: #fcf8e3 (жёлтый)
Danger background-color: #f2dede (розовый)
TotalsRow font-weight: bold
BackRed / BackGreen / BackBlue / BackYellow Фон pink / lightgreen / lightblue / gold
TextRed / TextGreen Цвет текста red / green

Произвольные значения: Color#XXXXXX (цвет текста), Background#XXXXXX (фон), HeightXXpx (высота строки). Несколько атрибутов перечисляются через запятую: Color#ff0000,Background#00ff00,Height40px.

Кнопки управления (smart-кнопки)

Настраиваются в блоке «Кнопки управления». Все кнопки выводятся в самой левой колонке.

Окно создания кнопки в настройках таблицы

Поле Назначение
Имя Текст на кнопке
Описание Подсказка при наведении
Иконка Путь к иконке (опционально)
JavaScript выражение (одно из двух) JS-скрипт по нажатию
Пакеты действий (одно из двух) Смарт-пакет по нажатию
URL Смарт-выражение → URL открываемой в модалке страницы (после выполнения пакета)
Колонка идентификатора (int) Имя колонки с ID объекта (например, TaskID). Доступно в смарте через «Идентификатор объекта»
Колонка видимости (bool) Колонка с признаком «показывать кнопку этому пользователю»
Колонка активности (bool) Колонка с признаком «кнопка активна»

⚠️ Для каждой кнопки задаётся либо JS, либо смарт-пакет — не оба одновременно.

⚠️ В абсолютном URL допустим только https://.

Объект event в JS-выражении:

{
  originalEvent: MouseEvent,           // стандартный объект
  data: any,                            // строка данных, к которой относится кнопка
  block: {
    reload:   () => void,               // перезагрузить блок
    freeze:   () => void,               // отключить все кнопки блока
    unfreeze: () => void                // снова включить
  }
}

При нажатии на любую кнопку все кнопки блока автоматически блокируются. Чтобы разблокировать, в скрипте нужно вызвать event.block.unfreeze() (например, через setTimeout).

К полям возвращаемой строки можно обращаться через event.data.<имя_колонки>, например event.data.isActive.

Параметры события «Нажатие на кнопку» (для смарт-пакета):

  • идентификатор объекта (из колонки идентификатора или ID строки),
  • строка с JSON-объектом всей строки,
  • ID кнопки,
  • параметры текущего пользователя.

Детализация (drill-down)

Настраивается per-column через «Колонка для функции DrillDown» + «Хранимая процедура» детализации. По клику на значение в ячейке открывается новый виджет, построенный процедурой детализации:

Детализация колонки (drill-down) в таблице

  • @DrillDownField — название колонки, по которой кликнули.
  • @DrillDownParams — полная история значений (поддержка вложенной детализации с кнопкой «Назад»).
  • Если процедура для детализации не указана, используется основная процедура виджета.
  • Уровни вложенности — неограниченны.

Фильтры (v2.265+)

Управляет данными на портале в других блоках. На одной странице может быть несколько независимых виджетов фильтров, но запрещены дубли с одинаковым набором.

Фильтры на портальной странице

Представление:

Режим Описание
Горизонтальный Ряд чипов. Активация сразу при изменении. Кнопка «Очистить» при активных фильтрах
Вертикальный Список полей в 1–4 колонках
Параметр Описание
Количество колонок 1–4 (только для вертикального режима)
Количество колонок в модальном окне Разметка окна «Все фильтры»
Закрепить сверху Фиксация в верхней зоне портала (только горизонтальный режим)

Окно настройки виджета «Фильтр»

Список параметров формируется из фильтра, созданного на вкладке «Настройки фильтрации».

Настройки фильтрации виджета «Фильтр»

Параметры фильтра соответствуют тем, что будут доступны в виджете.

Параметры фильтра

По клику на строку параметра открывается окно его настроек.

Окно настроек параметра фильтра

Параметры отдельных фильтров:

Параметр Описание
Видимость Всегда видимые / Только если выбрано значение / Всегда свернуто
Подсказка Подсказка по фильтру
Скрыть имя В горизонтальном режиме — при выбранном значении показывать только значение без подписи
Колонка доступности Для смарт-набора: столбец с признаком доступности элемента
Ключ родителя Для статического набора: привязка к родительскому значению
Колонка родителя Для смарт-набора: столбец с ключом привязки к родительскому значению

Типы параметров фильтра:

Тип параметра Описание
Текст Строковое значение
Число Числовое значение. Можно задать длину дробной части (decimalPlaces) — количество знаков после запятой, от 0 до 10

Значения фильтров синхронизируются между связанными блоками (Фильтры, График, Таблица) в обе стороны.

Диаграмма Ганта

Временная шкала задач. Параметры виджета:

Настройки блока «Диаграмма Ганта»

Параметр Описание
Хранимая процедура Обязательные колонки: Name (текст), Start (дата начала, not null), End (дата завершения, not null), ParentId (ID родителя), ID (номер задачи)
Масштаб Масштаб отображения в %
Открывать в модальном окне Клик на полоску → задача в модальном окне

Фильтрация данных не поддерживается.

Smart HTML

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

Настройки открываются по ссылке «Открыть дополнительные настройки» в общих настройках блока: слева — шаблон (Mustache + HTML/CSS), справа — данные (смарт-выражения и источники) с окном JSON-структуры и предпросмотром результата (без учёта CSS-вставок).

Настройка портального блока Smart HTML: слева шаблон, справа данные, JSON и предпросмотр

Источники данных (3 типа):

Тип Описание
Произвольный Хранимая процедура, представление, функция или таблица БД. Параметры @UserId и @TaskID передаются автоматически.
Смарт-фильтр На основе смарт-фильтра + полей задач/ДП. Без программирования.
Скрипт (SmartScript) SmartScript (Lua/JS/Python). Должен вернуть RESULT — массив объектов. Параметры: таймаут (сек), TTL (сек).

Источники добавляются на вкладке «Источники данных» кнопками «+ Произвольный», «+ Смарт-фильтр», «+ Скрипт»; каждому задаётся уникальный алиас (латиницей) для доступа к данным в JavaScript.

Вкладка «Источники данных» виджета Smart HTML: кнопки добавления и строки Алиас/Тип/Источник

JS API: данные всех источников доступны через window.__smartHtmlData[blockId]. Доступ по алиасу. Объект __meta[alias] содержит type, durationMs, error (поля cached нет).

⚠️ Если источники данных не настроены — блок работает в прежнем режиме (смарт-выражения + mustache).

Сохранение состояния вкладки источников (с 2.268.330). Несохранённые правки на вкладке «Источники данных» в дополнительных настройках виджета SmartHtml больше не сбрасываются при переключении на соседние вкладки настроек («Фильтрация», «Основные», «Дополнительные»). Ранее переключение вкладок уничтожало форму, и незавершённое редактирование терялось — теперь форма скрывается, но сохраняется в памяти.

Mustache-шаблонизатор:

Конструкция Пример
Единичное значение {{smartXXX}} где XXX = ID смарт-выражения
Цикл (список) {{#smartXXX}}...{{/smartXXX}}
Условие {{#isComplainted}}Рекламация{{/isComplainted}}
Инвертированное условие {{^isComplainted}}Заявка{{/isComplainted}}

⚠️ Шаблонизатор не имеет средств форматирования данных (чисел, дат). Форматировать нужно в источнике данных (смарт-выражении, TSQL).

ve-link — компонент для открытия контента в SPA без JS-вставок:

Что открывает Синтаксис
Зарегистрированную страницу <ve-link url="/dev/context-menu">{{url_to_open}}</ve-link>
Задачу <ve-link taskId="{{taskId}}">{{taskText}}</ve-link>
Портал <ve-link portalId="333">{{portal_name}}</ve-link>
Новость <ve-link newsId="{{taskId}}">{{news_title}}</ve-link>

Фильтрация данных не поддерживается.

Новости

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

Виджет «Новости» на портальной странице

Тип данных: задачи новостной категории (определяется в настройках категории). Остальные настройки виджета становятся доступны только после выбора категории.

Стиль отображения:

Стиль Описание
Большой блок (по умолчанию) Одна главная новость с крупным изображением и карточки дополнительных
Список Компактный список новостей
Карусель Горизонтальная прокрутка новостей

Количество новостей: зависит от стиля — большой блок: 1 / 2 / 3 / 5 / 6 (вариант 4 не предусмотрен); карусель: 3 / 6 / 12 / 24.

Дополнительные настройки:

Параметр Описание Default
Отображать автора Показывать имя автора новости Выключено
Отображать рубрику Показывать рубрику новости Включено
Отображать аннотацию Показывать краткое описание Включено
Отображать дату публикации Показывать дату Выключено
Отображать счётчик лайков Показывать количество лайков (недоступно, если в новостной категории отключены «Реакции на объекты») Включено
Отображать счётчик просмотров Показывать количество просмотров (недоступно, если в категории отключено «Количество просмотров») Включено
Переход в ленту всех новостей Кнопка перехода к полной ленте Включено

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

Галерея новостей с фильтрами по рубрикам и тегам

Клик по новости в виджете или галерее открывает её карточку в модальном окне; состав полей (обложка, автор, аннотация и т.д.) зависит от настроек новостной категории.

Карточка новости в модальном окне

Отбор и сортировка новостей:

Параметр Описание
Сортировка Сначала самые новые / Сначала закреплённые, потом новые
Отображать в виджете Все опубликованные / Только закреплённые и опубликованные / Настройка категории
Отображать в галерее виджета Те же варианты — отдельно для галереи
Тип статуса Все / Активные / Закрытые / Отклонённые (если выбрана «Настройка категории»)
Отбор Смарт-отбор категории (если выбрана «Настройка категории»)
Пользователь Не выбрано / Исполнитель / Заказчик / Акцептант / В параметрах (если выбрана «Настройка категории»)

Дополнительные настройки блока «Новости»

⚠️ Отключение ленты комментариев в виджете «Новости» не предусмотрено. Опции в настройках самого виджета нет. Настройка «Запретить комментирование» в новостной категории на ленту виджета не действует — комментарии в виджете отображаются независимо от настроек категории. Доработки функционала не планируются.

Обходной путь: в настройках виджета — кнопка «Настроить вставки (JS и CSS)» — добавить CSS-правило, скрывающее блок комментариев. Это косметическое решение: поле для ввода комментария скрыто в интерфейсе, но функция на стороне сервера остаётся активной (комментарии можно создать через другие точки входа).

Группа виджетов (v2.265+)

Блок с вкладками. Каждая вкладка — отдельный ранее созданный виджет. Сохраняются все первоначальные настройки вкладок, включая фильтры.

Группа виджетов в пользовательском интерфейсе: вкладки

Если вкладки не помещаются в одну строку — появляется кнопка «Еще» с выпадающим списком.

Вкладки настраиваются в дополнительных настройках блока.

Окно настройки виджета «Группа виджетов»

Кнопка «Добавить виджет» открывает выбор портального блока — в одной вкладке группы только один виджет; новая вкладка добавляется кнопкой «Добавить», лишняя удаляется.

Окно выбора виджета для вкладки группы

Название вкладки меняется кнопкой «Редактировать», находясь в этой вкладке.

Изменение названия вкладки группы виджетов

Фильтрация данных не поддерживается.

Ориентация табов. В дополнительных настройках виджета доступна опция «Ориентация табов»: «Горизонтально» (по умолчанию) или «Вертикально». При вертикальной ориентации вкладки располагаются колонкой слева: ширина колонки подстраивается под самый широкий таб, но не более 300 px; название таба занимает до трёх строк, далее обрезается многоточием (полное название — во всплывающей подсказке). Если вкладки не помещаются по высоте, в конце списка появляется кнопка «Ещё» с выпадающим списком остальных. На узких экранах (ширина контейнера менее 600 px) вертикальная ориентация автоматически переключается на горизонтальную.

Навигация (v2.266+)

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

Панель навигации на портальной странице

Параметр Описание
Тип навигации Табы / Чипы / Хлебные крошки
Закреплять в шапке при скролле Фиксация в верхней части экрана при вертикальной прокрутке

Параметры задаются в дополнительных настройках блока.

Дополнительные настройки блока «Навигация»

Элемент структуры:

Элементы добавляются кнопкой «+» в блоке «Структура».

Добавление элемента навигации

Параметр Описание
Заголовок ссылки Название элемента
Портал Id ID портала для перехода
Порядок Порядок элемента
Доступно группам Видимость пункта для конкретных групп (независимо от доступности всего виджета)

⚠️ В хлебных крошках отображается полный путь до текущей страницы. Если промежуточный раздел не доступен пользователю по группе — ссылка и разделитель скрываются.

Виджет работает как самостоятельный блок с кнопками и не содержит внутри другие виджеты или страницы.

Пример настроенной навигации

Фильтрация данных не поддерживается.

Избранное (v2.263+)

Отображает список избранных объектов текущего пользователя.

Блок «Избранное» в пользовательском интерфейсе

Параметр Описание
Выбор содержимого Задачи / Пользователи / Пространства / Категории / Чаты / Отчеты / Ссылки
Порядок элементов По порядку в избранном / По дате добавления / По алфавиту

Окно настройки виджета «Избранное»

Фильтрация данных не поддерживается.

Кнопка-тикер (v2.261+)

Блок со счётчиком (может быть кликабельным), иконкой или кнопкой создания задачи.

Кнопки-тикеры в пользовательском интерфейсе

Параметр Описание
Источник получения каунтера Смарт-выражение → числовое значение
Название иконки Из набора /spa/content-icons
Цвет иконки Основной / По умолчанию / пользовательскый
Цвет фона Brand / Global / Red / Yellow / Orange / Green / Cyan / Blue / Purple / Pink / Brown / Grey
Тон карточки Нет / Белый / Светлый / Нормальный / Темный
Стиль бейджа Текст / С фоном
Ссылка на блок Фиксированная или смарт-выражение. Отчеты/статьи пространства — в модальном окне, URL — в новом окне
Ссылка на создание задачи Формат: ewtask/{SubcatId}?ExtParamString=$Ext${ExtParamID}${Value}. Карточка создания — в модальном окне
Без цвета, если каунтер ≤ При достижении значения фон меняет цвет

Окно настройки виджета «Кнопка-тикер»

⚠️ Если задана ссылка на создание задачи — вместо иконки отображается кнопка «+».

Фильтрация данных не поддерживается.

Тикеры (v2.262+)

Отображает несколько счётчиков в одном блоке (до 6). Отличается от «Кнопки-тикер» — множество индикаторов одновременно.

Счётчики на портальной странице

Параметр Описание
Размер Малый / Средний / Смешанный
Количество счетчиков До 6
Текст ссылки блока Заголовок блока (кликабельный)
Ссылка блока Переход при клике на заголовок

Каждый счётчик:

Параметр Описание
Надпись Название счётчика
Тип значения Проценты / Штуки
Значение бейджа Числовое значение
Стиль бейджа Прямая метрика (+ = зелёный, − = красный) / Обратная метрика (+ = красный, − = зелёный) / Смарт (условие → success/warning/danger/default)
Значение Число из смарт-выражения
Единица измерения Текстовое обозначение
Подпись Текст под счётчиком

Окно настройки виджета «Счётчики»

Фильтрация данных не поддерживается.

Баннер-кнопка (v2.261+)

Баннер на главном экране с настраиваемым оформлением.

Баннер-кнопка на портальной странице

Параметр Описание
Заголовок Фиксированный или смарт-выражение
Подзаголовок Фиксированный или смарт-выражение
Положение текста Верхний левый / Нижний левый / Нижний правый / Верхний правый
Положение иконки Не отображать / Противоположный угол / После текста / Угол, выравнивание по тексту. При любом значении кроме «Не отображать» появляется поле «Имя иконки» (название из набора spa/content-icons); цвет иконки = цвет текста, размер — по размеру баннера
Цвет текста Чёрный / Белый / Всегда чёрный / Всегда белый
Пропорция 1:1 / 1:2 / 2:3
Ориентация Горизонталь / Вертикаль
Цвет фона Brand / Global / Red / Yellow / Orange / Green / Cyan / Blue / Purple / Pink / Brown / Grey
Тон фона White / Light / Color / Dark / Black
Url изображения Относительная ссылка (jpg, png)
Url видео Ссылка на видео (mp4)
Размер xs / sm / md / lg (управляет шрифтом и внутренними отступами: xs и sm — 12 px, md — 16 px, lg — 20 px)
Затемнение под текст None / White / Black / BackgroundColor
Ссылка на клик Фиксированная или смарт-выражение. Без префикса /spa/

⚠️ Относительные ссылки без /spa/. Правильно: /tasks/12345. С /spa/ → 404.

⚠️ Цвет текста динамически подстраивается под цвет фона и тон: на светлых фонах — тёмный, на тёмных — светлый.

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

Окно настройки виджета «Баннер-кнопка»

Фильтрация данных не поддерживается.

Контакты (v2.262+)

Список контактов текущего пользователя. Быстрые действия: видеовызов, чат.

Контакты на портальной странице

Кнопка-стрелка в шапке блока открывает полный список контактов в модальном окне.

Полный список контактов в модальном окне

Параметр Описание
Вариант отображения Список / Карусель / Круги
Размер блока Малый / Средний / Большой
Размер контакта Малый / Средний / Большой / Очень большой
Содержание списка Недавние контакты / Звонки / Коллеги / Избранные контакты / Отдел орг. структуры / Отдел и все подчиненные / Смарт (UserID) / Смарт (пользователи с доп. инфо.)
ИД орг. структуры Для типов «Отдел»
Вторая строка Основная должность / Отдел / Тип недавнего / Статус / Дни рождения / Ближайшие отсутствия
Отображать занятость у аватара Календарная занятость + онлайн/офлайн

Окно настройки виджета «Контакты»

⚠️ Вторая строка не отображается при размере контакта «Малый» или «Большой».

Фильтрация данных не поддерживается.

Лента социальной сети

Отображает последние публикации из сообществ. Несколько лент = вкладки (одна лента = без вкладок).

Лента социальной сети на портальной странице

Внизу виджета — кнопка «Перейти ко всем постам»: ведёт к выбранному источнику (странице группы или главной ленте соцсети).

Кнопка «Перейти ко всем постам»

В виджете доступны просмотр, комментирование, создание/редактирование/удаление публикаций по правам; клик по аватару поста ведёт в сообщество.

Действия с постом из виджета

Параметры задаются в дополнительных настройках блока.

Дополнительные настройки блока «Лента социальной сети»

Параметр Описание
Переход в раздел социальной сети Название виджета как ссылка на главную страницу соц. сетей
Название ленты Заголовок вкладки
Отображать количество непрочитанных Счётчик новых записей
Создание сообщения Поле для публикации новых постов (при наличии прав)
Источник ленты Главная лента / Раздел / Группы

Несколько лент добавляются кнопкой «Добавить ленту» (каждая — отдельная вкладка со своими параметрами); лишняя удаляется соответствующей кнопкой.

Настройка нескольких лент

⚠️ Количество постов зависит от высоты виджета. При слишком малой высоте ни один пост не будет показан.

⚠️ Создание публикаций соответствует правам доступа и настройкам каждой группы. Для автора/редактора/администратора/владельца — всегда, для подписчика — только если разрешено в настройках группы.

Фильтрация данных не поддерживается.

Календарь

Отображает данные в привязке к дате: при выборе даты меняется список под календарём (при выборе месяца — данные за весь месяц; показываются первые 20 записей). Принцип настройки — как Smart HTML: смарт-выражение + Mustache-шаблон.

Блок «Календарь» в пользовательском интерфейсе

Параметр Описание
Дата начала / окончания Период календаря (для тестирования)
Поле с датой Название поля типа «Дата» или «ДатаВремя» из смарт-выражения; по нему задачи привязываются к дате
Стили отображаемых дат Смарт-выражение → 2 колонки: дата + класс (success/warning/danger/default)
Колонка даты Алиас колонки даты из смарт-выражения «Стили отображаемых дат»
Колонка класса Алиас колонки класса из смарт-выражения «Стили отображаемых дат»
Шаблон Mustache-шаблон

Смарт-параметры: @dateFrom и @dateTo — при первой загрузке = начало/конец текущего месяца, далее зависят от выбора пользователя.

Окно настроек блока «Календарь»

Фильтрация данных не поддерживается.

Календарь New (v2.262+)

Соответствует календарю в профиле пользователя. Не используется для преднастроенного набора данных.

Виджет «Календарь New» на портальной странице

Параметр Описание
Размер Малый (2 ближайших события) / Средний (2 + 4 события в 2 колонки) / Большой (5 временных слотов, 2 колонки)
Набор данных Встречи / Срок задач (Ответственный исполнитель / Исполнитель / Заказчик) / Дата начала задач (Заказчик) / Дата завершения задач (Заказчик) / Напоминания / Подписи
Тип календаря Список / Хронологический две колонки (только для большого размера)

Окно настройки виджета «Календарь New»

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

Фильтрация данных не поддерживается.

График (диаграмма)

Сводные данные в табличном или графическом виде. По умолчанию — Apex Charts (ключ highCharts в custom-app-settings для HighCharts).

Дополнительные настройки блока «График»

Источник данных: SQL-объект (хранимая процедура, view, таблица).

Поле Описание
SQL Объект Название процедуры/view/таблицы
Заголовок Текстовая колонка → ось X
Значения Числовая колонка → ось Y
Цвета HEX-коды или HTML-цвета
Колонка для Drilldown Колонка детализации
Группировать по Колонка группировки
Кол-во строк для игнорирования Итоговые строки, не отображаемые на графике

Типы диаграмм:

Тип Особенности
Линейная / Линейная (область) Отображать значения рядом с точками
Столбчатая / Столбчатая (горизонтальная) Сгруппировать столбцы, подписи столбцов
Секторная / Секторная без центра Значения вместо процентов, легенда рабочей области
Таблица Итого по таблице, текст итога
Воронка продаж ⚠️ Без агрегирования в источнике. Подписи, смещение справа
Линейная с накоплением / горизонтальная Обязательно заполнить «Группировать по»

При выборе типа открывается дополнительный блок параметров под этот тип.

Линейная — параметр «Отображать значения рядом с точками».

Настройки линейных диаграмм

Столбчатая — «Сгруппировать столбцы» (наложение друг на друга) и «Включить подписи столбцов».

Настройки столбчатых диаграмм

Секторная — «Выводить значения вместо процентов» и «Показывать легенду рабочей области».

Настройка круговых (секторных) диаграмм

Таблица — «Включить Итого по таблице» и текст итоговой строки.

Настройка таблицы

Воронка продаж — «Включить подписи для воронки» и «смещение справа» (px от правого края; пусто = авто).

Настройки воронки продаж

Настройки блока:

Параметр Описание
Шаблон подсказки Формат highcharts: {series.name}, {point.name}, {point.x}, {point.y}, {point.percentage}, {point.total}
Цвет графика Из палитры или колонка SQL-объекта
Добавить график Несколько серий на одном графике (только SQL-объекты)
Показывать заголовки осей Названия осей
Подпись оси X / Y Заданные значения подменяют названия параметров из SQL-объекта
Не удалять метрические сокращения Не убирать «тыс.», «млн» и т.п. из подписей значений
Начинать ось Y с минимального значения Ось Y стартует с минимума из данных, а не с 0
Отображать значения по оси Y зеркально Зеркальный вывод значений по оси Y
Округлять значения оси Y до целых Целые числа на оси Y вместо дробных
Кол-во знаков после запятой в тултипе -1 = определяется автоматически по данным
Показывать легенду Для секторных и воронки — легенда, для линейных/столбчатых — название
Открывать задачи по клику Список объектов для каждой области (не поддерживается для SQL View)
Тип шкалы Линейная / Логарифмическая / Авто логарифмическая
Мин./Макс. по оси X/Y Границы осей
Цена деления по оси X/Y ⚠️ Не работает для Apex Charts
Количество значений на оси Y ⚠️ Не работает для Apex Charts

Кнопка «Добавить график» открывает блок настройки новой серии: название, тип, шаблон подсказки, цвет и столбец значений из SQL-объекта.

Настройка ещё одной серии на графике

⚠️ Не все типы графиков совместимы в одном блоке. Линейная + столбчатая — совместимы. Линейная + секторная — нет.

Меню

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

Дополнительные настройки блока «Меню»

Параметр Описание
Текст ссылки* Название (обязательное). Текст или смарт-выражение
Css иконки Фрагмент CSS для форматирования индикатора
Путь к изображению Адрес файла с изображением
Ссылка Внутренняя (от /) или внешняя (http/https)
Открывать ссылку в Текущее окно / Модальное окно / Новая вкладка
Набор иконок material
Иконка из набора Название с маленькой буквы, слова через подчёркивание (calendar_today)

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

Добавление нового пункта меню

Настроенные кнопки редактируются из колонки «Настройки»; порядок меняется перетаскиванием строк или стрелками.

Окно настройки кнопки (пункта меню)

Фильтрация данных не поддерживается.

Новости

Задачи категории отображаются как публикации ленты.

⚠️ Задачи в статусах с типом «Начальный» не отображаются (например, статус «Новая»). Сначала подготовить новость → перевести в следующий статус → публикация.

Дополнительные настройки блока «Лента новостей»

Параметр Описание
Категория Категория с шаблоном «Новости» (статический шаблон в шаблонизации)
Шаблон (SPA) Карточки / 3 новости и главная / Объявления
Сортировать по доп.параметру ДП типа «Дата и время». Пустая дата = конец списка. Дата > текущей = не отображается
Направление сортировки По возрастанию / По убыванию
Не обрезать текст ⚠️ Только для устаревших порталов
Показывать заказчика ⚠️ Только для устаревших порталов
Показать счетчики Нравится / Комментарии / Просмотры

Поля шаблона новостей: Title, Annotation, FullText, Date, ImageAttachId, IsMain, Rubric, AuthorUser.

⚠️ Для категорий новостей рекомендуется включать «Не отображать системные комментарии» в основных настройках категории.

Фильтрация данных не поддерживается.

Мини-опрос (с 2.267)

Виджет для пульс-опросов на портале. Создание и деактивация опросов выполняется в самом виджете на портале — администратор настраивает только параметры отображения.

Параметр Тип Обязательный Описание
Группа модераторов Выбор группы (одной или нескольких) Да Пользователи из выбранной группы могут создавать и деактивировать опросы в виджете. Если группа не выбрана — поле подсвечивается с подсказкой «без группы опросы в виджете не создаются»
Ответы в подробном окне Переключатель Нет Если включено — варианты ответа скрыты за кнопкой, по клику открывается модальное окно. Если выключено — варианты ответа отображаются сразу в виджете

В админке нет элементов создания, редактирования или удаления самих опросов — это делается в виджете на портале пользователями с ролью модератора.

Что видит пользователь в виджете:

Роль Опрос активен? Что отображается
Модератор Нет Форма создания опроса прямо в виджете
Модератор Да, обычный режим Результаты опроса (модератор может проголосовать, но видит результаты и без голосования)
Модератор Да, «Ответы в подробном окне» Вопрос + кнопки «Ответить на опрос» / «Смотреть результаты», открывающие модальное окно
Обычный пользователь Нет Заглушка «Опрос не настроен»
Обычный пользователь Да, обычный режим Вопрос с вариантами ответа сразу в виджете
Обычный пользователь Да, «Ответы в подробном окне» Вопрос + кнопка «Ответить на опрос» / «Смотреть результаты» (после голосования), открывающая модальное окно

Модератору по правому клику на виджете доступен пункт контекстного меню «Создать опрос». Если в виджете уже есть активный опрос, перед созданием нового текущий деактивируется — модератору показывается предупреждение «Результаты сохранятся в истории».

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

Паттерн: несколько блоков-отчётов с разными фильтрами

Частый сценарий: на портале нужно вывести однотипные графические виджеты для разных направлений/подразделений.

Подход:

  1. Все виджеты имеют тип «Отчет» и вызывают один и тот же отчёт
  2. В фильтре каждого виджета передаётся разное значение параметра:

    {"27":{"name":"Direction","value":"3034","type":"Dropdown"}}
    
    где 27 — ID фильтра, 3034 — ID направления.

  3. Отчёт содержит диаграмму + два источника данных: таблица показателей и таблица цветовых настроек

  4. Цветовая схема определяется в зависимости от значения параметра (@Direction)
  5. Подвал отчёта с легендой отображается только на последнем блоке через событие AfterData:
    private void ReportSummary1_AfterData(object sender, EventArgs e)
    {
        string direction = ((String)Report.GetParameterValue("FilterDirection"));
        if (direction != "3032")
            ReportSummary1.Visible = false;
    }
    

JS API порталов и портальных блоков

JS/CSS Includes

Создание вставки: описание → тип (js/css) → содержимое → сохранить.

Привязка:

  • К порталу — вставка работает на всех страницах портала
  • К блоку — вставка работает только в конкретном блоке

⚠️ Добавленные ранее вставки не будут корректно работать при переходе из старого МТФ/НТФ в новый SPA.

Методы JS API для работы с порталами и портальными блоками описаны ниже.

JS API портальных блоков

Основные методы для работы с портальными блоками из JS-вставок:

Метод Описание
portal.block(blockId) Получить объект портального блока
onLoaded Событие загрузки блока
refresh() Обновить данные блока
spaCommand Выполнить SPA-команду
fileViewer Открыть просмотрщик файлов
setFilters() Установить фильтры блока
filters() Получить текущие фильтры
freeze() / unfreeze() Блокировка/разблокировка рендера блока

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

Порталы (PortalGridTemplates)

Где настраивается: SPA-страница /administration/portals/editor (пункт portals в дереве автоадминки) или API администрирования Таблица БД: dbo.PortalGridTemplates

6 полей: страницы порталов и типы layout (dashboard, board, cssgrid).

Как применяется: определяет набор доступных портальных страниц и их тип отображения.

Блоки порталов (PortalGridBlocks)

Где настраивается: API администрирования (блоки порталов) Таблица БД: dbo.PortalGridBlocks

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

Группа полей Что контролирует
Тип блока Виджет (задачи, отчёт, HTML, iframe и т.д.)
Параметры блока Источник данных и конфигурация
Позиция, размер Расположение на странице

Как применяется: данные блока загружаются через POST /api/portals/block/data/{blockId}.

Виджет можно вывести и вне портала — на отдельной странице по адресу ~/spa/portal/block/{BlockID} (например, ~/spa/portal/block/123).

Окно настроек виджета — отдельная страница и открытие в новой вкладке. Настройки виджета открываются в окне (модалке) поверх редактора портала; внутри окно показывает страницу настроек во встроенном фрейме. В заголовке окна есть кнопка с иконкой 🔗 («Открыть в новой вкладке») — она открывает те же настройки как отдельную страницу AdminSPA по адресу ~/spa/administration/widget-settings/{BlockID} (по Id блока). Так можно дать прямую ссылку на настройки конкретного виджета или работать с настройками нескольких виджетов в разных вкладках одновременно. Не путать с ~/spa/portal/block/{BlockID} выше: там выводится сам виджет, а здесь — его настройки.

Фильтры блоков

Где настраивается: API администрирования (фильтры блоков) Таблицы БД: dbo.PortalGridBlocksFilters, dbo.PortalGridBlockFilters, dbo.PortalGridFilterParams, dbo.PortalGridFilterParamBlockValues

Фильтрация данных виджетов: параметры фильтров привязываются к блокам и определяют, какие данные отображаются.

Ключевые правила:

  1. На одной портальной странице может быть несколько независимых виджетов фильтров, но запрещены дубли с одинаковым набором фильтров.
  2. Значения фильтров синхронизируются между связанными блоками (Фильтры, График, Таблица) в обе стороны.
  3. Список параметров виджета строится из настройки фильтрации (filters_spa): что включено в фильтр, то доступно в виджете.

Настройки фильтрации виджета задаются на вкладке «Настройки фильтрации» в окне настроек виджета. Фильтрация поддерживается только для виджетов Smart HTML, График, Таблица и Блок поиска задач — для остальных типов вкладка неактивна. При открытии виджета последние выбранные пользователем значения фильтра подгружаются из cookie; если cookie нет — применяются значения по умолчанию.

Вкладка «Настройки фильтрации» в окне настроек виджета

Параметры отображения виджета фильтров:

Параметр Что контролирует
Представление Режим: Горизонтальный (чипы) или Вертикальный (поля)
Количество колонок Число колонок для вертикального режима
Количество колонок в модальном окне Разметка окна Все фильтры/Еще фильтры

Параметры отдельных фильтров:

Параметр Что контролирует
Видимость Всегда видимые / Только если выбрано значение / Всегда свернуто
Подсказка Подсказка по фильтру (чип/поле)
Скрыть имя В горизонтальном режиме при выбранном значении показывать только значение без подписи
Колонка доступности Только для смарт-набора с заданными зависимостями. Имя столбца в результате смарт-выражения, содержащего признак доступности элемента. Бэкенд вычитывает эту колонку и включает значение в ответ (avalible на каждом элементе).
Недоступные значения Для смарт-набора с заданной «Колонкой доступности»: как показывать значения, помеченные недоступными. Пусто (по умолчанию) и Скрывать — недоступные значения убираются из списка; Блокировать — остаются видимыми, но неактивными (серыми, выбрать нельзя).
Ключ родителя Только для статического набора (Свой). Значение поля каждого элемента, по которому он привязывается к значению родительского параметра при каскадной зависимости.
Колонка родителя Только для смарт-набора. Имя столбца в результате смарт-выражения, содержащего ключ привязки к родительскому значению. Бэкенд вычитывает эту колонку и включает значение в ответ (parent на каждом элементе).

Каскадные выпадающие списки

Dropdown-параметр типа «Смарт-набор» может зависеть от другого параметра через настройку «Зависит от параметров»:

  1. При изменении значения в родительском параметре фронтенд вызывает POST /api/v10/filters/config/dropdown/items с otherValuesJson — выбранным значением родителя.
  2. Смарт-выражение дочернего параметра получает это значение через @eventParam2 и возвращает отфильтрованный список.
  3. Если задана «Колонка родителя» — бэкенд дополнительно вычитывает эту колонку из каждой строки результата смарт-выражения и включает её в ответ (поле parent).
  4. Если задана «Колонка доступности» — бэкенд аналогично вычитывает её и включает в ответ (поле avalible), позволяя управлять доступностью элементов на стороне клиента.

Для статического набора каскад настраивается иначе: у каждого элемента вручную задаётся «Ключ родителя» — значение из родительского параметра, при котором этот элемент доступен.

С версии 2.268.349: если у dropdown-параметра набор значений пуст (например, по выбранному родителю каскад вернул 0 строк), плейсхолдер показывает Нет данных: <Название параметра> вместо общего Нет данных — видно, какой именно фильтр оказался пустым, без необходимости разворачивать список.

Поведение:

  • в горизонтальном режиме фильтр применяется сразу после изменения значения и закрытия редактора;
  • кнопка Очистить появляется только при наличии активных фильтров;
  • для свернутых фильтров используется модальное окно, на кнопке показывается счетчик выбранных значений.

Includes (JS/CSS)

Где настраивается: API администрирования (includes) Таблицы БД: dbo.PortalIncludes, dbo.PortalBlockIncludes

Дополнительные JS/CSS файлы, влияющие на рендер и поведение портала или отдельного блока.

Права просмотра

Где настраивается: API администрирования (права просмотра) Таблица БД: dbo.PortalGridTemplateGroups

Ограничение видимости портала по группам пользователей.

Пользовательские переопределения раскладки

Таблица БД: dbo.PortalGridUserTemplates

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

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

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

Симптом Причина Где проверить SQL-диагностика
Портал не виден части пользователей Ограничения по группам dbo.PortalGridTemplateGroups select * from dbo.PortalGridTemplateGroups where PortalGridTemplateId = {portalId}
Блок на странице пустой Некорректный конфиг блока или фильтры dbo.PortalGridBlocks, фильтры select * from dbo.PortalGridBlocks where PortalGridTemplateId = {portalId}
Фильтры не влияют на график/таблицу Блоки не связаны через общий filter-config или рассинхронизированы параметры Конфиг фильтров блока + набор параметров в фильтре (filters_spa) select * from dbo.PortalGridBlocksFilters where PortalGridBlockId = {blockId}
Пользователь не видит часть фильтров Параметр фильтра отмечен как Всегда свернуто / Только если выбрано значение Настройки параметров фильтра (PortalGridFilterParams) select * from dbo.PortalGridFilterParams where PortalGridFilterId = {filterId}
Над виджетом показывается старое название Name блока — это заголовок виджета для пользователей, не внутреннее имя POST /api/portals/block/{blockId}/update с {"Name":"..."} select Name from dbo.PortalGridBlocks where Id = {blockId}
После изменений интерфейс показывает старое Кэш в интерфейсе Фактическое сохранение select * from dbo.PortalGridBlocks where Id = {blockId}
Страница ломается после включения include Ошибка в JS/CSS include dbo.PortalIncludes select * from dbo.PortalIncludes where PortalGridTemplateId = {portalId}
Пользовательское переопределение конфликтует с новой раскладкой Старый PortalGridUserTemplates dbo.PortalGridUserTemplates select * from dbo.PortalGridUserTemplates where PortalGridTemplateId = {portalId} and UserId = {userId}

Работа с API порталов — ключевые правила

Детальный cookbook с примерами: portal-api-cookbook.md.

Создание блока

Пример создания блока через API:

block_id = POST("/api/portals/block/add", {
    "Name": "Виджет",
    "TypeId": 33,              # SmartHtml
    "TemplateId": portal_id,   # Внимание: игнорируется при создании (баг)
    "GroupsIds": [1620],        # Обязательно, иначе блок не виден
    "ContextTypeId": 0,
    "IsEnabled": True
})

Advsets — контроллеры по типам блоков

Не все типы блоков имеют выделенный advsets-контроллер:

TypeId Тип Advsets-маршрут
33 SmartHtml POST /api/admin/portals/blocks/advsets/smart-html?blockId=N
21 Menu (Navigation) Настройки в TypeParams (JSON-строка внутри JSON-строки)
2 Subcat POST /api/admin/portals/blocks/advsets/subcat?blockId=N
18 Chart (График) Управление сериями — см. ниже

SmartHtml — настройка шаблона

Пример настройки HTML-шаблона блока:

POST /api/admin/portals/blocks/advsets/smart-html?blockId={blockId}
{"template": "<div>...</div>", "smarts": ""}
# blockId — query parameter, не body!
# Ответ: 204 No Content

SmartHtml — двойное хранение шаблона: template хранится в TypeParams (legacy) и BlockTemplates (через advsets API). При обновлении через advsets обновляется BlockTemplates.

SmartHtml — источники данных (с 2.268 Скульптор)

В advsets добавлено поле dataSourcesJSON-строка с массивом источников данных. Поддерживаются три типа:

POST /api/admin/portals/blocks/advsets/smart-html?blockId={blockId}
{
  "template": "...",
  "smarts": "",
  "dataSources": "[{\"alias\":\"myData\",\"type\":\"custom\",\"sourceKey\":\"source_key\"},{\"alias\":\"tasks\",\"type\":\"smartFilter\",\"smartFilterId\":123,\"fields\":[\"taskText\",\"stateDescription\",\"ep:42\"]},{\"alias\":\"kpi\",\"type\":\"script\",\"scriptId\":456,\"cacheTtlSec\":300,\"timeoutSec\":30}]"
}

Имена полей конфига: smartFilterId / cacheTtlSec / timeoutSec / maxRowsне filterId/ttl/timeout. ДП в fieldsep:{ExtParamID} (двоеточие); taskId всегда в результате и в fields не указывается.

Список системных полей для типа smartFilter:

GET /api/admin/portals/blocks/advsets/smart-html/smart-filter-fields

Данные всех источников записываются в window.__smartHtmlData[blockId] (по алиасу) до выполнения JS Include. Если dataSources пуст или отсутствует — поведение прежнее (обратная совместимость).

Chart (График) — управление сериями данных

Виджет «График» (TypeId 18) имеет выделенный набор маршрутов /api/admin/portals/blocks/advsets/chart:

Метод Маршрут Назначение
GET /settings/common Общие настройки графиков
GET ?blockId=N Данные графика блока
POST /add-new-chart?blockId=N Добавить новую серию
DELETE /{chartIndex}?blockId=N Удалить серию по индексу
POST ?blockId=N Сохранить настройки графика (тело — ChartTypeParams)

Метод DELETE удаляет серию по индексу chartIndex (нумерация с 0), отдельного идентификатора у серии нет. Раньше лишнюю серию нельзя было убрать без пересоздания виджета.

В админке виджета каждая серия отображается отдельным блоком («График 1», «График 2» и т. д.). У всех серий, кроме первой, доступна кнопка «Удалить» (с подтверждением). Первая серия удалению не подлежит — удалить можно только добавленные вручную серии.

JS/CSS Includes

Создание:

POST("/api/includes/add", {
    "name": "Описание",    # при создании — "name"
    "type": 1,             # 1=Js, 2=Css, 3=JsUrl
    "content": "(function() { ... })()"
})  # → {"data": includeId}

Обновление:

POST(f"/api/includes/{includeId}/update", {
    "description": "Описание",  # при обновлении — "description" (не "name"!)
    "type": 1,
    "content": "(function() { ... })()"
})

Привязка к блоку:

POST /api/portals/block/{blockId}/includes/add?includeId={includeId}
# includeId — QUERY parameter, не body
# Требует пустой body {} — без body → 400

Типичные ошибки API порталов

Частые ошибки при работе с API порталов и их решения:

Проблема Причина Решение
TemplateId игнорируется при создании Известный баг После создания: POST /api/portals/block/{id}/update с правильным TemplateId
Блок не виден пользователям Нет GroupsIds Всегда передавать GroupsIds: [1620]
Блок на портале, но не рендерится Блок не в mesh Добавить blockId в mesh JSON (формат в cookbook §4)
updateAdminTemplate → 500 Не все поля переданы (name=null) Передать ВСЕ поля: id, name, mesh, GridType, ShowHeader, ModuleId, dashboard, isFixedMode
Портал стал Flex (0) Забыли GridType: 2 Всегда передавать GridType: 2 (CssGrid)
Удалённый блок в mesh DELETE block не чистит mesh Вручную удалить запись из mesh JSON
GET /api/admin/portals/{id} → 405 Поддерживает только DELETE Читать портал: GET /app/v1.0/api/portal/template/{id}
addAdminTemplate дубль имени → 500 Сервер возвращает 500 (не 409) Проверить существующие порталы
addAdminTemplate — ответ без data Возвращает объект напрямую response['id'], не response['data']['id']
TypeParams — упрощённый формат → NullRef PUT /api/admin/portals/blocks/{id} пишет Key/Value Обновлять через POST /api/portals/block/{id}/type-params/update
name vs description для includes Разные имена одного и того же поля При создании — name. При обновлении — description
400 при привязке include Отправили без body Отправить пустой {} body
Include не выполняется в SmartHtml Привязан к порталу, а не к блоку Привязать к блоку: block/{blockId}/includes/add
Пустой виджет при SPA-навигации IIFE выполняется один раз MutationObserver + маркер data-*-init (паттерн в cookbook §5e)
Type: "JS" → ошибка Значение "Js" PascalCase "Js", "Css", "JsUrl" — не UPPERCASE
POST /api/includes → 404 Нет такого маршрута POST /api/includes/add (создание), /api/includes/{id}/update (обновление)

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

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