DB.FindEx
| 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;