Как ограничь доступ к документу по пользователю?

Бухгалтерия 3.0 - Документ - Перемещение товаров не сколько складов.
Надо ограничить доступ к документу по пользователю(ответственный в документе), т.е. тот кто создал документ может редактировать и пере проводить, другие только просматривать, но пользователь ПетровАС и ИвановИИ имеют полный доступ к документам?

Полагаю надо добавить ПриОткрытии формы документа процедуру определения пользователя и установить права, но как?
---
(10) - не пользовался подписками... Спасибо, вопрос решен!

- пока оставлю в Документ - МодельОбъекта

```1c
    Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
    Если (Ответственный <> ПараметрыСеанса.ТекущийПользователь) И НЕ ЭтоНовый() И (НЕ РольДоступна("ПолныеПрава")) Тогда
    Сообщить("У вас нет прав редактировать этот Документ.Ответственный: "+Ссылка.Ответственный);
    Отказ = Истина;
    КонецЕсли;

    КонецПроцедуры
```
---
Через подпись на событие

1. Добавить в Общие - Общие модули - с наименованием, к примеру "Свое_ПередЗаписьюДокумента"
вставить код:

```1c
    Процедура ПередЗаписью(Объект, Отказ, РежимЗаписи, РежимПроведения) Экспорт

    Если РежимЗаписи = РежимЗаписиДокумента.Проведение и Объект.ЭтотОбъект.Проведен тогда
    Отказ = Истина;
    Сообщить("Нельзя перепровести проведенный ранее документ!");
    КонецЕсли;

    Если (Объект.Ответственный <> ПараметрыСеанса.ТекущийПользователь) И НЕ Объект.ЭтоНовый() И (НЕ РольДоступна("ПолныеПрава")) Тогда
    Сообщить("У вас нет прав редактировать этот Документ.Ответственный: "+Объект.Ссылка.Ответственный);
    Отказ = Истина;
    КонецЕсли;

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

2. Добавить в Общие - Подписка на событие - с наименованием, к примеру "Свое_ПередЗаписьюДокумента" выбрать:

- Источник - Составной тип - выбрать нужные Документы для защиты
- Событие - ПередЗаписью
- Обработчик - "Свое_ПередЗаписьюДокумента"
---
запретить создание и редактирование в справочниках
Решение:

0. Создаем роль пустую , называем "ЗапретНаРедактированиеСправочника"
1. В общем модуле было создан объект: ЗапретНаРедактированиеСправочника (рис1) с кодом:

```1c
    Процедура ЗапретНаРедактированиеСправочникаПриЗаписи(Источник, Отказ) Экспорт

    Отказ = РольДоступна("ЗапретНаРедактированиеСправочника");
    Если РольДоступна("ЗапретНаРедактированиеСправочника") Тогда
    Сообщить ("У вас нет прав, обратитесь к руководителю отдела!");
    КонецЕсли;

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

2. В подписках на события создаем объект "ЗапретНаРедактированиеСправочника" свойствах в:
- "Источниках" указываем объекты справочника которые будут запрещены для редактирования и добавления,
- Событие - ПриЗаписи
- Обработчик - выбираем свой

3.Добавляем пользователю ЧЕРЕЗ КОНФИГуРАТОР роль "ЗапретНаРедактированиеСправочника"
4.Радуемся жизни :)
---
Если велосипед изобретать, то что-то типа такого

```1c
    Если НЕ ТекущийПользователь = Ответственный Тогда
    ЭтаФорма.ТолькоПросмотр = Истина;
    КонецЕсли;
```

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

- не вижу к сожалению...

- проблема в том, что с документом работают разные пользователи с разных складов одной организации.
Есть отбор по пользователю или складу, но нет защиты документа созданного этим пользователем.
---
(10) - не пользовался подписками... Спасибо, вопрос решен!

- пока оставлю в Документ - МодельОбъекта

