Запрос 1С
нельзя в запрос помещать табличную часть как парметр. ты должен воспользоваться менеджером временных таблиц, потом свою табличную часть (точнее таблицу значений) поместить, как временную таблицу. это геморрновато, но схема не сложная. щас не вспомню - на мисте.ру (mista.ru) это подробно описано. поищи там.
http://www.forum.mista.ru/topic.php?id=288564
Каким образом нужно воспользоваться менеджером временных таблиц? Если временную таблицу, как я понял, можно создавать только запросом.
попробуй переписать запрос и подавать ему уже свернутую по номенклатуре тз.
Ну или правда, сначала помести в ВТ а затем другим запросом уже доставай что надо.
http://www.kb.mista.ru/article.php?id=628
//Готовую таблицу значений из памяти можно выгружать в менеджер временных таблиц запроса. //Единственное условие - колонки таблицы значений должны быть типизированными, т.е. иметь тип.
ТЗ=Новый ТаблицаЗначений;
//Колонки должны быть типизированы
ТЗ.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка: Номенклатура";
ТЗ.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число";
//Заполняем таблицу данными
Для Каждого Строка Из СредстваИИнвентарь Цикл
Стр=ТЗ.Добавить;
Стр.Номенклатура=Строка.Номенклатура;
Стр.Количество=Строка.Количество;
Конеццикла
//Загружаем таблицу значений в менеджер временных таблиц запроса
Запрос1=Новый Запрос("Выбрать Т.Номенклатура, Т.Количество ПОМЕСТИТЬ ВТТаб Из &Таб Как Т");
//Вариант: Запрос1=Новый Запрос("Выбрать * ПОМЕСТИТЬ ВТТаб Из &Таб Как Т");
Запрос1.МенеджерВременныхТаблиц=Новый МенеджерВременныхТаблиц;
Запрос1.УстановитьПараметр("Таб",ТЗ);
Запрос1.Выполнить;
//Получаем таблицу из менеджера временных таблиц запроса
ЗапросТМП=Новый Запрос("ВЫБРАТЬ
| ИнвентарьУКлиентовОстатки.КоличествоОстаток КАК Имеется,
| ВложенныйЗапрос.Количество КАК Нужно,
| ВложенныйЗапрос.Номенклатура
|ИЗ
| (ВЫБРАТЬ
| ВТТаб.Номенклатура КАК Номенклатура,
| СУММА(ВТТаб.Количество) КАК Количество
| ИЗ
| ВТТаб
|
| СГРУППИРОВАТЬ ПО
| ВТТаб.Номенклатура) КАК ВложенныйЗапрос
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ИнвентарьУКлиентов.Остатки(&Дата, КлиентСотрудник = &КлиентСотрудник) КАК ИнвентарьУКлиентовОстатки
| ПО ВложенныйЗапрос.Номенклатура = ИнвентарьУКлиентовОстатки.Номенклатура
|ГДЕ
| (ИнвентарьУКлиентовОстатки.Номенклатура ЕСТЬ NULL
| ИЛИ ВложенныйЗапрос.Количество > ИнвентарьУКлиентовОстатки.КоличествоОстаток)");
ЗапросТМП.МенеджерВременныхТаблиц=Запрос1.МенеджерВременныхТаблиц;
ЗапросТМП.УстановитьПараметр("КлиентСотрудник", КлиентСотрудник);
ЗапросТМП.УстановитьПараметр("Дата", Дата);
ЗапросТМП.Выполнить;
Я это видел, пробовал такую конструкцию. До меня только сейчас дошло в чем была моя ошибка, я помещал во временную таблицу не выборку из таблицы-параметра, а выборку из выборки из таблицы-параметра. Спасибо.
Ну да, свернуть таблицу будет эффективнее.
А на сколько нужно использовать временную таблицу? Возможно достаточно просто сделать запрос по табличной части документа, без лишнего гемора?
В смысле на сколько? Судя по ошибке, которую мне выдавал отладчик, то можно только во временную таблицу.
Оставить комментарий
IG_rok777
Выдает ошибку:
Что я делаю не так?