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

23.04.15

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

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

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

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

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

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

 

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

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

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

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

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

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

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

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

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

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

    Возврат ТЗ;

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

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

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

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


 

azat73

См. также

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

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

15500 руб.

02.09.2020    175207    973    403    

932

Обновление 1С Запросы Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 Абонемент ($m)

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

2 стартмани

06.02.2025    1522    8    XilDen    24    

34

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

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

18.10.2024    12139    sergey279    18    

65

Запросы Программист Платформа 1С v8.3 Запросы 1C:Бухгалтерия Бесплатно (free)

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

11.10.2024    7098    XilDen    36    

86

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

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

16.08.2024    9772    user1840182    5    

28

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

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

08.07.2024    2926    ivanov660    9    

22

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

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

15.05.2024    11356    implecs    6    

48
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Yashazz 4809 26.04.15 14:19 Сейчас в теме
Если у вас "при каждом обновлении" надо править запрос "на семи страницах", значит, что-то архитектурно принципиально неверно сделано. А подобные заходы (при всей их очевидности) опасны, т.к. громоздкий и сложно выглядящий запрос, тем не менее, может быть мегаоптимален, а подобные подмены будут жрать кучу ресурса при засовывании таблицы в запрос, о чём на ИС уже изрядно говорено.
Рамзес; POLGA; +2 Ответить
2. Klinov 251 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 111 25.02.22 08:24 Сейчас в теме
Спасибо за идею, помогло. Только чтобы заработало процедуру пришлось малость переписать:
Процедура ПодменитьВременнуюТаблицуВЗапросе(МенеджерВременныхТаблиц,ИмяВремТаблицы)

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

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

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

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

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

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