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