При разработке отчетов или обработок на платформе 1С перед нами часто встает задача фильтрации данных. Например, нам нужно отобрать обороты продаж по определенному ВидуНоменклатуры. Новички часто пытаются использовать оператор ЗНАЧЕНИЕ или жестко прописывать наименования в тексте запроса. Давайте разберем, почему эти методы являются ошибочными и как сделать правильно.
Часто возникает желание написать условие вида ГДЕ ВидНоменклатуры.Наименование = \"Товары\". Это крайне плохая практика по нескольким причинам:
ПОДОБНО, выполняется значительно медленнее, чем поиск по ссылке, так как СУБД не может эффективно использовать индексы.В профессиональной разработке 1С использование параметров запроса является единственно верным путем. Параметр — это «место» в запросе, которое заполняется значением на этапе исполнения кода, а не в самом тексте запроса. Рассмотрим, как это выглядит на практике.
Вместо попыток «вшить» наименование в запрос, мы передаем туда уже найденную Ссылку на нужный элемент справочника. Процесс состоит из двух шагов:
Справочники.ВидыНоменклатуры.НайтиПоНаименованию(\"Товары\")).Ссылка в запрос через метод УстановитьПараметр().Рассмотрим пример правильного кода:
// В модуле объекта или менеджера
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПродажиОбороты.Номенклатура
|ИЗ
| РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты
|ГДЕ
| ПродажиОбороты.Номенклатура.ВидНоменклатуры = &ВидНоменклатуры";
// Получаем ссылку на объект
ВидНоменклатурыСсылка = Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Товары");
// Передаем ссылку в запрос через параметр
Запрос.УстановитьПараметр("ВидНоменклатуры", ВидНоменклатурыСсылка);
Результат = Запрос.Выполнить();
Рассмотрим подробнее, почему этот метод считается эталонным:
Часто возникают вопросы при работе с Системой Компоновки Данных (СКД). Помните, что СКД управляет параметрами автоматически через настройки. Если вы пытаетесь «перехватить» управление параметрами в коде, когда они уже определены в схеме, это может привести к конфликтам.
Для сложных задач используйте Временные таблицы. Разделение запроса на этапы с помощью Поместить позволяет СУБД лучше оптимизировать выполнение. Использование параметров внутри запросов к временным таблицам ничем не отличается от обычных запросов — это стандартный и эффективный способ передачи данных.
Подводя итог: избегайте поиска объектов по наименованию и «захардкоженных» строк. Всегда оперируйте ссылками и передавайте их в запросы с помощью параметров. Это сделает ваш код профессиональным, быстрым и легко поддерживаемым.