Код-ревью Middle Производительность обновлено

Ревью кода заполнения таблицы

Вопрос

Код заполняет таблицу для печатной формы. Найдите проблемы производительности.

Для Каждого Строка Из Документ.Товары Цикл
	ОбъектНоменклатуры = Строка.Номенклатура.ПолучитьОбъект();
	НоваяСтрока = Таблица.Добавить();
	НоваяСтрока.Наименование = ОбъектНоменклатуры.НаименованиеПолное;
	НоваяСтрока.Единица = Строка.Номенклатура.ЕдиницаИзмерения.Наименование;
	НоваяСтрока.Страна = Справочники.Страны.НайтиПоНаименованию(Строка.Номенклатура.СтранаТекстом);
	НоваяСтрока.Остаток = ПолучитьОстаток(Строка.Номенклатура);
КонецЦикла;

Коротко

Всё, что делается в цикле, заменяется одним пакетным запросом: табличная часть документа соединяется с номенклатурой, единицами, странами и остатками, и результат выгружается в таблицу.

Что должен найти ревьюер

  1. Производительностьстрока 2
    ПолучитьОбъект() для чтения: загружает весь объект с табличными частями на каждую строку.
  2. Производительностьстрока 5
    Двойное обращение через точку: читаются объекты номенклатуры и единицы измерения на каждой строке.
  3. Производительностьстрока 6
    Поиск по наименованию в цикле: медленный и ненадёжный, данные лучше получить запросом или по ссылке.
  4. Производительностьстрока 7
    Функция ПолучитьОстаток, вероятно, делает запрос в цикле: остатки всех товаров нужно получить одним запросом.

Разбор

Всё, что делается в цикле, заменяется одним пакетным запросом: табличная часть документа соединяется с номенклатурой, единицами, странами и остатками, и результат выгружается в таблицу.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме