DB.Select

From SunFlurry wiki
Jump to: navigation, search
  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;