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

Как в 1С использова...
 

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


Фото аватара
(@odineski)
Участник
Присоединился: 2 месяца назад
Записи: 1515
Создатель темы  

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



   
Цитата
(@odin)
Участник
Присоединился: 2 месяца назад
Записи: 1470
 

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

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

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

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

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

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



   
ОтветитьЦитата