Low-code дизайнер > Приложение > Поисковые запросы на языке EQL365 / Синтаксис EQL-запроса

Синтаксис EQL-запроса

Чтобы найти элемент приложения по параметрам, в EQL-запросе его свойствам задаются определённые значения. Для создания EQL‑запроса соблюдаются определённые правила и применяются особенности:

  1. Для обращения к свойствам приложения используются коды, присвоенные им при создании. Указывать код переменной необходимо в квадратных скобках: [property_name].
  2. Указывается операция поиска. Используются стандартные математические знаки или ключевые слова языка EQL365.
  3. Искомое значение указывается с учётом правил присвоения значений свойствам различных типов.
  4. Для присвоения значения или его вычисления в запросе можно использовать функции, например, для указания определённой даты или поиска в свойстве типа Пользователи текущего сотрудника.
  5. Для присвоения значений свойствам в рамках запроса можно создать параметр и обращаться к нему множество раз. Значение параметра указывается после составления запроса в полях, добавленных в окно поиска автоматически.
  6. Чтобы осуществлять поиск по нескольким условиям, в запрос добавляются логические операторы. При этом можно указывать условие, выполнение которого будет проверяться первым.
  7. Для составления сложных выборок данных можно использовать подзапросы. Внутри подзапроса можно обращаться к свойствам любого приложения в системе.
  8. Все составляющие запроса указываются через пробел.  

начало примера

Примеры поиска элементов по составленным EQL-запросам

  1. [company_name] = 'АвтоПром' or [company_name] like 'Авто' — поиск элементов приложения Компании, в которых поле Название полностью совпадает с первым указанным значением или содержит второе.
  2. [__createdAt] = Datetime(2025, 1) and [price] > 4000 — поиск записей приложения Заказы, у которых в поле Дата создания указан январь 2025 года и поле Стоимость содержит значение большее, чем 4 000 рублей.
  3. [contract] in (select [__id] from [documents.contracts] where [total] > 10000) — поиск записей приложения Контрагенты, где в поле Договор указан элемент приложения, в котором сумма превышает 10 000 рублей.

конец примера

Присвоение значения свойствам различных типов

Для корректной обработки EQL-запроса все его составляющие указываются через пробел. При написании запроса можно использовать опцию автозаполнения строки. Чтобы вызвать выпадающее меню с доступными свойствами, функциями и операторами, нажмите Ctrl + Пробел.

Для указания значений в различных типах свойств из контекста приложений используются определённые правила. Они приведены в таблице:

Тип данных

Правило присвоения значения

Пример

Строка

Задаётся строкой в одинарных кавычках.

  1. [authors_name] like 'Алекс' — поле Имя автора содержит значение Алекс.
  2. [product] in ('вентилятор', 'холодильник') — поле Продукт содержит одно из указанных значений.
  3. [authors_name] is null — имя автора не указано.

Число, Деньги

Используется значение искомого числа без кавычек.

Дробные числа разделяются точкой.

  1. [size] < 5.5 — в поле Размер указано значение меньше, чем 5,5 метров.
  2. [price] >= 5000 — значение поля Стоимость больше или равно 5 000 рублей.

Выбор «да/нет»

Задаётся значением true без кавычек.

  1. [prepayment] = true — в поле Предоплата выбрано значение Да.
  2. [prepayment] <> true — в поле Предоплата не указано значение или выбрано Нет.
  3. [prepayment] is null — поле Предоплата не заполнено.

Дата/время

Задаётся следующими способами:

  • функцией Datetime() или Time(), аргументы прописываются через запятую;
  • строкой в одинарных кавычках, даты прописываются через тире.  

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

 

Период времени относительно текущей даты вычисляется функцией RelativeDatetime('start', 'end'). В круглых скобках указывается начало и конец периода, параметры заключаются в одинарные кавычки и разделяются запятыми.

  1. [close_date] > Datetime(2025, 1, 31, 12);
  2. [close_date] > '2025-01-31-12'.

Оба запроса используются для поиска поля Дата закрытия со значением позднее, чем 31 января 2025 года после полудня.

  1. [close_date] < '2025-01-31T12:30:00' — дата закрытия произошла ранее, чем 31 января 2025 года в 12:30.
  2. [close_date] < '2025-01-31T12:30+09:00' — дата закрытия со значением ранее, чем 31 января 2025 года в 12:30 с учётом часового пояса UTC+09:00.
  3. [__createdAt] IN RelativeDatetime('-1m','0d') — поиск всех элементов, созданных с начала прошлого месяца и до текущей даты.

