• Начало
  • Поиск
    •  

Автор Тема: Пакетные запросы  (Прочитано 1511 раз)

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

Оффлайн WKBAPKA

  • Администратор
  • Новичок
  • *****
  • Сообщений: 24
  • Карма: +0/-0
  • Пол: Мужской
    • Внедренческий центр "КУБиК"
Пакетные запросы
« : 04 Мая 2012, 18:15:40 »
1С:Предприятие 8 позволяет использовать такое понятие, как пакетные запросы. Пакетные запросы иногда очень удобно использовать в некоторых случаях. Иногда возникает необходимость в пакете выполнить несколько однотипных запросов, но с разными условиями. В документации описан некий метод ВыполнитьПакет() который возвращает массив результатов. Однако, в документации нигде не описано, что в этом случае нет никакой необходимости создавать менеджер временных таблиц, хотя это и логично.
Приведу пример:
Запрос.Текст = "ВЫБРАТЬ
               | ТехническиеЗадания.Ссылка КАК Ссылка,
               | ТехническиеЗадания.ОповещениеОбОбновлении,
               | ТехническиеЗадания.Исполнитель
   //|ПОМЕСТИТЬ ЗадачиИсполнителю
               |ИЗ
               | Задача.ТехническиеЗадания КАК ТехническиеЗадания
               |ГДЕ
               | ТехническиеЗадания.ОповещениеОбОбновлении = ЛОЖЬ
               | И ТехническиеЗадания.ПометкаУдаления = ЛОЖЬ
               | И ТехническиеЗадания.Исполнитель = &ТекПользователь
               |;
               |
               |////////////////////////////////////////////////////////////////////////////////
               |ВЫБРАТЬ
               | ТехническиеЗадания.Ссылка КАК Ссылка,
               | ТехническиеЗадания.Ссылка.Исполнитель,
               | ТехническиеЗадания.Ссылка.Заявитель
   //|ПОМЕСТИТЬ КомментарииИсполнителю
               |ИЗ
               | Задача.ТехническиеЗадания.Комментарии КАК ТехническиеЗадания
               |ГДЕ
               | ТехническиеЗадания.Ссылка.ОповещениеОбОбновлении = ЛОЖЬ
               | И ТехническиеЗадания.Ссылка.Заявитель = &ТекПользователь
               | И ТехническиеЗадания.Ссылка.ПометкаУдаления = ЛОЖЬ
               | И ТехническиеЗадания.Пользователь = ТехническиеЗадания.Ссылка.Исполнитель
               | И ТехническиеЗадания.Оповещение = ИСТИНА
               |;
               |
               |////////////////////////////////////////////////////////////////////////////////
               |ВЫБРАТЬ
               | ТехническиеЗадания.Ссылка КАК Ссылка,
               | ТехническиеЗадания.Ссылка.Исполнитель,
               | ТехническиеЗадания.Ссылка.Заявитель
   //|ПОМЕСТИТЬ КомментарииЗаявителю
               |ИЗ
               | Задача.ТехническиеЗадания.Комментарии КАК ТехническиеЗадания
               |ГДЕ
               | ТехническиеЗадания.Ссылка.ОповещениеОбОбновлении = ЛОЖЬ
               | И ТехническиеЗадания.Ссылка.Исполнитель = &ТекПользователь
               | И ТехническиеЗадания.Ссылка.ПометкаУдаления = ЛОЖЬ
               | И ТехническиеЗадания.Пользователь = ТехническиеЗадания.Ссылка.Заявитель
               | И ТехническиеЗадания.Оповещение = ИСТИНА
               |;
               |
               |////////////////////////////////////////////////////////////////////////////////
               |ВЫБРАТЬ
               | ТехническиеЗадания.Ссылка КАК Ссылка,
               | ТехническиеЗадания.ОповещениеОбОбновлении,
               | ТехническиеЗадания.Исполнитель
   //|ПОМЕСТИТЬ ЗадачиОповещение
               |ИЗ
               | Задача.ТехническиеЗадания КАК ТехническиеЗадания
               |ГДЕ
               | ТехническиеЗадания.ОповещениеОбОбновлении = ИСТИНА
               | И ТехническиеЗадания.Исполнитель В(&ПользовательГруппы)
               | И ТехническиеЗадания.ПометкаУдаления = ЛОЖЬ
               | И ТехническиеЗадания.СрокДействияОповещения >= &ТекДата";

Запрос.УстановитьПараметр("ТекПользователь" , ВыбПользователь);
Запрос.УстановитьПараметр("ТекДата" , КонецДня(ТекущаяДата()));
Запрос.УстановитьПараметр("ПользовательГруппы"  , ВернутьПользователяГруппы(ВыбПользователь));

МассивРезультатов = Запрос.ВыполнитьПакет();
Если МассивРезультатов.Количество() = 0 Тогда
Возврат;
КонецЕсли;

Для инд = 1 По МассивРезультатов.Количество() Цикл
РезультатЗапроса = МассивРезультатов[инд-1];



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