Запрос 1С

IG_rok777

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

Выдает ошибку:
Содержимое объекта данных может быть выбрано только во временную таблицу

Что я делаю не так?

UAV27

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

IG_rok777

Как раз миста говорит обратное:
http://www.forum.mista.ru/topic.php?id=288564
Каким образом нужно воспользоваться менеджером временных таблиц? Если временную таблицу, как я понял, можно создавать только запросом.

Alena_08_11

Ну вообще по идее ТЗ типизированную в запросе можно так юзать. Мб ему не нравится группировка ?
попробуй переписать запрос и подавать ему уже свернутую по номенклатуре тз.
Ну или правда, сначала помести в ВТ а затем другим запросом уже доставай что надо.

UAV27

чуть-чуть поискать не бывает?
http://www.kb.mista.ru/article.php?id=628

//Готовую таблицу значений из памяти можно выгружать в менеджер временных таблиц запроса. //Единственное условие - колонки таблицы значений должны быть типизированными, т.е. иметь тип.
ТЗ=Новый ТаблицаЗначений;
//Колонки должны быть типизированы
ТЗ.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка: Номенклатура";
ТЗ.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число";

//Заполняем таблицу данными
Для Каждого Строка Из СредстваИИнвентарь Цикл
Стр=ТЗ.Добавить;
Стр.Номенклатура=Строка.Номенклатура;
Стр.Количество=Строка.Количество;
Конеццикла

//Загружаем таблицу значений в менеджер временных таблиц запроса
Запрос1=Новый Запрос("Выбрать Т.Номенклатура, Т.Количество ПОМЕСТИТЬ ВТТаб Из &Таб Как Т");
//Вариант: Запрос1=Новый Запрос("Выбрать * ПОМЕСТИТЬ ВТТаб Из &Таб Как Т");
Запрос1.МенеджерВременныхТаблиц=Новый МенеджерВременныхТаблиц;
Запрос1.УстановитьПараметр("Таб",ТЗ);
Запрос1.Выполнить;

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

IG_rok777

Я это видел, пробовал такую конструкцию. До меня только сейчас дошло в чем была моя ошибка, я помещал во временную таблицу не выборку из таблицы-параметра, а выборку из выборки из таблицы-параметра. Спасибо.

IG_rok777

Ну да, свернуть таблицу будет эффективнее.

peter1dav

А на сколько нужно использовать временную таблицу? Возможно достаточно просто сделать запрос по табличной части документа, без лишнего гемора?

IG_rok777

В смысле на сколько? Судя по ошибке, которую мне выдавал отладчик, то можно только во временную таблицу.
Оставить комментарий
Имя или ник:
Комментарий: