|
Реализация создания на основании в расширении | ☑ | ||
|---|---|---|---|---|
|
0
SORTULV_1C
16.03.26
✎
00:09
|
Доброго времени суток, господа!
Подскажите, хочу в расширении взять типовой функционал создания на основании документа, сделать на его основании функционал. Документ ОтчетКомитенту, нужно создать на основании расход из кассы/со счета 50% суммы, пните в направлении, куда смотреть. Создание на основании не записывает документ, нужно сделать так же. По идее же просто передать структуру с параметрами, а на стороне документа при открытии использовать параметры уже, разве нет? |
|||
|
1
2S
16.03.26
✎
06:04
|
||||
|
2
DrZombi
гуру
16.03.26
✎
06:56
|
(0) Боюсь вас ждёт разочарования в расширениях. Не всё они позволяют :)
|
|||
|
3
DrZombi
гуру
16.03.26
✎
07:01
|
(1) В статье есть добавление роли в расширении.
В БСП есть маленькой казус, оно плохо дружит с ролями из расширения :) |
|||
|
4
2S
16.03.26
✎
07:07
|
(3) Добавить права на команду в типовую роль "БазовыеПраваБП". Если я правильно понял посыл )
|
|||
|
5
denk32
16.03.26
✎
07:32
|
||||
|
6
DrZombi
гуру
16.03.26
✎
08:22
|
(4) Да. Это сработает в данном варианте.
А вот когда объект из Расширения. И надо дать права только "избранным", то тут будет казус :) |
|||
|
7
ZloyBrawler
16.03.26
✎
09:51
|
(3) БСП прекрасно дружит с расширениями и ролями в нем.
У нас 92 роли добавлено и не меньше типовых изменено. В БСП есть только пара неудобств. Первое, создавать роль с именем ххх_ПолныеПрава не стоит, а то тока админам и будет доступна роль, а назвать можно ххх_ПраваПочтиПолные (с некого релиза приходится так делать). Другое неудобство, это то, что админу нельзя дать права накидывая еще ролей. Ну это ограничение мы прекрасно сломали этим же расширением. (И это с некого релиза приходится делать) |
|||
|
8
unenu
16.03.26
✎
11:10
|
(7)
Другое неудобство, это то, что админу нельзя дать права накидывая еще ролей.
Разве? А так? Общий модуль: УправлениеДоступомСлужебный Процедура ОбновитьРолиПользователей Добавить код: ДополнительныеРолиАдминистратора.Вставить("ххх_ПолныеПрава", Истина); |
|||
|
9
ZloyBrawler
16.03.26
✎
21:34
|
(8) Этот путь вынуждает допилы каждый раз делать и эти роли как понимаю будут всегда, а нужно на уровне юзера все же убирать добавлять интерактивно, поэтому приходится ломать
|
|||
|
10
Бертыш
16.03.26
✎
21:39
|
Раз пошла такая пьянка приведу свой кейс из практики. Заказчик у меня есть один привередливый и кейс был не про ввод на основание а про вывод на печать, но принцип схожий. Им было в тз прописанно между какими пунктами вывода на печать должна вставиться добавляемая команда и я всю плешь себе проел пока не сообразил как корректно вмешаться в механизм БСП формирующий меню и уже в этом механизме поменять последовательность элементов меню. Команду то саму добавить тьфу. Добавил и система подцепит, а вот добавить команду чтобы была определённая последовательность команд затача не вполне тривиальная
|
|||
|
11
Бертыш
16.03.26
✎
21:40
|
Может кому сгодится
|
|||
|
12
ZloyBrawler
16.03.26
✎
22:07
|
наш костыль
ноги не сломайте! я ничего не показывал никому модуль УправлениеДоступомСлужебный &ИзменениеИКонтроль("ОбновитьРолиПользователей") Процедура Затычки_ОбновитьРолиПользователей(Знач ОписаниеПользователей, Знач ПарольПользователяСервиса, ЕстьИзменения) чЁта #Удаление Если Администраторы[ТекущийПользователь] <> Неопределено Тогда ТекущиеНовыеРоли = НовыеРоли; НовыеРоли = ТекущиеНовыеРоли.Скопировать(Новый Массив); Для Каждого КлючИЗначение Из ОбязательныеРолиАдминистратора Цикл НовыеРоли.Добавить().РольСсылка = КлючИЗначение.Значение; КонецЦикла; Для Каждого КлючИЗначение Из ДополнительныеРолиАдминистратора Цикл Если ТекущиеНовыеРоли.Найти(КлючИЗначение.Значение, "РольСсылка") = Неопределено Тогда Продолжить; КонецЕсли; НовыеРоли.Добавить().РольСсылка = КлючИЗначение.Значение; КонецЦикла; КонецЕсли; #КонецУдаления #Вставка // с какого-та фига 1С решила, что у админов должны быть только админские роли и все, // а нам та нужно чтобы были у него еще и специфические роли, например программные что-то разрешающие или запрещающие // поэтому чисто убедимся чтобы среди отмеченных ролей были все обязательные роли админа Если Администраторы[ТекущийПользователь] <> Неопределено Тогда Для Каждого КлючИЗначение Из ОбязательныеРолиАдминистратора Цикл Если НовыеРоли.Найти(КлючИЗначение.Значение, "РольСсылка") <> Неопределено Тогда Продолжить; КонецЕсли; НовыеРоли.Добавить().РольСсылка = КлючИЗначение.Значение; КонецЦикла; КонецЕсли; #КонецВставки чЁта КонецПроцедуры >специфические роли, например программные имеется ввиду такие роли, которые не дают никаких прав на объекты, а только в коде используется проверка на их наличие или отсутствие, типа если нет такой роли, то запрещать провести документ, если в нем такого-та рода косяки... |
|||
|
13
banco
16.03.26
✎
23:04
|
(10) У команды печати есть поле Порядок
|
|||
|
14
DrZombi
гуру
17.03.26
✎
08:12
|
(12) Ха , а мы так делали :)
Общий модуль "УправлениеДоступомСлужебный" //Для Ролей из расширения ОбновитьНаборыЗаписей&Вместо("ОбновитьНаборыЗаписей") Процедура СОГ_ОбновитьНаборыЗаписей(Знач Данные, ЕстьИзменения) Экспорт ВсеПараметры = Новый Структура; ВсеПараметры.Вставить("МенеджерРегистра"); ВсеПараметры.Вставить("НовыеЗаписи"); ВсеПараметры.Вставить("ПоляСравнения"); ВсеПараметры.Вставить("ИмяПервогоИзмерения"); ВсеПараметры.Вставить("ЗначенияПервогоИзмерения"); ВсеПараметры.Вставить("ИмяВторогоИзмерения"); ВсеПараметры.Вставить("ЗначенияВторогоИзмерения"); ВсеПараметры.Вставить("ИмяТретьегоИзмерения"); ВсеПараметры.Вставить("ЗначенияТретьегоИзмерения"); ВсеПараметры.Вставить("НовыеЗаписиСодержатТолькоРазличия", Ложь); ВсеПараметры.Вставить("ФиксированныйОтбор"); ВсеПараметры.Вставить("ТолькоПроверка", Ложь); ВсеПараметры.Вставить("ДополнительныеСвойства"); ВсеПараметры.Вставить("ОбновлениеИБ", ОбновлениеИнформационнойБазы.ВыполняетсяОбновлениеИнформационнойБазы() Или ОбновлениеИнформационнойБазы.ЭтоВызовИзОбработчикаОбновления()); ЗаполнитьПараметры(Данные, ВсеПараметры, "МенеджерРегистра, НовыеЗаписи"); // Предварительная обработка параметров. Если НЕ ГруппаПараметровИзмеренияОбработана(Данные.ИмяПервогоИзмерения, Данные.ЗначенияПервогоИзмерения) Тогда ЕстьИзменения = Истина; Возврат; КонецЕсли; Если НЕ ГруппаПараметровИзмеренияОбработана(Данные.ИмяВторогоИзмерения, Данные.ЗначенияВторогоИзмерения) Тогда ЕстьИзменения = Истина; Возврат; КонецЕсли; Если НЕ ГруппаПараметровИзмеренияОбработана(Данные.ИмяТретьегоИзмерения, Данные.ЗначенияТретьегоИзмерения) Тогда ЕстьИзменения = Истина; Возврат; КонецЕсли; УпорядочитьГруппыПараметровИзмерений(Данные); // Проверка и обновление данных. Данные.Вставить("НаборЗаписей", Данные.МенеджерРегистра.СоздатьНаборЗаписей()); Данные.Вставить("МетаданныеРегистра", Метаданные.НайтиПоТипу(ТипЗнч(Данные.НаборЗаписей))); Данные.Вставить("ПолноеИмяРегистра", Данные.МетаданныеРегистра.ПолноеИмя()); Если Данные.НовыеЗаписиСодержатТолькоРазличия Тогда Данные.Вставить("НаборДляОднойЗаписи", Данные.МенеджерРегистра.СоздатьНаборЗаписей()); КонецЕсли; Если Данные.ФиксированныйОтбор <> Неопределено Тогда Для каждого КлючИЗначение Из Данные.ФиксированныйОтбор Цикл УстановитьОтбор(Данные.НаборЗаписей.Отбор[КлючИЗначение.Ключ], КлючИЗначение.Значение); КонецЦикла; КонецЕсли; Если Данные.НовыеЗаписиСодержатТолькоРазличия Тогда Если Данные.ИмяПервогоИзмерения = Неопределено Тогда ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Некорректные параметры в процедуре %1.'"), "ОбновитьНаборыЗаписей"); ВызватьИсключение ТекстОшибки; Иначе Если Данные.ИмяВторогоИзмерения = Неопределено Тогда ЗаписьНесколькимиНаборами = Ложь; Иначе ЗаписьНесколькимиНаборами = ЗаписьНесколькимиНаборами(Данные, Новый Структура, Данные.ИмяПервогоИзмерения, Данные.ЗначенияПервогоИзмерения); КонецЕсли; Если ЗаписьНесколькимиНаборами Тогда СписокПолей = Данные.ИмяПервогоИзмерения + ", " + Данные.ИмяВторогоИзмерения; Данные.НовыеЗаписи.Индексы.Добавить(СписокПолей); КоличествоПоЗначениямПервогоИзмерения = Данные.КоличествоПоЗначениям; Для каждого ПервоеЗначение Из Данные.ЗначенияПервогоИзмерения Цикл Отбор = Новый Структура(Данные.ИмяПервогоИзмерения, ПервоеЗначение); //УстановитьОтбор(Данные.НаборЗаписей.Отбор[Данные.ИмяПервогоИзмерения], ПервоеЗначение); //+ // Помещено в попытку, т.к. у ролей в расширении нет прав на существования... по мнению БСП от 1С :) Попытка УстановитьОтбор(Данные.НаборЗаписей.Отбор[Данные.ИмяПервогоИзмерения], ПервоеЗначение); Исключение ОписОшибки = ОписаниеОшибки(); ТекстСообщения = "Нарушения порядка назначения ролей из РАСШИРЕНИЯ в Профилях. Роль из РАСШИРЕНИЯ должна быть только в одном профиле! "+ " Не умеет 1С работать нормально с расширениями. Часть прав не установлено пользователям! "+ " Описание: %1"; ТекстСообщения = СтрШаблон(ТекстСообщения, ОписОшибки); ЗаписьЖурналаРегистрации("Ошибка установки прав доступа", УровеньЖурналаРегистрации.Ошибка, ,, ТекстСообщения, РежимТранзакцииЗаписиЖурналаРегистрации.Независимая); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения); Продолжить; КонецПопытки; //- Если Данные.ИмяТретьегоИзмерения = Неопределено Тогда ЗаписьНесколькимиНаборами = Ложь; Иначе // @skip-check query-in-loop - Порционная обработка данных ЗаписьНесколькимиНаборами = ЗаписьНесколькимиНаборами(Данные, Отбор, Данные.ИмяВторогоИзмерения, Данные.ЗначенияВторогоИзмерения); КонецЕсли; Если ЗаписьНесколькимиНаборами Тогда Для каждого ВтороеЗначение Из Данные.ЗначенияВторогоИзмерения Цикл Отбор.Вставить(Данные.ИмяВторогоИзмерения, ВтороеЗначение); УстановитьОтбор(Данные.НаборЗаписей.Отбор[Данные.ИмяВторогоИзмерения], ВтороеЗначение); // Обновление по трем измерениям. ОбновитьНовыеЗаписиНабораПоРазличнымНовымЗаписям(Данные, Отбор, ЕстьИзменения); КонецЦикла; Данные.НаборЗаписей.Отбор[Данные.ИмяВторогоИзмерения].Использование = Ложь; Иначе // Обновление по двум измерениям. Данные.Вставить("КоличествоПоЗначениям", КоличествоПоЗначениямПервогоИзмерения); ОбновитьНовыеЗаписиНабораПоРазличнымНовымЗаписям(Данные, Отбор, ЕстьИзменения); КонецЕсли; КонецЦикла; Иначе // Обновление по одному измерению. ПрочитатьКоличествоДляЧтения(Данные); ОбновитьНовыеЗаписиНабораПоРазличнымНовымЗаписям(Данные, Новый Структура, ЕстьИзменения); КонецЕсли; КонецЕсли; Иначе Если Данные.ИмяПервогоИзмерения = Неопределено Тогда // Обновление всех записей. ТекущиеДанные = Новый Структура("НаборЗаписей, НовыеЗаписи, ПоляСравнения, |ТолькоПроверка, ДополнительныеСвойства, ОбновлениеИБ"); ЗаполнитьЗначенияСвойств(ТекущиеДанные, Данные); ОбновитьНаборЗаписей(ТекущиеДанные, ЕстьИзменения); ИначеЕсли Данные.ИмяВторогоИзмерения = Неопределено Тогда // Обновление по одному измерению. Отбор = Новый Структура(Данные.ИмяПервогоИзмерения); Для каждого Значение Из Данные.ЗначенияПервогоИзмерения Цикл УстановитьОтбор(Данные.НаборЗаписей.Отбор[Данные.ИмяПервогоИзмерения], Значение); Отбор[Данные.ИмяПервогоИзмерения] = Значение; Если Данные.ЗначенияПервогоИзмерения.Количество() <> 1 Тогда НовыеЗаписиНабора = Данные.НовыеЗаписи; Иначе НовыеЗаписиНабора = Данные.НовыеЗаписи.Скопировать(Отбор); КонецЕсли; ТекущиеДанные = Новый Структура("НаборЗаписей, ПоляСравнения, |ТолькоПроверка, ДополнительныеСвойства, ОбновлениеИБ"); ЗаполнитьЗначенияСвойств(ТекущиеДанные, Данные); ТекущиеДанные.Вставить("НовыеЗаписи", НовыеЗаписиНабора); ОбновитьНаборЗаписей(ТекущиеДанные, ЕстьИзменения); КонецЦикла; ИначеЕсли Данные.ИмяТретьегоИзмерения = Неопределено Тогда // Обновление по двум измерениям. СписокПолей = Данные.ИмяПервогоИзмерения + ", " + Данные.ИмяВторогоИзмерения; Данные.НовыеЗаписи.Индексы.Добавить(СписокПолей); Отбор = Новый Структура(СписокПолей); Для каждого ПервоеЗначение Из Данные.ЗначенияПервогоИзмерения Цикл УстановитьОтбор(Данные.НаборЗаписей.Отбор[Данные.ИмяПервогоИзмерения], ПервоеЗначение); Отбор[Данные.ИмяПервогоИзмерения] = ПервоеЗначение; ОбновитьНовыеЗаписиНабораПоВсемНовымЗаписям( Данные, Отбор, СписокПолей, Данные.ИмяВторогоИзмерения, Данные.ЗначенияВторогоИзмерения, ЕстьИзменения); КонецЦикла; Иначе // Обновление по трем измерениям. СписокПолей = Данные.ИмяПервогоИзмерения + ", " + Данные.ИмяВторогоИзмерения + ", " + Данные.ИмяТретьегоИзмерения; Данные.НовыеЗаписи.Индексы.Добавить(СписокПолей); Отбор = Новый Структура(СписокПолей); Для каждого ПервоеЗначение Из Данные.ЗначенияПервогоИзмерения Цикл УстановитьОтбор(Данные.НаборЗаписей.Отбор[Данные.ИмяПервогоИзмерения], ПервоеЗначение); Отбор[Данные.ИмяПервогоИзмерения] = ПервоеЗначение; Для каждого ВтороеЗначение Из Данные.ЗначенияВторогоИзмерения Цикл УстановитьОтбор(Данные.НаборЗаписей.Отбор[Данные.ИмяВторогоИзмерения], ВтороеЗначение); Отбор[Данные.ИмяВторогоИзмерения] = ВтороеЗначение; ОбновитьНовыеЗаписиНабораПоВсемНовымЗаписям( Данные, Отбор, СписокПолей, Данные.ИмяВторогоИзмерения, Данные.ЗначенияВторогоИзмерения, ЕстьИзменения); КонецЦикла; КонецЦикла; КонецЕсли; КонецЕсли; КонецПроцедуры //Для Администраторов, чтобы у них тоже были Роли... ОбновитьРолиПользователей&Вместо("ОбновитьРолиПользователей") Процедура СОГ_ОбновитьРолиПользователей(Знач ОписаниеПользователей = Неопределено, Знач ПарольПользователяСервиса = Неопределено, ЕстьИзменения = Ложь) Экспорт Если НЕ ПользователиСлужебный.ЗапретРедактированияРолей() Тогда // Роли устанавливаются механизмами подсистем Пользователи и ВнешниеПользователи. Возврат; КонецЕсли; Если ОписаниеПользователей = Неопределено Тогда МассивПользователей = Неопределено; Пользователи.НайтиНеоднозначныхПользователейИБ(Неопределено); ИначеЕсли ТипЗнч(ОписаниеПользователей) = Тип("Массив") Тогда МассивПользователей = ОписаниеПользователей; Если МассивПользователей.Количество() = 0 Тогда Возврат; ИначеЕсли МассивПользователей.Количество() = 1 Тогда Пользователи.НайтиНеоднозначныхПользователейИБ(МассивПользователей[0]); Иначе Пользователи.НайтиНеоднозначныхПользователейИБ(Неопределено); КонецЕсли; ИначеЕсли ТипЗнч(ОписаниеПользователей) = Тип("Тип") Тогда МассивПользователей = ОписаниеПользователей; Пользователи.НайтиНеоднозначныхПользователейИБ(Неопределено); Иначе МассивПользователей = Новый Массив; МассивПользователей.Добавить(ОписаниеПользователей); Пользователи.НайтиНеоднозначныхПользователейИБ(ОписаниеПользователей); КонецЕсли; УстановитьПривилегированныйРежим(Истина); ТекущиеСвойстваПользователей = ТекущиеСвойстваПользователей(МассивПользователей); // Параметры проверки в цикле. ВсеРоли = ПользователиСлужебный.ВсеРоли().Соответствие; ИдентификаторыПользователейИБ = ТекущиеСвойстваПользователей.ИдентификаторыПользователейИБ; НовыеРолиПользователей = ТекущиеСвойстваПользователей.РолиПользователей; ИдентификаторыРолей = ТекущиеСвойстваПользователей.ИдентификаторыРолей; ИменаРолей = ТекущиеСвойстваПользователей.ИменаРолей; ОбязательныеРолиАдминистратора = ТекущиеСвойстваПользователей.ОбязательныеРолиАдминистратора; ДополнительныеРолиАдминистратора = ТекущиеСвойстваПользователей.ДополнительныеРолиАдминистратора; Администраторы = ТекущиеСвойстваПользователей.Администраторы; РазделениеВключено = ОбщегоНазначения.РазделениеВключено(); НеобходимоОбновлениеИБ = ОбновлениеИнформационнойБазы.НеобходимоОбновлениеИнформационнойБазы(); ИдентификаторТекущегоПользователяИБ = ПользователиИнформационнойБазы.ТекущийПользователь().УникальныйИдентификатор; // Будущий итог после цикла. НовыеАдминистраторыИБ = Новый Соответствие; ОбновляемыеПользователиИБ = Новый Соответствие; НекорректныеРоли = НовыеНекорректныеРоли(НовыеРолиПользователей); Для Каждого ОписаниеПользователя Из ИдентификаторыПользователейИБ Цикл ТекущийПользователь = ОписаниеПользователя.Пользователь; ИдентификаторПользователяИБ = ОписаниеПользователя.ИдентификаторПользователяИБ; НовыйАдминистраторИБ = Ложь; // Поиск пользователя ИБ. Если ТипЗнч(ИдентификаторПользователяИБ) = Тип("УникальныйИдентификатор") Тогда ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору( ИдентификаторПользователяИБ); Иначе ПользовательИБ = Неопределено; КонецЕсли; Если ПользовательИБ = Неопределено Или Не ЗначениеЗаполнено(ПользовательИБ.Имя) Тогда Продолжить; КонецЕсли; Если НеобходимоОбновлениеИБ И ИдентификаторПользователяИБ = ИдентификаторТекущегоПользователяИБ Тогда Продолжить; КонецЕсли; Отказ = Ложь; ИнтеграцияПодсистемБСП.ПриОбновленииРолейПользователяИБ(ИдентификаторПользователяИБ, Отказ); Если Отказ Тогда Продолжить; КонецЕсли; Отбор = Новый Структура("Пользователь", ТекущийПользователь); НовыеРоли = НовыеРолиПользователей.Скопировать( НовыеРолиПользователей.НайтиСтроки(Отбор), "Роль, РольСсылка"); НовыеРоли.Индексы.Добавить("РольСсылка"); Если Администраторы[ТекущийПользователь] <> Неопределено Тогда ТекущиеНовыеРоли = НовыеРоли; //НовыеРоли = ТекущиеНовыеРоли.Скопировать(Новый Массив); //+ (закоментировал, что бы права не удалялись - Только для Администраторов!!!) Для Каждого КлючИЗначение Из ОбязательныеРолиАдминистратора Цикл //+ // Проверим, возможно уже права есть, и их ненадо повторять... Если ТекущиеНовыеРоли.Найти(КлючИЗначение.Значение, "РольСсылка") <> Неопределено Тогда Продолжить; КонецЕсли; //- НовыеРоли.Добавить().РольСсылка = КлючИЗначение.Значение; КонецЦикла; Для Каждого КлючИЗначение Из ДополнительныеРолиАдминистратора Цикл Если ТекущиеНовыеРоли.Найти(КлючИЗначение.Значение, "РольСсылка") = Неопределено Тогда Продолжить; КонецЕсли; //+ // Проверим, возможно уже права есть, и их ненадо повторять... Если ТекущиеНовыеРоли.Найти(КлючИЗначение.Значение, "РольСсылка") <> Неопределено Тогда Продолжить; КонецЕсли; //- НовыеРоли.Добавить().РольСсылка = КлючИЗначение.Значение; КонецЦикла; КонецЕсли; НедоступныеРоли = ПользователиСлужебный.НедоступныеРолиПоТипуПользователя( ТипЗнч(ТекущийПользователь) = Тип("СправочникСсылка.ВнешниеПользователи")); // Проверка старых ролей. РолиДляДобавления = Новый Соответствие; РолиДляУдаления = Новый Соответствие; Для Каждого Роль Из ПользовательИБ.Роли Цикл ИмяРоли = Роль.Имя; РольСсылка = ИдентификаторыРолей.Получить(ИмяРоли); Если РольСсылка = Неопределено Тогда КлючРоли = Справочники.ИдентификаторыОбъектовМетаданных.КлючОбъектаМетаданныхРоль(Роль); РольСсылка = ИдентификаторыРолей.Получить(КлючРоли); КонецЕсли; Строка = НовыеРоли.Найти(РольСсылка, "РольСсылка"); Если Строка = Неопределено Тогда РолиДляУдаления.Вставить(ИмяРоли, Роль); Иначе Если РазделениеВключено И НедоступныеРоли.Получить(ИмяРоли) <> Неопределено Тогда Строка.Роль = ИмяРоли; ДобавитьНекорректнуюРоль(НекорректныеРоли, Строка, ТекущийПользователь, Ложь); РолиДляУдаления.Вставить(ИмяРоли, Роль); КонецЕсли; НовыеРоли.Удалить(Строка); КонецЕсли; КонецЦикла; // Проверка новых ролей. Для Каждого Строка Из НовыеРоли Цикл Строка.Роль = ИменаРолей.Получить(Строка.РольСсылка); Если ВсеРоли.Получить(Строка.Роль) = Неопределено Тогда ДобавитьНекорректнуюРоль(НекорректныеРоли, Строка, ТекущийПользователь, Истина); Продолжить; КонецЕсли; Если НедоступныеРоли.Получить(Строка.Роль) <> Неопределено Тогда ДобавитьНекорректнуюРоль(НекорректныеРоли, Строка, ТекущийПользователь, Ложь); Продолжить; КонецЕсли; РолиДляДобавления.Вставить(Строка.Роль, Истина); Если Строка.Роль = "АдминистраторСистемы" Тогда НовыйАдминистраторИБ = Истина; КонецЕсли; КонецЦикла; // Завершение обработки текущего пользователя. Если РолиДляДобавления.Количество() = 0 И РолиДляУдаления.Количество() = 0 Тогда Продолжить; КонецЕсли; ИзмененияРолей = Новый Структура; ИзмененияРолей.Вставить("ПользовательСсылка", ТекущийПользователь); ИзмененияРолей.Вставить("ПользовательИБ", ПользовательИБ); ИзмененияРолей.Вставить("РолиДляДобавления", РолиДляДобавления); ИзмененияРолей.Вставить("РолиДляУдаления", РолиДляУдаления); Если НовыйАдминистраторИБ Тогда НовыеАдминистраторыИБ.Вставить(ТекущийПользователь, ИзмененияРолей); Иначе ОбновляемыеПользователиИБ.Вставить(ТекущийПользователь, ИзмененияРолей); КонецЕсли; ЕстьИзменения = Истина; КонецЦикла; ЗарегистрироватьНекорректныеРоли(НекорректныеРоли); // Добавление новых администраторов. Если НовыеАдминистраторыИБ.Количество() > 0 Тогда ОбновитьРолиПользователейИБ(НовыеАдминистраторыИБ, ПарольПользователяСервиса); КонецЕсли; // Удаление старых администраторов и обновление остальных пользователей. Если ОбновляемыеПользователиИБ.Количество() > 0 Тогда ОбновитьРолиПользователейИБ(ОбновляемыеПользователиИБ, ПарольПользователяСервиса); КонецЕсли; ОтключитьУВсехРасширенийФлажокИспользоватьОсновныеРолиДляВсехПользователей(); КонецПроцедуры |
|||
|
15
DrZombi
гуру
17.03.26
✎
08:15
|
(7) Сомнительно... Мы сумели постичь, то как нельзя использовать Роли из Расширения :)
Пришлось Костыль (Исключение) прописывать. Иначе роль у пользователя не меняется. Просто происходит ошибка, и как бы всё хорошо, а роль у пользователя не обработалась :) |
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |