Часто совершаемая ошибка новичками, цикл в запросе. Потому то это просто и делается на автомате. Но это замедляет скорость выполнения кода. Как правильно делать запрос не в цикле.
Для каждого Cтрока Из ТЧ Цикл Запрос = Новый Запрос; Запрос.УстановитьПараметр("ДатаДокумента", Новый Граница(Новый МоментВремени(Дата, Ссылка), ВидГраницы.Включая)); Запрос.УстановитьПараметр("ОбъектыПроката", Строка.Номенклатура); Запрос.Текст = "ВЫБРАТЬ | ОстатокОбъектовОстатки.ОбъектыПроката |ИЗ | РегистрНакопления.ОстатокОбъектов.Остатки(&ДатаДокумента, | ОбъектыПроката = &ОбъектыПроката) КАК ОстатокОбъектовОстатки"; КонецЦикла;
1 без запроса в Цикле
Массив = Новый Массив; // Или создаем массив в цикле Для каждого Строка Из ТЧ Цикл Массив.Добавить(Строка.Номенклатура); КонецЦикла; // Или выгружаем колонку ТЧ в массив Массив = ТЧ.ВыгрузитьКолонку("Номенклатура"); Запрос = Новый Запрос; Запрос.УстановитьПараметр("ДатаДокумента", Новый Граница(Новый МоментВремени(Дата, Ссылка), ВидГраницы.Включая)); Запрос.УстановитьПараметр("ОбъектыПроката", Массив.Номенклатура); Запрос.Текст = "ВЫБРАТЬ | ОстатокОбъектовОстатки.ОбъектыПроката |ИЗ | РегистрНакопления.ОстатокОбъектов.Остатки(&ДатаДокумента, | ОбъектыПроката В (&ОбъектыПроката)) КАК ОстатокОбъектовОстатки |";
2 без запроса в Цикле
Запрос = Новый Запрос; Запрос.УстановитьПараметр("ДатаДокумента", Новый Граница(Новый МоментВремени(Дата, Ссылка), ВидГраницы.Включая)); Запрос.УстановитьПараметр("ОбъектыПроката", Строка.Номенклатура); Запрос.УстановитьПараметр("Ссылка", Ссылка); Запрос.Текст = "ВЫБРАТЬ | ПриходнаяТЧ.Номенклатура КАК Номенклатура |ПОМЕСТИТЬ ДокТЧ |ИЗ | Документ.Приходная.ТЧ КАК ПриходнаяТЧ |ГДЕ | ПриходнаяТЧ.Ссылка = &Ссылка |; | |//////////////////////////////////////////////////////////// | |ВЫБРАТЬ | ОстатокОбъектовОстатки.ОбъектыПроката |ИЗ | РегистрНакопления.ОстатокОбъектов.Остатки(&ДатаДокумента, | ОбъектыПроката В (ВЫБРАТЬ ДокТЧ.Номенклатура | ИЗ ДокТЧ )) КАК ОстатокОбъектовОстатки |";
Комментариев нет:
Отправить комментарий