Вычисление разрешений доступа для периодических регистров сведений
- ВычислитьКлючиДоступаДляЧтения
- ВычислитьКлючиДоступаДляИзменения
Поскольку каждое из этих событий «обрабатывает» одно право, «1С:Шина» облегчает вам жизнь и создает разрешения самостоятельно. От вас только требуется в обработчике сформировать тот набор экземпляров ключей, которые надо записать в конкретное разрешение. Этот факт отражается и в именах этих событий — «ВычислитьКлючи...».
Событие «ВычислитьКлючиДоступаДляЧтения»
Особенность этого события заключается в том, что «1С:Шина» создает разрешение доступа не для одной записи, а для всех записей регистра, которые отличаются только значением поля Период. Для этого используется тип имя-регистра-сведений.КлючИзмерений (подробнее).
Например, обработчик этого события может выглядеть следующим образом:
@Обработчик
метод ВычислитьКлючиДоступаДляЧтения(Ключи: ЧитаемыйМассив<УчетнаяПолитикаОрганизаций.КлючИзмерений>
): ЧитаемоеСоответствие<УчетнаяПолитикаОрганизаций.КлючИзмерений, ЧитаемыйМассив<КлючДоступа>>
знч Результат = <УчетнаяПолитикаОрганизаций.КлючИзмерений, Массив<КлючДоступа>>{:}
для Ключ из Ключи
Результат.Вставить(Ключ, [КлючДоступаОрганизации.Получить(Ключ.Организация)])
;
возврат Результат
;
Событие «ВычислитьКлючиДоступаДляИзменения»
Обработчик события ВычислитьКлючиДоступаДляИзменения по своему смыслу ничем не отличается от обработчика ВычислитьРазрешенияДоступаДляОбъектов. На вход он получает массив записей, для которых нужно создать разрешения.
Отличие заключается лишь в том, что, так как право всего одно — Изменение, вам не нужно создавать разрешение, «1С:Шина» сделает это самостоятельно. Достаточно лишь вычислить экземпляры ключей, которые надо записать в разрешение той или иной записи.
Например, обработчик этого события может выглядеть следующим образом:
@Обработчик
метод ВычислитьКлючиДоступаДляИзменения(Записи: ЧитаемыйМассив<УчетнаяПолитикаОрганизаций.Запись>
): ЧитаемоеСоответствие<УчетнаяПолитикаОрганизаций.Запись, ЧитаемыйМассив<КлючДоступа>>
знч Результат = <УчетнаяПолитикаОрганизаций.Запись, Массив<КлючДоступа>>{:}
для Запись из Записи
если Запись.Период > ПолучитьДатуЗапретаРедактирования()
Результат.Вставить(Запись, [КлючДоступаОрганизации.Получить(Запись.Организация)])
;
;
возврат Результат
;