При формировании аналитических отчетов за длительные периоды пользователи часто сталкиваются с ситуацией, когда программа 1С зависает, выдает системное окно с сообщением «Недостаточно памяти» и аварийно закрывается. Разберем детально, почему это происходит, в каком звене информационной системы возникает узкое место и какими практическими методами можно устранить эту проблему.
Проанализируем архитектуру работы отчетов в конфигурациях на обычных формах (таких как «Управление торговлей 10.3»). При работе в режиме «Толстый клиент» обработка данных и визуализация результата происходят непосредственно на клиентском компьютере или в терминальной сессии пользователя:
1cv8.exe) может адресовать не более 2 ГБ (в редких случаях при специальной настройке ОС — до 3–4 ГБ) оперативной памяти. Даже если на сервере установлено 32 ГБ или 64 ГБ ОЗУ, 32-битный клиент физически не может использовать больше своего системного лимита. Как только объем занимаемой памяти приближается к критической отметке, операционная система отказывает в выделении нового блока, и платформа завершает работу аварийно.Контрагент), а в колонки — другая многотысячная сущность (например, Номенклатура) вместе с периодом (Месяц), создается двумерная матрица с миллионами ячеек. Объект ТабличныйДокумент хранит метаданные оформления, шрифты, границы и типы для каждой ячейки, из-за чего размер документа в оперативной памяти вырастает до гигабайтов при относительно небольшом объеме исходных данных из базы.Самым надежным системным решением проблемы нехватки адресного пространства является установка 64-разрядного клиента 1С. Разберем, как это реализовать:
1С:Предприятие.Развертывание большого справочника номенклатуры в колонки является грубой ошибкой проектирования отчетов. Изменим структуру отчета, чтобы сократить потребление ресурсов:
Ответственный -> Контрагент -> Номенклатура. В колонках оставим только показатели времени (например, Месяц) и числовые ресурсы (СуммаПродажи, Количество). Вертикальная таблица занимает в десятки раз меньше памяти, чем широкая кросс-матрица.Если оперативно перейти на x64-клиент невозможно, рассмотрим вариант временного увеличения доступной виртуальной памяти для пользовательских процессов в 32-разрядных версиях Windows (или 32-битных приложений в 64-разрядной ОС):
bcdedit /set increaseuserva 3072
bcdedit /deletevalue increaseuserva
Если менеджеру действительно необходим огромный массив данных для аналитики, оптимальным подходом будет отказ от отображения таблицы на экране. Реализуем пакетную выгрузку результата запроса напрямую в файл (CSV или Excel) через программный код, минуя визуальный объект ТабличныйДокумент, либо настроим фоновое регламентное задание на сервере с последующей отправкой готового файла на электронную почту.