Каталог решений - Запрет на запись документов/справочников/РегистрСведений (ТолькоПросмотр)

Запрет на запись документов/справочников/РегистрСведений (ТолькоПросмотр)

Запрет на запись документов/справочников/РегистрСведений (ТолькоПросмотр)

В наличии

Частенько приходится слушать от руководства: "запретить этому пользователю, запись этого документа\справочника"… А через какое-то время, почему тот-то не может записать справочник/документ. Вот и родилась идея оперативного запрета/разрешения записи документа/справочника/рс.

Категория:

Описание

Навеяно: Простой доступ только для чтения.

Данное решение работоспособно в типовых решениях, где присутсвует справочник «ГруппыПользователей».

  

Алгоритм механизма следующий:

1. Создаются подписки на событие ПередЗаписью на все документы/справочники/рс (в чем есть необходимость).

2. В справочнике «ГруппыПользователей» создается элемент, например: «Запрет на запись документа«.

3. Далее, в эту группу («Запрет на запись документа«)  добавляются элементы, для которых необходимо запретить запись, с именем = Имя справочника/документа/рс .

4. В обработчтике подписки на событие вставляем код:

    ИмяОбъекта = Источник.Метаданные().Имя;

    ГруппаЗапрета = Справочники.ГруппыПользователей.НайтиПоНаименованию(«Запрет на запись документов», Истина);

    ОбъектЗапрета = Справочники.ГруппыПользователей.НайтиПоНаименованию(ИмяОбъекта, Истина, ГруппаЗапрета);

    Если НЕ ОбъектЗапрета = Справочники.ГруппыПользователей.ПустаяСсылка() Тогда
       
Запрос = Новый Запрос;
       
Запрос.Текст = «ВЫБРАТЬ
        |   ГруппыПользователейПользователиГруппы.Ссылка
        |ИЗ
        |   Справочник.ГруппыПользователей.ПользователиГруппы КАК ГруппыПользователейПользователиГруппы
        |ГДЕ
        |   ГруппыПользователейПользователиГруппы.Пользователь = &Пользователь
        |   И ГруппыПользователейПользователиГруппы.Ссылка = &Ссылка»
;

        Запрос.УстановитьПараметр(«Пользователь», ПараметрыСеанса.ТекущийПользователь);
       
Запрос.УстановитьПараметр(«Ссылка», ОБъектЗапрета);

        Результат = Запрос.Выполнить();

        Если НЕ Результат.Пустой() Тогда
           
Отказ = Истина
        КонецЕсли;

    КонецЕсли;

В итоге имеем механизм, оперативного запрета/разрешения записи любого документа/справочника/РегистраСведений.

P.S. У данного решения остается вопрос с производительность при большом докуметообороте и включенном РЛС. Протестировать пока не представляется возможным.

has been added to your cart:
Оформление заказа