gifts2017

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

Опубликовал Азат Гаффаров (Klinov) в раздел Программирование - Практика программирования

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

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

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

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

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

 

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

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

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

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

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

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

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

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

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

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

    Возврат ТЗ;

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

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

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

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


 

См. также

Подписаться Добавить вознаграждение

Комментарии

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

3. EvgeniuXP EvgeniuXP (EvgeniuXP) 29.04.15 09:32
Есть уже СхемаЗапроса - в нем гораздо удобнее работать, чем складывать текст.
4. данила (danila_inf) 29.04.15 10:49
Метод интересный.. но на практике применять такой стоит действительно редко.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа