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