Когда в базе создают много групп доступа для тонкой настройки прав между пользователями, то раздача прав новым пользователям может занимать много времени или приводить к ошибкам, так как из за большого количество групп можешь пропустить какую-то из них. Для упрощения этой ситуации был разработан механизм копирования групп между пользователями. Это удобно, когда приходит новый сотрудник в отдел, и он будет выполнять такие же функции, как и другие его коллеги.
Для добавления этого функционала в конфигурацию необходимо
1. В общюю форму "ПраваДоступа" добавить команду
2. Пишем код в обработчике команды
&НаКлиенте
Процедура КопироватьГруппыДоступа(Команда)
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("РежимВыбора", Истина);
ОткрытьФорму("Справочник.Пользователи.ФормаСписка", ПараметрыФормы, ЭтаФорма);
КонецПроцедуры
3. Добавляем на форме обработчик формы "ОбработкаВыбора"
4. Код в обработчике "ОбработкаВыбора"
&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)
Если ИсточникВыбора.ИмяФормы = "Справочник.Пользователи.Форма.ФормаСписка" Тогда
Ответ = Вопрос("Текущий список групп доступа будет очищен. Продолжить?", РежимДиалогаВопрос.ДаНет,,, "Предупреждение");
Если Ответ = КодВозвратаДиалога.Да Тогда
Для каждого СтрокаГруппыДоступа Из ГруппыДоступа Цикл
ВключитьИсключитьИзГруппы(СтрокаГруппыДоступа.ГруппаДоступа, Ложь);
КонецЦикла;
СписокГрупп = Новый СписокЗначений;
ПолучитьСписокГруппВыбранногоПользователя(ВыбранноеЗначение, СписокГрупп);
Для каждого СтрокаСписокГрупп Из СписокГрупп Цикл
ВключитьИсключитьИзГруппы(СтрокаСписокГрупп.Значение, Истина);
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Процедура ПолучитьСписокГруппВыбранногоПользователя(ВыбранноеЗначение, СписокГрупп)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ГруппыДоступаПользователи.Ссылка КАК ГруппаДоступа
|ИЗ
| Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи
|ГДЕ
| ГруппыДоступаПользователи.Пользователь = &Пользователь
| И НЕ ГруппыДоступаПользователи.Ссылка.ПометкаУдаления";
Запрос.УстановитьПараметр("Пользователь", ВыбранноеЗначение);
РезультатЗапроса = Запрос.Выполнить();
Если НЕ РезультатЗапроса.Пустой() Тогда
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
СписокГрупп.Добавить(Выборка.ГруппаДоступа);
КонецЦикла;
КонецЕсли;
КонецПроцедуры
5. В результате получаем вот такой функционал
Спасибо за внимание!