Категория

Задаётся кодом категории в одинарных кавычках.

[payment] in ('half', 'full') — в поле Оплата выбраны значения Частично и Полная предоплата.

Номер телефона

Задаётся строкой в одинарных кавычках.

[phone] = '+71234567890' — поле Телефон заполнено указанным значением.

Электронная почта

Задаётся строкой в одинарных кавычках.

[email] = 'admin@example.com' — поле Электронная почта заполнено указанным значением.

Ф.И.О.

Задаётся строкой в одинарных кавычках.

[contact] like 'Иван' — поле Контактное лицо содержит указанное значение.

Пользователи

Задаётся строковым представлением идентификатора в одинарных кавычках, без пробелов.

Чтобы найти идентификатор пользователя, перейдите в раздел Компания > Сотрудники, выберите нужную карточку и скопируйте значение в url-адресе страницы.

[responsible] = '95806fe5-f8e8-460c-b2be-ce607068726c' — в поле Ответственный указан определённый пользователь.

Приложение

  1. Задаётся строковым представлением идентификатора в одинарных кавычках, без пробелов.

Чтобы найти идентификатор элемента, перейдите на страницу нужного приложения, выберите запись и скопируйте значение в url-адресе страницы.

  1. Поиск выборкой данных по критериям. Указывается с помощью подзапроса с функцией вида Select_From_Where.
  1. [app] = '018a1c61-c2b9-7701-86ab-d8b39a143465' — в поле выбран элемент текущего приложения с указанным идентификатором.
  2. [order] in (select [__id] from [clients] where [__name] like 'Хол') — поиск заказа из приложения Клиенты, где имя компании содержит указанное значение.

Произвольное приложение

Поиск осуществляется по коду элемента двумя способами:

  1. Задаётся идентификатором определённого элемента:
  • поиск элемента коллекции с помощью функции Refitem(). В скобках через запятую прописывается код раздела, приложения и идентификатор элемента. Каждое значение отделяется одинарными кавычками;
  • строкой в одинарных кавычках. Путь до элемента указывается без пробелов, через двоеточие.
  1. Используется выборка данных по критериям. Указывается с помощью подзапроса с функцией вида Select_From_Where.
  1. Запрос для поиска элементов, у которых в поле Договор указана определённая запись из раздела Клиенты > Договоры:
  • [contract] = Refitem('clients', 'contracts', '1415381a-1197-11ee-be56-0242ac120002');
  • [client] = 'clients:contracts:1415381a-1197-11ee-be56-0242ac120002'.
  1. Запрос для поиска всех элементов из раздела Клиенты > Договоры, где указан заказ с суммой более 1 000 рублей:

[contract] in (select [__id] from [clients.orders] where [total] > 1000).

Статус

Задаётся числовым представлением идентификатора статуса.

[__status] = 1 — элементу присвоен первый по счёту статус.

Можно искать элементы, в полях которых не указано никакого значения. Для этого в запросе используется операция Is null или Is empty. Исключения составляют свойства типа Номер телефона и Электронная почта.

Создание параметров в EQL-запросе и их использование

Чтобы указать искомое значение свойства, в рамках запроса можно создать новый параметр. Обращаться к нему в запросе можно множество раз. Значение параметра задаётся после составления запроса. Таким образом оно будет являться не постоянным, а изменяться при каждом поиске.

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

eql-syntax-1

Если в дополнительных полях не заданы значения, выражение с использованием пользовательских параметров можно сохранить как фильтр. Таким образом сотрудники смогут применить составленный EQL-запрос, определить значения свойств по параметру и выполнять поиск различной информации.

начало примера

Пример запроса

[__createdBy] = @Пользователь AND [budget] = @Сумма — в запросе поля Автор и Бюджет из приложения заданы с помощью параметров. Сотрудник может внести для них определённые значения, указав любого пользователя и сумму, и выполнить поиск элементов с различными автором и бюджетом.

конец примера

Операции поиска

Для присвоения значения в EQL-запросе используются операции поиска. Они могут обозначаться математическими знаками или ключевыми словами языка EQL365.

