8.х 1С8.1-УТ 10.3 Сообщение "Недостаточно памяти"

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем iliko, 2 ноя 2010.

  1. TopicStarter Overlay
    iliko
    Offline

    iliko Опытный в 1С

    Регистрация:
    6 май 2008
    Сообщения:
    136
    Симпатии:
    0
    Баллы:
    26
    Есть функционирующе 2.5 года "СУПЕР-МЕГА-ОТЧЕТ" - "Комплекс отчета по продажам"
    ввиду особенностей отчета - предварительно все данные записывааются в ТЗ ,
    а потом делается региональные вырезки из него

    Реально массивы занимают примерно 500-600 тыс ячеек
    точнее сказать не могу - требуется мго врмени для отлавливания

    Срыв 1С происходит , когда 1С начинает занимать в памяти 800 Мб
    Конфигурация УТ-10.3.1.17 , релиз движка 8.1.15.14


    1.Данный отчет формируется в 50 вариантах , в заисимости от уровня допуск менеджера
    2.Данный отчет формиуется в Excel и рассылается менеджерам
    3.В отчет входят следующие закладки
    - Продажи в шт. за месяц
    - Продажи в объеме за месяц
    - Продажи в суммах за месяц
    - Заказы за месяц
    - Остатки на складах на дату
    - Банковские платежи за месяц
    - Дебиторка по срокам просрочки - с кредитными документами
    - Дебиторка итоговая с периодами просрочки
    - Дебиторка/кредиторка сводная
    - Накопительные продажи с начала года сводно + 5 регионам на отдельных закладках
    - План-факт продаж за месяц на 4-х закладках с разным уровнем детализации
    - План-факт продаж за год на 4-х закладках с разным уровнем детализации
    И данный комплект формируется в 50 вариантах ежедневно ,
    т.е формировать на каждый из 50 вариант запрос и выводить его отдельно ---
    то получается огомноео количество времени порядка 5 часов

    Очтет был оптимизирован для скорости и все данные собираются в ТЗ ,
    а потом фильтрацией делится на варианты
    --- может кому-то пригодиться - приведен ниже пример

    Теперь по сравнению с прошлым годом объем документов вырос в 3 раза
    и отчет ПАДАЕТ .....

    Вопрос: Какой размер памяти выделяется в 1С под ТЗ ,
    и возможно ли без изменения пролграммы - как то выделить больше памяти ???


    Код:
    
    //TЗ_в_ДЗ(ТаблицаПлан, 
    //Дерево_Итогов, "Номенклатура","ПродажиКоличество,ПродажиСтоимость,
    //ПланыПродажКоличество,ПланыПродажКоличествоБюджет,ПланыПродажСтоимостьБюджет,
    //ПланыПродажКоличествоБюджетАктуальный,ПланыПродажСтоимостьБюджетАктуальный,
    //ОтклонениеКоличество,ОтклонениеКоличествоБюджет,ОтклонениеФуры", 
    //СтруктураКритериев, СтруктураСложныхКритериев);	
    
    Функция ТЗ_в_ДЗ(ТаблицаРезультатов, ДЗ , Знач КолонкиГруппировок= "", Знач КолонкиИтогов = "", СтруктураКритериев=Неопределено, СтруктураСложныхКритериев = Неопределено) Экспорт
    
    Перем ВидСравненияСложный;
    
    ПЗ = Новый ПостроительЗапроса;
    ПЗ.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТаблицаРезультатов);
    ПЗ.ДобавлениеПредставлений = ТипДобавленияПредставлений.НеДобавлять;
    
    СтруктураГруппировок = Новый Структура(КолонкиГруппировок);
    Для Каждого Эл Из СтруктураГруппировок Цикл
    ПЗ.ИсточникДанных.Колонки[Эл.Ключ].Измерение = Истина;
    КонецЦикла;
    
    СтруктураСуммирования = Новый Структура(КолонкиИтогов);
    Для каждого Эл Из СтруктураСуммирования Цикл
    ПЗ.ИсточникДанных.Колонки[Эл.Ключ].Итог = "Сумма("+Эл.Ключ+")";
    КонецЦикла;
    
    Если СтруктураСложныхКритериев = Неопределено Тогда
    СтруктураСложныхКритериев = Новый Структура;
    КонецЕсли;
    
    Если СтруктураКритериев <> Неопределено тогда 
    Для Каждого Критерий Из СтруктураКритериев Цикл
    НовыйОтбор = ПЗ.Отбор.Добавить(Критерий.Ключ);
    
    СтруктураСложныхКритериев.Свойство(Критерий.Ключ, ВидСравненияСложный);
    
    Если ВидСравненияСложный = Неопределено Тогда
    НовыйОтбор.Установить(Критерий.Значение);
    Иначе
    НовыйОтбор.Использование = Истина;
    НовыйОтбор.ВидСравнения = ВидСравненияСложный;
    НовыйОтбор.Значение = Критерий.Значение;
    КонецЕсли;
    КонецЦикла;
    КонецЕсли;
    
    ПЗ.ЗаполнитьНастройки();
    ПЗ.Выполнить();
    
    ДЗ = Новый ДеревоЗначений; 
    ДЗ.Строки.Очистить();
    ДЗ = ПЗ.Результат.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам);
    
    Возврат Истина; 
    
    КонецФункции
    
    
    
  2. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Думаю что конкретно под ТЗ - нисколько, т.е. имею ввиду, что суммарно на процесс 1С, как и для любого 32х битного приложения - до 2Гб. В таком случае - изменить естественно возможности нет, это ограничение архитектуры.
    Есть возможность запустить отчет под х64?
  3. TopicStarter Overlay
    iliko
    Offline

    iliko Опытный в 1С

    Регистрация:
    6 май 2008
    Сообщения:
    136
    Симпатии:
    0
    Баллы:
    26
    Но в том то и прикол , что слетает то иногда при 800 мб , иногда то при 1,1 Гб занятой памяти до 2Гб не дотягивает ....

    под 64-бит может сделаем , но только через годие - а отчет нужен
    сейчас и ежедневно ,
    конечно запасы по оптимизации отчета есть - но это придется извращаться

    Сначала пакетно вывести один комплект листов Excel
    из одного ТЗ (самый большой) , а потом все остальные
  4. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Реально исправить ситуацию сможет только использование СКД с тщательной проработкой объектов-источников.

    В текущем виде у вас вся обработка идет на клиенте - вот все и падает :)
    64 бита вас не спасет при таком подходе все равно - на клиенте будет все падать.

    Поэтому рекомендую задуматься о полном рефакторинге кода

Поделиться этой страницей