понедельник, 8 января 2018 г.

Запрос НЕ в цикле


Часто совершаемая ошибка новичками, цикл в запросе. Потому то это просто и делается на автомате. Но это замедляет скорость выполнения кода. Как правильно делать запрос не в цикле.
Имеем

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

1 без запроса в Цикле

Массив = Новый Массив;

// Или создаем массив в цикле
Для каждого Строка Из ТЧ Цикл
   Массив.Добавить(Строка.Номенклатура);
КонецЦикла;

// Или выгружаем колонку ТЧ в массив
Массив = ТЧ.ВыгрузитьКолонку("Номенклатура");

Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ДатаДокумента",
   Новый Граница(Новый МоментВремени(Дата, Ссылка), ВидГраницы.Включая));
Запрос.УстановитьПараметр("ОбъектыПроката", Массив.Номенклатура);

Запрос.Текст = "ВЫБРАТЬ
|  ОстатокОбъектовОстатки.ОбъектыПроката
|ИЗ
|  РегистрНакопления.ОстатокОбъектов.Остатки(&ДатаДокумента,
|    ОбъектыПроката В (&ОбъектыПроката)) КАК ОстатокОбъектовОстатки
|";

2 без запроса в Цикле

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

Комментариев нет:

Отправить комментарий

Печать чека ККМ из драйвера ККМ

Суть проблемы: Пробиваем чек из 1С: Бухгалтерии. Чек пробит не  правильно. Теперь нужно сделать чек коррекции. Но в программе это сделать н...