Операции с использованием знаков

Такие операции строятся по одинаковому принципу. В качестве первого операнда указывается код свойства. Ему присваивается определённое значение. Вторым операндом выступает заданное значение, другое свойство или функция. К таким операциям относятся:

  1. Равенство — операция =.

Операция проверки точного совпадения. Не рекомендуется использовать со свойствами типа Дата/время, так как точное совпадение значения поля маловероятно.

начало примера

Примеры запросов

  1. [client] = 'Иванов' — поиск клиента с указанным именем.
  2. [payment] = [budget] — поиск полей Оплата, совпадающих с полем Бюджет.
  3. [responsible] = CurrentUser() — поиск элементов с текущим пользователем в качестве ответственного.

конец примера

  1. Неравенство — операция <>.

Операция проверки исключения точного совпадения.

начало примера

Примеры запросов

  1. [product] <> 'Оборудование' — поиск заказов, где в поле Продукт не значится указанное значение.
  2. [payment] <> [budget] — поиск заказов, где поле Оплата не совпадает с полем Бюджет.
  3. [responsible] <> CurrentUser() — поиск элементов, в которых в качестве ответственного не значится текущий пользователь.

конец примера

  1. Более чем — операция >.

Операция проверки строгого большего.

начало примера

Примеры запросов

  1. [price] > 10000 — поиск заказов со стоимостью, превышающей указанное значение.
  2. [payment] > [budget] — поиск заказов, где поле Оплата больше поля Бюджет.
  3. [shipping_date] > Datetime(2025, 1, 31, 12) — поиск заказов с датой отгрузки позднее, чем указанная дата и время 12:00.

конец примера

  1. Больше или равно — операция >=.

Операция проверки нестрогого большего.

начало примера

Примеры запросов

  1. [price] >= 10000 — поиск заказов со стоимостью, равной или превышающей указанное значение.
  2. [payment] >= [budget] — поиск заказов, где поле Оплата больше или равняется полю Бюджет.
  3. [shipping_date] >= Datetime('Today') — поиск заказов с отгрузкой в текущую дату на момент времени 00:00:00 или позднее.

конец примера

  1. Менее чем — операция <.

Операция проверки строгого меньшего.

начало примера

Примеры запросов

  1. [price] < 10000 — поиск заказов со стоимостью ниже указанного значения.
  2. [payment] < [budget] — поиск заказов, где поле Оплата меньше, чем поле Бюджет.
  3. [shipping_date] < Datetime('Today') — поиск заказов с датой отгрузки ранее, чем текущая дата на момент времени 00:00:00.

конец примера

  1. Меньше или равно — операция <=.

Операция проверки нестрогого меньшего.

начало примера

Примеры запросов

  1. [price] <= 10000 — поиск заказов, в которых стоимость ниже или равняется указанному значению.
  2. [payment] <= [budget] — поиск заказов, где поле Оплата меньше или равняется полю Бюджет.
  3. [shipping_date] <= Datetime('Today') — поиск заказов с отгрузкой в текущую дату на момент времени 00:00:00 или ранее.

конец примера

Операции с ключевыми словами языка EQL365

  1. Частичное совпадение строки — операция LIKE.

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

начало примера

Пример

[responsible] like 'Алекс' — поиск всех элементов, где в поле Ответственный присутствует данное значение.

конец примера

  1. Полное совпадение строки — операция LIKEF.

Операция LIKEF позволяет искать точные совпадения текста, а также задавать правила для поиска указанного значения в определённой части строки. Использование операции помогает сузить результаты поиска.

Доступные свойства для использования LIKEF:

Правила для создания запросов с операцией LIKEF:

  • символ _ — нижнее подчёркивание обозначает любой один символ. Может использоваться до или после искомого значения;
  • символ % — процент указывает, что перед или после искомого значения может находиться любое количество символов;
  • комбинирование символов — символы _ и % можно комбинировать и использовать в запросе множество раз для построения сложных шаблонов поиска;
  • экранирование символов — если значение содержит управляющие символы (_ или %), их нужно экранировать обратной косой чертой \.

начало примера

