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

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

    Привет, Богдан!

    Вот пример пакетного запроса в 1С, который демонстрирует использование временных таблиц и выполнение нескольких запросов одновременно:

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

    В этом примере:
    1. Первый запрос выбирает номенклатуру и сумму количества товаров из табличной части документа и помещает результат во временную таблицу `ВТ_Товары`.
    2. Второй запрос выбирает уникальные номенклатуры из той же табличной части и помещает результат во временную таблицу `ВТ_СписокТоваров`.
    3. Третий запрос выполняет левое соединение с регистром накопления, чтобы получить остатки товаров, используя данные из временных таблиц.

    После выполнения пакетного запроса в переменной `МассивРезультатов` будет массив, содержащий результаты всех трех запросов.

    Рекомендую посмотреть здесь: https://helpf.pro/faq/view/926.html

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