Код-ревью Middle Производительность обновлено
Ревью кода заполнения таблицы
Вопрос
Код заполняет таблицу для печатной формы. Найдите проблемы производительности.
Для Каждого Строка Из Документ.Товары Цикл
ОбъектНоменклатуры = Строка.Номенклатура.ПолучитьОбъект();
НоваяСтрока = Таблица.Добавить();
НоваяСтрока.Наименование = ОбъектНоменклатуры.НаименованиеПолное;
НоваяСтрока.Единица = Строка.Номенклатура.ЕдиницаИзмерения.Наименование;
НоваяСтрока.Страна = Справочники.Страны.НайтиПоНаименованию(Строка.Номенклатура.СтранаТекстом);
НоваяСтрока.Остаток = ПолучитьОстаток(Строка.Номенклатура);
КонецЦикла;
Коротко
Всё, что делается в цикле, заменяется одним пакетным запросом: табличная часть документа соединяется с номенклатурой, единицами, странами и остатками, и результат выгружается в таблицу.
Что должен найти ревьюер
- Производительностьстрока 2ПолучитьОбъект() для чтения: загружает весь объект с табличными частями на каждую строку.
- Производительностьстрока 5Двойное обращение через точку: читаются объекты номенклатуры и единицы измерения на каждой строке.
- Производительностьстрока 6Поиск по наименованию в цикле: медленный и ненадёжный, данные лучше получить запросом или по ссылке.
- Производительностьстрока 7Функция ПолучитьОстаток, вероятно, делает запрос в цикле: остатки всех товаров нужно получить одним запросом.
Разбор
Всё, что делается в цикле, заменяется одним пакетным запросом: табличная часть документа соединяется с номенклатурой, единицами, странами и остатками, и результат выгружается в таблицу.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.