|
Поиск по артикулу по коду или произвольный запрос ? | ☑ | ||
---|---|---|---|---|
0
r1000
13.04.23
✎
10:13
|
Есть обработка загрузки цен от поставщика. Код поставщика сейчас сделан доп.реквизитом номенклатуры.
соответственно при загрузке поиск элемента выполняется таким запросом: Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | НоменклатураДополнительныеРеквизиты.Ссылка КАК Ссылка |ИЗ | Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты |ГДЕ | НоменклатураДополнительныеРеквизиты.Свойство = &СвойствоКод | И НоменклатураДополнительныеРеквизиты.Значение = &КодПоставщика"; Запрос.УстановитьПараметр("КодПоставщика", КодПоставщика); Запрос.УстановитьПараметр("СвойствоКод", ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", "КодНоменклатурыФактум_dd991e61e7784241998ae778c4944c8a")); РезультатЗапроса = Запрос.Выполнить(); Смущает то, что запрос выполняется долго. Когда в файле 30 тыс строк - на этой операции тратиться основное время. Вопрос: если код поставщика перенести в артикул элемента номенклатуры, или даже в код номенклатуры и искать НайтиПоРеквизиту() или НайтиПоКоду() это будет быстрей ? |
|||
1
magicSan
13.04.23
✎
10:16
|
(0) нахрена делать запрос дял каждой строчки?
|
|||
2
Прапорщик
13.04.23
✎
11:09
|
(1) +1
(0) У вас запрос в цикле. Вариантов ускорения немного. И все сводятся к уходу от запроса в цикле. Первый. Полностью переписать обработку, отказавшись от построчного перебора. Второй. Оставить построчный перебор, но поиск в допреквизитах делать не внутри цикла, а перед его выполнением. Выгрузить из таблицы в массив колонку со значением кода поставщика. Сделать запрос.
Далее либо выгрузить результат запроса в таблицу значений (можно проиндексировать её по полю "КодПоставщика") и внутри цикла искать номенклатуру в этой таблице. Либо в самом запросе поместить результат во временную таблицу и использовать её как источник для запросов внутри цикла. Вариант с переносом кода поставщика в артикул элемента номенклатуры или в код номенклатуры я бы рассматривать не стал. По целому ряду причин. Во-первых, ускорится то оно ускорится, но не факт, что сильно. Во-вторых, эти поля могут понадобиться вам самим. Даже если сегодня они вам не нужны и пользователи мамой клянутся, что никогда в жизни не понадобятся. Во-третьих, никто не даст гарантии, что завтра у вас появится множество поставщиков и надо будет хранить коды для каждого. Кстати в этом плане идея с хранением в допреквизитах - не лучшая. В-четвёртых, в любой момент может появиться соотношение один ко многим, когда одна номенклатура в вашем справочнике соответствует нескольким номенклатурам поставщика (часто встречается, когда детализация учёта номенклатуры по характеристикам различна - поставщик делит номенклатуру по размерам/цветам/материалам/... на разные позиции, а у вас это всё одна номенклатура с разными характеристиками, или наоборот). В двух последних случаях (множество поставщиков и соотношение один ко многим) можно различными путями проблему обойти, оставив хранение кода в допреквизитах. Но если код поставщика в артикуле или в коде элемента, то придётся связываться с переносом этих данных оттуда. |
|||
3
mikecool
13.04.23
✎
11:13
|
(0) все будет быстрее, если ты ищешь по индексируемому полю и ессно не в цикле
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |