Поиск, фильтрация, сортировка
Назначение
Раздел описывает общие приёмы работы со списками, которые повторяются во всех таблицах системы: задания, смены, простои, машины, сотрудники, спецификации, расчётные периоды, журнал аудита. Один раз поняв эти правила, пользователь применяет их везде — продукт сделан так, что таблицы выглядят и ведут себя единообразно.
В операторском интерфейсе OCULUS подход к спискам сознательно другой — об этом в самом конце.
Кто работает с модулем
Все роли в веб-интерфейсе ежедневно работают с фильтрами, поиском и сортировкой. Это не отдельная «функция», а часть всех остальных модулей. Раздел нужен, чтобы клиент один раз прочёл и понял общую механику.
Глобальный поиск таблицы
В верхней части любой таблицы — единое поле поиска с иконкой увеличительного стекла. Особенности:
- Ищет одновременно по всем видимым колонкам — не нужно выбирать «по какому полю». Это компромисс в пользу простоты.
- Задержка ввода — система не отправляет запрос на каждой нажатой букве: после паузы примерно в треть секунды отправляет один запрос с полным текстом. Сеть не перегружается.
- Очистка — крестик справа в поле, появляется как только что-то введено.
- Запоминание — выбранный поисковый запрос сохраняется в адресе страницы; можно скопировать ссылку с уже отфильтрованным списком и отправить коллеге.
Конкретный набор полей, по которым ищет глобальный поиск, определяется бэкендом каждого раздела (например, в заданиях он смотрит на номенклатуру и идентификатор; в сотрудниках — на ФИО, логин, цех, роль).
Фильтры по колонкам
В каждой колонке таблицы есть значок фильтра. По типу данных колонки система автоматически выбирает подходящий тип фильтра:
| Тип данных | Тип фильтра | Что предлагает |
|---|---|---|
| Текст | Текстовый поиск | Подстрока без учёта регистра. |
| Сотрудник, машина, цех, номенклатура | Поиск по справочнику с автодополнением | Можно выбрать несколько значений. |
| Список статусов, ролей, типов | Множественный выбор | Чек-боксы со всеми возможными значениями. |
| Число | Сравнение и диапазон | Операторы «равно», «не равно», «больше», «меньше», «между». |
| Дата | Календарь | «В период», «после», «до», «в день». |
| Длительность | Часы и минуты | Диапазон от/до. |
| Признак (да/нет) | Переключатель | «Только активные / только архивные / все». |
Активные фильтры показаны чипами над таблицей — каждый с возможностью убрать одним кликом крестика. Кнопка «Очистить всё» в шапке снимает все фильтры разом.
Множественные значения в одном фильтре
Поля «выпадающий список» и «справочник» поддерживают выбор нескольких значений сразу. В чипе видно одно из:
- При одном выбранном — само значение: «Литейка».
- При нескольких — счётчик: «3 выбрано».
Это позволяет, например, посмотреть задания «на машинах А, Б и В» одной выборкой, не делая трёх отдельных проходов.
Числовые и временные диапазоны
Числовой фильтр предлагает выбрать оператор и значение:
- «Равно», «не равно», «больше», «больше или равно», «меньше», «меньше или равно», «между» — для одного значения.
- «Между» с двумя значениями — диапазон от/до. Обе границы включены.
Временные диапазоны (длительность):
- Удобно искать «время выполнения от 30 до 60 минут» или «простой более 15 минут».
- Ввод в часах и минутах, без необходимости переводить в секунды.
Диапазоны дат (даты создания, начала, завершения):
- Календарь с выбором двух точек.
- Операторы «В период», «После», «До», «В конкретный день».
- Если поле — дата со временем, диапазон автоматически расширяется до «начало дня — конец дня» включительно.
Поиск по справочнику (entity-фильтры)
Когда фильтр работает по сотруднику, машине, цеху или номенклатуре, выпадающий список превращается в поиск с автодополнением:
- Начинаете вводить — список сужается.
- Под названием каждой записи в списке часто подписаны вторичные значения (например, для цеха — «12 единиц оборудования, 50 рабочих»; для машины — её цех и тип).
- Можно выбрать несколько значений одновременно — компонент рассчитан на множественную выборку.
- Выбранные значения отображаются чипами внутри фильтра, удаляются крестиком.
Этот же компонент используется и в формах создания (задание, смена, перенос между цехами) — пользователь не учит новый интерфейс для каждой страницы.
Сортировка
- Любая колонка таблицы — кликабельный заголовок. Клик переключает направление сортировки: возрастание, убывание, без сортировки.
- В заголовке отображается стрелка, показывающая текущее направление.
- Сортировка по умолчанию для каждой таблицы своя — обычно по дате создания, новые сверху.
- При смене страницы или применении фильтра сортировка сохраняется.
Пагинация
- Пагинация — серверная: страница загружается порциями по выбранному размеру.
- Размер страницы — 10, 25, 50 или 100 записей. По умолчанию 25.
- Внизу таблицы — навигация: «Предыдущая», «Следующая», номер текущей страницы и общее количество, прямой переход на конкретный номер.
- При смене размера страницы текущая позиция пересчитывается, чтобы пользователь не «выпал» на пустой экран.
- Информация о количестве записей в виде «1–25 из 523» — сразу понятно, где находишься.
Сохранение фильтров
- Между переходами на другие разделы фильтры намеренно не сохраняются — на каждой странице пользователь стартует с чистого состояния. Это исключает «случайно унаследованный» фильтр, который вводит в заблуждение.
- В адресе страницы фильтры и сортировка кодируются автоматически. Можно скопировать ссылку из адресной строки, отправить коллеге — у него откроется тот же отфильтрованный вид.
- Кнопки «Назад» и «Вперёд» в браузере работают корректно: история фильтров сохраняется в навигации, можно вернуться к предыдущему набору.
- Сохранённые наборы фильтров доступны на тех таблицах, где включены: пользователь сохраняет текущий набор под именем («Мои задания», «Брак за неделю»), потом одной кнопкой загружает.
Микро-фичи и детали интерфейса
- Фильтр по колонке открывается отдельным окошком рядом с колонкой — таблица видна целиком, а не «съёжена» под виджет.
- Активные фильтры — чипы над таблицей; каждый можно снять отдельно крестиком, или все разом кнопкой «Очистить».
- Тип фильтра подбирается автоматически: для числовой колонки — операторы и поля, для даты — календарь. Пользователь не выбирает «вид фильтра», система решает за него.
- Поле глобального поиска ищет одновременно по всем видимым колонкам — нет необходимости выбирать «по чему искать».
- Задержка ввода в поиске экономит трафик и не перегружает сервер «по букве на удар».
- Множественный выбор сворачивается в «N выбрано», когда выборок становится больше одной — таблица не «съезжает» от длинного списка чипов.
- Под каждым справочным значением в выпадающем списке подписаны вторичные данные (цех — со счётчиком оборудования и сотрудников, машина — с цехом) — выбор сразу с контекстом.
- Календарь дат принимает форматы как
2026-05-06, так и06.05.2026— пользователь не угадывает «правильный». - Диапазоны числа имеют отдельный вариант «между» с двумя полями: «от 30 до 60». Понятно для нетехнического пользователя.
- В адресной строке отражается состояние таблицы: фильтры, поиск, сортировка, страница. Ссылка работает как закладка на конкретный вид данных.
- На небольших экранах (планшет, узкое окно) таблица автоматически переключается в режим карточек — каждая запись отдельной карточкой с ключевыми полями. Фильтры остаются доступны.
- Экспорт списка идёт с применёнными фильтрами и сортировкой — то, что видишь в интерфейсе, попадает в файл. Не нужно дополнительно повторять условия.
- Пустой результат сопровождается явным сообщением «нет данных по текущим фильтрам» с кнопкой «Очистить» — пользователь не «гадает», почему таблица пуста.
- Сортировка и пагинация работают через сервер — в большой таблице (десятки тысяч записей) интерфейс не подвисает, даже если страница «глубокая».
Связи с другими модулями
- Все табличные разделы используют одни и те же приёмы: задания (06), смены (07), простои (08), машины (09), пользователи (03), номенклатура (04), спецификации (05), расчётные периоды зарплаты (11), журнал аудита (14), обращения (20).
- Аналитика (12) использует множественный выбор цехов в качестве глобального фильтра — это тот же entity-компонент, что и в других таблицах.
- Импорт и экспорт (18) опирается на текущие фильтры и сортировку: пользователь готовит нужный срез в интерфейсе и экспортирует его одной кнопкой.
Состояния и пограничные случаи
- Пустой результат. Таблица показывает явное сообщение «Нет данных по текущим фильтрам» с подсказкой «Очистить фильтры» или «Изменить условия». Пользователь не остаётся «у пустой страницы».
- Конфликтующие фильтры. Если выбрано «Статус: завершено» и «Завершено: пусто» — таблица будет пустой, но это легитимная комбинация. Сообщение помогает понять, что фильтр сужен слишком сильно.
- Неверный формат ввода. Числовые поля принимают только числа; календарь не позволяет выбрать несуществующую дату; справочник показывает только реально существующие записи.
- Большое количество значений в справочнике. Поиск с автодополнением подгружает порции по мере ввода — список не «загружается весь сразу», даже если в нём тысячи записей.
- Очень глубокая страница пагинации (например, 50-я). Технически разрешена; на практике пользователю проще применить фильтр и сократить выборку.
- Сохранённый адрес со старым фильтром. Если значение в справочнике было удалено (например, машина), фильтр игнорируется при загрузке, и таблица показывает все записи. Пользователь видит, что одного из чипов нет — и при необходимости перевыбирает.
- Параллельная работа двух пользователей с одной таблицей. Каждый видит свои фильтры. Изменения данных другого пользователя подхватываются при следующей загрузке (или сразу, если в системе включено реалтайм-обновление этой таблицы).
Операторский интерфейс OCULUS
В приложении OCULUS подход к спискам сознательно другой, потому что у оператора другие задачи и условия работы:
- Карточки вместо таблиц. Список заданий или обращений — это вертикальная лента карточек с крупными заголовками и ключевыми статусами. Удобно листать пальцем, в перчатках, в неярком освещении цеха.
- QR-сканирование вместо фильтров. Главный способ найти нужное задание или машину — сканировать QR-код. Один касание камеры заменяет несколько фильтров в таблице.
- Минимальные фильтры. Доступны только базовые: статус («Активные / Завершённые»), машина текущего рабочего места, простые состояния. Сложные диапазоны дат, числовые операторы, множественный выбор — намеренно не вынесены в OCULUS.
- Поиск по короткому коду. Ввод идентификатора задания или машины («JOB-00231», «MCH-12») возвращает прямой результат.
- Без сортировки и без пагинации. Список — короткий, отфильтрован под оператора по умолчанию, прокрутка непрерывная.
Веб-интерфейс и OCULUS используют один и тот же набор данных и общие правила доступа, но представляют его по-разному: одно — для управленческого анализа, другое — для оперативной работы в цеху.