Difference between revisions of "DB.FindEx"

From SunFlurry wiki
Jump to: navigation, search
 
m (1 revision imported)
 
(No difference)

Latest revision as of 08:43, 7 February 2021

  FindEx (Поиск и позиционирование объекта)
Объект:Объект базы данных
Статус разработки: Реализована
Тип:Функция
Обращение к БД:Сервер и БД
Исключения:Невозможно превратить в строку, число, ошибка в фильтрах
Визуальность:Нет

Функция производит поиск и позиционирование на объект текущего вида. Объект идентифицируется с помощью фильтров. Если объект найден, произойдет позиционирование текущего объекта, и полнота загрузки объекта будет определена режимом загрузки, если не найден, текущий объект не будет изменен, если в базе данных найдено более одного объекта, будет позиционирован первый из найденных. При поиске объектов используется порядок сортировки, заданный функцией UseOrder и ограничение, заданное функцией UseBorders. Функцию удобно использовать совместно со сборщиком объектов.

Синтаксис

DB.FindEx(<Режим загрузки (INT)>=0,<Доп. реквизиты при загрузке заголовков (STRING)>="",<Стандарные фильтры>...):<Объект был найден (INT)>

Аргументы

  • <Режим загрузки (INT)> - (необязательный аргумент) Определяет способ (полноту) загрузки найденного объекта (см. Объект базы данных). Аргумент может принимать следующие значения:
    • 0 (по умолчанию) -- производится полная загрузка найденного объекта.
    • 1 -- производится загрузка объекта в режиме только заголовка.
    • 2 -- производится загрузка объекта в режиме частичной загрузки. Второй аргумент используется, как список реквизитов для загрузки.
    • 3 -- найденный объект будет позиционирован, но не будет загружен
  • <Доп. реквизиты при загрузке заголовков (STRING)> - (необязательный аргумент) Список наименований дополнительных реквизитов при загрузке объекта в режиме частичной загрузки (2).
  • <Стандартные фильтры> - (необязательный аргумент) Стандартные фильтры позиционирования описаны в статье Стандартные фильтры.

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

Возвращается 1, если объект был найден, иначе возвращает 0 и состояние объекта не будет изменено.

Примеры

//Подготовка списка элементов справочника Номенклатура, которая будет использоваться в запросе, где нет необходимости в загруженных объектах
//Ссылки на элементы располагаются в текстовом файле, объекты находятся по реквизиту Code
Сп:=List.Create();
For i:=1 To Т.Size() Do
  Form.StatusText("Подготовка "+i+" из "+Т.Size());
  Стр:=Т.GetLine(i);
  If Trim(Стр)="" Then
    Continue;
  EndIf;
  аТМЦ:=Ref.тмцНоменклатура;
  //Загрузка происходит гораздо быстрее, так как нет необходимости в загрузке объекта
  If аТМЦ.FindEx(3,,"Code",Стр)=0 Then
    Message("Не найдена номенклатура с кодом "+Стр+"!","!");
    Exit;
  EndIf;
  If Сп.Find(аТМЦ)=0 Then
    Сп.Add(аТМЦ);
  EndIf;
EndDo;  
...
//Далее можно использовать Сп в запросе


//Пример демонстрирует кусок кода из цикла, где происходит поиск и загрузка элементов справочника СортаХарактеристики по реквизиту Code
//Совместно с FindEx работает объект ObjC, являющийся Сборщиком объектов
//Конструкция позволяет пропускать уже загруженные ранее элементы СортаХарактеристики, что ускоряет загрузку, когда цикл оперирует большим количеством одинаковых элементов СортаХарактеристики
//Вместо сборщика объектов можно также использовать сортированный список с наименованиями -- значениями реквизита Code
While ... Do
  //Подготовка кода поиска СтрЗнач
  ...
  aEl:=Ref.СортаХарактеристики;
  If not aEl.FindEx(3,,"Code",СтрЗнач) Then
    Message("Ошибка при поиске кода "+СтрЗнач+"!");
    Break;
  EndIf;
  aEl:=ObjC.Get(aEl);
  //aEl -- загруженный объект, который можно использовать в дальнейшем
  ...
EndDo;