Имя: Пароль:
1C
 
Немного теории. Временные таблицы
0 H A D G E H O G s
 
12.11.08
11:55
День добрый.
Некоторые обзывы о Временных Таблицах.
Стал увлекаться изпользованием этого чуда, и возникли сомнения, которые решил проверить. По результатам:
1) Временные таблицы 1С - это локальные временные таблицы SQL, со всеми их последствиями. Это НЕ таблицы в оперативной памяти, они храняться в базе tempdb.
2) Временная таблица в SQL очищается после того, как мы очистим Менеджер временной таблицы в 1С (или код выйдет за область видимости переменной)
3) Однако временная таблица в SQL продолжает существовать, пока есть коннект к SQL -ю (даже из конфигуратора), или мы не выполнили запрос УНИЧТОЖИТЬ
4) И Самое Важное: я не увидел создания ИНДЕКСА для временной таблицы в SQL, скажем код вида:
   
Запрос=Новый Запрос;
Запрос.Текст=
"ВЫБРАТЬ
|    ПартииТоваровНаСкладахОстатки.Номенклатура,
|    ПартииТоваровНаСкладахОстатки.СтоимостьОстаток
|ИЗ
|    РегистрНакопления.ПартииТоваровНаСкладах.Остатки КАК ПартииТоваровНаСкладахОстатки";
Таблица=Запрос.Выполнить().Выгрузить();
Таблица.Индексы.Добавить("Номенклатура");
Запрос=Новый Запрос;
Менеджер=Новый МенеджерВременныхТаблиц;
Запрос.МенеджерВременныхТаблиц=Менеджер;
Запрос.УстановитьПараметр("Таблица",Таблица);
Запрос.Текст=
"ВЫБРАТЬ
|    Таблица.Номенклатура,
|    Таблица.СтоимостьОстаток
|ПОМЕСТИТЬ ВРЕМЕННАЯ
|ИЗ
|    &Таблица КАК Таблица";
Запрос.Выполнить();

ИНДЕКСА во временной таблице не создаст..
Вот такие исследование. Критика/тыкание носом в ошибки приветствуется.
P.S. В дальнейшем удержусь от необузданного использования этого чуда. Уж лучше индексированная ТЗ.
1 Sadovnikov
 
12.11.08
12:00
(0) Возвращайся в реальный мир - ты с 1С работаешь :)
Я вчера такой пример приводил:
"Выполняем элементарный запрос:


Select
   Док_Товары.Ссылка,
   Док_Товары.Товары.(Количество, Цена)

From Документ.ПоступлениеТоваров Док_Товары

1С-ка при этом создает временную таблицу. А удалять ее даже и не собирается. Делает ей TRUNCATE TABLE и успокаивается. И пры завершении сеанса тоже даже не думает за собой прибраться. В итоге наблюдаем веселую картину - туеву хуча временных таблиц, висящих до тех пор, пока сервер 1С-ки не перезапустишь.
"
2 H A D G E H O G s
 
12.11.08
12:01
(1) Ну и пусть висят. Какая разница? Они же только своей структурой наполнены..
3 H A D G E H O G s
 
12.11.08
12:05
(1) Сервер перезапускать необязательно. Достаточно всем отключиться от 1С.. :-)
4 Immortal
 
12.11.08
12:05
(0)на ИТС написано  надо tempdb настроить и работать с ними правильно.
(1) в ИТСе
(2) есть такое
(3) тож на ИТСе
(4) а как по твоему определить ключ?
5 wPa
 
12.11.08
12:06
(2) Не забывай закрывать МВТ, а то получишь не хреновую утечку памяти
6 H A D G E H O G s
 
12.11.08
12:08
Ну а насчет индекса кто - что скажет? Я его не проглядел?
7 Sadovnikov
 
12.11.08
12:09
(4) Можно узнать, как в ИТС-е обосновывают такую неряшливую работу с таблицами?
8 Fragster
 
гуру
12.11.08
12:10
(4) рекурсия?
9 KAO111
 
12.11.08
12:11
А если использовать ключевое слово
ИНДЕКСИРОВАТЬ ПО ?
10 ptiz
 
12.11.08
12:11
(0) Для добавления индексов во временные таблицы используется ключевое слово ИНДЕКСИРОВАТЬ ПО в тексте запроса
11 Immortal
 
12.11.08
12:11
эх , Ёжик-))
см (4) п. 4..
При необходимости создания индекса для временной таблицы, следует в запросе указать ключевое слово ИНДЕКСИРОВАТЬ ПО, после которого перечислить поля, по которым нужно построить индекс. Например:

ВЫБРАТЬ

Код,

Наименование

ПОМЕСТИТЬ ВременнаяТаблица

ИЗ Справочник.Номенклатура

