22 февр. 2013 г.

RLS: Настройка ограничения доступа к данным в 1С 8.1/8.2

Использование встроенного механизма ограничения доступа в 8.1 (Управление торговлей)
Пример для справочника с небольшим числом строк (по типу справочника "Организации")

Ограничения доступа по кассам



В конфигураторе:

Перечисления/ВидыОбъектовДоступа/Значение - добавить Кассы

РегистрыСведений/ОбъектыДоступаДокументов/Измерения/ОбъектДоступа - добавить тип Справочник.Кассы

РегистрыСведений/НастройкиПравДоступаПользователей/Измерения/ОбъектДоступа - добавить тип Справочник.Кассы
РегистрыСведений/НастройкиПравДоступаПользователей/Измерения/ВладелецПравДоступа - добавить тип Справочник.Кассы

Общие модули/НастройкаПравДоступа/ПолучитьВидОбъектаДоступа:
Функция ПолучитьВидОбъектаДоступа(ОбъектДоступа) Экспорт
 
 Если ТипЗнч(ОбъектДоступа) = Тип("СправочникСсылка.Организации") Тогда
  Возврат Перечисления.ВидыОбъектовДоступа.Организации;
 //ДОБАВЛЯЕМ ТЕКСТ 
 ИначеЕсли ТипЗнч(ОбъектДоступа) = Тип("СправочникСсылка.Кассы") Тогда
  Возврат Перечисления.ВидыОбъектовДоступа.Кассы;
 //ДОБАВЛЯЕМ ТЕКСТ 
 ИначеЕсли ТипЗнч(ОбъектДоступа) = Тип("СправочникСсылка.ГруппыДоступаККонтрагентам") Тогда
  Возврат Перечисления.ВидыОбъектовДоступа.Контрагенты;
 Иначе
  Возврат Перечисления.ВидыОбъектовДоступа.ПустаяСсылка();
 КонецЕсли;
 
КонецФункции 
 
Для интерактивной настройки прав доступа - необязательная часть

Обработки/НастройкаПравДоступа/Формы/НастройкаПравДоступа/Форма - добавить копированием страницу "Кассы", добавить копированием на страницу табличное поле ТаблицаПравДоступа_Кассы

Обработки/НастройкаПравДоступа/Формы/НастройкаПравДоступа/Форма/ПередОткрытием:
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)

Если НЕ ПараметрыСеанса.ИспользоватьОграниченияПравДоступаНаУровнеЗаписей Тогда
Предупреждение("В конфигурации отключено использование ограничения прав доступа не уровне записей.");
Отказ = Истина;
Возврат;
КонецЕсли;

ТипыОбъектовДоступа = Новый Структура;

ТипыОбъектовДоступа.Вставить("Организации", Тип("СправочникСсылка.Организации"));
ТипыОбъектовДоступа.Вставить("Контрагенты", Тип("СправочникСсылка.ГруппыДоступаККонтрагентам"));
//ДОБАВЛЯЕМ ТЕКСТ
ТипыОбъектовДоступа.Вставить("Кассы", Тип("СправочникСсылка.Кассы"));
//ДОБАВЛЯЕМ ТЕКСТ


СсылкаОбъекта = ЭтаФорма.КлючУникальности;
МетаданныеОбъекта = СсылкаОбъекта.Метаданные();

Если Не НаличиеПраваНаЧтениеСсылки(СсылкаОбъекта) Тогда
Предупреждение("Отсутствует право на чтение объекта!");
Отказ = Истина;
Возврат;
КонецЕсли;

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

СформироватьЗакладки();
ОбновитьОтборПоНаследуемымЗаписям();

ПраваДоступаПользователей = РегистрыСведений.НастройкиПравДоступаПользователей.СоздатьНаборЗаписей();
НастройкаПравДоступа.ПрочитатьПраваДоступаКОбъекту(ПраваДоступаПользователей, СсылкаОбъекта);
ПрочитатьТаблицыПравДоступа(ПраваДоступаПользователей);

Заголовок = Заголовок + ": " + ?(НЕ ЗначениеЗаполнено(МетаданныеОбъекта.Синоним), МетаданныеОбъекта.Имя, МетаданныеОбъекта.Синоним) + ": " + ?(НЕ ЗначениеЗаполнено(СсылкаОбъекта),"<Весь справочник>", Строка(СсылкаОбъекта));

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

Обработки/НастройкаПравДоступа/Формы/НастройкаПравДоступа/Форма/ПолучитьСписокОбластейДанных:

Функция ПолучитьСписокОбластейДанных(ТипДанных)

СписокОбластей = Новый СписокЗначений;
Если ТипДанных = Тип("СправочникСсылка.Организации") Тогда
СписокОбластей.Добавить(Перечисления.ВидыОбъектовДоступа.Организации);
//ДОБАВЛЯЕМ ТЕКСТ 
ИначеЕсли ТипДанных = Тип("СправочникСсылка.Кассы") Тогда
СписокОбластей.Добавить(Перечисления.ВидыОбъектовДоступа.Кассы);
//ДОБАВЛЯЕМ ТЕКСТ 
ИначеЕсли ТипДанных = Тип("СправочникСсылка.ГруппыДоступаККонтрагентам") Тогда
СписокОбластей.Добавить(Перечисления.ОбластиДанныхОбъектовДоступа.КонтрагентыСписок);
ИначеЕсли ТипДанных = Тип("СправочникСсылка.ГруппыПользователей") Тогда
// Добавим только те виды объектов доступа, для которых нет областей данных
СписокОбластей.Добавить(Перечисления.ВидыОбъектовДоступа.Организации);
//ДОБАВЛЯЕМ ТЕКСТ 
СписокОбластей.Добавить(Перечисления.ВидыОбъектовДоступа.Кассы);
//ДОБАВЛЯЕМ ТЕКСТ 

// Добавим все области данных
Для каждого Перечисление Из Перечисления.ОбластиДанныхОбъектовДоступа Цикл
СписокОбластей.Добавить(Перечисление);
КонецЦикла;
КонецЕсли;

Возврат СписокОбластей;

КонецФункции 
Конец Для интерактивной настройки прав доступа - необязательная часть

В ролях скопировать существующие шаблоны по организации и контрагенту, по доступу к журналам документов, дополнить их проверкой по кассе: скопировать секцию выбора по организации, заменить ссылку на справочник Организации ссылкой на справочник Кассы, изменить номер #Параметр(1). Скорректировать ограничения для нужных документов и журналов документов (изменить шаблон на новый, добавить параметр по кассе в соответствии с порядковым номером - наименование реквизита документа). Каждую роль настраиваем отдельно, ограничения можно скопировать.

В предприятии:

В настройках параметров учета поставить галочку "Ограничивать права доступа на уровне записей". Создать группы пользователей в справочнике ГруппыПользователей, определить их состав. Поставить галочку для вида объекта доступа, по которому будут установлены ограничения - Кассы.
Заполнить регистр НастройкиПравДоступаПользователей - вручную или интерактивно обработкой "НастройкаПравДоступа" (Кнопка "Права" с справочнике ГруппыПользователей).
Для корректной работы механизма ограничений заполнить регистр сведений ОбъектыДоступаДокументов - перепровести документы, к которым относятся ограничения доступа. Если этого не делать, в журналах и списках документов они будут видны, но открываться не будут.

Нашел на сайте sql.ru

Еще одна статья по теме от sanches

Комментариев нет:

Отправить комментарий