Поделиться через


Функция ER VALUEIN

Функция VALUEIN определяет, соответствует ли заданный ввод какому-либо значению указанного элемента в указанном списке. Она возвращает логическое значение TRUE, если указанный ввод совпадает с результатом выполнения указанного выражения по крайней мере для одной записи указанного списка. В противном случае возвращает логическое значение FALSE.

Синтаксис

VALUEIN (input, list, list item expression)

Аргументы

input: Поле

Действительный путь элемента источника данных типа Список записей. Значение этого элемента будет сопоставляться.

list: Список записей

Действительный путь источника данных типа данных Список записей.

list item expression: Логическое значение

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

Возвращаемые значения

Логический

Результирующее логическое значение.

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

Как правило, функция VALUEIN переводится в набор условий OR. Если список условий ИЛИ слишком большой и максимальная общая длина инструкции SQL может быть превышена, попробуйте использовать функцию VALUEINLARGE.

(input = list.item1.value) OR (input = list.item2.value) OR …

В некоторых случаях она может быть переведена в выписку из базы данных SQL с помощью оператора EXISTS JOIN.

Примечание

Значение, возвращаемое функцией VALUEIN, используется по-разному, в зависимости от того, используется ли эта функция для указания критериев выбора для функции FILTER или для функции WHERE.

Пример 1

В своем сопоставлении модели вы определяете источник данных Список типа Рассчитываемое поле. Этот источник данных содержит выражение SPLIT ("a,b,c", ",").

Когда вызывается источник данных, если он был настроен как выражение VALUEIN ("B", List, List.Value), он возвращает TRUE. В этом случае функция VALUEIN переводится в следующий набор условий: (("B" = "a") or ("B" = "b") or ("B" = "c")), где ("B" = "b") равно TRUE.

Когда вызывается источник данных, если он был настроен как выражение VALUEIN ("B", List, LEFT(List.Value, 0)), он возвращает FALSE. В этом случае функция VALUEIN переводится в следующее условие: ("B" = ""), где не равно TRUE.

Верхний предел для числа символов в тексте таких условий составляет 32 768 знаков. Таким образом, не следует создавать источники данных, которые могут превысить этот предел во время выполнения. Если предел превышен, приложение перестанет работать, и будет создано исключение. Например, такая ситуация возможна, если источник данных настроен как WHERE (List1, VALUEIN (List1.ID, List2, List2.ID), а списки List1 и List2 содержат большой объем записей.

В некоторых случаях функция VALUEIN переводится в инструкцию базы данных с помощью оператора EXISTS JOIN. Это происходит, когда функция FILTER используется и выполняются следующие условия:

  • Параметр ASK FOR QUERY отключен для источника данных функции VALUEIN, которая относится к списку записей. Никакие дополнительные условия не будут применены к этому источнику данных во время выполнения.
  • Никакие вложенные выражения не настроены для источника данных функции VALUEIN, которая относится к списку записей.
  • Элемент списка функции VALUEIN ссылается на поле указанного источника данных, не выражения или метод такого источника данных.

Рекомендуется использовать этот параметр вместо функции WHERE, как описано ранее в этом примере.

Пример 2

Определите следующие источники данных в соответствии вашей модели:

  • Источник данных In типа Записи таблицы. Этот источник данных ссылается на таблицу Интрастат.
  • Источник данных Порт типа Записи таблицы. Этот источник данных ссылается на таблицу IntrastatPort.

При вызове источника данных, который настроен как выражение FILTER (In, VALUEIN(In.Port, Port, Port.PortId), для возврата отфильтрованных записей таблицы Интрастат формируется следующая инструкция SQL.

select … from Intrastat
exists join TableId from IntrastatPort
where IntrastatPort.PortId = Intrastat.Port

Для поля dataAreaId последняя инструкция SQL создается с помощью оператора IN.

Пример 3

Определите следующие источники данных в соответствии вашей модели:

  • Источник данных Le типа Вычисляемое поле. Этот источник данных содержит выражение SPLIT ("DEMF,GBSI,USMF", ",").
  • Источник данных In типа Записи таблицы. Этот источник данных относится к таблице Интрастат, и для нее включен параметр Межфирменное взаимодействие.

При вызове источника данных, который настроен как выражение FILTER (In, VALUEIN (In.dataAreaId, Le, Le.Value), конечный оператор SQL содержит следующее условие.

Intrastat.dataAreaId IN ('DEMF', 'GBSI', 'USMF')

Дополнительные ресурсы

Логические функции

Функции VALUEINLARGE