Difference between revisions of "DB.Select"
(Created page with "{{infobox function |name=Select |object=Объект базы данных |caption=Выборка объектов |type=1 |status=2 |db=2 |exception=Ошибка в фи...") |
m (1 revision imported) |
(No difference)
|
Latest revision as of 07:43, 7 February 2021
Select (Выборка объектов) | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Функция инициирует выборку по таблице текущего объекта с учетом указанных фильтров, и возвращает 1, если в выборке есть объекты. Для получения следующего объекта выборки необходимо использовать функцию Next, новый объект помещается в текущий, все изменения в текущем объекте будут утеряны. Выборку можно осуществлять только для объектов типа справочник, документ, журнал. Полученный объект будет загружен. Выборка происходит по порядку сортировки, заданному функцией UseOrder и использует ограничение, заданное функцией UseBorders. При загрузке объекта, работают правила, заданные функцией UseOption. Функция не загружает все объекты, соответствующие фильтру в память сразу, а получает их порциями с сервера, таким образом не затрачивая большое количество памяти даже для объектов, имеющих большие количество реквизитов. Если необходимо еще больше ускорить загрузку и уменьшить потребность в памяти для циклов, для которых не важны реквизиты объекта, или важны только некоторые реквизиты, можно использовать функцию SelectEx.
Синтаксис
DB.Select(<Стандарные фильтры>...):<В выборке есть по крайней мере один элемент (INT)>
Аргументы
<Стандартные фильтры>
- (необязательный аргумент) Стандартные фильтры позиционирования описаны в статье Стандартные фильтры.
Возвращаемое значение
Возвращается 1, если в выборке присутствует по крайней мере один объект, иначе возвращает 0.
Примеры
//Пример производит выборку по подчиненному справочнику ЛицензииКонтрагентов, чтобы найти самую свежую лицензию из диапазона дат НачДата..КонДата. аДата:=0; аЭл:=Ref.ЛицензииКонтрагентов; //Выбрать не удаленные элементы подчиненные элементу зК аЭл.Select("@Parent,@Status",зК,0); аРез:=0; While аЭл.Next() Do If (аЭл.ТипЛицензии<>Enum.ТипыЛицензий.АлкогольнаяРозничная)And(аЭл.ТипЛицензии<>Enum.ТипыЛицензий.АлкогольнаяОптовая) Then Continue; EndIf; If (аЭл.ДатаВыдачиЛицензии<=КонДата)And(аЭл.ДатаНачалаДействияЛицензии<=КонДата)And(аЭл.ДатаОкончанияДействияЛицензии>=НачДата) Then If _Or(аДата=0,аДата<аЭл.ДатаОкончанияДействияЛицензии) Then аДата:=аЭл.ДатаОкончанияДействияЛицензии; //ВАЖНО: результат должен быть копией текущего объекта аЭл, // так как иначе он будет изменен в момент, когда текущий объект аЭл будет загружен заново при выполнении аЭл.Next() аРез:=аЭл.Copy(); EndIf; EndIf; EndDo;