Difference between revisions of "List.Contains"
(→Примеры) |
m (1 revision imported) |
||
(6 intermediate revisions by 2 users not shown) | |||
Line 3: | Line 3: | ||
|object=[[Список]] | |object=[[Список]] | ||
|caption=Вхождение объекта в список | |caption=Вхождение объекта в список | ||
+ | |exception=Не подходящий объект, ошибка сервера, невозможно превратить в число | ||
|type=1 | |type=1 | ||
|status=2 | |status=2 | ||
Line 12: | Line 13: | ||
* [[Объекты]] | * [[Объекты]] | ||
* [[Список]]}} | * [[Список]]}} | ||
− | Функция проверяет, является ли указанный элемент подмножеством списка. Проверяются только элементы[[Объект базы данных|-объекты базы данных]]. Если требуется проверить объект иного типа, нужно использовать функцию [[List.Find|'''Find''']]. Список может содержать папки и отдельные значения. При наличии папок в списке, элемент проверяется на вхождение внутрь каждой из папок. Подобный процесс может занять некотрое время, в зависимости от загруженности и готовности базы данных, поэтому, после первого обращения, функция сохраняет промежуточные результаты запроса, последующие обращения происходят без | + | Функция проверяет, является ли указанный элемент подмножеством списка. Проверяются только элементы[[Объект базы данных|-объекты базы данных]]. Если требуется проверить объект иного типа, нужно использовать функцию [[List.Find|'''Find''']]. Список может содержать папки и отдельные значения. При наличии папок в списке, элемент проверяется на вхождение внутрь каждой из папок. Подобный процесс может занять некотрое время, в зависимости от загруженности и готовности базы данных, поэтому, после первого обращения, функция сохраняет промежуточные результаты запроса, последующие обращения происходят без запросов к базе данных, тем самым ускоряя выполнение, однако, возможные изменения в данных при этом не учитываются. Чтобы форсировать запрос к базе данных, используйте функцию [[List.ClearContainsCache|'''ClearContainsCache''']] перед вызовом. |
== Синтаксис == | == Синтаксис == | ||
<code> | <code> | ||
− | {{Grey|List.}}'''Contains'''(''<Значение>''):''<0 или 1 (INT)>'' | + | {{Grey|List.}}'''Contains'''(''<Значение>''{{Optional|,<Режим функции (INT)>{{Default|{{Eq}}0}}}}):''<0 или 1 (INT)>'' |
</code> | </code> | ||
==== Аргументы ==== | ==== Аргументы ==== | ||
* <code>''<Значение>''</code> - Элемент-объект базы данных для проверки. | * <code>''<Значение>''</code> - Элемент-объект базы данных для проверки. | ||
+ | * <code>''<Режим функции (INT)>''</code> - Режим поиска элементов, возможны следующие значения: | ||
+ | ** '''0''' (по умолчанию) -- при первом вызове функция создает сортированный буфер, в котором содержатся внутренние коды всех элементов, входящих в подпапки всех элементов списка. Последущие вызовы уже не будут вызывать обращения к базе данных и будут проходить очень быстро. Если элементов, вошедших в запрос, очень много, первый возов может занять продолжительное время. Особенно это может стать проблемой, если во включаемых элементах присутствует большое количество папок, и СУБД не имеет возможности использования временных функций (к примеру, SQLite). Оригинальный список может содержать элементы разных справочников. | ||
+ | ** '''1''' -- при первом вызове функция создает сортированный буфер, в котором содержатся внутренние коды всех элементов списка и всех папок справочника, входящих в подпапки всех элементов списка. В этом режиме для проверки вхождения элемента в буфер требуется как код самого элемента, так и код папки, в которой он находится, что может создать дополнительный вызов к базе данных, если проверямый элемент не был заполнен. Плюсом такого подхода является сильное ускорение длительного первого вызова, если во включаемых элементах присутствует большое количество папок, и СУБД не имеет возможности использования временных функций (к примеру, SQLite). Оригинальный список должен содержать элементы '''только одного справочника'''. Первый вызов в этом режиме может работать несколько дольше вызова в режиме 0, если в список попадает малая часть справочника с небольшим количеством папок, однако, сам справочник содержит очень много папок, в остальных случаях он работает быстрее. | ||
==== Возвращаемое значение ==== | ==== Возвращаемое значение ==== | ||
Возвращает 1, если объект входит в список, 0 если не входит или не является объектом базы данных. | Возвращает 1, если объект входит в список, 0 если не входит или не является объектом базы данных. |
Latest revision as of 08:54, 22 January 2025
Contains (Вхождение объекта в список) | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Функция проверяет, является ли указанный элемент подмножеством списка. Проверяются только элементы-объекты базы данных. Если требуется проверить объект иного типа, нужно использовать функцию Find. Список может содержать папки и отдельные значения. При наличии папок в списке, элемент проверяется на вхождение внутрь каждой из папок. Подобный процесс может занять некотрое время, в зависимости от загруженности и готовности базы данных, поэтому, после первого обращения, функция сохраняет промежуточные результаты запроса, последующие обращения происходят без запросов к базе данных, тем самым ускоряя выполнение, однако, возможные изменения в данных при этом не учитываются. Чтобы форсировать запрос к базе данных, используйте функцию ClearContainsCache перед вызовом.
Синтаксис
List.Contains(<Значение>,<Режим функции (INT)>=0):<0 или 1 (INT)>
Аргументы
<Значение>
- Элемент-объект базы данных для проверки.<Режим функции (INT)>
- Режим поиска элементов, возможны следующие значения:- 0 (по умолчанию) -- при первом вызове функция создает сортированный буфер, в котором содержатся внутренние коды всех элементов, входящих в подпапки всех элементов списка. Последущие вызовы уже не будут вызывать обращения к базе данных и будут проходить очень быстро. Если элементов, вошедших в запрос, очень много, первый возов может занять продолжительное время. Особенно это может стать проблемой, если во включаемых элементах присутствует большое количество папок, и СУБД не имеет возможности использования временных функций (к примеру, SQLite). Оригинальный список может содержать элементы разных справочников.
- 1 -- при первом вызове функция создает сортированный буфер, в котором содержатся внутренние коды всех элементов списка и всех папок справочника, входящих в подпапки всех элементов списка. В этом режиме для проверки вхождения элемента в буфер требуется как код самого элемента, так и код папки, в которой он находится, что может создать дополнительный вызов к базе данных, если проверямый элемент не был заполнен. Плюсом такого подхода является сильное ускорение длительного первого вызова, если во включаемых элементах присутствует большое количество папок, и СУБД не имеет возможности использования временных функций (к примеру, SQLite). Оригинальный список должен содержать элементы только одного справочника. Первый вызов в этом режиме может работать несколько дольше вызова в режиме 0, если в список попадает малая часть справочника с небольшим количеством папок, однако, сам справочник содержит очень много папок, в остальных случаях он работает быстрее.
Возвращаемое значение
Возвращает 1, если объект входит в список, 0 если не входит или не является объектом базы данных.
Примеры
//Пример нельзя проверить в рабочей базе данных, как указаны конкретные коды объектов, он используется только для демонстрации //Список содержит два объекта базы данных, один из которых является папкой. a:=List.Create(DB("Ref.Номенклатура","Code","000000003661"),DB("Ref.Номенклатура","Code","000000007561")); //Переменная содержит объект, родительской папкой которого является объект с кодом "000000003661" b:=DB("Ref.Номенклатура","Code","000000003669"); //Выводит "Да" Message(?(a.Contains(b),"Да","Нет"));