Подмена временной таблицы в запросе

23.04.15

Разработка - Запросы

Подмена временной таблицы в запросе

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

Можно использовать, если используется менеджер временных таблиц.

Для получения ТЗ воспользовался обработкой отсюда//infostart.ru/public/173803/

Вот, собственно, сам код:

 

Процедура ПодменитьВременнуюТаблицуВЗапросе(Запрос,ИмяВремТаблицы)

       ТЗ = ПолучитьТЗ(Запрос.МенеджерВременныхТаблиц,ИмяВремТаблицы);

       Запрос.Текст = " УНИЧТОЖИТЬ " + ИмяВремТаблицы;
       Запрос.Выполнить(); 

       ОбработатьТЗ(ТЗ);

      Запрос.Текст = " ВЫБРАТЬ * ПОМЕСТИТЬ " + ИмяВремТаблицы + " ИЗ &ТЗ КАК ТЗ";
      Запрос.УстановитьПараметр("ТЗ", ТЗ);
      Запрос.Выполнить(); 

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

Функция ПолучитьТЗ(МенеджерВремТаб,ИмяВремтаб ="",Порядок = "") Экспорт

     Запрос = Новый Запрос;
     Запрос.МенеджерВременныхТаблиц = МенеджерВремТаб;
     Запрос.Текст =
     "ВЫБРАТЬ
     | *
     |ИЗ
     | ВремТаб КАК ВремТаб
     |
     |УПОРЯДОЧИТЬ ПО Порядок";

     Запрос.Текст = СтрЗаменить(Запрос.Текст,"ВремТаб",ИмяВремтаб);
     Если Порядок = "" Тогда
         Запрос.Текст = СтрЗаменить(Запрос.Текст,"УПОРЯДОЧИТЬ ПО Порядок","");
    Иначе
       Запрос.Текст = СтрЗаменить(Запрос.Текст,"Порядок",Порядок);
    КонецЕсли;

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

    Возврат ТЗ;

КонецФункции

Процедура ОбработатьТЗ(ТЗ)

     //здесь правим как надо ТЗ 

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


 

azat73

См. также

SALE! 15%

Инструментарий разработчика Роли и права Запросы СКД Программист Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    159668    875    399    

862

Запросы Программист Бесплатно (free)

Увидел cheatsheet по SQL и захотелось нарисовать подобное, но про запросы.

18.10.2024    9943    sergey279    18    

64

Запросы Программист Платформа 1С v8.3 Запросы Конфигурации 1cv8 Бесплатно (free)

Столкнулся с интересной ситуацией, которую хотел бы разобрать, ввиду её неочевидности. Речь пойдёт про использование функции запроса АВТОНОМЕРЗАПИСИ() и проблемы, которые могут возникнуть.

11.10.2024    5204    XilDen    36    

80

Запросы Программист Запросы Бесплатно (free)

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

16.08.2024    7937    user1840182    5    

28

Математика и алгоритмы Запросы Программист Платформа 1С v8.3 Запросы Бесплатно (free)

Рассмотрим быстрый алгоритм поиска дублей с использованием hash функции по набору полей шапки и табличных частей.

08.07.2024    2404    ivanov660    9    

22

Запросы СКД Программист Стажер Система компоновки данных Россия Бесплатно (free)

Часто при разработке отчетов в СКД возникает ситуация, когда не совсем понятно, почему отчет выводит не те данные, которые нужны, либо не выводит вовсе. Возникает потребность увидеть конечный запрос, который формирует СКД. Как это сделать, рассмотрим в этой статье.

15.05.2024    8726    implecs_team    6    

47

Запросы Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Часто поступают задачи по произвольному распределению общих сумм. После распределения иногда пропадают копейки. Суть решения добавить АвтоНомерЗаписи() в ВТ распределения, и далее используя функции МАКСИМУМ или МИНИМУМ можем положить разницу копеек в первую или последнюю строку знаменателя распределения.

11.04.2024    3395    andrey_sag    10    

36
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Yashazz 4791 26.04.15 14:19 Сейчас в теме
Если у вас "при каждом обновлении" надо править запрос "на семи страницах", значит, что-то архитектурно принципиально неверно сделано. А подобные заходы (при всей их очевидности) опасны, т.к. громоздкий и сложно выглядящий запрос, тем не менее, может быть мегаоптимален, а подобные подмены будут жрать кучу ресурса при засовывании таблицы в запрос, о чём на ИС уже изрядно говорено.
Рамзес; POLGA; +2 Ответить
2. Klinov 246 27.04.15 11:23 Сейчас в теме
Yashazz, не буду спорить. Выложил в расчете на то что кому-то возможно пригодится. использовать или нет человек уж сам решит.

Antey; rus_LAN; +2 Ответить
3. EvgeniuXP 29.04.15 09:32 Сейчас в теме
Есть уже СхемаЗапроса - в нем гораздо удобнее работать, чем складывать текст.
4. danila_inf 29.04.15 10:49 Сейчас в теме
Метод интересный.. но на практике применять такой стоит действительно редко.
5. gamletspb 105 25.02.22 08:24 Сейчас в теме
Спасибо за идею, помогло. Только чтобы заработало процедуру пришлось малость переписать:
Процедура ПодменитьВременнуюТаблицуВЗапросе(МенеджерВременныхТаблиц,ИмяВремТаблицы)

       ТЗ = ПолучитьТЗ(МенеджерВременныхТаблиц,ИмяВремТаблицы);

	Запрос = Новый Запрос;
	Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;

       Запрос.Текст = " УНИЧТОЖИТЬ " + ИмяВремТаблицы;
       Запрос.Выполнить(); 

       ОбработатьТЗ(ТЗ);

      Запрос.Текст = " ВЫБРАТЬ * ПОМЕСТИТЬ " + ИмяВремТаблицы + " ИЗ &ТЗ КАК ТЗ";
      Запрос.УстановитьПараметр("ТЗ", ТЗ);
      Запрос.Выполнить(); 

КонецПроцедуры
Показать
Оставьте свое сообщение