Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Меркулова_Пособие_РазработкаУправляемыхПриложен...doc
Скачиваний:
15
Добавлен:
01.07.2025
Размер:
18 Мб
Скачать
☆

6.2.10. Пакетные запросы

Для более удобной работы с временными таблицами в языке запросов поддерживается работа с пакетными запросами - таким образом, создание временной таблицы и ее использование помещаются в один запрос. Пакетный запрос представляет собой последовательность запросов, разделенных символом ";". Запросы исполняются один за другим. Результатом выполнения пакетного запроса в зависимости от используемого метода будет являться либо результат, возвращаемый последним запросом пакета, либо массив результатов всех запросов пакета в той последовательности, в которой следуют запросы в пакете.

Выбрать

СвободныеОстатки.Свободно,

Номенклатура.Наименование

ПОМЕСТИТЬ ОстаткиНоменклатуры

Из

РегистрНакопления.СвободныеОстатки как СвободныеОстатки

Левое соединение Справочсник.Номенклатура как Номенклатура

По СвободныеОстатки.Номенклатура = Номенклатура.Ссылка

;

////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Выбрать

ОстаткиНоменклатуры.Номенклатура,

ОстаткиНоменклатуры.СвободноОстаток,

Заказы.ЗаказКлиента как ЗаказКлиента,

Заказы.КоличествоОстаток как КоличествоОстаток

Из

ОстаткиНоменклатуры Как ОстаткиНоменклатуры

Левое соединение РегистрНакопления.ЗаказыЛлиентов.Остатки как Заказы

ПО ОстаткиНоменклатуры.Номенклатура=Заказы.Номенклатура

6.2.10А Таблица значений как источник данных для запроса

Для использования ТЗ в мка

6.2.11. Обработка результатов запроса Получение и проверка результата запроса

Запрос = Новый Запрос;

ТекстЗапроса = "ВЫБРАТЬ * ИЗ Справочник.Сотрудники";

Запрос.Текст = ТекстЗапроса;

РезультатЗапроса = 3апрос.Выполнить ();

Если НЕ Результат.Пустой() Тогда

ВыборкаИзРезультатаЗапроса = Результат.Выбрать();

КонецЕсли

Выборка из результата запроса

Обход выборки может быть линейный, иерархический или по группировкам

Запрос:

ВЫБРАТЬ Номенклатура, Количество

ИЗ Документ.РасходнаяНакладная.Состав

УПОРЯДОЧИТЬ ПО Номенклатура

ИТОГИ СУММА(Количество) ПО Номенклатура, номенклатура Иерархия

1) линейная выборка:

Выборка = РезультатЗапроса.Выбрать();

Выборка = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.Прямой);

Пока Выборка.Следующий() Цикл

Сообщить(Выборка.Номенклатура);

КонецЦикла;

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

2) Иерархический обход:

ОбходРезультатаЗапроса.ПоГруппировкамСИерархией:

СпособВыборки = ОбходРезультатаЗапроса.ПоГруппировкамСИерархией;

Выборка = РезультатЗапроса.Выбрать(СпособВыборки);

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

ОбходРезультатаЗапроса.ПоГруппировкамСИерархией;

Выборка = Запрос.Выполнить().Выбрать(СпособВыборки);

Пока Выборка.Следующий() Цикл

// обработка верхнего уровня иерархии записей

Выборка1=Выборка. Выбрать(СпособВыборки);

Пока Выборка1.Следующий() Цикл

// обработка второго уровня иерархии записей

и т.д.

3) Обход по группировкам

СпособВыборки = ОбходРезультатаЗапроса.ПоГруппировкам;

Выборка = РезультатЗапроса.Выбрать(СпособВыборки);

Пока Выборка.Следующий() Цикл

//получим записи –все группы

Сообщить("Группа товаров: " + СокрЛП(Выборка.Наименование) + "Количество: " + СокрЛП(Выборка.Количество));

//выберем дочерние (все прочие ) записи линейным способом

ВыборкаДочерних = Выборка.Выбрать();

Пока ВыборкаДочерних.Следующий() Цикл

Сообщить(" Товар: " + СокрЛП(Выборка.Наименование) + " Количество: " + СокрЛП(Выборка.Количество));

КонецЦикла;

КонецЦикла;