ИНДЕКСИРОВАТЬ ПО Код

Поля, по которым происходит индексирование должны находиться в списке выборки.
12 wPa
 
12.11.08
12:11
(8) ))) выход из рекурсии сразу на (1)
13 Immortal
 
12.11.08
12:12
(7) в смысле что структуры висят после использования?
там про это не написано-)
14 Sadovnikov
 
12.11.08
12:13
(13) Сильный ответ от 1С :)
Тоесть, они даже никакого обоснование криворукости придумать не смогли?
15 Defender aka LINN
 
12.11.08
12:14
(6) Проглядел.
16 H A D G E H O G s
 
12.11.08
12:21
(15) Точно, проглядел.. Даже вкладка в конструкторе появляется..
Все, тогда все хорошо. Молодцы, 1С-овцы..
17 H A D G E H O G s
 
12.11.08
12:22
(14) Я вот посмотрел, что при одном и том - же запросе они используют одну и туже таблицу. Без нового создания..
18 Immortal
 
12.11.08
12:23
(8):D
(14) на партнёрском надо поискать, может чего и объясняли.А так вообще не встречал доводов ни за ни против(официальных)
19 Immortal
 
12.11.08
12:24
я с вами обед блин пропущу-)
убёх
20 Sadovnikov
 
12.11.08
12:25
(17) Да, одну и ту же. Но это не повод оставлять ее на сервере и после выхода из 1С.
21 H A D G E H O G s
 
12.11.08
12:29
(20) Очистку и удаление Врем. таб. доверили программисту.
Ну я в (1) - это исключение из правил, которое будет исправлено наверное.
22 Sadovnikov
 
12.11.08
12:31
(21) А позволь узнать - как ты сможешь удалить эту временную таблицу из примера в (1)? Хотя бы ее имя как узнаешь?
23 H A D G E H O G s
 
12.11.08
12:33
(22) Нет, нет, я говорю, про созданные 1С -ником Временные таблицы через МенеджерВременныхТаблиц..
А в (1) - это косяк, несущественный, может и исправят.
24 wPa
 
12.11.08
12:44
(22) Ну а что неправильного? truncate log on checkpoint для  tempdb всегда включена. Сам очистится. Или будешь ждать транзакцию чтобы выйти из 1С?
25 Sadovnikov
 
12.11.08
12:45
(23) С одной стороны - несущественный косяк. С другой - показывает раздолбайское отношение 1С к разработке платформы. Плюс, на сколько я помню, восьмерка же позиционировалась как супер-пупер прога для офигенно крупных контор с большим количеством пользователей? Вот там-то как раз этот косяк и будет весьма существенным. Вкупе с остальными.
26 wPa
 
12.11.08
12:46
(23) Да на эти грабли наступили. Закрывать даже если там одна запись
27 Sadovnikov
 
12.11.08
12:46
(24) Кто сам очистится-то? Загляни в tempdb и возрадуйся.
28 Sadovnikov
 
12.11.08
12:47
(3) "Сервер перезапускать необязательно. Достаточно всем отключиться от 1С" - нифига не достаточно.
29 Ferz
 
12.11.08
12:49
Вот еще о временных таблицах http://main.1c-ei.ru/Articles/TypeQurey
30 wPa
 
12.11.08
12:54
(27) Я радуюсь. 200 мегов  - У нас сервер SQL перезапускается ежедневно. Поставь автошринк для нее...
31 Sadovnikov
 
12.11.08
12:56
(30) "У нас сервер SQL перезапускается ежедневно" - а теперь представь работу базы 24*7.
32 wPa
 
12.11.08
12:57
(28) если бекап ее не делаешь - отдельно сжимай. У нас полные бекапы поэтому смысла нет - проще перегрузить.
33 wPa
 
12.11.08
12:58
(31) см. (32). в регламент добавь шринк или автошринк - будет при бекапе. Короче - решаемо не проблема - тем более для тебя
34 H A D G E H O G s
 
12.11.08
13:00
(29) За это - спасибо, буду вникать.
35 Sadovnikov
 
12.11.08
13:03
(33) Так я же не говорю, что это дикая нерешаемая проблема :)
Просто, показал как пример безалаберности прогеров 1С :(
36 Immortal
 
12.11.08
13:09
усё. сровняли 8 с плинтусом..
подумаешь, кактус, мы и не такое ели-)
37 Sadovnikov
 
12.11.08
13:12
(36) Как? Неужели я забил последний гвоздь в этом благородном начинании??? :)
38 Immortal
 
12.11.08
16:03
(37) кончен, тебе только молоток дай, ты и Нуралиева-кормильца пришибёшь-)
39 Immortal
 
12.11.08
16:04
кончен=конечно