Права доступа к документам

  • Автор темы Автор темы Elle
  • Дата начала Дата начала
E

Elle

Хм, нужно такую штуку написать, типа справочника прав, где прописуеться пользователь - он же например руководитель подразделения и подчиненные к нему сотрудники, и так далее руководитель- сотрудники. Для того, чтобы при работе в 1с руководитель мог видеть только документы своих подчиненных, типа, в глобальном модуле процедурку написать, вот в чем вопрос.
Сделала так: Справочник Пользователи добавила ТЗ и соответственно кнопки добавит, изменить, справочник Сотрудники сделала подчиненным. Вот что мне не нравится и вообще неправильно!!!
Код:
Процедура кнДобавить() 
Перем ФормаЗаписи; 
ОткрытьФормуМодально("Елемент.Сотрудники",Контекст,,,ТекущийЭлемент()); 
КонецПроцедуры //кнДобавить
При нажатии на кнопку открывается форма создания нового сотрудника, а мне нужно, чтобы просто можно было выбрать из существующих сотрудников в форме списка
Код:
Процедура кнУдалить() 
Перем Поз, Эл; 
Поз=тбсотр.ТекущаяСтрока(); 
Если Поз = 0 Тогда 
// не выбрана строка таблицы 
Возврат; 
КонецЕсли; 
Эл=тбсотр.ПолучитьЗначение(Поз,"Значение"); 
Спр=СоздатьОбъект("Справочник.Сотрудники"); 
Спр.ИспользоватьВладельца(ТекущийЭлемент()); 
Если Спр.НайтиЭлемент(Эл)=1 Тогда 
Спр.Удалить(0); 
тбсотр.УдалитьСтроку(Поз); 
тбсотр.ТекущаяСтрока(?(Поз>1,Поз-1,1)); 
Форма.Обновить(); 
КонецЕсли; 
КонецПроцедуры //кнУдалить
Эта кнопка вообще не только удаляет из ТЗ сотрудника, но и удаляет в справочнике сотрудники, а мне просто нужно из ТЗ удалить.
И такой еще вопрос, обязательно справочник в таком случае подчиненным делать?
 
а обойтись простыми группами прав почему не подходит?
 
Просто разделить права на руководителя и сотрудника можно так и есть, но нужно, чтобы руководитель мог пересматривать документы только подчиненного сотрудника, а другой руково дитель не мог пересматривать, если это не его подчиненный :facepalm:
 
1. Если уж плагиатом занимаетесь то так и пишите: есть чужой код, помогите его переделать
2. Используйте подбор, чтобы выбрать из существующих
3. Уберите Спр.Удалить(0); тогда элемент не будет удаляться

В обоих случаях проблема возникла из-за того что "справочник Сотрудники сделала подчиненным"
Я бы делал несколько иначе, также как и автор приведенного кода
 
Код взят как аналог из справочника ТМЦ на примере единиц измерения и переделан (автор -разработчики 1С :facepalm: ) (я почему-то подумала что так нужно реализовать - была не права), я уже поняна что как подчиненный не стоит делать, и переделала.
Код:
Процедура кнДобавить()
спрсот = СоздатьОбъект("Справочник.Сотрудники");
ОткрытьФормуМодально("Справочник.Сотрудники",Контекст);
Если спрсот.Выбрать("Сотрудники","ФормаВыбора") = 1 Тогда
тбсотр.ФИО = спрсот.ТекущийЭлемент();
КонецЕсли;
СписокСотр();
КонецПроцедуры //кнДобавить
Вот так то лучше :oops: но Если спрсот.Выбрать("Сотрудники","ФормаВыбора") = 1 - форма Сотрудники открывается не в режиме выбора, а в списке и при закрытии уже появляется режим выбора.
 
Лучше всего сделать еще один справочник подчиненный "Справочник Пользователи" и с одним реквизитом "Справочник.Сотрудники"
а дальше в соответствии с первоначальной идеей
 
1. Если уж плагиатом занимаетесь то так и пишите: есть чужой код, помогите его переделать
Я бы не назвала это плагиатом, учиться на типовых конфигурациях, смотреть их код - это плагиат? к сожалению мой уровень программирования низкий, возможно мой женский мозг не способен сразу найти наилучший вариант :oops:

Добавлено:
Лучше всего сделать еще один справочник подчиненный "Справочник Пользователи" и с одним реквизитом "Справочник.Сотрудники"
а дальше в соответствии с первоначальной идеей
Хм я читаю ваши мысли, потому что сделала отдельный справочник Права и там так и делаю как вы пишете :facepalm:
 
Сделала так - справочник Пользователи, на его форме ТЗ к которому добавляется из подчиненного справочника Права сотрудники. В Глобальном модуле написала:
Код:
Процедура глПраваДоступа()
спПраваНаДок = СоздатьОбъект("СписокЗначений");
спПраваНаДок.ДобавитьЗначение(глПользователь);
спрПрава = СоздатьОбъект("Справочник.Права");
спрПрава.ИспользоватьВладельца(глПользователь);
Если спрПрава.ВыбратьЭлементы()=1 Тогда
Пока спрПрава.ПолучитьЭлемент()=1 Цикл
спПраваНаДок.ДобавитьЗначение(спрПрава.ТекущийЭлемент().АвторДок);
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Все работает - документы нельзя смотреть, но как установить отбор на список значений спПраваНаДок в журнале, что бы вообще чужых не видеть документов???
УстановитьОтбор(спПраваНаДок); не работает
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!