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

23.04.15

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

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

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

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

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

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

 

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

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

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

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

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

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

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

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

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

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

    Возврат ТЗ;

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

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

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

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


 

Вступайте в нашу телеграмм-группу Инфостарт

azat73

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

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

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

16500 руб.

02.09.2020    265965    1476    421    

1177

Инструментарий разработчика Запросы Программист 1С 8.3 1С:Бухгалтерия 3.0 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

Структура запроса. Обработка визуально показывает, из какого количества подзапросов состоит запрос.

2 стартмани

06.07.2026    2355    28    XSlava    20    

32

Запросы Программист 1С 8.3 Россия Бесплатно (free)

Визуальный «Конструктор запроса» 1С, встроенный прямо в VS Code, — аналог конструктора из Конфигуратора и EDT, но без запуска платформы. Расширение читает конфигурацию, выгруженную в файлы, позволяет собрать запрос мышью и генерирует корректный текст на языке запросов 1С (SDBL). Открывает уже существующий текст запроса из кода для правки и — что особенно ценно — сохраняет комментарии при цикле «открыть - править - сохранить». Подходит тем, кто пишет код 1С в VS Code, держит под рукой множество проектов и не хочет ради одного запроса запускать тяжёлый Конфигуратор или EDT.

26.06.2026    6148    Alex_YAM    5    

33

WEB-интеграция Запросы Программист 1С 8.3 Абонемент ($m)

Post1C - это внешняя обработка, которая превращает 1С в полноценный инструмент для тестирования REST API. Всё управление сосредоточено в одном окне: настройка запроса, выполнение, просмотр ответа и генерация кода - без переключения между формами. Аналог Postman, но работающий в привычной среде 1С.

1 стартмани

02.04.2026    2839    80    priem_nv    24    

66

Инструментарий разработчика Запросы Программист 1С:Предприятие 8 1С:Зарплата и кадры государственного учреждения 3 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

QueryConsole1C — расширение, включающее консоль запросов с поддержкой исполняемых представлений — аналогов виртуальных таблиц, основанных на методах программного интерфейса ЗУП. Оно позволяет выполнять запросы с учётом встроенной бизнес-логики, отлаживать алгоритмы получения данных и автоматически генерировать код на встроенном языке 1С.

1 стартмани

16.05.2025    11902    153    zup_dev    30    

86

Инструментарий разработчика Запросы Программист 1С:Предприятие 8 1С:ERP Управление предприятием 2 Абонемент ($m)

В данной публикации рассказывается о решении, которое позволяет находить сразу все ошибки в тексте запроса за раз, а не только самую первую.

2 стартмани

05.03.2025    6778    21    XilDen    12    

29

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

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

3 стартмани

06.02.2025    6050    36    XilDen    26    

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

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

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

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

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

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

КонецПроцедуры
Показать
Для отправки сообщения требуется регистрация/авторизация