Продвинутый курс. Занятие №4
Приступайте к четвертому занятию продвинутого курса.
ps. На этой странице не нужно отчитываться о выполнении ДЗ.
Приступайте к четвертому занятию продвинутого курса.
ps. На этой странице не нужно отчитываться о выполнении ДЗ.
Блок 0 Задание 4
Задание №1
Для пользователя Аудитор создаем роль Аудитор. В корневом разделе Права снимаем разрешение на все режимы , кроме разрешения работы с тонким клиентом ,веб-клиентом, толстым клиентом. Право Вывод разрешает вывод информации на печать, сохранять в файл, копирование в буфер обмена. Это право у роли Аудитор отсутствует. На объекты конфигурации справочники, документы,
журналы документов, отчеты ,планы счетов, планы видов характеристик установлены права Чтенте и Просмотр.
Задание №2 .
Создан регистр сведений ДоступКНоменклатуре, непериодический, режим записи Независимый.
Измерения: Пользователь – тип спр.ссылка Пользователи, РазрНоменклатура – тип спр.ссылка Номенклатура.
Создана ФормаЗаписи рег.сведений ДостукНоменклатуре.На форме в свойствах Использование режим ВыборГруппИЭлементов установлен в значение ВыборГруппИЭлементов.
Регистр сведений ДостпкНоменклатуре свключен в подсистему Сервис.
Созданы параметры сеанса:
ЕстьОгранимченияПоНоменклатуре тип данных – Булево,
РазрешеннаяНоменклатура тип данных – Фиксированный массив
ЗапрещеннаяНоменклатура тип данных – ФиксированныйМассив.
В общем модуле ПроверкаПользователя (свойства Сервер и ВызовСервера установлен в Истина) созданы экспортные функции ПолучитьРазрешеннуюНаНоменклатуру(), ПолучитьЗапрещеннуюНаНоменклатуру()
<code>
Функция СинхронизацияПользователей() Экспорт
ТекущийПользоваетель=ПользователиИнформационнойБазы.ТекущийПользователь();
ГУИД=ТекущийПользоваетель.УникальныйИдентификатор;
Пользователь=Справочники.Пользователи.НайтиПоРеквизиту(“ПользовательИБ”,ГУИД);
Если Пользователь.Пустая() Тогда
НовыйПользователь=Справочники.Пользователи.СоздатьЭлемент();
НовыйПользователь.Наименование=ТекущийПользоваетель.ПолноеИмя;
НовыйПользователь.ПользовательИБ=ГУИД;
НовыйПользователь.Записать();
КонецЕсли;
Возврат Пользователь;
КонецФункции
Функция ПолучитьРазрешеннуюНаНоменклатуру() Экспорт
Пользователь=ПараметрыСеанса.Пользователь;
Запрос = Новый Запрос;
Запрос.Текст =
“ВЫБРАТЬ
| Номенклатура.Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Ссылка В ИЕРАРХИИ
| (ВЫБРАТЬ
| ДоступКНоменклатуре.РазрНоменклатура
| ИЗ
| РегистрСведений.ДоступКНоменклатуре КАК ДоступКНоменклатуре
| ГДЕ
| ДоступКНоменклатуре.Пользователь = &Пользователь)
| И Номенклатура.ЭтоГруппа = Ложь”;
Запрос.УстановитьПараметр(“Пользователь”, Пользователь);
Результат = Запрос.Выполнить();
ТЗ=Новый ТаблицаЗначений;
Массив=Новый массив;
ТЗ=Результат.Выгрузить();
Массив=ТЗ.ВыгрузитьКолонку(“Ссылка”);
Возврат Массив;
КонецФункции // ПолучитьРазрешениеНаНоменклатуру()
Функция ПолучитьЗапрещеннуюНаНоменклатуру() Экспорт
Пользователь=ПараметрыСеанса.Пользователь;
Запрос = Новый Запрос;
Запрос.Текст =
“ВЫБРАТЬ
| Номенклатура.Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| (НЕ Номенклатура.Ссылка В ИЕРАРХИИ
| (ВЫБРАТЬ
| ДоступКНоменклатуре.РазрНоменклатура
| ИЗ
| РегистрСведений.ДоступКНоменклатуре КАК ДоступКНоменклатуре
| ГДЕ
| ДоступКНоменклатуре.Пользователь = &Пользователь))
| И Номенклатура.ЭтоГруппа = ЛОЖЬ”;
Запрос.УстановитьПараметр(“Пользователь”, Пользователь);
Результат = Запрос.Выполнить();
ТЗ=Новый ТаблицаЗначений;
Массив=Новый массив;
ТЗ=Результат.Выгрузить();
Массив=ТЗ.ВыгрузитьКолонку(“Ссылка”);
Возврат Массив;
КонецФункции // ПолучитьЗапрещеннуюНаНоменклатуру()
</code>
Модуль сеанса
<code>
Процедура УстановкаПараметровСеанса(ТребуемыеПараметры)
ПараметрыСеанса.Пользователь=ПроверкаПользователя.СинхронизацияПользователей();
ПараметрыСеанса.ИспользоватьОграниченияДоступаКДанным=Константы.ИспользоватьОграниченияДоступаКДанным.Получить();
ПараметрыСеанса.РазрешеннаяНоменклатура=Новый ФиксированныйМассив(ПроверкаПользователя.ПолучитьРазрешеннуюНаНоменклатуру());
Если ПараметрыСеанса.РазрешеннаяНоменклатура.Количество()=0 Тогда
ПараметрыСеанса.ЕстьОтграничениеПоНоменклатуре=Ложь;
Иначе
ПараметрыСеанса.ЕстьОтграничениеПоНоменклатуре=Истина;
ПараметрыСеанса.ЗапрещеннаяНоменклатура=Новый ФиксированныйМассив(ПроверкаПользователя.ПолучитьЗапрещеннуюНаНоменклатуру());
КонецЕсли;
КонецПроцедуры
</code>
Создана роль МенеджерЗакупокПродаж
Созданы пользователи Иванов и Петров. Им присвоены доступные роли МенеджерЗакупокПродаж..
В регистр сведений добавлены записи : Пользователь – Иванов,РазрНоменклатура – Инстурмент.
Пользователь – Петров ,РазрНоменклатура – Мебель.
У роли МенеджерЗакупокПродаж для спр.Номенклатура на право Чтение наложено ограничение доступа.
<code>
#Если &ЕстьОтграничениеПоНоменклатуре #Тогда
Номенклатура ГДЕ (#ШаблонПоНоменклатуреРазр(“Ссылка”)
ИЛИ Номенклатура.ЭтоГруппа)
#КонецЕсли
</code>
Для роли МенеджерЗакупокПродаж созданы шаблоны ограничений.
Для контроля разрешения доступа к номенклатуре создан шаблон ШаблонПоНоменклатуреРазр . текст шаблона #ТекущаяТаблица.#Параметр(1) В (&РазрешеннаяНоменклатура)
Для контролязапрета доступа к номенклатуре создан шаблон ШаблонПоНоменклатуреЗапр. текст шаблона #ТекущаяТаблица.#Параметр(1) В (&ЗапрещеннаяНоменклатура)
Для документа Поступление для права Чтение создано ограничение доступа
<code>
#Если &ЕстьОтграничениеПоНоменклатуре #Тогда
ПоступлениеТоваровИУслугТовары ГДЕ ПоступлениеТоваровИУслугТовары.Ссылка В
(ВЫБРАТЬ
ПоступлениеТоваровИУслугТовары.Ссылка
ИЗ
Документ.ПоступлениеТоваровИУслуг.Товары КАК ПоступлениеТоваровИУслугТовары
ГДЕ
#ШаблонПоНоменклатуреРазр(“Номенклатура”) )
И (НЕ ПоступлениеТоваровИУслугТовары.Ссылка В
(ВЫБРАТЬ
ПоступлениеТоваровИУслугТовары.Ссылка
ИЗ
Документ.ПоступлениеТоваровИУслуг.Товары КАК ПоступлениеТоваровИУслугТовары
ГДЕ
#ШаблонПоНоменклатуреЗапр(“Номенклатура”) ))
#КонецЕсли
</code>
tsergey, ваш отчет принят.
1) Создал роль “Аудитор”, поставил на все объекты право “Просмотр”.
2) Создал роль “Менеджер”, установил права такие же как полные, но на документ “Поступление товаров и услуг” на чтение наложил ограничение:
ТекущаяТаблица
ИЗ
#ТекущаяТаблица КАК ТекущаяТаблица
ГДЕ
НЕ ТекущаяТаблица.Ссылка В
(ВЫБРАТЬ РАЗЛИЧНЫЕ
ЗапросОграниченный.Ссылка
ИЗ
(ВЫБРАТЬ
ПоступлениеТоваровИУслугТовары.Ссылка КАК Ссылка,
ПоступлениеТоваровИУслугТовары.Номенклатура КАК Номенклатура,
ЕСТЬNULL(ОграниченияВидимостиНоменклатуры.ГруппаНоменклатуры, НЕОПРЕДЕЛЕНО) КАК ГруппаНоменклатуры
ИЗ
Документ.ПоступлениеТоваровИУслуг.Товары КАК ПоступлениеТоваровИУслугТовары ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
ОграниченияВидимостиНоменклатуры.ГруппаНоменклатуры КАК ГруппаНоменклатуры
ИЗ
РегистрСведений.ОграниченияВидимостиНоменклатуры КАК ОграниченияВидимостиНоменклатуры
ГДЕ
ОграниченияВидимостиНоменклатуры.Пользователь = &Пользователь
) КАК ОграниченияВидимостиНоменклатуры
ПО
ПоступлениеТоваровИУслугТовары.Номенклатура.Родитель = ОграниченияВидимостиНоменклатуры.ГруппаНоменклатуры
) КАК ЗапросОграниченный
ГДЕ
ЗапросОграниченный.ГруппаНоменклатуры = НЕОПРЕДЕЛЕНО)
Для реализации отмены ограничения для руководителя можно сделать одно из:
1) создать новую роль без ограничений
2) создать булевский параметр сеанса, а в ограничении прописать проверку этого параметра. Если параметр истина, то не применять ограничение.
queit, ваш отчет принят.