Как расширить права доступа пользователю в 1С, если документ открывается только для просмотра?

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

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

Причина 1. Права на стандартные реквизиты в роли

Проанализируем типичную ошибку при создании роли в расширении. Когда мы добавляем существующий документ в роль внутри расширения, мы часто проставляем галочки «Чтение», «Изменение» и «Интерактивное добавление» для самого объекта. Однако этого недостаточно.

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

Причина 2. Механизмы Библиотеки стандартных подсистем (БСП)

В современных конфигурациях права управляются декларативно. Это означает, что простого наличия роли у пользователя может быть недостаточно, так как подсистема «Управление доступом» должна «знать» о существовании этой роли и её назначении. Рассмотрим, как это работает на уровне кода.

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


&После("ПриЗаполненииПоставляемыхПрофилейГруппДоступа")
Процедура ДФ_ПриЗаполненииПоставляемыхПрофилейГруппДоступа(ОписанияПрофилей, ПараметрыОбновления)
	
	Для Каждого ОписаниеПрофиля Из ОписанияПрофилей Цикл
		// Поиск профиля по его идентификатору (GUID) или имени
		Если ОписаниеПрофиля.Идентификатор = "28f1fe22-299d-4135-ac9f-fe338ce51571" Тогда 
			ОписаниеПрофиля.Роли.Добавить("ВашаНоваяРольИзРасширения");
		КонецЕсли;
	КонецЦикла;
	
КонецПроцедуры

Важный момент: использование жестко прописанных GUID (идентификаторов) в коде — спорная практика. Лучше выполнять поиск по имени профиля, чтобы код оставался работоспособным после обновлений конфигурации.

Причина 3. Использование пользовательских профилей вместо расширений

Рассмотрим альтернативный, зачастую более правильный путь, который не требует написания кода или создания расширений. Поставляемые (типовые) профили в 1С закрыты для редактирования, но система позволяет создавать на их основе собственные профили.

  1. Перейдем в раздел «Администрирование» — «Настройки пользователей и прав» — «Профили групп доступа».
  2. Найдем типовой профиль «Менеджер продаж» и создадим на его основании новый профиль (кнопка «Скопировать»).
  3. В новом профиле отметим галочками те роли, которые дают право на работу с документом «Списание товаров» (например, роль «Добавление и изменение документов списания товаров»).
  4. Создадим новую «Группу доступа», выберем в ней наш созданный профиль и добавим туда нужного пользователя.

Этот метод считается наиболее «чистым», так как он использует штатные механизмы конфигурации и не вызывает проблем при последующих обновлениях программы.

Причина 4. Влияние ограничений RLS (Record Level Security)

Если в базе включено ограничение доступа на уровне записей (например, по организациям или складам), ситуация усложняется. Проанализируем ситуацию: у пользователя могут быть полные права на документ, но если в «Группе доступа» не указан конкретный склад, по которому разрешены операции, документ будет доступен только для чтения.

Проверьте настройки в разделе «Группы доступа». Убедитесь, что для пользователя разрешены те значения доступа (конкретные организации или склады), которые указаны в документе «Списание товаров».

Причина 5. Программный запрет в модуле формы

Иногда причина кроется не в правах платформы, а в коде самой формы документа. В процедурах ПриСозданииНаСервере или ПриЧтенииНаСервере часто встречаются проверки типа:


Если НЕ РольДоступна("ПолныеПрава") И НЕ РольДоступна("НужнаяРоль") Тогда
    ТолькоПросмотр = Истина;
КонецЕсли;

В этом случае, даже если вы добавили роль в расширение, типовой код о ней ничего не знает. Вам потребуется в том же расширении перехватить процедуру формы (используя аннотацию &После) и программно установить ТолькоПросмотр = Ложь;, если ваша роль доступна пользователю.

Подведем итоги

Чтобы решить проблему «Только просмотра», рекомендуется действовать по следующему алгоритму:

  1. Проверить «Стандартные реквизиты» в вашей роли в расширении — это самая частая техническая причина.
  2. Попробовать создать новый Профиль групп доступа в пользовательском режиме, объединив права менеджера и кладовщика, не прибегая к расширениям.
  3. Проверить функциональные опции: если в настройках программы отключен «Складской учет», документы списания могут блокироваться на уровне интерфейса вне зависимости от прав.
  4. Запустить обновление вспомогательных данных (через запуск 1С с параметром /UpdateDBCfg или специальные обработки БСП), чтобы система «увидела» изменения в структуре прав.
← На главную