Как передать таблицу значений в запрос


Часто бывает необходимость передать в запрос в качестве параметра таблицу значений. Осуществляется это с помощью метода Запрос.МенеджерВременныхТаблиц. Поясню это на конкретном примере загрузки данных из электронных накладных. В качестве данных для поиска выступают штрихкоды.

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

//Создаем таблицу значений

ТаблицаДанных = Новый ТаблицаЗначений;
ТаблицаДанных.Колонки.Добавить("Штрихкод", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(200)));
ТаблицаДанных.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число"));
ТаблицаДанных.Колонки.Добавить("Цена", Новый ОписаниеТипов("Число"));


//Затем заполняем значения таблицы через метод ТаблицаЗначений.Добавить()

После заполнения таблицы значений создаем МенеджерВременныхТаблиц:

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

После выполнение этого запроса можно переходить к запросу непосредственно к базе данных:

ЗапросКбазеДанных = Новый Запрос;
ЗапросКбазеДанных.МенеджерВременныхТаблиц = МенеджерТаблицыДанных;
ЗапросКбазеДанных.Текст="ВЫБРАТЬ
| ВТ_ТаблицаДанных.Штрихкод,
| ВТ_ТаблицаДанных.Количество,
| ВТ_ТаблицаДанных.Цена,
| Штрихкоды.Владелец КАК Номенклатура
|ИЗ
| ВТ_ТаблицаДанных КАК ВТ_ТаблицаДанных
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Штрихкоды КАК Штрихкоды
| ПО ВТ_ТаблицаДанных.Штрихкод = Штрихкоды.Штрихкод";


И в окончании обработать результат запроса, например через цикл:

РезультатЗапроса=ЗапросКбазеДанных.Выполнить().Выбрать();
Пока РезультатЗапроса.Следующий() Цикл

Если РезультатЗапроса.Номенклатура <> Null

//Обработка результата
Иначе
Сообщить("Штрихкод " + РезультатЗапроса.Штрихкод + " в базе не обнаружен!");
КонецЕсли;
КонецЦикла;

Таким образом мы сократили время обращения к базе и получили данные в удобном для нас виде.

Ведущий 1С программист

Тельнова Яна


Если у вас возникли вопросы, вы можете обратиться к нашим специалистам