Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
28 мар 2024, 11:59

Оптимизация кода

Автор Natain14, 31 мар 2016, 09:18

0 Пользователей и 1 гость просматривают эту тему.

Natain14

Добрый день, подскажите, пожалуйста, как работает метод "Найти" для таблицы значений?
Вопрос связан с тем, что в таблице, например 50 000 строк. Использование этого метода сильно затормозит систему?

vitasw


Natain14

Т.е.
Для каждого Строка из Таб цикл
Данные =ТаблицаОпераций.Найти(Таб.ИдентификаторОперации,"ИдентификаторОперации")
Конеццикла;

будет работать медленнее,чем запрос в цикле даже если колонка ИдентификаторОперации добавлена в индекс??:

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

vitasw

Щас руки побрубаю по самые уши за такой код. ui;;t;
В качестве примера:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТЗВнешняя.Номенклатура,
| ТЗВнешняя.Количество
|ПОМЕСТИТЬ втТЗ
|ИЗ
| &ТЗВнешняя КАК ТЗВнешняя
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| втТЗ.Номенклатура,
| втТЗ.Количество,
| ЦеныНоменклатурыСрезПоследних.Цена
|ИЗ
| втТЗ КАК втТЗ
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
| ПО втТЗ.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура";

Запрос.УстановитьПараметр("ТЗВнешняя",ТЗ);

Результат = Запрос.Выполнить();

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск