Имя: Пароль:
1C
1С v8
v8: Документ отжирает память и не освобождает ее
, ,
0 gar_den
 
21.03.12
10:21
В документе есть реквизит типа ХранилищеЗначений.
При открытии документа это хранилище получается:

Настройки = ХранЗнач.Получить();

на этом месте отжирается большое количество памяти. После закрытия докмуента память не освобождается.

Настройки = ""; - не помогает.

В итоге при работе с ситемой она вылетает с сообщением Недостаточно памяти.

Подскажите как это можно побороть
1 Jstunner
 
21.03.12
10:23
А если вообще убрать настройки?
2 gar_den
 
21.03.12
10:26
а как данные тогда из хранилища доставать?
3 catena
 
21.03.12
10:52
Настройки - это что? Переменная модуля, переменная формы? Объявляется в форме, вызывается в модуле?
4 asady
 
21.03.12
10:55
(0) реквизиты доков и справочников типа ХранилищеЗначений зло. - для этого надо юзать РС.

мой совет: вынести этот реквизит в РС а сам реквизит удалить.
5 gar_den
 
21.03.12
11:06
(3) переменная внутри процедуры
6 H A D G E H O G s
 
21.03.12
11:14
Код работы полностью покажи
7 gar_den
 
21.03.12
11:16
(4) упс. ошибся. это как раз не переменная, а РС
8 gar_den
 
21.03.12
11:19
// Получаем настройки
Запрос.Текст="ВЫБРАТЬ
       |    ХранилищаПараметрическойНастройки.ДанныеПараметрическойНастройки
       |ИЗ
       |    РегистрСведений.ХранилищаПараметрическойНастройки КАК ХранилищаПараметрическойНастройки
       |ГДЕ
       |    ХранилищаПараметрическойНастройки.ПравилоОбработки = &ПравилоОбработки";

Результат=Запрос.Выполнить().Выбрать();

Если Результат.Следующий() Тогда
       
       СохраненныеДанные = Результат.ДанныеПараметрическойНастройки.Получить();                            
           
   КонецЕсли;

мПоказателиДляОбработки=СохраненныеДанные.мПоказателиДляОбработки.Скопировать();
мДеревоПересчета=СохраненныеДанные.мДеревоПересчета.Скопировать();

СохраненныеДанные = "";
9 gar_den
 
21.03.12
11:20
причем если СохраненныеДанные = ""; выполнить сразу после СохраненныеДанные = Результат.ДанныеПараметрическойНастройки.Получить(); то память освобождается
10 H A D G E H O G s
 
21.03.12
11:21
мПоказателиДляОбработки=СохраненныеДанные.мПоказателиДляОбработки.Скопировать();
мДеревоПересчета=СохраненныеДанные.мДеревоПересчета.Скопировать();

А это чего?
11 H A D G E H O G s
 
21.03.12
11:22
Это же остается.

Скажи:

СтрДлина(ЗначениеВСтрокуВнутр(мПоказателиДляОбработки));
СтрДлина(ЗначениеВСтрокуВнутр(мДеревоПересчета));
12 gar_den
 
21.03.12
11:34
(10) это переменные модуля документа. он с ними потом работает
13 gar_den
 
21.03.12
11:36
(11) СтрДлина(ЗначениеВСтрокуВнутр(мПоказателиДляОбработки)); - 1 473 809
14 PVV65
 
21.03.12
12:57
(8) В обработчике события формы ПриЗакрытии напиши

мПоказателиДляОбработки = НЕОПРЕДЕЛЕНО;
мДеревоПересчета = НЕОПРЕДЕЛЕНО;