Начальные данные — конфигурация 1C ERP 2.4, платформа 8.3.12. Симптомы проблемы устойчивые и от объема пользовательских данных не зависят.
Рост потребления памяти для конфигуратора начинается при открытии любой формы.
Рост потребления памяти для rphost при первом подключении.
Поскольку конфигуратор тоже имел проблему с ресурсами, было решено проверить гипотезу о некорректных метаданных. Аномалия была локализована последовательным переносом всех доработок по типам объектов в типовую конфигурацию. При загрузке добавленных ролей был получен характерный рост потребления памяти. Поверхностный анализ явной проблемы не выявил, роли созданы по канонам ERP — одна настройка на чтение или изменение для одного конкретного объекта метаданных. Поэтому ничего лучше, как выгрузить конфигурацию в файлы и проверить исходники, я не придумал. Как оказалось, выгруженные роли занимают более 50% от общего объема и среди этих файлов есть 237 файлов Rights.xml по 20 Мб, общим объемом 4,42 Гб.
Просмотр первого попавшегося файла сразу же определил направление, куда копать. Для теста были созданы две роли на один и тот же объект. После выгрузки проблемная роль так же весила около 20 Мб, корректная роль чуть более 1Кб.
Итак, рецепт воспроизведения проблемы:
1) добавить роль;
2) Действия — Снять все права;
3) … прочие действия по настройке прав;
4) PROFIT!!!
Теперь подробнее, роль создается с такими настройками по умолчанию, на все реквизиты всех объектов установлены права:
После снятия всех ролей права на доступ к реквизитам так же снимаются, но при включенной настройке "Устанавливать права для реквизитов и табличных частей по умолчанию" в настройках прав, помимо наших настроек, для всех реквизитов прочих объектов конфигурации фиксируется значение Ложь.
Починить такую роль можно двумя способами:
— отключить настройку "Устанавливать права для реквизитов и табличных частей по умолчанию";
— отключить/включить настройку для заполнения выключенных реквизитов.
После корректировки проблемных ролей потребление памяти значительно снизилось.
Дополнительная ссылка на статью.
Интересно капнули. Меня всегда напрягало что при открытии редактора форм в конфигураторе ERP — съедалось более 1,5 ГБ памяти
2) Действия — Снять все права;
Для новых ролей достаточно снять ненужные права на корне конфигурации, остальные права (на справочники, подсистемы, константы и т. д.) и так отключены.
Никогда не использовал «Снять все права» — как теперь выяснилось, и правильно.
Убежал проверять…
А с типовыми ролями как быть, там ведь поголовно такая фигня?
(4) есть такое. Либо самому править, либо фиксировать ошибку в 1С и ждать пока зайдут изменения с обновлениями.
Копание в исходниках оказалось довольно интересным занятием. так же были обнаружены два макета табличных документов, в распакованном виде 100 и 40 Мб, в mxl — 24 и 7 Мб соответственно. Ошибка в структуре, после строк с данными разрыв строк на пять и продолжение структуры таблицы вплоть до строки с индексом 65535. После операций копирования содержимого, удаления и вставки обратно размер документов после сохранения стал 15 и 24 Кб. Мелочь на общем фоне, а приятно 🙂
(0) на платформе 8.2.18.109 не работает — какие флажки у роли не ставь, снимай все права, ставь все права — при выгрузке файл формируется одного и того же размера и в нем все равно указаны все объекты.
(7)
Выгрузка в файлы в 8.2 — аналог ключа /DumpConfigFiles
В 8.3 появилась выгрузка в файлы с ключом /DumpConfigToFiles
В первом случае роли выгружаются с настройками по всем объектам конфигурации.
Во втором — как раз, то что нужно.
(0)
На своем сайте выпишите:
Тут написали:
Починить такую роль можно двумя способами:
— отключить настройку «Устанавливать права для реквизитов и табличных частей по умолчанию»;
— отключить/включить настройку для заполнения выключенных реквизитов.
Хочу предостеречь желающих «починить» таким образом. Когда вы попытаетесь нажать на птичку «Устанавливать права для реквизитов и табличных частей по умолчанию» — система вас спросит, а действительно ли вы хотите снять/установить настройки для всех реквизитов и табличных частей? И вот тут надо хорошенько подумать что вы тем самым делаете. У меня есть роли, мои, не типовые. Обе на один документ. Обе позволяют документ читать и писать. Но есть нюанс, вторая роль сделана для пользователей, которые имеют право на просмотр и изменение всего лишь одного реквизита в документе. В этом документе содержится финансовая информация не для посторонних глаз. «Починив» роль вышестоящим образом вы откроете пользователям шикарные виды на размеры определенных выплат. К тому же я видел несколько типовых ролей в ERP где доступ на просмотр тоже есть у пары реквизитов, которые используются в отчетах.
(9) хорошее замечание. Возьму на заметку, что подобные роли стоит выделять наименованием, чтобы не забыть. Вроде, мод_ЧтениеДокумента_Реквизиты.
(10) Кстати я так и не понял откуда у вас взялись роли по 20Мб. В моей старой ERP (2.1.3.93) самая «большая» роль «РазделCRMИМаркетинг» — 10Мб в XML. В новых версиях ERP она отсутствует.
(11) в типовой 2.4.2.144 ЧтениеПретензийКлиентов, ДобавлениеИзменениеПретензийКлиентов уже 16,3 Мб. Плюс доработки внесли свой вес.
ОШибку в 1С отправили?
Понравилась данная статья. Спасибо.
https://infostart.ru/public/1118568/
Вдохновившись, автоматизировал исправление ролей по избыточности настроек: