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

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Как в 1С использовать данные из последнего запроса в цикле?

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #31838
      Телеграм группа https://t.me/odineskiOdineski
      Участник

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

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

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

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

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

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

      Просмотр 1 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С