Язык EQL (ELMA Query Language) – язык запросов к данным, хранящимся в системе ELMA, который расширяет возможности создания сложных выборок данных, т.е. позволяет создать фильтр даже с такими критериями, которые не заложены в базовом функционале настроек фильтра.
EQL-запрос – это структурированный запрос к данным системы ELMA, позволяющий создавать сложные выборки данных и создаваемый при помощи языка EQL.
Структура EQL-запроса в общем виде схожа со структурой SQL-запросов в языке SQL. Далее будут описаны основные операторы и возможности создания EQL-запросов.
Структура данного раздела:
Общие рекомендации при написании запросов
1. Простые поля (строка, число) могут быть сравнены с другими полями того же типа или с константами.
2. Поля, являющиеся ссылкой на другой объект, могут быть сравнены только с идентификатором данного объекта (например: Contacts = 2 – поиск контрагентов, имеющих контактное лицо с идентификатором 2).
3. Существует только три типа констант:
-
-
-
Элементы булева множества (true, false).
Остальные константы создаются через функции (например, даты: StartDate= DateTime(2016, 03, 02, 11, 00)) или строками в функциях (например, OR TypeUid = TypeReference('Task') OR Uid = Guid('xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx')).
4. Строковые константы задаются в одинарных кавычках (Name LIKE ’%ООО%’).
5. В числах разделителем целой и дробной части является точка.
6. Для добавления символа ’ (апостроф) в строку необходимо при вводе продублировать его (например: Name LIKE ’%Задача ’’Подписание пакета документов’’%’ – поиск всех задач, название которых содержит комбинацию "Задача ’Подписание пакета документов’").
7. Для написания запросов необходимы данные о структуре объектов системы. Структуру объекта можно посмотреть в Дизайнере на вкладке Объекты в карточке объекта на вкладке Свойства : на ней можно увидеть список всех полей объекта - их названия и типы
Логические операторы (AND, OR, NOT) соединяют между собой несколько условий и имеют разный приоритет. В том случае, если в выражении в цепочке используется несколько., то они выполняются в следующем порядке:
1. Управление приоритетом.
2. Операторы отрицания NOT.
3. Логические операторы AND.
4. Логические операторы OR.
Управление приоритетом
Для обозначения приоритета среди выражений в сложных запросах используются круглые скобки:
(Name LIKE ’%ООО%’ OR Name LIKE ’%ЗАО%’) AND (Region = 6) – поиск контрагентов из Уральского региона, в названии которых содержатся слова "ООО" или "ЗАО".
Вместе с оператором OR использованы круглые скобки, для того, чтобы обозначить его приоритет перед оператором AND.
При использовании данного оператора для выполнения условия должны быть выполнены оба подусловия, которые он соединяет:
Name LIKE ’%Ушаков%’ AND Name LIKE ’%Иван%’ AND Name LIKE ’%Петрович%’ – поиск контрагентов, в названии которых содержатся слова "Ушаков", "Иван", "Петрович", причем по обе стороны от данных слов могут находиться любые символы.
При использовании данного оператора для выполнения условия достаточно выполнения одного из подусловий:
Name LIKE ’%ООО%’ OR Name LIKE ’%ЗАО%’ – поиск контрагентов, в названии которых содержатся слова "ООО" или "ЗАО", при чем по обе стороны от обоих слов могут находиться любые символы.
Данный оператор используется для отрицания условия и располагается перед ним:
NOT (Name LIKE ’%ООО%’ OR Name LIKE ’%ЗАО%’) – поиск контрагентов, в названии которых не содержится слов "ООО" или "ЗАО".
Операторы сравнения позволяют сравнивать между собой несколько полей объектов, значений выражений или констант. В том случае, если условие является истинным и выполняется, значением всего выражения является TRUE, а если условие не выполняется и является ложным – FALSE.
Равенство =
Операция проверки на точное равенство первого операнда второму. Строки сравниваются с учетом регистра.
Если точное сравнение строк не требуется, а необходимо проверить строку на наличие подстроки, рекомендуется использовать оператор LIKE.
Операцию равенства не рекомендуется применять к датам, т.к. точное совпадение даты и времени маловероятно. К датам рекомендуется применять такие операции сравнения, как <, >, <=, >=.
Responsible = CurrentUser() – поиск контрагентов, для которых текущий пользователь является ответственным.
Неравенство <>
Проверка неравенства значений с учетом их регистра.
Responsible <> CurrentUser() – поиск контрагентов, для которых текущий пользователь не является ответственным.
Меньше <
Оператор строгого неравенства. Значение левой части выражения должно быть строго меньше правой.
AnnualIncome < 2500000 – поиск контрагентов, годовой доход которых меньше 2500000 рублей.
Больше >
Оператор строгого неравенства. Значение левой части выражения должно быть строго больше правой.
AnnualIncome > 500000 – поиск контрагентов, которых годовой доход которых больше 500000 рублей.
Меньше либо равно <=
Оператор нестрогого неравенства. Значение выражения будет истинно, если левая часть будет меньше либо равна правой.
CompanyDay <= DateTime(1989, 01, 03) – поиск контрагентов, дата создания которых меньше или равна 03.01.1989.
Больше либо равно >=
Оператор нестрогого неравенства. Значение выражения будет истинно, если левая часть больше либо равна правой.
CompanyDay >= DateTime(1989, 01, 03) – поиск контрагентов, дата создания которых больше или равна 03.01.1989.
Другие операторы сравнения
Данные операторы являются регистронезависимыми, т.е. результаты запроса будут одинаковы независимо от регистра введенного текста (на запрос Name LIKE ’%Мир%’ будут выведены результаты "Мир" и "мир").
Данный оператор применяется только для строковых переменных. Оператор сравнивает строковое поле с указанной маской (шаблоном), и при выполнении условия объект попадает в результат выборки.
Данный оператор следует применять с масками строк, например, ’%Мир%’. Если в одиночных кавычках указывать конкретную строку, то действие данного оператора будет равносильно обычному равенству.
Например, следующие запросы будут полностью эквивалентны:
(Name LIKE ’%ООО%’ OR Name LIKE ’%ЗАО%’)
(Name = ’%ООО%’ OR Name = ’%ЗАО%’)
Маска (шаблон) может содержать в себе следующие знаки:
-
знак % – обозначает любое количество произвольных символов.
Name LIKE ’%ООО%’ – поиск контрагентов, в названии которого содержится слово "ООО", по обе стороны от которого может находиться любая комбинация символов;
-
знак подчеркивания _ – обозначает один произвольный символ или несколько (в зависимости от позиции в тексте).
Name like ’_A%’ – поиск контрагентов, в названии которых вторая буква "А";
Name like ’__A%’ – поиск контрагентов, в названии которых третья буква "А";
-
кавычки – поиск строк, в которых есть только одинарные кавычки-апострофы '. В шаблоне кавычки должны быть продублированы.
Name LIKE ’%Задача ’’Подписание пакета документов’’%’ – поиск задач, название которых содержит фразу "Задача ’Подписание пакета документов’".
Данный оператор устанавливает соответствие значения определенного поля с каждым из элементов, указанных после него в скобках. Оператор IN подходит для сравнения значения поля с небольшим количеством элементов.
CreationAuthor in (CurrentUser(), 1) – поиск контрагентов, которые были созданы текущим пользователем или пользователем с идентификатором 1.
IS NULL
|
– проверка равенства выражения в левой части оператора пустому значению (Null). Применяется только к объектам с единичным выбором (поле "Отрасль" для контрагента).
Применяется к объектам с единичным выбором. Например, в справочнике "Отрасли" для контрагента можно выбрать только одну отрасль - это единичный выбор.
Industry IS NULL – поиск контрагентов с незаполненным полем "Отрасль".
|
IS EMPTY
|
– применяется к объектам со множественным выбором.
Contacts IS EMPTY – поиск контрагентов c пустым списком контактов.
|
См. также: