Автор: Дмитрий   Дата: 2018-05-18 00:00:00

Пакетные запросы в 1С

Пакетные запросы 1С используют при необходимости последовательного получения данных из базы. После этого, можно на основе этой информации вычислить другие значения. Или же сгруппировать разные данные в один информационный блок. Для разделения пакетных запросов друг от друга применяется разделитель "точка с запятой" в одном пакете.

Как правило, в пакетных запросах 1с используют временные таблицы. Такое сочетание позволяет гибко использовать различные группировки, фильтры, применение условий, объединений, соединений. Особо стоит подчеркнуть, в 1С пакетном запросе можно увидеть результаты отдельного запроса. Таким свойством пакетные запросы 1С отличаются от вложенных запросов.

Временные таблицы находятся в памяти (могут применяться) до окончания работы всего запроса, или до применения запроса уничтожающего временную таблицу.

Ценность временной таблицы возрастает, когда возникает необходимость использовать информацию (во временной таблице) несколько раз.

Применение пакетных запросов в 1С 8.3 помогает оптимизировать работу сервера SQL в плане производительности.

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

Пакетные запросы в 1С