|   |   | 
| 
 | Поиск по артикулу по коду или произвольный запрос ? | ☑ | ||
|---|---|---|---|---|
| 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) все будет быстрее, если ты ищешь по индексируемому полю и ессно не в цикле     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |