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

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

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

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

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

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

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