Как настроить право на добавление партнеров без возможности их редактирования в 1С:УТ 11?

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

В конфигурациях 1С:Управление торговлей (УТ 11), 1С:ERP и 1С:Комплексная автоматизация часто возникает бизнес-задача: продавцам в розничном магазине необходимо регистрировать новых клиентов (держателей карт лояльности), но при этом нельзя разрешать им редактировать реквизиты уже созданных партнеров. Рассмотрим, с какими сложностями можно столкнуться при настройке такой роли и какими способами можно правильно решить эту задачу.

Анализ проблемы и причины возникновения ошибки

При попытке создать ограниченную роль, в которой включены только права Чтение, Просмотр и Интерактивное добавление для справочника Партнеры, стандартный механизм ввода элементов (например, Справочник.Партнеры.Форма.ПомощникНового) завершается ошибкой при попытке записи объекта.

Разберем основные причины, почему система выдает ошибку вида «Недостаточно прав на изменение "Партнеры"» при вызове метода Записать():

  1. Работа подсистемы версионирования объектов: В Библиотеке Стандартных Подсистем (БСП) при вызове обработчика ПередЗаписью модуль ВерсионированиеОбъектов проверяет наличие у текущего пользователя права Изменение. Если у пользователя есть только право на добавление, проверка прав подсистемы версионирования возвращает ошибку.
  2. Создание связанных объектов в Помощнике: В УТ 11 помощник создания нового партнера одновременно заполняет и записывает не только сам элемент справочника Партнеры, но и связанные сущности: справочники Контрагенты, Контактные лица, а также регистры сведений для контактной информации (телефоны, адреса, e-mail). Отсутствие права на изменение или запись любого из этих объектов блокирует процесс создания.

Вариант 1. Разделение программного права «Изменение» и «Интерактивного изменения»

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

Разберем по шагам, как настроить роль в конфигураторе:

  1. Откроем нужную роль (или создадим новую роль для продавцов) в Конфигураторе.
  2. Перейдем к дереву прав для справочника Партнеры (а также связанных справочников Контрагенты и КонтактныеЛица).
  3. Установим флаги для следующих прав:
    • Чтение и Просмотр;
    • Добавление и Интерактивное добавление;
    • Изменение (это необходимо для корректного выполнения кода БСП и алгоритмов записи в Помощнике).
  4. Снимем флаг с права Интерактивное изменение.

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

Вариант 2. Запись объекта в привилегированном режиме

Если бизнес-логика требует полного отсутствия права Изменение в роли пользователя, создание партнера необходимо выполнять в привилегированном режиме, где проверки прав платформы и БСП игнорируются.

Посмотрим на пример реализации через внешнюю обработку, расширение или отдельную форму ввода реквизитов:

  1. Создаем команду или упрощенную форму для ввода данных владельца карты лояльности (ФИО, телефон, e-mail).
  2. На сервере передаем данные в процедуру, исполняемую с отключением проверки прав.

Рассмотрим пример кода на сервере с использованием безопасного вызова привилегированного режима:


&НаСервере
Процедура СоздатьПартнераПривилегированно(ДанныеКлиента)
    
    УстановитьПривилегированныйРежим(Истина);
    
    НовыйПартнер = Справочники.Партнеры.СоздатьЭлемент();
    НовыйПартнер.Наименование = ДанныеКлиента.Наименование;
    НовыйПартнер.НаименованиеПолное = ДанныеКлиента.Наименование;
    НовыйПартнер.Клиент = Истина;
    
    Попытка
        НовыйПартнер.Записать();
    Исключение
        ЗаписьЖурналаРегистрации("СозданиеПартнера", 
            УровеньЖурналаРегистрации.Ошибка,,, 
            ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
        ВызватьИсключение "Не удалось сохранить партнера!";
    КонецПопытки;
    
    УстановитьПривилегированныйРежим(Ложь);

КонецПроцедуры

В этом случае у продавца полностью отсутствуют права на изменение справочника Партнеры, а создание происходит строго под управлением контролируемого серверного кода.

Вариант 3. Настройка режима просмотра через расширение

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

Разберем, как перехватить открытие формы элемента справочника Партнеры и перевести ее в режим «Только просмотр»:


&НаСервере
&После("ПриСозданииНаСервере")
Процедура Расш_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Проверяем, что элемент уже записан в базу
    Если ЗначениеЗаполнено(Объект.Ссылка) Тогда
        // Проверяем наличие специальной роли, разрешающей редактирование
        Если НЕ РольДоступна("ОтветственныйЗаПартнеров") Тогда
            ЭтаФорма.ТолькоПросмотр = Истина;
        КонецЕсли;
    КонецЕсли;

КонецПроцедуры

Этот метод гарантирует, что даже если у пользователя есть программные права на изменение, сама форма справочника откроется исключительно в режиме чтения.

Вариант 4. Отключение версионирования объектов

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

  1. Перейдем в раздел Администрирование → Поддержка и обслуживание.
  2. Раскроем группу История изменений и выберем пункт Настройки версионирования объектов.
  3. Найдем в списке справочник Партнеры и установим значение Не версионировать.

После этого модуль ВерсионированиеОбъектов перестанет вызывать проверку прав при вызове события ПередЗаписью.

← На главную