Имя: Пароль:
1C
1С v8
Менеджер временных таблиц
0 DoK_80
 
05.04.12
17:33
Есть отчет. В форме отчета следующий код:

Перем МенеджерВременныхТаблиц;

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

Процедура ПриЗакрытии()
   Если МенеджерВременныхТаблиц <> Неопределено Тогда
       МенеджерВременныхТаблиц.Закрыть();
   КонецЕсли;    
КонецПроцедуры


При открытии данной формы непрерывно растет число захваченных СУБД объектов, что приводит в конечном итоге к зависанию системы.
С чем это связано и как это можно победить?
1 ssh2006
 
05.04.12
17:34
Причем тут менеджер врем таблиц?
2 CrazyBear
 
05.04.12
17:36
А где ПОМЕСТИТЬ?
3 Mnemonic1C
 
05.04.12
17:36
(0) Код дня
4 ssh2006
 
05.04.12
17:36
Странный код
5 Kashemir
 
05.04.12
17:37
(0) А не проще было бы в список/массив выгрузить ?
6 DoK_80
 
05.04.12
17:39
Я даже ПОМЕСТИТЬ убрал
все равно число захваченных объектов растет.
7 Axel2009
 
05.04.12
17:41
это весь код в форме?
8 ssh2006
 
05.04.12
17:41
(6) Какие-то непонятные эксперименты с системой
9 sergeante
 
05.04.12
17:43
(6) платформа не понимает, что ты от неё хочешь и сходит с ума.
10 ssh2006
 
05.04.12
17:46
Возможно условие задачи рождается произвольным образом. Генерируется рандомный код, который проходит синтаксический контроль, а затем исследуется поведение системы, ведутся наблюдения.
11 sergeante
 
05.04.12
17:48
(10) эк тебя)
12 KindLion
 
05.04.12
17:50
(4) +1
Более чем странный
13 КМ155
 
05.04.12
17:51
(10) при этом резко возрастает вероятность локализации спинорных полей в окрестностях точки сингулярности
14 KindLion
 
05.04.12
17:51
(0) - Чего сделать-то надо?
Держать под рукой список сотрудников?
Так массива тут хватит.
15 ssh2006
 
05.04.12
17:52
(14) И главное: "С чем это связано и как это можно победить?"
16 sergeante
 
05.04.12
17:52
(13) причём далеко не каждый локальный аргумент содержит признак парадоксальных эмоций.
17 ssh2006
 
05.04.12
17:54
(0) В общем, лучше завершить работу системы, не дожидаясь коллапса
18 DoK_80
 
05.04.12
17:55
(7) Да, весь код
Все остальное удалил

(14) Изначально там был более сложный запрос, но когда стал разбираться, упростил до первоначального кода
19 depthzer0
 
05.04.12
17:55
можно попробовать написать
20 depthzer0
 
05.04.12
17:55
можно попробовать написать:

Запрос = Неопределено;
21 ssh2006
 
05.04.12
17:56
(18) > Изначально там был более сложный запрос, но когда стал разбираться, упростил до первоначального кода

Похоже на рекурсию
22 Kashemir
 
05.04.12
17:58
(21) А чего рекурсию - ну держат открытыми 50 человек твою форму и привет 50 таблицам на скуле.
23 Kashemir
 
05.04.12
18:00
(22) Хотя я не уверен насчет скуля - может эти таблицы менеджером на клиент перегоняются - хз как технически реализовано. Тогда привет памяти на терминальном сервере.
24 ssh2006
 
05.04.12
18:04
Возможно это пример к соседней ветке:
 OFF: Бессмысленная доработка по требованию заказчика
25 DoK_80
 
05.04.12
18:17
(20)
Запрос = Неопределено не помогает
Единственное лечится если в конце процедуры ПриОткрытии поставить
МенеджерВременныхТаблиц.Закрыть();

(21) Но тогда сам смысл использования менеджера пропадает.
Рекурсии нет, да и проверяю сейчас как внешний отчет, и видно что когда форма открыта именно мое соединение постоянно захватывает новые объекты

Думал что это из-за кэша, создал новый отчет, с нуля и прописал там этот же код - ситуация повторилась
26 DoK_80
 
06.04.12
10:35
Порезал код до нижеследующего - все равно захватываются объекты.
Если строку с Запрос.Текст = ... убрать, то объекты не будут захватываться

Перем МенеджерВременныхТаблиц;


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