При разработке новых механизмов в типовых конфигурациях 1С часто возникает задача: добавить новый объект (например, Регистр сведений) и предоставить права на его чтение всем пользователям системы. При этом критически важно сохранить конфигурацию на поддержке, проанализировать зависимости в конфигурации и правильно обработать механизмы хранилища, если разработка ведется коллективно. Рассмотрим детально, как это реализовать, разберем работу с окном «Все роли» и современные альтернативные методы решения задачи.
Если вы решили вносить изменения непосредственно в основную конфигурацию, первым делом необходимо включить возможность редактирования. Для этого перейдем в меню Конфигурация — Поддержка — Настройка поддержки и нажмем кнопку «Включить возможность изменения». При этом для объектов поставщика следует оставить режим «Объект поставщика редактируется с сохранением поддержки». Это позволит нам добавлять свои объекты и редактировать существующие роли, не теряя связи с обновлениями от 1С.
Рассмотрим пошагово, как массово проставить права на чтение для нового регистра:
РегистрСведений.Важный нюанс при работе с хранилищем: часто разработчики сталкиваются с тем, что поле выбора прав во «Всех ролях» заблокировано. Проанализируем ситуацию: права доступа — это свойство, которое записывается одновременно и в объект (регистр), и в саму роль. Поэтому, чтобы окно редактирования стало активным, нам необходимо выполнить «Захват в хранилище» для следующих элементов:
Если конфигурация большая (например, ERP или УПП), захват всех ролей может занять длительное время. В таком случае рекомендуется захватывать только те роли, которые действительно необходимы для работы пользователей с данным регистром.
Современный стандарт разработки в 1С предполагает минимизацию изменений в основной конфигурации. Рассмотрим наиболее правильный способ решения задачи — использование Расширений. Этот метод позволяет вообще не снимать основную конфигурацию с «замка».
Алгоритм действий следующий:
РегистрСведений (если он был создан в расширении) или заимствуем его из основной конфигурации.ЧтениеНовогоРегистра.Чтение и Просмотр на нужный регистр.Преимущество этого метода в том, что при обновлении основной конфигурации вам не придется заново объединять измененные роли, так как все права хранятся в отдельном слое расширения.
Если ваша конфигурация построена на базе Библиотеки стандартных подсистем (БСП), простой простановки галочек в конфигураторе может быть недостаточно. Выясним причину: типовые профили групп доступа работают на основе справочника ИдентификаторыОбъектовМетаданных. Если вы добавили новый регистр, система должна «узнать» о нем в пользовательском режиме.
Для регистрации изменений выполним следующие действия:
/ЗапуститьОбновлениеИнформационнойБазы
Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеСправочника();
Проанализируем еще одну ситуацию: если чтение данных регистра требуется не пользователю напрямую через интерфейс, а программному коду для выполнения каких-то расчетов. В этом случае изменять права всех ролей нецелесообразно с точки зрения безопасности. Рассмотрим, как программно обойти проверку прав:
В модуле менеджера регистра или в общем модуле используем конструкцию:
УстановитьПривилегированныйРежим(Истина);
// Здесь выполняется запрос к регистру или чтение набора записей
Выборка = РегистрыСведений.НашНовыйРегистр.Выбрать();
УстановитьПривилегированныйРежим(Ложь);
Это позволяет коду прочитать данные, даже если у текущего пользователя нет явного права Чтение в его ролях. При этом сам регистр останется скрытым от пользователя в списках «Все функции» и отчетах, что соответствует принципу минимизации прав доступа.
Для опытных разработчиков, работающих с очень большим количеством ролей, ручная простановка галочек — трудоемкий процесс. Посмотрим на альтернативу: права доступа в ролях хранятся в файлах метаданных в формате XML. Мы можем:
Role.ИмяРоли.xml.Резюме: Для разовой задачи оптимально использовать окно «Все роли», предварительно захватив в хранилище сам объект и нужные роли. Для долгосрочной поддержки проекта лучше использовать Расширения и создавать специализированные роли для новых объектов, не забывая обновлять идентификаторы объектов метаданных в пользовательском режиме.