Запросы в вычислимых выражениях в платформе Mobile SMARTS

Последние изменение: 27.05.2019


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

Запросы имеют следующий синтаксис:

select [first] ( * | Имя_Поля, … n )
from Имя_Источника [as Псевдоним] 
where Выражение_Условия 
[group by Имя_Поля, … n] 
[sort by Имя_Поля [ asc | desc ], … n]


Здесь:

first - выбор первой записи; результатом запроса является одна строка или null. Если оператор first не задан, выбираются все строки, удовлетворяющие условию; результатом запроса является коллекция строк. Если не найдено строк, удовлетворяющих условию, коллекция будет пустой.

( * | Имя_Поля, … n) - отбираемые поля. В скобках должна находиться или звездочка (*) - все поля,  или список полей через запятую (Имя_Поля, … n) - отбор только указанных полей.

Имя_Источника - имя объекта, из которого выбираются данные. Например, имя дополнительной таблицы, как оно задано в конфигурации Mobile SMARTS. Может быть задан псевдоним с помощью as Псевдоним. Если псевдоним задан, в выражении условия для обращения к объекту-источнику данных должен использоваться заданный псевдоним. Если псевдоним не задан, используется Item (обозначает текущую строку, на которую накладывается условие). Задание псевдонима необходимо, если запрос применяется в вычислимом поле некоторого объекта, являющегося коллекцией строк (например, дополнительная таблица). В этом случае Item является текущей строкой того объекта, который является владельцем вычислимого поля. Пример см. ниже.  

Выражение_Условия - выражение, содержащее условие отбора строк. Такие же выражения используются в действиях Выбор строки и Выбор строк. Отличие только в том, что вместо Item для обозначения текущей строки может использоваться указанный псевдоним.

group by Имя_Поля, … n - группировка по указанным полям.

sort by Имя_Поля [ asc | desc ], … n - сортировка по указанным полям, перед именем поля может быть задано asc (сортировка по возрастанию) или desc (сортировка по убыванию). По умолчанию, если не указано ни asc ни desc, используется сортировка по возрастанию.

Пример

Отберем с помощью запроса розничную цену выбранного товара:

select first (*) from Цены where Item.ИдНоменклатуры == SelectedProduct.Product.Id && Item.ВидЦены == "Розничная"


Цены - дополнительная таблица с ценами, в условии указываем поиск по ИдНоменклатуры и виду цены.

Данное выражение может быть использовано, например, в действии присваивания:


Если нам нужно получить не строку таблицы, а сразу значение цены, можно сделать так:


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


Пример

Рассмотрим более сложный пример: в таблице Характеристики, содержащей характеристики номенклатуры, создадим вычислимое поле для получения цены из таблицы Цены. Это позволит вывести на экран список характеристик выбранной номенклатуры с их ценами.

Таблица Цены имеет следующие поля:


Цена привязана к номенклатуре, характеристике и упаковке номенклатуры, при этом может быть несколько цен разных видов. Флаг ВидЦеныВнутр равен 1 (заданный по умолчанию вид цен) или 0 (остальные виды цен).

Таблица Характеристики:


Для связи с номенклатурой используется поле КлючХарактеристик. 

Для поля ЦенаВыч задан следующий Шаблон значения:

(select first (*) from Цены as ТаблицаЦен 
where ТаблицаЦен.ИдНоменклатуры == SelectedProduct.Product.Id && ТаблицаЦен.Упаковка == SelectedProduct.Packing.Id && ТаблицаЦен.Характеристика == Item.ИмяХарактеристики && ТаблицаЦен.ВидЦеныВнутр==1).Цена


В выражении условия для обращения к строке таблицы Цены используется заданный псевдоним ТаблицаЦен, Item здесь - указание на текущую строку таблицы Характеристики, в которой определено данное вычислимое поле. 

Используем поле ЦенаВыч при отображении характеристик в списке выбора: