«Чистые» доработки: как обновить доработанную роль в поставляемом расширении 1С
Почему стандартное обновление ролей — проблема
Поставляемое расширение (например, от партнёра или разработчика) содержит предопределённые роли и права доступа. При установке новой версии разработчик выгружает полный набор объектов метаданных, включая роли. Если вы ранее внесли изменения в эти роли (добавили или убрали права), при обновлении они будут заменены на версию из поставки. Механизм «чистых» доработок предлагает не трогать исходные роли, а надстраивать поверх них дополнительный слой прав.
Как устроены роли в расширениях
Роль в конфигурации — это объект метаданных, состоящий из набора прав на объекты (документы, справочники, отчёты). В расширении роль может быть унаследована от основной конфигурации или определена заново. При обновлении расширения файл формы роли (или XML-представление) полностью замещается. Поэтому все правки внутри исходной роли будут потеряны, если не используется механизм объектных расширений.
Совет: не пытайтесь править роль непосредственно в расширении, если планируете его обновлять. Все доработки выносите в отдельный, «свой» модуль прав.
Стратегия «чистых» доработок
Основная идея — создать отдельное (дочернее) расширение, которое будет содержать только изменённые права. Это расширение накладывается поверх поставляемого и переопределяет нужные разрешения. При обновлении поставки ваше расширение остаётся нетронутым, а изменения в правах не теряются.
Алгоритм перехода на чистый подход
- Выгрузите текущую конфигурацию (расширение + основная конфигурация) в файлы через меню «Конфигурация → Выгрузить конфигурацию в файлы».
- Найдите в выгруженных файлах XML-представления всех ролей, которые вы дорабатывали. Скопируйте их в отдельную папку «мои_роли».
- Создайте новое расширение (например, «МоиПрава»). В качестве конфигурации-родителя укажите основную конфигурацию (не поставляемое расширение).
- Перенесите в новое расширение только те роли, которые вы изменяли, предварительно удалив из них права, дублирующие исходные. Оставьте только те строки прав, которые были добавлены вами.
- Убедитесь, что новое расширение стоит выше поставляемого в списке расширений (диалог «Конфигурация - Расширения конфигурации»): выберите своё расширение и используйте кнопки перемещения вверх/вниз.
- Протестируйте работу - при совпадении ролей в обоих расширениях приоритет отдаётся тому, которое стоит выше в списке расширений конфигурации.
Пример: программное чтение и сравнение XML-ролей
Процедура ПрочитатьПраваИзФайла(ПутьКФайлу, СоответствиеПрав)
Чтение = Новый ЧтениеТекста(ПутьКФайлу, КодировкаТекста.UTF8);
Текст = Чтение.Прочитать();
Чтение.Закрыть();
// Упрощённый разбор XML (для реальной задачи используйте ЧтениеXML)
Начало = Найти(Текст, "<Право Имя="");
Пока Начало > 0 Цикл
КонецСтроки = Найти(Текст, "" />", Начало);
Если КонецСтроки = 0 Тогда
Прервать;
КонецЕсли;
ИмяПрава = Сред(Текст, Начало+13, КонецСтроки - Начало - 13);
СоответствиеПрав.Вставить(ИмяПрава, Истина);
Начало = Найти(Текст, "<Право Имя="", КонецСтроки+5);
КонецЦикла;
КонецПроцедуры
В реальном проекте используйте объект «ЧтениеXML» и DOM-модель. Приведённый код — иллюстрация принципа.
Практическое руководство: что делать прямо сейчас
Чек-лист для перехода на чистые доработки
- ✔ Создайте отдельное расширение для модификации прав.
- ✔ Перенесите в него только те роли, которые вы изменяли, исключив все неизменённые.
- ✔ Поставьте ваше расширение выше поставляемого в списке (диалог «Конфигурация - Расширения конфигурации», кнопки перемещения).
- ✔ Проверьте порядок расширений в конфигураторе (меню «Конфигурация → Расширения конфигурации»).
- ✔ Проведите регрессионное тестирование прав доступа.
Типичные ошибки
| Ошибка | Последствие |
|---|---|
| Править роли в поставляемом расширении напрямую | Изменения теряются при обновлении |
| Создать дочернее расширение, но не исключить дублирующие права | Конфликт двух одинаковых ролей, приоритет неопределённый |
| Не проверить порядок расширений | Ваше расширение может быть отключено или перекрыто другим |
| Использовать одну и ту же роль в двух расширениях с разным набором прав | Результирующие права непредсказуемы |
Сравнение подходов к доработке ролей
| Подход | Сложность внедрения | Устойчивость к обновлениям | Рекомендуемая область применения |
|---|---|---|---|
| Изменение исходного расширения | Низкая | Нет | Прототипирование, разовые доработки |
| Отдельное дочернее расширение | Средняя | Да | Штатные внедрения, типовые конфигурации |
| Набор обработок, динамически меняющих права | Высокая | Да (при правильной архитектуре) | Сложные AUX-системы, тонкая настройка по пользователю |
Первый способ допустим только при полном отказе от обновлений расширения. Второй — современный стандарт «чистых доработок».
Заключение
Методика «чистых доработок» ролей в расширениях 1С — это простой и надёжный способ защитить свои изменения от перезаписи при обновлении. Вынося все правки в собственное расширение, вы сохраняете возможность легко получать новые версии поставки, не опасаясь потери донастроек. Рекомендуем внедрить этот подход во всех проектах, где используются поставляемые расширения.
Попробовать НОПик →