Таблица как параметр запроса

На днях столкнулся с ситуацией, когда стало необходимо передать в запрос в качестве параметра таблицу и делать из нее выборку. На просторах Гугла нашлось много подобных вопросов, но среди них было в основном указано, что, мол да, можно туда закинуть.. Что все это со временными таблицами.. Но так и не попалось конкретное объяснение, как получить требуемый результат. Т.к. при обычном запросе, пусть платформа и перестала ругаться на ошибки, но то, что возвращал запрос, было совсем не тем, чего хотелось.

Итак:
Допустим, у нас есть переменная ДокБон хранящая Таблицу значений, и по каким-либо причинам есть необходимость передать ее в запрос, а после обработки получить результат в таблице Отбор.

1 Шаг:

//Передаем данные из ДокБон во временную таблицу
Запрос = Новый Запрос;
Запрос.Текст = " ВЫБРАТЬ * ПОМЕСТИТЬ ВТТаб1 ИЗ &ДБ как ДокБон";
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("ДБ", ДокБон);
Запрос.Выполнить();
Данным шагом, в виртуальную таблицу ВТТаб1 мы передали все данные из нашей таблицы ДокБон. В случае, если необходимы конкретные поля, делаем как обычно:
        Запрос.Текст = » ВЫБРАТЬ ДокБон.Поле1, ДокБон.Поле2 ПОМЕСТИТЬ ВТТаб1 ИЗ &ДБ как ДокБон«;
При этом рекомендуется указывать именно ДокБон.Поле1, а не Поле1. Т.к. в последнем случае программа часто сбивается.
Вот дальше-то и крылась загвоздка: казалось бы можно прямо в этом запросе установить параметры отбора и выгрузить в таблицу Отбор: Отбор=Запрос.Выполнить().Выгрузить(); Такой шаг ОШИБОЧЕН, и ожидаемого результата не принесет!!!

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


comments powered by Disqus

Популярное