Имя: Пароль:
1C
1С v8
Ошибка недостаточно памяти. Как лечить?
,
0 Ivan_495
 
28.02.14
19:40
Ошибка недостаточно памяти. Как лечить?
Удаленное подключение, файловая база 1с , отчет на скд , Обращается к нескольким базам, память выжирает немного больше 3 ГБ, вылетает с ошибкой "недостаточно памяти", Сервер 2008r2
1 Banned
 
28.02.14
19:42
Исправить отчёт так, чтобы он жрал чуть меньше 1гБ
2 Ivan_495
 
28.02.14
19:45
(1) невозможно , при меньшей детализации отрабатывате нормально, при увеличении детализации, ошибка недостаточно памяти, хотя на сервере 12 Гб, а процесс ест тока 4Гб
Как настроить, чтобы удаленное подключение использовало память больше 4ГБ?
3 Banned
 
28.02.14
19:52
(2) Посмотри направо - там будет стенка... Тебе туда с такими вопросамию
4 Ivan_495
 
28.02.14
19:59
up
5 Ivan_495
 
28.02.14
20:02
скорее всего 32- разрядный сервер 1с не может адресовать память больше 4 гб
6 Feunoir
 
28.02.14
20:04
Ну тут как бы особо и советовать нечего. Ты сам всё понимаешь. Если с отчётом сделать ничего нельзя, значит придётся менять сервер на 64 битный.
7 Ivan_495
 
28.02.14
20:22
(6) в отчете все запросы из разных баз гружу в одну таблицу, памяти жрет меньше 1 гб,
когда эту таблицу скармливаю СКД как внешний источник данных, память выжирает сразу 4 Гб
8 vqwy
 
28.02.14
20:34
(0) винпоцетином, не?
9 H A D G E H O G s
 
28.02.14
20:35
(7) Расшифровки, представления ссылочных полей, галочка "автозаполнение"
10 France
 
28.02.14
20:37
в общем, упрощать и уплощать запрос.
11 Ivan_495
 
28.02.14
20:46
(9),(10)
таблицу скармливаю СКД как внешний источник данных,
никакого запроса в скд нет и нет галочки автозаполнение
12 H A D G E H O G s
 
28.02.14
20:56
100500 там какая-то очевидная фигня
13 Ivan_495
 
28.02.14
21:44
(12) какое количество строк можно скормить скд?
14 Ivan_495
 
28.02.14
21:46
индикатор внизу показывает 32%
затем ошибка "недостаточно памяти"
15 Ivan_495
 
28.02.14
21:48
вот создаю табл значений
КЧ = Новый КвалификаторыЧисла(12,2);
    КЧ3 = Новый КвалификаторыЧисла(12,3);
    КС = Новый КвалификаторыСтроки(100);
    Массив = Новый Массив;
    Массив.Добавить(Тип("Строка"));
    ОписаниеТиповС = Новый ОписаниеТипов(Массив, , КС);
    Массив.Очистить();
    Массив.Добавить(Тип("Число"));
    ОписаниеТиповЧ = Новый ОписаниеТипов(Массив, , ,КЧ);
    Массив.Очистить();
    Массив.Добавить(Тип("Число"));
    ОписаниеТиповЧ3 = Новый ОписаниеТипов(Массив, , ,КЧ3);

    tabl_all=Новый ТаблицаЗначений;
    tabl_all.Колонки.Добавить("Организация",ОписаниеТиповС);
    tabl_all.Колонки.Добавить("Период");
    tabl_all.Колонки.Добавить("Контрагент", ОписаниеТиповС);
    tabl_all.Колонки.Добавить("Менеджер", ОписаниеТиповС);
    tabl_all.Колонки.Добавить("Регион", ОписаниеТиповС);
    tabl_all.Колонки.Добавить("Сумма",ОписаниеТиповЧ);
    tabl_all.Колонки.Добавить("кг",ОписаниеТиповЧ3);
    tabl_all.Колонки.Добавить("кор",ОписаниеТиповЧ3);
    tabl_all.Колонки.Добавить("Товар", ОписаниеТиповС);
    tabl_all.Колонки.Добавить("Документ", ОписаниеТиповС);

