Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
18 сен 2021, 01:55

Второй запрос по результату первого

Автор NIL, 05 фев 2017, 01:17

0 Пользователей и 1 гость просматривают эту тему.

NIL

1С:Предприятие 8.3 Управление торговлей 11.2
     Подскажите пожалуйста уважаемые знатоки как сделать так чтобы результат первого запроса был условием для второго без выполнения. Условие второго запроса это массив. Почему именно так нужно потому что на форме есть возможность выбора списка значений групп доступа, но при создании на сервере или очистке списка значений групп доступа нет и второй запрос не работает.
    Эта часть кода работает когда группы доступа не выбраны.
Схема работы: 1 запрос - выбирает все группы доступа;
                          2 запрос - выбирает номенклатуру и дополнительные данные по этим группам доступа.
Вопрос как это все можно оформить по другому без выгрузки первого запроса. Я видел есть двойные запросы с несколькими пакетами запросов может как то можно их скрутить вместе ? Никак не пойму как это сделать
Код: Вот что я на шкодил

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

Tyts

Используй Временные таблицы в запросе.

LexaK

в данном случае не надо использовать временные таблицы, сам справочник уже является таблицей с данными!
просто свяжите в запросе товары.группа со справочником по внутреннему соединению.
вот ваш пример, первый вариант

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


похоже что вы просто обрабатываете товар у которого назначена/заполнена группа доступа,
ее еще можно проверить по коду на Null, без всяких соединений (это второй вариант)
и т.д.

         |Где
         |...
         |   И Не ЗаказКлиентаТовары.Номенклатура.ГруппаДоступа.Код Есть Null

ответ Понравился? (в смысле пригодился?)

NIL

    Списобо LexaK да что-то я не сообразил справочник и есть источник данных. По поводу ГруппДоступа, то в обработке имеется возможность выбрать в список значений интересующие группы доступа пользователю ну и соответственно если пользователь не выбрал ни одну группу, то выбираются все такая задумка.
    Но интересовала сама возможность передачи данных из запроса в запрос без выборки, так как не первый раз сталкиваюсь с этой проблемой.
    Тут Tyts подсказал про ВременныеТаблицы, но не обьяснил и на том спасибо.
П.С. Всем кто ответил Спасибо жмакал.

Теги: Запрос пакеты 

Похожие темы (5)

Рейтинг@Mail.ru Rambler's Top100

Поиск