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