bdd2

Установка в запросе таблицы значений в качестве параметра

Опубликовал Анатолий Величутин (velichutin) в раздел Программирование - Практика программирования

Установка в запросе таблицы значений в качестве параметра

                 Очень часто приходится работать с большим количеством запросов.  И приходится использовать результаты запросов в качестве первоначальных данных для другого более массивного запроса. В частности хочу показать как можно использовать данные таблицы значений в качестве параметров в запросе. Эту таблицу значений можно получить хоть из другого запроса, хоть и из табличного поля заполненного пользователем.

 

                Плюсами такого использования являются то, что можно использовать данные таблицы значений полученные из других запросов, что существенно сокращает код программы, т.е. можно много раз не копировать один и тот же запрос, а например использовать общую функцию в общем модуле, где один раз прописан запрос, а затем его результат уже использовать в другом запросе.

              Минусами такого использования является то, что такой запрос очень тяжело тестировать на предмет ошибок, т.к. я на данный момент не нашел консоли запросов поддерживаемые таблицу значений в качестве параметра. И второй минус, надо очень внимательно следить за тем чтобы у колонок был задан тип (при использовании таблицы значений полученную при использовании запроса все типы колонок проставляются автоматически, это важно при ручном создании и заполнении таблицы значений)

 

Вот пример использования таблицы значений в качестве параметра:

 

Процедура ПриОткрытии()

//Заполняем табличное поле (ТП) тестовыми значениями        

            Стр = ЭлементыФормы.ТП.Значение.Добавить();

            Стр.Колонка1 = "Тест1";

            Стр.Колонка2 = "Тест2";

            Стр = ЭлементыФормы.ТП.Значение.Добавить();

            Стр.Колонка1 = "Тест3";

            Стр.Колонка2 = "Тест4";

 

КонецПроцедуры

 

Процедура КнопкаВыполнитьНажатие(Кнопка)

            Запрос = НОвый Запрос;

            Запрос.Текст =

            "ВЫБРАТЬ  *

            |ПОМЕСТИТЬ вт

            |ИЗ

            |           &Таблица КАК Таблица

            |;

            |

            |////////////////////////////////////////////////////////////////////////////////

            |ВЫБРАТЬ  *

            |ИЗ

            |           вт КАК вт";

            Запрос.УстановитьПараметр("Таблица", ТП);

//передаем данные запроса другому табличному полю

            ТП2 = Запрос.Выполнить().Выгрузить();

            ЭлементыФормы.ТП2.СоздатьКолонки();

КонецПроцедуры

 

Скачать файлы

Наименование Файл Версия Размер
ИспользованиеТЗКакПараметрЗапроса.epf
.epf 7,09Kb
30.06.14
31
.epf 7,09Kb 31 Скачать

См. также

Добавить вознаграждение
Комментарии
1. aleks (maldinitaly) 25.01.12 09:02 Сейчас в теме
К запросу добавить использование МенеджераВременныхТаблиц и использовать её в других запросах, с этим Менеджером
2. Fomix (fomix) 19 25.01.12 10:38 Сейчас в теме
Автор, попробуй вот эту консоль http://infostart.ru/public/72969/ - возможно поможет в работе с временными таблицами и отладке запросов. НЕ РЕКЛАМА!!! Просто я сам этим инструментом пользуюсь.
3. Ловыгин Антон (wunderland) 183 28.01.12 12:38 Сейчас в теме
минус ставить не буду, но это, простите, "баян"!!! я этим пользуюсь уже о-о-очень давно, пару месяцев спустя, как на 8.1 перешли. Правда, не вспомню сейчас, в ИНете нашел, или сам опытным путем получил, но факт есть факт...
4. Владимир Тишунин (Tishu) 3 30.01.12 08:02 Сейчас в теме
Этот полезный приём не работает в запросе СКД, а жаль
5. Виктория Коршанова (Chif13) 859 04.02.12 00:58 Сейчас в теме
(4) Ну почему ж не работает. Никто не запрещал в СКД использовать Объект: создаешь запрос, получаешь результат и загружаешь в Объект.
6. Дмитрий Ефремыч (mm1234mm) 01.10.13 07:41 Сейчас в теме
Запрос2 = Новый Запрос;
Запрос2.Текст = "
|ВЫБРАТЬ * ИЗ ВТТаб1
|ГДЕ ВТТаб1.Поле1=&
|Перем1 И ВТТаб1.Поле2=&Перем2";

Запрос2.МенеджерВременныхТаблиц = Запрос.МенеджерВременныхТаблиц;
Запрос2.УстановитьПараметр("Перем1",Перем1);
Запрос2.УстановитьПараметр("Перем2",Перем2);

Отбор = Запрос2.Выполнить().Выгрузить();
7. Andrey Matveev (matveev.andrey.v) 24 13.07.16 20:02 Сейчас в теме
(3) wunderland, Если вам не надо, это не значит что другим не надо, отлично назвал, по поиску в гугле сразу находит