затем запрос
    V84=Новый ComОбъект("V82.Application");
            ПУть4="D:";
            Попытка
                    Открытие4=V84.Connect("File="""+ПУть4+""";);
            Исключение
                Сообщить("База данных не открыта!");
                V84=0;
                Открытие4=ЛОЖЬ;
                Возврат;
            КонецПопытки;
        //КонецЕСли;
            
     ЗапросКом4 =V84.newObject("Запрос");
     ЗапросКом4.Текст = ВНЕШНИЙЗАПРОС;
    

    ЗапросКом4.УстановитьПараметр("НачалоПериода", ЭтотОбъект.ПолучитьФорму("Продажи").ПараметрДанныхНачалоПериода.Значение);    
    ЗапросКом4.УстановитьПараметр("КонецПериода", ЭтотОбъект.ПолучитьФорму("Продажи").ПараметрДанныхКонецПериода.Значение);
    ЗапросКом4.УстановитьПараметр("Периодичность",ЭтотОбъект.ПолучитьФорму("Продажи").ПараметрДанныхПериодичность.Значение);
    ЗапросКом4.УстановитьПараметр("ТолькоПродажи",ЭтотОбъект.ПолучитьФорму("Продажи").ПараметрДанныхТолькоПродажи.Значение);
    
    Результат = ЗапросКом4.Выполнить().Выгрузить();
        Для каждого  тек из   Результат цикл
        Нов_стр=tabl_all.Добавить();
        Нов_стр.Организация=тек.Организация+"old" ;
        Нов_стр.Период=тек.Период;
        Нов_стр.Контрагент=тек.Контрагент;
        Нов_стр.Менеджер=тек.Менеджер;
        Нов_стр.Регион=тек.Регион;
        Нов_стр.Сумма=тек.сумма;
        Нов_стр.кор=тек.кор;
        Нов_стр.кг=тек.кг;
        Нов_стр.Товар=тек.Товар;
        Нов_стр.Документ=тек.Документ;
    КонецЦикла;
V84.ЗавершитьРаботуСистемы(ложь);
    V84=0;
     Открытие4=ЛОЖЬ;
     Результат=0;
/////////////////////////////////////////////4-я база конец


   // Попытка
    ВнешниеНаборыДанных = Новый Структура;
   ВнешниеНаборыДанных.Вставить("Продано",tabl_all);
   tabl_all=0;
  
    Настройки =    КомпоновщикНастроек.Настройки;
    ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
      
    ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
    
    ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,ВнешниеНаборыДанных, ДанныеРасшифровки);

        
    ЭтотОбъект.ПолучитьФорму("Продажи").ЭлементыФормы.Результат.Очистить();

    ДокументРезультат = ЭтотОбъект.ПолучитьФорму("Продажи").ЭлементыФормы.Результат;
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
    
    ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
16 Ivan_495
 
28.02.14
21:49
в таблице хранятся строки длиной 100 симв и числа
17 Ivan_495
 
28.02.14
21:52
почему скд хочет больше 4 Гб памяти для обработки этой таблицы?
18 serffer
 
28.02.14
21:58
не факт что поможет, но вместо выгрузить() из запроса попробуй использовать выбрать() тогда переменная результат не будет есть память.
не используй параметр функции данныеРасшифровки - мне кажется они тоже отъедают память.

а какой запрос в СхемаКомпоновкиДанных? или там просто набор-Объект?
если да, то может ограничить поля выбора какнибудь?
в (9) тебе это примерно советуют.
19 Ivan_495
 
28.02.14
22:02
набор-Объект
поля ограничил как строковые длиной 100 симв
20 Ivan_495
 
28.02.14
22:08
данныеРасшифровки  тоже убрал, щас запустил
21 Ivan_495
 
28.02.14
22:10
(18) в скд Набор-Объект
22 NcSteel
 
28.02.14
22:11
(5) Батюшки вот это открытие ))))
23 France
 
28.02.14
22:12
ДокументРезультат = ЭтотОбъект.ПолучитьФорму("Продажи").ЭлементыФормы.Результат; -???
24 NcSteel
 
28.02.14
22:14
(23) Да это эпично!!!
25 Ivan_495
 
28.02.14
22:16
(18) в отчете должно получиться 365 колонок, для скд это нормально?
26 NcSteel
 
28.02.14
22:18
(25) Для человека это не нормально! Нафуя. Я уверен, что человек анализирует максимум 5. Лучше по требованию ему выдавать доп колонки
27 Ivan_495
 
28.02.14
22:26
все замечения приняты
расшифровки убрал, ограничения по полям сделал,
раньше ошибка вылетала на 32% сейчас на 64%
28 Ivan_495
 
28.02.14
22:26
да скд явно не OLAP
что еще посоветуете настроить в скд
29 Ivan_495
 
28.02.14
22:35
перед выполнением этих операторов, отчет использует всего лишь 240 мбайт оперативки
ВнешниеНаборыДанных = Новый Структура;
   ВнешниеНаборыДанных.Вставить("Продано",tabl_all);
Настройки =    КомпоновщикНастроек.Настройки;
    
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки);
      
    ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
    
    ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,ВнешниеНаборыДанных);

        
    ЭтотОбъект.ПолучитьФорму("Продажи").ЭлементыФормы.Результат.Очистить();

    ДокументРезультат = ЭтотОбъект.ПолучитьФорму("Продажи").ЭлементыФормы.Результат;
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
    
    ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
при выполнении этих операторов рост использования памяти до 4Гб
30 Ivan_495
 
28.02.14
22:45
up
31 NcSteel
 
28.02.14
22:51
(30) Зачем апать, тебе уже сказали, либо уменьшай объем данных, либо переходи на 64 разряда.
32 France
 
28.02.14
22:57
и заодно почитай и про FASMI.
хы.. несчастные Кодд и Пендс..
33 Ivan_495
 
28.02.14
22:57
(31)может есть спецы по СКД еще , что-нибудь подскажут
34 NcSteel
 
28.02.14
22:58
(33) А почему:

ЭтотОбъект.ПолучитьФорму("Продажи").ЭлементыФормы.Результат.Очистить();

Не убрал... нравится объекты получать?

И выводи на норальный ТабДок.
35 Рэйв
 
28.02.14
23:33
Памяти добить хотябы до 8 уже предлагали?
36 France
 
01.03.14
00:23
(35)  не поможет. Я свои 8 Григов кома за пару секунд кривой на стройкой скд в даун отправлял. 64 битый, кстати. И вообще, крутой комп для разработчика - это зло. Кто не верит - милости прошу в ут 11 поработать
37 Mikhail Volkov
 
01.03.14
10:49
(17) Все же сервер 1С (не 2008r2) скольки разрядный?
38 Mikhail Volkov
 
01.03.14
10:51
С такой ошибкой "недостаточно памяти" 1С вылетает, когда мало места на системном диске
39 H A D G E H O G s
 
01.03.14
11:57
Я могу подключить, глянуть
пишите
374-881-272
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.