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

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

Если вы пишете большие отчеты, используя множество временных таблиц в запросе, то для экономии памяти желательно уничтожать ВТ, которые дальше не будут использоваться при выполнении пакета запросов.

Данная обработка меняет текст запроса через объектную модель, правильно определяя ту позицию, в которой временную таблицу можно уничтожить.

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

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

  • "Уничтожать временные таблицы после последнего запроса" — выводит в текст запроса уничтожение временных таблиц, использованных в последнем запросе. Это нужно для информации, т. к. практического смысла не имеет, потому что ВТ и так автоматически уничтожатся после выполнения пакета запросов.
  • "Удалять из пакета запросов неиспользуемые временные таблицы" — если в пакете создается ВТ, которая в дальнейшем не используется, то обработка удалит из пакета запросов данную ВТ.

Протестировано на платформах 8.3.9, 8.3.10, но должно работать, начиная с платформы 8.3.5. Конфигурация не важна. Исходный запрос для обработки надо брать тот, который выполняется без ошибок в той же конфигурации.

11 Comments

  1. zekrus

    Доброе утро!

    — «Лед тронулся господа …»

    Жду не дождусь когда увижу код:

    Запрос.Текст=»ВСТАВИТЬ …»

    С уважением

    Reply
  2. DenisCh

    Грохнуть менеджер временных таблиц — не проще будет?

    Reply
  3. SerVer1C

    (1) Представьте, что вы пишите большой аналитический отчет, достающий данные из 20+….30+….50+ таблиц (sql). Соответственно у вас (возможно) будет несколько десятков временных таблиц. Причем могут быть и подзапросы, в которых идет обращение к ВТ. Конечно, можно пройтись по такому запросу вручную, и вставлять уничтожения ВТ по мере необходимости (для экономии памяти). Но «скормив» текст запроса данной обработке, она сама вставит уничтожения ВТ в текст запроса в те места текста запроса, после которого ВТ уже не будет востребована ниже по тексту. Может быть вы не поняли функционал данной обработки?

    Reply
  4. zekrus

    (3)Добрый день!

    Возможно я не понятно объяснил, меня интересует возможность из запроса выполнить запись в таблицу СУБД.

    С уважением

    Reply
  5. VmvLer

    если создан запрос где

    20+….30+….50+ таблиц

    то наверняка на создание этого запроса затрачено много времени и логика удаления временных таблиц может быть НЕ линейной.

    Я хочу сказать, что если на написание пакетного запроса потрачено более часа времени, то лучше потратить еще 5-10 минут в финале на удаление временных осознанно, а не автоматически.

    хотя как «черновик» удаления эта обработка может и прокатит.

    Reply
  6. SerVer1C

    (5) Это было бы интересно, но фирма 1С на это не пойдет, т. к. при таком подходе может произойти рассогласование между платформой и данными в скуле.

    Reply
  7. SerVer1C

    (6) Как понять «логика удаления временных таблиц может быть НЕ линейной» ? Если ВТ в пакете запросов дальше не используется, то на этом шаге ее можно (нужно) уничтожить. Обработка «осознанно» находит это место в пакете )

    Reply
  8. kiruha

    (8)

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

    Еще бывает что подменяют текст запроса в зависимости от настроек (СтрЗаменить)

    Reply
  9. SerVer1C

    (9) Естественно, если программист использует МВТ, то в таком случае человек должен сам решать, какие ВТ ему далее потребуются в работе, но и при таком варианте обработка подскажет, какие «использованные» ВТ можно уничтожить, останется только руками убрать уничтожения для тех ВТ, которые будут использоваться в следующих запросах. Ну а через «СтрЗаменить» вообще можно прийти к совершенно другому запросу, не имеющему связи с исходным, так что тут автоматизировать нечего…

    Reply
  10. Wrols

    За публикацию — большое спасибо!

    Вот только хотелось бы использовать не только в управляемых формах, но и обычных.

    И можно было бы ещё одну штуку прикольную сделать: изменять порядок запросов в пакете, чтобы временные таблицы «жили» недолго.

    К примеру, если какая-то временная таблица формируется первой, а используется только в 10 запросе пакета, то лучше и формирование этой временной таблицы сдвинуть на 9-е место.

    Reply
  11. SerVer1C

    (11) Спасибо за идею. Постараюсь реализовать. В текущем алгоритме обнаружил ошибки при наличии в пакете нескольких запросов с выводом результата. Со временем выложу исправление.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *