Имя: Пароль:
1C
1С v8
Уничтожение временных таблиц необходимо?
0 palpetrovich
 
28.11.12
12:05
Есть обработка, в ней примерно так:
Перем МенеджерВТ;
//
Процедура СоздатьВТИзТЗ(ТЗ)
   Запрос = Новый Запрос;
   МенеджерВТ = Новый МенеджерВременныхТаблиц;
   Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
   Запрос.Текст = " ВЫБРАТЬ * ПОМЕСТИТЬ ВТДанные ИЗ &ТЗ КАК ТЗ";
   Запрос.УстановитьПараметр("ТЗ", ТЗ);
   Запрос.Выполнить();  
КонецПроцедуры
//
Функция ПолучитьТЗСОтбором(КакойТоОтбор="")
   Запрос = Новый Запрос;
   Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
   Запрос.Текст = "ВЫБРАТЬ * ИЗ ВТДанные КАК ВТДанные ГДЕ ВТДанные.КакоеТоПоле ПОДОБНО &КакойТоОтбор";
   Запрос.УстановитьПараметр("КакойТоОтбор", "%" + КакойТоОтбор + "%");
   Результат = Запрос.Выполнить();  
   Возврат Результат.Выгрузить();
КонецФункции

Процедура СоздатьВТИзТЗ(ТЗ) может вызыватся неединожды, Функция ПолучитьТЗСОтбором - гораздо более часто

Необходимо-ли "обнулять" МенеджерВТ перед его повторным использованием и при завершении работы обработки?
Или платформа все селает сама?
1 palpetrovich
 
28.11.12
12:08
+(0) в КнигеЗнаний встретил такую фразу "Временную таблицу нужно удалять как можно скорее после использования."  
насколько это правда?
2 Kashemir
 
28.11.12
12:08
Сборщик мусора все почистит сам, если ссылок на менеджер не останется.
3 Maxus43
 
28.11.12
12:09
имхо не нужно.
по факту  - хз, никогда не удаляю специально, если только не огромные таблицы и долгоиграющие алгоритмы
4 Kashemir
 
28.11.12
12:10
(1) Наверняка речь идет о временной в пределах запроса. Но в любом случае лишним не будет - к чему отъедать лишние ресурсы для хранения данных, которые тебе уже не нужны.
5 Sammo
 
28.11.12
12:11
Речь скорее всего идет не про менеджер ВТ, а про
УНИЧТОЖИТЬ ВТДанные
6 palpetrovich
 
28.11.12
12:12
(2) ну, при закрытии обработки - однозначно не останется
(3) понял, таблицы не огромные, но обработка может работать долго, зависит только от использующего ее
(4) в пределах запроса использовать  МенеджерВременныхТаблиц - не обязательно
7 Sammo
 
28.11.12
12:12
А по факту были релизы, где менеджер временных таблиц не чистился. Но, емнип, уже исправлено.
8 palpetrovich
 
28.11.12
12:13
(5) ну наверное
9 Kashemir
 
28.11.12
12:14
ну, при закрытии обработки - однозначно не останется
___
Не обязательно лечить головную боль отрубанием оной.


в пределах запроса использовать  МенеджерВременныхТаблиц - не обязательно
_________
Замечательное наблюдение.
10 Reset
 
28.11.12
12:14
(6) Не менеджер, а сами таблицы имеется в виду, внутри запроса. Типа

Выбрать ...
Поместить ВТ1;

Выбрать ...
Поместить ВТ2
из ВТ1;

Уничтожить ВТ1; <--- тк вт1 уже не нужна

Выбрать ....
11 mikecool
 
28.11.12
12:17
удаляю всегда
12 Kashemir
 
28.11.12
12:17
(7) Главное скуль меньше течь стал :)
13 palpetrovich
 
28.11.12
12:17
(9)  не понял саразма
(10) понятно, а в случае (0), МенеджерВТ ведет себя как обычная переменная? При повторном использовании мусор от первого не остается?
14 Reset
 
28.11.12
12:18
(13) Да, по кр мере - так задумано
15 Kashemir
 
28.11.12
12:19
(13)  не понял саразма
__________

в пределах запроса использовать  МенеджерВременныхТаблиц - не обязательно

________

Дело в том что менеджервременныхтаблиц вообще запроса не касается. Это платформенное решение упрощающее перенос данных между запросами.
16 Широкий
 
28.11.12
12:20
Насколько я помню сами временные таблицы остаются.
Данные только оттуда убиваются.
17 H A D G E H O G s
 
28.11.12
12:20
tempdb пухнуть будет.
18 palpetrovich
 
28.11.12
12:20
(15) а где я сказал противное? :)
19 H A D G E H O G s
 
28.11.12
12:21
Если в пакетном будешь оставлять ненужную и хреначить следующие.
20 Kashemir
 
28.11.12
12:25
(18) Озадачил комментарий (6) на (4)
21 vde69
 
28.11.12
12:26
явная типизация и явная очистка - это хороший тон, иногда он избавляет от лишнего гемороя, хотя в общем случае и так работает.

примеры
Таблица.Колонки.Добавить("Контрагент", "СправочникСсылка.Контрагенты")


вроде без описания типов будет работать, ан не всегда....

например после присвоения строки не будет правильно работать ЗначениеЗаполнено
22 palpetrovich
 
28.11.12
12:26
(17) т.е. так будет правильней?
Процедура СоздатьВТИзТЗ(ТЗ)
   Если ТипЗнч(МенеджерВТ) = Тип("МенеджерВременныхТаблиц") Тогда
       Запрос = Новый Запрос;
       Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
       Запрос.Текст = " УНИЧТОЖИТЬ ИмяВременнойТаблицы";
       Запрос.Выполнить();    
   КонецЕсли;
   Запрос = Новый Запрос;
   МенеджерВТ = Новый МенеджерВременныхТаблиц;
   Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
   Запрос.Текст = " ВЫБРАТЬ * ПОМЕСТИТЬ ВТДанные ИЗ &ТЗ КАК ТЗ";
   Запрос.УстановитьПараметр("ТЗ", ТЗ);
   Запрос.Выполнить();  
КонецПроцедуры
23 palpetrovich
 
28.11.12
12:27
+22
Запрос.Текст = " УНИЧТОЖИТЬ ВТДанные"; :)
24 palpetrovich
 
28.11.12
12:29
Всем спасибо, буду чистить
25 Рэйв
 
28.11.12
12:34
Запрос.МенеджерВременныхТаблиц.Закрыть()
26 palpetrovich
 
28.11.12
12:40
(25) спасибо, тоже вариант
27 Lama12
 
28.11.12
12:42
ТС, сделай голосовалку.
Вопрос интересен.
28 palpetrovich
 
28.11.12
12:49
(27) я не умею :(
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.