Примеры

  1. [client] likef 'Иван' — найдёт записи, где поле Клиент содержит точное значение Иван. Например, Иван Краснов, Иван Круглов и т. д.
  2. [string] likef '_010203' — ищет строки, начинающиеся с любого символа, за которым следует указанное значение 010203.
  3. [phone] likef '7912%' — вернёт все записи, номер телефона в которых начинается на 7912 и содержит любое количество символов.
  4. [order_name] likef 'Продукты%10_2024' — находит заказы, где название начинается на значение Продукты, содержит любое количество символов, а оканчиваются на 10, любой один символ и 2024.
  5. [email] likef '_petrov\%@example%' — найдёт электронные адреса, которые начинаются с одного неизвестного символа, содержат petrov%@example и оканчиваются любым доменом. Знак процента, содержащийся в адресе, экранируется \.  

конец примера

Для запросов с операциями LIKE и LIKEF может применяться равнозначность букв Е и Ё при поиске. Обратите внимание, что администратор системы может отключить эту возможность.

  1. Проверка на отсутствие значения — операция IS NULL или IS EMPTY.

Операции IS NULL и IS EMPTY используются в любом регистре для проверки отсутствия значения в указанном поле. Они позволяют находить элементы приложений, у которых поле не содержит данных.

начало примера

Пример

[budget] is null или [budget] is empty — равнозначные запросы для поиска заказов, где не указан бюджет.

конец примера

  1. Вхождение в множество — операция IN.

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

начало примера

Примеры запросов

  1. [order_number] in (6,7,8,9) — поиск всех заказов, в номерах которых содержатся перечисленные числа.
  2. [client] in ('Алексей', 'Андрей', 'Иванов') — поиск всех клиентов с перечисленными именами.
  3. [__createdBy] in CurrentUser() или CurrentUser() in [__createdBy] — равнозначные запросы для поиска всех элементов, созданных текущим пользователем системы.
  4. [orders] in (select [__id] from [documents.contracts] where [total] > 10000) — выборка всех заказов, в договорах которых в поле Сумма указано значение более 10 000 рублей. Подробнее о составлении таких выражений читайте в разделе «Подзапросы».

конец примера

Логические операторы-связки

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

  1. Логическое И — оператор AND объединяет несколько условия. При этом все условия должны выполняться.

начало примера

Примеры запросов

  1. [prepayment] = 1000 and [budget] > 3000 — поиск заказов, за которые внесли предоплату равную 1 000 рублей и бюджет которых превышает 3 000 рублей.
  2. [__createdAt] >= Datetime(2025, 1) and [__createdAt] < Datetime(2025, 3) — поиск всех элементов, которые были созданы за январь и февраль 2025 года, т. е. дата равняется или больше января и не превышает март.

конец примера

  1. Логическое ИЛИ — оператор OR объединяет несколько условий и запрашивает выполнение хотя бы одного из них.

начало примера 

Примеры запросов

  1. [order_number] in (6,7) or [client] is null — в результате поиска отобразятся заказы, в номерах которых присутствуют указанные числа или для которых не заполнен клиент.
  2. [client] like 'Алекс' or [orders] in (from [documents.contracts] select [__id] where [total] > 10000) — поиск заказов, в которых имя клиента содержит указанное значение или сумма договора превышает 10 000 рублей. В примере используется подзапрос с оператором выборки FROM_SELECT_WHERE.

конец примера

  1. Логическое НЕ оператор NOT применяется для одного условия. Оно не должно выполняться.

начало примера

Примеры запросов

  1. not [payment] is null — поиск всех счетов, по которым внесена оплата, т. е. в поле значится не пустое значение.
  2. not [client_name] in ('Петров', 'Иванов') — поиск заказов, в которых имя клиента не совпадает с указанным значением.

конец примера

Приоритеты логических операций

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

начало примера

Примеры запросов

  1. not ([client_name] like 'Алексей' or [client_name] like 'Андрей') — в результате поиска будут выбраны заказы, имена клиентов которых не содержат первое или второе указанное значение.
  2. (not [client_name] = 'Алексей') and [client_name] like 'Ал' — в результате поиска отобразятся заказы, в которых имя клиента не равняется первому значению — Алексей, но содержит второе значение — Ал.  

конец примера

Функции

Функции в EQL-запросах можно использовать для присвоения значения свойствам приложения, а также для его вычисления:

  1. ДатаDatetime().

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

