В процессе разработки на проекте ERP было установлено, что при открытии управляемой формы в конфигураторе захватывается большое количество оперативной памяти, при этом форма открывается достаточно долго (2 мин).
Заинтересовался потреблением памяти - нашел данную тематику на infostart в статье Влияние настройки роли на потребление памяти. По результатам изучения решил изменить роли у нас на проекте, но столкнулся с задачей - автоматизировать изменение ролей в конфигурации. Не нашел готового механизма. В итоге сделал собственную разработку.
Важно:
- Командные строки в алгоритме генерируются по данным базы, в которой запускается обработка
- Роли должны быть с возможностью редактирования (в противном случае ошибка будет ошибка "Загрузка невозможна: редактирование объекта метаданных Role.ИмяРоли запрещено!")
Т.е. необходимо установить статус для изменяемых ролей "Редактируется с сохранением поддержки", если роли на поддержке конечно. - Конфигуратор должен быть закрыт
- У пользователя необходимо отключить "Защита от опасных действий"
Алгоритм
- Запускаем обработку в режиме предприятия:
- Указываем каталог (поле 1), куда будем выгружать файлы конфигурации. Строка запуска (поле 2) генерируется автоматически. Необходимо только ввести данные по пользователю и паролю (поля 3 и 4) (не вводить, если авторизация ОС)
- Нажимаем кнопку выгрузить (кнопка 1). Процесс длительный - пьем кофе. Примечание: может задать вопрос о хранилище, если к нему подключена конфигурация.
- Когда конфигурация выгружена рекомендую (буду делать так) делать копию каталога (как резерв). Затем приступать к следующему шагу.
- Переходим на вкладку "Основное" - выбираем каталог-копию файлов (поле 1) и нажимаем кнопку прочитать (кнопка 2). Ждем...
Примечание: колонки "Добавлять новым объектам", "Устанавливать права для реквизитов", "Независимые права подчиненных объектов" информативные - соответствуют галкам в конфигураторе в роли
- Загружены роли из файлов, которые указаны в колонке "Путь к файлу". Видим колонку "Размер" (по нему сортировка) - его и будем уменьшать.
- Выбираем нужные роли для оптимизации и нажимаем кнопку "Обработать" (кнопка 1)
- Алгоритм обработки прост: мы бежим по файлу XML и удаляем узлы с объектами, которые являются частью основного объекта, но самого объекта в файле нет (т.к. прав на объект нет), а значит и права на зависимые объекты избыточны. Пример: у роли "Роль1" нет прав на справочник "Номенклатура", у реквизитов сняты галки на просмотр и редактирование - следовательно эти реквизиты попадут в файл. Мы же обработкой удалим их из файла.
Отсутствует в файле
- После выполнения обработки выполняем загрузку из каталога, в котором проводили изменения. Переходим на вкладку "Выгрузка/Загрузка"У нас выделены галками измененные роли (закладка "Основное") - они и буду загружены в конфигурацию. выбираем каталог, где изменяли роди (поле 1) и нажимаем кнопку загрузки (поле 2).
- После загрузки ролей необходимо зайти в конфигуратор и обновить базу.
- Результаты:
- 764 мб. оперативной памяти освобождено.
- Скорость открытия формы повышена незначительно - все-таки влияет количество ролей.
- На примере одной роли размер уменьшился с 23 мб. до 956 кб.
Обработка изменяет параметры метаданных конфигурации, поэтому используйте ее сначала на тестовых базах.