---
# System prepended metadata

title: Строка поиска
tags: [SOVA, ТЗ]

---

---
robots: noindex, nofollow
tags: SOVA, ТЗ
---
Строка поиска
==============

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

Таблица
-------
Таблица это список значений полей (параметров)  для определенной сущности системы. 
Сущностями можно считать не ограничиваясь: 
- Объекты мониторинга
- Аварии
- Пользователи
- Зоны ответственности 

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

В документе не рассматриывется в какой конкретно чати внетренней БД рассположено данное свойство сущности. И каким образом свойство отностися к сущности.


Логическое выражение
--------------------
Логическое выражение это строка визуально отображаемая как текст, состоящаяя из токенов. Токеном можкт быть любой набор печатных символов киррилического или латинского алфавита, арабских цифр и процих печатных символов.
 
Токен может определять одну из следующих сущьностей:
 
- Имя переменной или поля 
- Значений переменной или поля
- Логичекский операнд
- Операция сравнения 
- Открывающая или закрывающая скобка для определения приоритета вычисления логичекого выражения. 

Токены разделяются между собой символом "пробел". 
В некоторых случаях в составе токена возможно использование симвоал "пробел" в таких случаях начало и конец токена определяются символом \" (двойная кавычка).


### Имя переменной или поля


Имя поля это название  колонки в таблице  т.е навание свойства. 
Список полей конечен и определен заранее. 
Возможно что в процессе доработки у сущности поясится говой свойство, такм образом появится новой имя поля. 

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

### Значение переменной или поля

Значение переменной определяется типом переменной. 
Допустимы следующие типы переменных
- Текст  - произвольный текс включащий в себя все печатные символф включая символ "пробел".
- Двоичное - принимает значение "True" и "False"
- Цифровое - содержит цифры 0-9 и символ "," 


### Логический операнд

Логический операнд определяет логическую операцию между двумя логическими значениями операций сравнения или других логическх выражений

Допустимые следующие логические операнды:
 - "AND" - логическое И
 - "OR" - логическое ИЛИ
 - "NOT" - Логическое НЕ


### Операция сравнения


Операции сравнения позволяют сраввать введенное значение со значением соотвествующей параметра/колонки для каждой сущности.

Допускается следущие операции

- ">" Больше. Используется для цифроых значений 
- "<" Меньше. Используется для цифроых значений
- "=" Ровно. Используется для цифровых, текстовых и двоичных  значений.  Для текстовых значений определяет полное соответствие.
- "!=" Не ровно. Используется для цифровых, текстовых и двоичных  значений.
- "Содержит" - введенный текст содержится в тексте значения  парметра/колоники. 
- "Начнается с" - текстовое значение поля начинается с указанных символов.
- "Оканчивается" - текстовое значение поля оканчивается указанными символами.
- 

### Скобки

Груглые скобки выделяют (вклбчают) в себя ту часть выражения которая выполняется первой. Вычисленное логическое вырашения внутри скобок подставляется в выражение снаружи скобок как двоичное значение "True"/"False"

Если в выражении присутствую вложенные скобки (скобки внутри скобок) то первым вячисляется выражение определенное во внутренних скобках.


Метод ввода 
-----------

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

При определении допустивого токена относительно текущей аозиции курсора используется тип токена находящегося слева от курсора.

### Допустимые сочетания типов текенов

| Тип токена слева           | Допустимый токен справа | 
| -------------------------- | ------------------------| 
| Имя переменной/поля        | Опреация сравнения      | 
| Операция сравнения         | Значение  поля          | 
| Значение поля              | Логический операнд или Закрывающая скобка|
| Логический операнд         | Имя переменной/поля или Открывающая Скобка или Логический операнд "NOT" |
| Открывающая Скобка         | Имя переменной/поля или Открывающая Скобка|
| Закрывающая скобка         | Логический операнд или Закрывающая  скобка|

### Определение значений 

#### Имя поля

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

#### Значение
При вводе переменных используется любо допустимое значение типа ("True"/"False" и 0-9) либо список существующих значений поля/переменной, если такое возможно определить дешевыми ( с точки зрения вычислительных ресурсов) средствами или (оценосно) результирующий список значений не превышает нескольких десятков значений. В остальных случаях зачение переменной вводится без "подсказки". 

#### Другое
Для других типов токена, допустимые значения перечисленны в данном документе. 