```1c
    Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
    Если (Ответственный <> ПараметрыСеанса.ТекущийПользователь) И НЕ ЭтоНовый() И (НЕ РольДоступна("ПолныеПрава")) Тогда
    Сообщить("У вас нет прав редактировать этот Документ.Ответственный: "+Ссылка.Ответственный);
    Отказ = Истина;
    КонецЕсли;

    КонецПроцедуры
```
---
RLS например, хотя слишком тяжелый механизм. В БП 2,0 было "доступ к документам других пользователей", открыть можно, редактировать нельзя, некоторым пользователям по галочке можно было и редактировать. БП 3 для РФ не знаю.
---
На Форме элемента справочника пользователи, нет ссылки "Права доступа к документам других пользователей" ? По идее стандартный механизм, чужие документы открыть можно, редактировать нельзя. Если конечно полных прав везде не стоит.
---
да РЛС это можно сделать, но в БСП этого нет, там можно ограничить на конкретный элемент(группу).
---
екарек видел писала любые проверки через расширение. Думаю БП 3.0 уже подняло режим совместимости до нужного уровня.
---
-почти решение, остается добавить ПетровАС и ИвановИИ имеют полный доступ к документам

вставил в ФормуДокумента - работает...

```1c
    Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)

    Если РежимЗаписи = РежимЗаписиДокумента.Проведение и ЭтотОбъект.Проведен тогда
    Отказ = Истина;
    Сообщить("Нельзя перепровести проведенный ранее документ!");
    КонецЕсли;

    Если НЕ ПараметрыСеанса.ТекущийПользователь = Ответственный Тогда
    Отказ = Истина;
    КонецЕсли;

    КонецПроцедуры
```
---
Сделай лучше подписку на событие, и свой общий модуль, проблем при обновлении меньше будет, да и смысл будет тот же.

До проверки на пользователя, вставь это:

```1c
    Если РольДоступна("ЛюбаяРольНапримерПолныеПрава") Тогда
    Возврат;
    КонецЕсли;
```
---
Через подпись на событие

1. Добавить в Общие - Общие модули - с наименованием, к примеру "Свое_ПередЗаписьюДокумента"
вставить код:

```1c
    Процедура ПередЗаписью(Объект, Отказ, РежимЗаписи, РежимПроведения) Экспорт

    Если РежимЗаписи = РежимЗаписиДокумента.Проведение и Объект.ЭтотОбъект.Проведен тогда
    Отказ = Истина;
    Сообщить("Нельзя перепровести проведенный ранее документ!");
    КонецЕсли;

    Если (Объект.Ответственный <> ПараметрыСеанса.ТекущийПользователь) И НЕ Объект.ЭтоНовый() И (НЕ РольДоступна("ПолныеПрава")) Тогда
    Сообщить("У вас нет прав редактировать этот Документ.Ответственный: "+Объект.Ссылка.Ответственный);
    Отказ = Истина;
    КонецЕсли;

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

2. Добавить в Общие - Подписка на событие - с наименованием, к примеру "Свое_ПередЗаписьюДокумента" выбрать:

- Источник - Составной тип - выбрать нужные Документы для защиты
- Событие - ПередЗаписью
- Обработчик - "Свое_ПередЗаписьюДокумента"
---
До кучи как запретить создание и редактирование в справочниках?
---
запретить создание и редактирование в справочниках
Решение:

0. Создаем роль пустую , называем "ЗапретНаРедактированиеСправочника"
1. В общем модуле было создан объект: ЗапретНаРедактированиеСправочника (рис1) с кодом:

```1c
    Процедура ЗапретНаРедактированиеСправочникаПриЗаписи(Источник, Отказ) Экспорт

    Отказ = РольДоступна("ЗапретНаРедактированиеСправочника");
    Если РольДоступна("ЗапретНаРедактированиеСправочника") Тогда
    Сообщить ("У вас нет прав, обратитесь к руководителю отдела!");
    КонецЕсли;

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

2. В подписках на события создаем объект "ЗапретНаРедактированиеСправочника" свойствах в:
- "Источниках" указываем объекты справочника которые будут запрещены для редактирования и добавления,
- Событие - ПриЗаписи
- Обработчик - выбираем свой

3.Добавляем пользователю ЧЕРЕЗ КОНФИГуРАТОР роль "ЗапретНаРедактированиеСправочника"
4.Радуемся жизни :)
---
2.5. Первый запуск необходимо провести с параметром "ЗапуститьОбновлениеИнформационнойБазы". В конфигураторе Сервис - Параметры - Запуск 1С:Предприятия - Основные - Параметры запуска добавить ЗапуститьОбновлениеИнформационнойБазы - Ок - Сохранить и запустить в режиме отладки (в дальнейшем параметр надо убрать)