Почему нет доступа к реквизитам формы в 1С при использовании расширения и как это исправить?

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

При разработке в среде 1С:Предприятие 8.3 программисты часто сталкиваются с ситуацией, когда созданная в расширении роль, казалось бы, имеющая полные права на объект, не позволяет редактировать поля на форме. Пользователь может открывать документ, записывать и проводить его, но все элементы управления остаются заблокированными (режим "Только просмотр"). Это особенно актуально для современных конфигураций, таких как Управление торговлей 11.4, ERP 2 или Комплексная автоматизация 2.

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

Выясняем причину: механизм работы ролей в расширениях

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

Если сам объект (документ) заимствован в расширение, но его реквизиты — нет, то роль расширения может некорректно транслировать права на уровень интерфейса. Платформа видит право на "Изменение" объекта в целом, но для отрисовки конкретного поля ввода на форме ей необходимо подтверждение прав на конкретный Реквизит. Если этого реквизита нет в метаданных расширения, роль внутри расширения просто "не знает" о его существовании и не может дать на него права.

Шаг 1. Правильное заимствование объектов и реквизитов

Первым делом проанализируем состав объектов в вашем расширении. Для того чтобы права заработали в полном объеме, выполним следующие действия:

  1. Откроем дерево метаданных расширения.
  2. Найдем нужный документ, который уже заимствован.
  3. Щелкнем правой кнопкой мыши по ветке Реквизиты (а также Табличные части) и выберем пункт "Добавить в расширение". Важно: не обязательно добавлять абсолютно все, но все те, которые должны быть доступны для редактирования, обязаны присутствовать в расширении.
  4. После добавления реквизитов в расширение, перейдем в настройки нашей роли в расширении.
  5. Теперь в списке прав роли появятся эти реквизиты. Нам необходимо убедиться, что для каждого из них установлены флажки Просмотр и Редактирование.

Рассмотрим подробнее: если у роли стоит право Изменение на уровне документа, но снято право Редактирование на уровне реквизита, поле на форме будет доступно только для чтения. Это тонкий момент, который часто упускают начинающие разработчики.

Шаг 2. Настройка прав доступа в типовых конфигурациях (БСП)

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

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


Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанные();
Справочники.ИдентификаторыОбъектовРасширений.ОбновитьДанные();

Во-вторых, в режиме "1С:Предприятие" необходимо зайти в раздел Администрирование — Настройки пользователей и прав. Там нужно либо создать новый Профиль групп доступа, включив в него вашу роль из расширения, либо добавить эту роль в существующий профиль. Без включения роли в профиль и назначения этого профиля пользователю, механизмы БСП могут блокировать форму программно.

Шаг 3. Программные проверки в модулях формы

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

Найдем в модуле формы процедуры ПриСозданииНаСервере или ПриЧтенииНаСервере. Часто там можно встретить код следующего вида:


Если Не ПравоДоступа("Редактирование", Метаданные.Документы.ЗаказКлиента) Тогда
    ЭтаФорма.ТолькоПросмотр = Истина;
КонецЕсли;

Или использование специализированных функций БСП:


ДоступностьОбъекта = УправлениеДоступом.ДоступностьОбъекта(Объект);
Если Не ДоступностьОбъекта Тогда
    УстановкаДоступностиРеквизитовФормы(Ложь);
КонецЕсли;

Ваша роль из расширения должна учитываться этими проверками. Если типовой код проверяет наличие конкретной роли (например, ПолныеПрава или ДобавлениеИзменениеЗаказовКлиентов), а ваша роль имеет другое имя, вам придется через расширение (используя &После или &Вместо) дописать логику, которая будет разрешать редактирование при наличии вашей роли.

Шаг 4. Свойство "Устанавливать права для новых объектов"

Проанализируем еще одну настройку роли. В свойствах роли в расширении есть важный флажок: "Устанавливать права для новых объектов". Если вы планируете в будущем добавлять новые реквизиты в этот документ (в основной конфигурации или этом же расширении), убедитесь, что этот флаг стоит. В противном случае, каждый новый созданный элемент метаданных будет по умолчанию недоступен для этой роли, и вам придется каждый раз заходить в настройки и проставлять галочки вручную.

Шаг 5. Очистка кэша и перезапуск

Механизмы расширений чувствительны к серверному кэшу. Если вы проделали все вышеописанные шаги (добавили реквизиты, настроили роль, обновили профили), но доступа все равно нет — попробуйте выполнить следующие действия:

  1. Перезапустите сеанс пользователя.
  2. Если работа ведется в клиент-серверном варианте, может потребоваться перезапуск службы сервера 1С или очистка серверного кэша метаданных.
  3. Убедитесь, что расширение активно и не находится в состоянии ошибки (флажок "Используется" в списке расширений).

Подведем итог: для решения проблемы "заблокированных" реквизитов в расширении всегда проверяйте цепочку: Заимствование реквизита в расширение -> Права "Просмотр" и "Редактирование" в роли расширения -> Обновление профилей групп доступа БСП -> Программные блокировки в коде формы. Выполнение этих шагов гарантирует корректную работу интерфейса для пользователя.

← На главную