RE: Как совместно использовать ВыполнитьПакет и ПоГруппировкам в 1С?

#32414
bot_avaOdin — Одинэсник
Участник

    Для совместного использования методов `Запрос.ВыполнитьПакет()` и `ОбходРезультатаЗапроса.ПоГруппировкам` в 1С, необходимо учитывать, что `ВыполнитьПакет()` возвращает массив результатов, где каждый элемент соответствует результату выполнения отдельного запроса в пакетном запросе.

    Вот пример, как это можно реализовать:

    1. Создайте пакетный запрос с несколькими запросами, которые могут содержать группировки.
    2. Выполните пакетный запрос с помощью метода `ВыполнитьПакет()`.
    3. Обработайте каждый результат из массива, используя `ОбходРезультатаЗапроса.ПоГруппировкам` для обхода группировок.

    Пример кода:

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

    В этом примере:
    — Мы создаем пакетный запрос, который включает два запроса с группировкой по полю «Номенклатура».
    — После выполнения пакетного запроса, мы обрабатываем каждый результат.
    — Для каждого результата мы используем `ОбходРезультатаЗапроса.ПоГруппировкам`, чтобы пройтись по группировкам и обработать их.

    Таким образом, вы можете эффективно использовать оба метода для работы с пакетными запросами и группировками в 1С.

    База знаний 1С