Если вы пишете большие отчеты, используя множество временных таблиц в запросе, то для экономии памяти желательно уничтожать ВТ, которые дальше не будут использоваться при выполнении пакета запросов.
Данная обработка меняет текст запроса через объектную модель, правильно определяя ту позицию, в которой временную таблицу можно уничтожить.
Предусмотрена обработка ситуаций, когда ВТ с одним и тем же именем может несколько раз создаваться и уничтожаться в пределах одного пакета запросов.
Есть пара необязательных настроек, актуальных для случаев, когда вы принудительно НЕ создаете менеджер временных таблиц для последующей работы с ним:
- "Уничтожать временные таблицы после последнего запроса" — выводит в текст запроса уничтожение временных таблиц, использованных в последнем запросе. Это нужно для информации, т. к. практического смысла не имеет, потому что ВТ и так автоматически уничтожатся после выполнения пакета запросов.
- "Удалять из пакета запросов неиспользуемые временные таблицы" — если в пакете создается ВТ, которая в дальнейшем не используется, то обработка удалит из пакета запросов данную ВТ.
Протестировано на платформах 8.3.9, 8.3.10, но должно работать, начиная с платформы 8.3.5. Конфигурация не важна. Исходный запрос для обработки надо брать тот, который выполняется без ошибок в той же конфигурации.
Доброе утро!
— «Лед тронулся господа …»
Жду не дождусь когда увижу код:
Запрос.Текст=»ВСТАВИТЬ …»
С уважением
Грохнуть менеджер временных таблиц — не проще будет?
(1) Представьте, что вы пишите большой аналитический отчет, достающий данные из 20+….30+….50+ таблиц (sql). Соответственно у вас (возможно) будет несколько десятков временных таблиц. Причем могут быть и подзапросы, в которых идет обращение к ВТ. Конечно, можно пройтись по такому запросу вручную, и вставлять уничтожения ВТ по мере необходимости (для экономии памяти). Но «скормив» текст запроса данной обработке, она сама вставит уничтожения ВТ в текст запроса в те места текста запроса, после которого ВТ уже не будет востребована ниже по тексту. Может быть вы не поняли функционал данной обработки?
(3)Добрый день!
Возможно я не понятно объяснил, меня интересует возможность из запроса выполнить запись в таблицу СУБД.
С уважением
если создан запрос где
20+….30+….50+ таблиц
то наверняка на создание этого запроса затрачено много времени и логика удаления временных таблиц может быть НЕ линейной.
Я хочу сказать, что если на написание пакетного запроса потрачено более часа времени, то лучше потратить еще 5-10 минут в финале на удаление временных осознанно, а не автоматически.
хотя как «черновик» удаления эта обработка может и прокатит.
(5) Это было бы интересно, но фирма 1С на это не пойдет, т. к. при таком подходе может произойти рассогласование между платформой и данными в скуле.
(6) Как понять «логика удаления временных таблиц может быть НЕ линейной» ? Если ВТ в пакете запросов дальше не используется, то на этом шаге ее можно (нужно) уничтожить. Обработка «осознанно» находит это место в пакете )
(8)
Бывают исключения — если задан Менеджер временных таблиц, то временная таблица может использоваться в другом запросе.
Еще бывает что подменяют текст запроса в зависимости от настроек (СтрЗаменить)
(9) Естественно, если программист использует МВТ, то в таком случае человек должен сам решать, какие ВТ ему далее потребуются в работе, но и при таком варианте обработка подскажет, какие «использованные» ВТ можно уничтожить, останется только руками убрать уничтожения для тех ВТ, которые будут использоваться в следующих запросах. Ну а через «СтрЗаменить» вообще можно прийти к совершенно другому запросу, не имеющему связи с исходным, так что тут автоматизировать нечего…
За публикацию — большое спасибо!
Вот только хотелось бы использовать не только в управляемых формах, но и обычных.
И можно было бы ещё одну штуку прикольную сделать: изменять порядок запросов в пакете, чтобы временные таблицы «жили» недолго.
К примеру, если какая-то временная таблица формируется первой, а используется только в 10 запросе пакета, то лучше и формирование этой временной таблицы сдвинуть на 9-е место.
(11) Спасибо за идею. Постараюсь реализовать. В текущем алгоритме обнаружил ошибки при наличии в пакете нескольких запросов с выводом результата. Со временем выложу исправление.