Имя: Пароль:
1C
1С v8
Уничтожение временных таблиц
, ,
0 Max Street
 
11.11.13
17:10
Собственно вопрос, если ли смысл уничтожать временную таблицу в конце запроса?
1 shuhard
 
11.11.13
17:10
(0) да
2 ДенисЧ
 
11.11.13
17:11
разумеется.
3 elCust
 
11.11.13
17:11
А чего нетовский сборщик мусора тут не шастает? )))
4 DocWin
 
11.11.13
17:11
Есть мнение, что иногда они сами не уничтожаются. Хотя и должны.
5 Нуф-Нуф
 
11.11.13
17:12
(1) (2) а разве...
6 mikecool
 
11.11.13
17:13
на бога надейся, а сам удаляй )))
7 К_Дач
 
11.11.13
17:13
Если юзать менеджер ВТ, то сами уничтожаются. Должны, по крайней мере
8 shuhard
 
11.11.13
17:14
(7) эту древность ?
все давно живут на пакетных запросах
9 mikecool
 
11.11.13
17:15
(8) ну почему древность? можно менеджер использовать многократно, а пакет выполнился и забыли
10 Max Street
 
11.11.13
17:21
Спасибо. Правильно ли так удалять врем таблицу?

ВЫБРАТЬ
    РасходнаяНакладнаяТЧ.Номенклатура,
    СУММА(РасходнаяНакладнаяТЧ.Количество) КАК Количество
ПОМЕСТИТЬ ВремТабл
ИЗ
    Документ.РасходнаяНакладная.ТЧ КАК РасходнаяНакладнаяТЧ
ГДЕ
    РасходнаяНакладнаяТЧ.Ссылка = &Ссылка

СГРУППИРОВАТЬ ПО
    РасходнаяНакладнаяТЧ.Номенклатура
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВремТабл.Номенклатура,
    ВремТабл.Количество,
    ОстаткиНоменклатурыОстатки.КоличествоОстаток
ИЗ
    ВремТабл КАК ВремТабл
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатуры.Остатки(
                &МоментВремени, ) КАК ОстаткиНоменклатурыОстатки
        ПО ВремТабл.Номенклатура = ОстаткиНоменклатурыОстатки.Номенклатура
;

////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ ВремТабл
11 ptiz
 
11.11.13
17:26
Никогда не удаляю. Никто не жаловался.
12 wowik
 
11.11.13
17:28
(11) тоже никогда не удалял.
13 mikecool
 
11.11.13
17:28
(10) пользуйся конструктором, он правильно пишет )
14 GANR
 
11.11.13
17:29
(0) Иногда в запросе в цикле создается ВТ с одним именем, но содержащая различные данные. Если не уничтожена старая таблица с таким именем - попытка поместить новую с таким же именем вызовет исключение.
15 mikecool
 
11.11.13
17:29
(11) (12) это как правило хорошего тона - убрать за собой мусор
16 mikecool
 
11.11.13
17:29
(14) за изначально "в запросе в цикле создается ВТ с одним именем," можно руки отбить )
17 Dmumaju
 
11.11.13
17:32
Если например, ВТ создается в запросе схемы отчета, построенном на СКД, то лучше удалить, т.к. есть подозрения, что само оно произойдет только в момент закрытия отчета.
18 Dmumaju
 
11.11.13
17:33
(16) и тулово
19 Лефмихалыч
 
11.11.13
17:35
(0) в пакетных запросах сами очищаются. Только было замечено, что пакетные запросы на СКД ведут себя как-то хрен пойми и почему, короче, в отчетах лучше руками грохать
20 Нуф-Нуф
 
11.11.13
17:35
если вы подключаете менеджер временных таблиц "Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;" то удаление временных таблиц рекомендуется.

Ибо при наличие гамнокода в виде "Выборка = Запрос.Выполнить().Выбрать()" (вместо правильного использования РезультатЗапроса = Запрос.Выполнить()) вы не сможете повторить Запрос.Выполнить() в отладке, ибо будет ругаться на существование временной таблицы с таким же именем
21 Нуф-Нуф
 
11.11.13
17:37
вот такой запрос работает:

    Запрос = Новый Запрос;
    //Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
    Запрос.Текст = "ВЫБРАТЬ
                   |    Валюты.Ссылка,
                   |    Валюты.ВерсияДанных,
                   |    Валюты.ПометкаУдаления,
                   |    Валюты.Предопределенный,
                   |    Валюты.Код,
                   |    Валюты.Наименование,
                   |    Валюты.НаименованиеПолное,
                   |    Валюты.ПараметрыПрописиНаРусском,
                   |    Валюты.ПараметрыПрописиНаАнглийском
                   |ПОМЕСТИТЬ врем
                   |ИЗ
                   |    Справочник.Валюты КАК Валюты
                   |;
                   |
                   |////////////////////////////////////////////////////////////////////////////////
                   |ВЫБРАТЬ
                   |    врем.Ссылка,
                   |    врем.ВерсияДанных,
                   |    врем.ПометкаУдаления,
                   |    врем.Предопределенный,
                   |    врем.Код,
                   |    врем.Наименование,
                   |    врем.НаименованиеПолное,
                   |    врем.ПараметрыПрописиНаРусском,
                   |    врем.ПараметрыПрописиНаАнглийском
                   |ИЗ
                   |    врем КАК врем";
                   Выборка = Запрос.Выполнить().Выбрать();
                   РезультатЗапроса = Запрос.Выполнить();



Если раскомментировать строчку - будет падать по ошибке
22 Полотенчик
 
11.11.13
17:40
(8) при чем тут МВТ/пакетный запрос и древность?
23 Лефмихалыч
 
11.11.13
17:41
(21) оба варианта поведения - это нормально и нет говнокода ни там, ни там
24 Нуф-Нуф
 
11.11.13
17:49
(23) я считаю что сначала лучше получить результат запроса, а уж потом выбирать. иначе в определенных случаях можно нарваться на (20), что неприятно
25 GANR
 
11.11.13
17:52
(16) Согласен полностью, запрос в цикле - это отстой, но распределение с множеством переделов по определенным правилам без запросов в цикле сделать весьма непросто - это задачки из сборника "1С:Специалист по Платформе" легко решить без запроса в цикле. А вот реальные задачи, (РАУЗ, к примеру) - совсем иное.
26 Лефмихалыч
 
11.11.13
17:54
(24) >лучше получить результат запроса, а уж потом выбирать
тебе от похудания основательно снесло кукушечку или ты просто выразился неправильно?
27 Нуф-Нуф
 
11.11.13
17:54
(26) ты просто не наступал на эти грабли
28 hhhh
 
11.11.13
19:20
(27) используй                РезультатыЗапроса = Запрос.ВыполнитьПакет();

у тебя получается массив таблиц, и в отладчике получать не надо уже.