{jcomments on}
Можно ли использовать таблицу значений в запросе? Можно. Правда, при соблюдении некоторых правил.
Правило первое: таблица значений должна быть типизированной. То есть для значений в таблице значений необходимо указать тип с помощью метода ОписаниеТипов.
Выглядит это примерно так:
// Если значение в таблице значений нескольких типов: МассивОписанияТипов = Новый Массив; МассивОписанияТипов.Добавить(Тип("ДокументСсылка.АктВыполненныхРабот")); МассивОписанияТипов.Добавить(Тип("ДокументСсылка.РеализацияТоваровУслуг"));
ОписаниеТиповОтмеченныеДокументы = Новый ОписаниеТипов(МассивОписанияТипов);
// Когда тип значения один, то можно обойтись без массива:
ОписаниеТиповЗаказКлиента = Новый ОписаниеТипов("ДокументСсылка.ЗаказКлиента");
Создаём таблицу значений:
СписокДокументов = Новый ТаблицаЗначений; СписокДокументов.Колонки.Добавить("ДокументРеализации", ОписаниеТиповОтмеченныеДокументы, "ДокументРеализации"); СписокДокументов.Колонки.Добавить("ЗаказКлиента", ОписаниеТиповЗаказКлиента, "ЗаказКлиента"); // Заполняем таблицу значений, например, в цикле. НовСтрока = СписокДокументов.Добавить();
Правило второе: Таблицу значений в запросе нужно помещать во временную таблицу. Делаем это с помощью параметра, в который и передаём нашу таблицу значений.
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | СписокДокументов.ЗаказКлиента КАК ЗаказКлиента, | СписокДокументов.ДокументРеализации |ПОМЕСТИТЬ ВТСписокДокументов |ИЗ | &СписокДокументов КАК СписокДокументов | |ИНДЕКСИРОВАТЬ ПО | ЗаказКлиента |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВТСписокДокументов.ЗаказКлиента КАК ЗаказКлиента, | АктВыполненныхРабот.Ссылка КАК ДокументРеализации |ИЗ | ВТСписокДокументов КАК ВТСписокДокументов | ЛЕВОЕ СОЕДИНЕНИЕ Документ.АктВыполненныхРабот КАК АктВыполненныхРабот | ..."; Запрос.УстановитьПараметр("СписокДокументов", СписокДокументов);
Вот такой нехитрый приём.