Почему неактивна кнопка «Создать» в регистре сведений «Штрихкоды» и как это исправить

Программист 1С v8.3 (Управляемые формы) 1С:Розница Управленческий учет Торговля и дистрибуция
← На главную

Рассмотрим классическую техническую проблему, с которой часто сталкиваются как начинающие разработчики, так и опытные специалисты при настройке прав доступа в современных типовых конфигурациях 1С (таких как «Розница 2», «Управление торговлей 11», «Комплексная автоматизация 2» или «ERP 2»).

Ситуация выглядит следующим образом: пользователю с ограниченными правами требуется предоставить возможность создавать и редактировать штрихкоды номенклатуры. Администратор заходит в Конфигуратор, находит регистр сведений ШтрихкодыНоменклатуры (или Штрихкоды), проставляет все галочки (включая «Запись» и «Интерактивное добавление») для нужной роли, но при запуске системы в режиме «1С:Предприятие» кнопка «Создать» в форме списка регистра остается неактивной (серой). При этом пользователь может зайти в существующие записи, изменить штрихкод и успешно его записать.

Выясним причину такого поведения платформы и разберем по шагам, как устроен этот механизм изнутри и как правильно решить проблему.

---

Почему стандартная настройка прав в Конфигураторе не работает?

Поведение интерфейса в современных конфигурациях 1С кардинально отличается от простой проверки прав на уровне СУБД. Даже если платформа разрешает запись в таблицу БД, прикладной код конфигурации может принудительно блокировать элементы управления на форме. Выделим четыре основные причины, почему это происходит.

1. Программная проверка имен ролей в коде (Hardcode)

В конфигурациях, разработанных на базе БСП (Библиотеки стандартных подсистем), доступность элементов интерфейса очень часто регулируется программно. Код проверяет наличие конкретной роли у текущего пользователя не по правам на метаданные, а по ее точному строковому имени.

Обычно это происходит в модуле формы списка или записи в событии ПриСозданииНаСервере или через вызовы общих модулей. Код выглядит примерно так:


Если Не Пользователи.РолиДоступны("ПолныеПрава, ДобавлениеИзменениеНоменклатуры") Тогда
    // Блокировка кнопки Создать на форме списка
    Элементы.ФормаСоздать.Доступность = Ложь;
    // Блокировка интерактивного добавления в динамическом списке
    Список.РазрешитьДобавление = Ложь;
КонецЕсли;

Если вы скопировали роль ПолныеПрава и назвали ее, например, ПолныеПрава_Копия или настроили свою роль МояПользовательскаяРоль, функция Пользователи.РолиДоступны() вернет значение Ложь. Система «не узнает» вашу роль, даже если внутри нее открыты абсолютно все права, и программно отключит кнопку добавления.

2. Зависимость от прав на ведущий объект (Владелец / Измерение)

Штрихкоды в системе не существуют изолированно — они жестко подчинены справочнику Номенклатура или ХарактеристикиНоменклатуры. В бизнес-логике 1С заложен жесткий принцип подчиненности данных:

Если пользователь не имеет права изменять саму номенклатуру (владельца), он не должен иметь возможности создавать новые штрихкоды для нее.

При открытии формы списка штрихкодов система анализирует права доступа текущего пользователя к объекту Справочник.Номенклатура. Если у пользователя отсутствует типовая роль ДобавлениеИзменениеНоменклатуры, интерфейс автоматически переводит форму регистра штрихкодов в режим «Только просмотр» для предотвращения логической несогласованности данных.

3. Механизм кэширования прав БСП

Современные конфигурации используют подсистему «Управление доступом» БСП. Права пользователей рассчитываются динамически и кэшируются в специальных служебных регистрах сведений (например, ПраваРолейПользователей, ТаблицыГруппДоступа и др.).

Назначение ролей пользователям напрямую в Конфигураторе — это грубое нарушение стандартов БСП. При таком подходе кэш прав БСП не обновляется. Когда программа обращается к методам вроде УправлениеДоступом.ДоступноПраво(), система запрашивает информацию из кэшированных таблиц. Так как роль была добавлена «в обход» (напрямую в Конфигураторе, а не через профили групп доступа), БСП считает, что прав у пользователя нет, и блокирует интерфейс.

---

Пошаговая инструкция по решению проблемы

Проанализировав причины, разберем по шагам, как правильно настроить доступ к созданию штрихкодов без изменения типовой конфигурации и снятия объектов с поддержки.

Шаг 1. Откажитесь от назначения ролей в Конфигураторе

Зайдите в Конфигуратор, откройте список пользователей и снимите все роли с проблемного пользователя, кроме роли ЗапускУправляемогоПриложения (и базовых ролей БСП/РТ, если они используются для авторизации). Все основные права должны назначаться в пользовательском режиме (1С:Предприятие).

Шаг 2. Создание или настройка профиля групп доступа

Запустите информационную базу в режиме «1С:Предприятие» под учетной записью с административными правами. Выполните следующие действия:

  1. Перейдите в раздел Администрирование — Настройки пользователей и прав — Профили групп доступа.
  2. Найдите предопределенный профиль, отвечающий за работу с номенклатурой (например, «Ответственный за ведение номенклатуры») или создайте новый профиль.
  3. Убедитесь, что в списке ролей этого профиля включена роль «Регистрация штрихкодов номенклатуры» (в некоторых конфигурациях она называется ДобавлениеИзменениеШтрихкодов) и роль «Добавление и изменение номенклатуры». Наличие обеих ролей гарантирует прохождение как программных проверок имен ролей, так и проверок прав на ведущие объекты метаданных.
  4. Сохраните профиль.

Шаг 3. Назначение группы доступа пользователю

Перейдите в справочник Группы доступа (или откройте карточку пользователя на вкладке «Права доступа»):

  1. Создайте новую группу доступа и выберите в ней созданный/измененный на Шаге 2 профиль.
  2. В табличную часть «Участники группы» добавьте вашего пользователя.
  3. Запишите изменения. При записи группы доступа БСП автоматически и корректно пересчитает кэш прав в служебных регистрах сведений.

Шаг 4. Обновление кэша метаданных и прав доступа (при необходимости)

Если вы ранее вносили изменения в состав ролей в Конфигураторе или переименовывали роли, кэш БСП мог устареть. Чтобы принудительно обновить его, выполните следующие команды в консоли кода (под полными правами) или запустите обновление через специализированные внешние обработки («Инструменты разработчика»):


// Принудительное обновление идентификаторов объектов метаданных в базе данных
Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеВсейИнформационнойБазы();

// Обновление кэша прав доступа для таблиц
УправлениеДоступомСлужебный.ЗаполнитьПраваДоступаТаблиц();

После выполнения этих шагов программный код БСП успешно распознает права пользователя, проверит доступность связанных объектов номенклатуры и кнопка «Создать» в регистре сведений «Штрихкоды» станет активной.

← На главную