В качестве параметров указываются числовые значения года, месяца, дня, часа, минуты, секунды и строковое представление часового пояса. Обязательным параметром является только обозначение года, остальные — указываются опционально. Если вы не выбрали время, в запросе принимается значение ноль часов, минут и секунд.

Вы можете задать дату функциями, которые вычисляются в момент выполнения запроса:

  • СегодняToday текущая дата;
  • СейчасNow текущее время.  

начало примера

Примеры запросов  

  1. [__createdAt] > Datetime(2024) — поиск элементов с датой создания позднее 2024 года.
  2. [__createdAt] > Datetime(2025, 1, 31) — поиск элементов с датой создания позднее, чем 31 января 2025 года.
  3. [finish_date] > Datetime(2025, 2, '+09:00') — поиск заказов, сборку которых завершили позднее, чем февраль 2025 года с учётом часового пояса.
  4. [__createdAt] < Datetime('Now') — поиск элементов с датой создания ранее, чем текущее время.
  5. [closing_date] > Datetime('Today') — поиск сделок, дата закрытия которых позднее, чем текущая дата.

конец примера

  1. Время Time().

Функция определяет представление времени, заданное в параметрах. В качестве параметров указываются числовые значения часа, минуты и секунды. Обязательным параметром является только обозначение часа. Параметры прописываются в круглых скобках с перечислением через запятую.

начало примера

Примеры запросов  

  1. [closing_time] < Time(17) — поиск сделок, закрытых позднее, чем 17:00.
  2. [closing_time] < Time(12, 30, 00) — поиск сделок, закрытых позднее, чем 12:30.

конец примера

  1. Относительное время RelativeDatetime('start', 'end').

Функция определяет временной промежуток, который рассчитывается относительно текущей даты, с учётом заданной в системе временной зоны. Для вычисления функции используются операторы = или IN.

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

  • цифровое обозначение — положительный или отрицательный количественный диапазон вычисления периода. Для поиска прошедшего периода используется знак минус, для последующих во времени дат — плюс. Ноль обозначает текущую дату и не требует использования знака плюса;
  • буквенной обозначение — разряд временного промежутка: час, день, год и т. д. Может указываться на английском и русском языках.

Доступные буквенные обозначения разряда временного промежутка

Вычисление параметров выполняется последовательно. При этом расчёт осуществляется не в единицах от текущей даты, а по календарному периоду времени.

Например, если текущая дата — 11 декабря 2025 года, и в функции начало периода задано параметром '-1m' (минус один месяц), то вычитаться будут не 30 дней от наступившей даты, а календарный месяц. Таким образом началом периода в результатах поиска будет считаться 1 ноября 2025 года.

Особенности вычисления параметров:    

  • start — параметр начала периода относительно текущей даты. В результат поиска включается вычисленное значение. Примеры ввода параметра:
    • '0h' — поиск с текущей даты и начала текущего часа;
    • '+1m' — поиск с начала следующего месяца;
    • '-1w+1d' — дата начала поиска рассчитывается следующим образом: от текущего дня отнимается календарная неделя и прибавляется один день. Так, если текущий день недели — понедельник, поиск производится с начала вторника прошлой недели.
  • end — параметр окончания периода относительно текущей даты. При вычислении к наименьшему отрезку времени, указанному в функции, добавляется единица. Полученное временное значение не включается в поиск, т. е. учитываются все значения являющиеся меньшими, но не равными вычисленному результату. Примеры ввода параметра:
    • '0h' — поиск до конца текущего часа;
    • '0d' — поиск до конца текущего дня;
    • '+1m' — до конца следующего месяца;
    • '-1w+1d' — дата окончания поиска рассчитывается следующим образом: вне зависимости от текущего дня недели расчёт начинается с понедельника прошлой календарной недели. Затем прибавляется прописанный в параметре один день, а также единица наименьшего отрезка времени — в данном случае это ещё один день. При вычислении получаем среду прошлой недели. Поскольку в окончание периода включаются все значения меньшие, но не равные вычисленному параметру, поиск производится до конца вторника прошлой недели.

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

начало примера

