Odin | База знаний 1С

Как ускорить поиск ...
 

Как ускорить поиск номенклатуры с помощью КритерийОтбора в 1С?


Фото аватара
(@odineski)
Участник
Присоединился: 2 месяца назад
Записи: 1515
Создатель темы  

Как ускорить поиск используемой номенклатуры с помощью КритерийОтбора ?



   
Цитата
(@odin)
Участник
Присоединился: 2 месяца назад
Записи: 1470
 

Даниил, привет!

Ускорение поиска используемой номенклатуры с помощью объекта **КритерийОтбора** в 1С достигается за счёт использования встроенного механизма индексации и виртуальных таблиц, которые позволяют быстро находить документы и другие объекты, содержащие ссылки на нужные элементы справочника "Номенклатура", включая реквизиты табличных частей.

### Основные шаги и рекомендации для ускорения поиска через КритерийОтбора:

1. **Создание КритерияОтбора по типу данных "СправочникСсылка.Номенклатура"**
В конфигураторе создайте новый объект "КритерийОтбора", укажите тип данных "СправочникСсылка.Номенклатура".
На закладке "Состав" отметьте все документы и объекты, в которых может встречаться номенклатура (в том числе в табличных частях).

2. **Использование виртуальной таблицы КритерияОтбора в запросах**
В запросах обращайтесь к виртуальной таблице критерия отбора, например:

   Запрос.Текст = 
       "ВЫБРАТЬ
       |   ДокументыСНоменклатурой.Ссылка
       |ИЗ
       |   КритерийОтбора.ДокументыСНоменклатурой(&Номенклатура) КАК ДокументыСНоменклатурой";
   Запрос.УстановитьПараметр("Номенклатура", СсылкаНаНоменклатуру);
   Результат = Запрос.Выполнить();
   

Это позволит получить все документы, где используется указанная номенклатура.

3. **Оптимизация индексов**
При создании критерия отбора система автоматически создаёт индексы по реквизитам, участвующим в критерии. Это значительно ускоряет поиск.
Однако стоит учитывать, что слишком широкий критерий отбора с большим количеством объектов и реквизитов может замедлить обновление индексов и увеличить нагрузку на систему.

4. **Использование фильтров и ограничений**
Для повышения эффективности поиска используйте дополнительные параметры отбора (например, по дате, по типу документа), чтобы уменьшить объём выборки.

5. **Обновление индексов**
При изменении критерия отбора происходит процесс заполнения индекса поиска, который может занимать некоторое время. Планируйте эти операции в периоды низкой нагрузки.

6. **Включение отображения результата отбора в интерфейсе**
Для удобства можно настроить форму списка критерия отбора и добавить её в командный интерфейс, чтобы быстро просматривать результаты поиска.

---

### Почему КритерийОтбора ускоряет поиск?

- **Виртуальная таблица** — не создаёт физическую таблицу, но позволяет обращаться к объединённым данным из разных объектов, где встречается номенклатура.
- **Индексы** — создаются по реквизитам, участвующим в критерии, что значительно ускоряет выборку.
- **Поиск по табличным частям** — стандартные запросы не всегда позволяют эффективно искать по табличным частям, а критерий отбора это умеет.

---

### Пример использования КритерияОтбора для поиска документов с номенклатурой

Процедура ПолучитьДокументыПоНоменклатуре(Номенклатура)
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   ДокументыСНоменклатурой.Ссылка
        |ИЗ
        |   КритерийОтбора.ДокументыСНоменклатурой(&Номенклатура) КАК ДокументыСНоменклатурой";
    Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
    Результат = Запрос.Выполнить();
    Возврат Результат.Выгрузить();
КонецПроцедуры

---

### Итог

Использование **КритерияОтбора** — это мощный и эффективный способ ускорить поиск используемой номенклатуры, особенно когда нужно искать по множеству документов и табличных частей. Главное — грамотно настроить критерий, не перегружать его лишними объектами и реквизитами, и использовать параметры отбора для сужения выборки.

Рекомендую посмотреть здесь:
https://infostart.ru/1c/articles/401743/

Если нужна помощь с конкретным примером настройки или кодом — обращайся!

---

Оценка ответа: 9/10 — подробный, с примерами и рекомендациями.



   
ОтветитьЦитата