При разработке расширений в среде 1С:Предприятие 8.3 программисты часто сталкиваются с неприятной ситуацией: в расширение добавляется новый документ, для него создается специальная роль с полными правами, эта роль назначается пользователю, но при попытке открыть форму списка или форму самого документа система выдает ошибку: «Недостаточно прав для просмотра». Данная проблема особенно актуальна для конфигураций, построенных на базе Библиотеки стандартных подсистем (БСП), таких как «Бухгалтерия государственного учреждения» (БГУ), «Бухгалтерия предприятия» (БП), «Зарплата и управление персоналом» (ЗУП) и других.
В этой статье мы подробно разберем, почему возникает эта ошибка, проанализируем внутренние механизмы платформы 1С и БСП, а также рассмотрим по шагам несколько эффективных способов решения этой проблемы.
Прежде всего, разберем важное и неочевидное правило платформы 1С:Предприятие 8.3, определяющее поведение прав доступа к объектам расширения:
Проанализируем ситуацию: у вашего пользователя в основной конфигурации могут быть назначены ПолныеПрава. Однако типовая роль ПолныеПрава из основной конфигурации ничего «не знает» о вашем новом документе, который существует только в расширении. Так как в расширении появилась хотя бы одна собственная роль, платформа блокирует автоматический доступ к документу для всех остальных ролей, включая полные права администратора.
Решение проблемы:
Необходимо заимствовать роль ПолныеПрава (или аналогичную административную роль вашей конфигурации) из основной конфигурации в ваше расширение. Для этого выполните следующие действия:
ПолныеПрава или Администратор).Чтение, Просмотр, Изменение, Интерактивное добавление и т. д.) в рамках заимствованной роли.При создании нового расширения платформа 1С автоматически генерирует в нем служебную роль вида ИмяРасширения_ОсновнаяРоль (или аналогичное имя) и прописывает ее в свойствах самого расширения. Выясним, как это влияет на права доступа.
Эта роль предназначена для автоматического назначения прав, но на практике она часто вступает в конфликт с механизмами авторизации и ролевой моделью БСП, из-за чего пользователи с полными правами неожиданно теряют доступ к новым объектам.
Пошаговое решение по отключению основной роли:
ИмяРасширения_ОсновнаяРоль и удалите её.Если ваша конфигурация разработана на платформе БСП (как «Бухгалтерия государственного учреждения 2.0»), назначение прав через стандартный конфигуратор 1С часто не дает результата. БСП управляет правами пользователей программно, используя справочники Профили групп доступа, Группы доступа и специальный реестр объектов под названием Идентификаторы объектов метаданных.
Когда вы добавляете новый документ и новую роль в расширение, БСП просто «не видит» их, пока не произойдет обновление внутренней справочной информации системы.
Решение по интеграции роли расширения в БСП:
Для того чтобы система зарегистрировала новые метаданные и позволила настроить права в режиме «1С:Предприятие», выполните следующие шаги:
Справочники.ИдентификаторыОбъектовРасширений.ОбновитьДанныеСправочника(Истина);
Также можно запустить базу из командной строки с параметром /С ЗапуститьОбновлениеИнформационнойБазы (обратите внимание, что символ «С» должен быть набран в латинской раскладке клавиатуры).Рассмотрим ситуацию, когда вам необходимо оперативно протестировать работу нового документа под конкретным пользователем без детальной настройки профилей доступа БСП. В этом случае созданную в расширении роль можно принудительно добавить пользователю информационной базы программным путем.
Для этого воспользуемся возможностями встроенного языка 1С. Создайте внешнюю обработку и выполните следующий код в модуле (например, по нажатию кнопки на форме):
ИмяПользователяИБ = "ИвановИИ"; // Укажите имя вашего тестируемого пользователя
ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени(ИмяПользователяИБ);
Если ПользовательИБ <> Неопределено Тогда
ИмяРолиРасширения = "ИмяВашейРолиИзРасширения";
// Проверим, добавлена ли уже роль пользователю
Если Не ПользовательИБ.Роли.Содержит(Метаданные.Роли[ИмяРолиРасширения]) Тогда
ПользовательИБ.Роли.Добавить(Метаданные.Роли[ИмяРолиРасширения]);
ПользовательИБ.Записать();
Сообщить("Роль успешно добавлена пользователю " + ИмяПользователяИБ);
Иначе
Сообщить("У пользователя уже есть данная роль!");
КонецЕсли;
КонецЕсли;
Важное предупреждение: Данный метод отлично подходит для целей разработки и тестирования. Однако при работе в реальной (продуктивной) базе данных механизмы БСП при выполнении регламентных заданий или обновлении системы могут автоматически синхронизировать права и затереть роли, назначенные в обход справочника «Группы доступа». Поэтому для долгосрочного решения всегда используйте настройку через профили групп доступа, описанную в Причине 3.
Если вы создали новый документ в расширении и получаете ошибку прав, проверьте выполнение следующих условий:
ИмяРасширения_ОсновнаяРоль удалена.ПолныеПрава (или административную роль) из основной конфигурации в расширение и проставили в ней все флажки прав на ваш новый документ.Справочники.ИдентификаторыОбъектовРасширений.ОбновитьДанныеСправочника(Истина).Следуя этим правилам, вы гарантированно решите проблемы с ограничением прав на новые объекты в расширениях 1С и обеспечите их корректную работу в любых типовых конфигурациях.