Примеры наиболее распространённых запросов

  1. [date] IN RelativeDatetime('0d', '0d') — поиск за текущую дату.
  2. [date] IN RelativeDatetime('-1d', '-1d') — поиск за предыдущий день.
  3. [date] IN RelativeDatetime('0w', '0w') — элементы за текущую неделю.
  4. [date] IN RelativeDatetime('-1w', '-1w') — поиск за прошлую неделю.
  5. [date] IN RelativeDatetime('-7d', '-1d') — элементы за предыдущие семь дней.
  6. [date] IN RelativeDatetime('+1w', '+1w') — учитывается вся следующая неделя.
  7. [date] IN RelativeDatetime('-1w+2d', '-1w+3d') — поиск с прошлой среды до конца прошлого четверга.
  8. [date] IN RelativeDatetime('-1m', '+1m') — поиск с начала прошлого месяца и до конца следующего месяца.
  9. [date] IN RelativeDatetime('0y+3q','0y') — элементы за третий и четвёртый квартал текущего года, т. е. поиск с третьего квартала по конец года.
  10. [date] IN RelativeDatetime('0y-2m', '0y-1m') — поиск за последний и предпоследний месяц прошлого года.
  11. [date] IN RelativeDatetime('+1y', '+1y0m') — учитывается весь первый месяц следующего года.

конец примера

  1. КоличествоCount().

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

начало примера

Примеры запросов

  1. count([orders]) > 3 — поиск компаний, для которых создано более трёх заказов.
  2. count(from [documents.contract] where parent.[__id] in [client] and [total] > 10000) > 2 — поиск компаний, для которых создано более двух договоров, где общая сумма превышает 10 000 рублей. В примере используется вложенный подзапрос с оператором PARENT.

конец примера

  1. Текущий пользователь CurrentUser().

Функция возвращает идентификатор текущего пользователя. Используется для определения значения свойства приложения.

начало примера

Пример

[responsible] = CurrentUser() — заказы, за которые ответственен текущий пользователь.

конец примера

  1. Элемент коллекцииRefitem().

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

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

начало примера

Примеры запросов

  1. [bill] = Refitem('documents', 'bills', '018a8dbb-04cd-7798-a363-aae245148b10') или [bill] = Refitem('documents:bills:018a8dbb-04cd-7798-a363-aae245148b10') — равнозначные запросы, в которых осуществляется поиск по полю Счет в элементах приложения Договоры. В результате отобразится договор, к которому привязан определённый счёт из другого раздела и приложения.
  2. [bill] is null — поиск договоров, в которых не указан счёт, т. е. нет ссылки на элемент приложения Счета.

конец примера

Подзапросы

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

начало примера 

Пример

not ([__name] like 'Алекс' or [__name] like 'Ан')найдёт все элементы, у которых название не содержит значения Алекс или Ан.

конец примера  

Операторы выборки в подзапросах

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

  • SELECT_FROM_WHERE или FROM_SELECT_WHERE;
  • FROM_WHEREиспользуется для обращения к другому приложению, по свойству которого нужно отфильтровать элементы текущего приложения. Применяется вместе:
    • с операторами PARENT или ROOT. Они позволяют устанавливать связь между двумя приложениями, чтобы произвести поиск элементов по указанному свойству;
    • с функцией Count(), определяющей количество элементов, удовлетворяющих условиям поиска.

Синтаксис операторов выборки

В каждом подзапросе указываются:

  1. Источник данных — код приложения, из которого выбираются данные.
  2. Свойство для поиска — определяет, какое именно свойство в источнике данных используется для поиска.
  3. Условие поиска — критерий, по которому выполняется фильтрация данных.

начало примера

Примеры

  1. [clients] in (select [__id] from [clients.orders] where [total] > 1000) — выборка элементов приложения Клиенты, для которых созданы заказы с суммой более 1 000 рублей.
  2. [contracts] in (select [__id] from [clients.leads] where [__name] = 'ООО Пристань') — поиск договоров из свойства типа Произвольное приложение, где имя компании совпадает с указанным в запросе.
  3. count(from [bookstore.book] where parent.[__id] in [authors]) > 0 — поиск авторов, в карточке которых указана хотя бы одна книга. В примере используется вложенный подзапрос с оператором PARENT.

конец примера

Вложенные подзапросы

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

  • PARENT — используется для обращения к свойствам родительского приложения, которое находится в запросе на один уровень выше;
  • ROOT — обращается к полям корневого приложения, которое указывается в начале запроса. Например, это приложение, на странице которого осуществляется EQL-поиск.

Примеры вложенных запросов