Dev ›
Ошибка при выполнении функции ОбщегоНазначения.ИдентификаторыОбъектаМетаданных() ›
#34
06.05.23 17:47
Доброго времени суток
Для старых БСП возможно корректно использовать роли из расширения.
Для этого нужно сделать 2 шага
Шаг №1 - Обновить справочник с метаданными (просто откройте Все "функции"->"Справочники"->"Идентификаторы объектов метаданных" в форме списка нажмите "Обновить данные мправочник") для этой операции нужен монопольный доступ к ИБ
Шаг №2 - Обновить кеш с ролями (эта такая хитрая константа которая содежит кеш)
Код для моей версии БСП |
---|
Код |
---|
Процедура ОбновитьВсеРоли() Экспорт
ВсеРоли = ВсеРоли();
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("Константа.ПараметрыРаботыПользователей");
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
НачатьТранзакцию();
Попытка
СтандартныеПодсистемыСервер.УстановитьПараметрРаботыПрограммы(
"ПараметрыРаботыПользователей",
"ВсеРоли",
ВсеРоли);
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
КонецПопытки;
СтандартныеПодсистемыСервер.ПодтвердитьОбновлениеПараметраРаботыПрограммы(
"ПараметрыРаботыПользователей", "ВсеРоли");
КонецПроцедуры
Функция ВсеРоли()
Массив = Новый Массив;
Соответствие = Новый Соответствие;
Таблица = Новый ТаблицаЗначений;
Таблица.Колонки.Добавить("Имя", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(256)));
Для каждого Роль Из Метаданные.Роли Цикл
ИмяРоли = Роль.Имя;
Массив.Добавить(ИмяРоли);
Соответствие.Вставить(ИмяРоли, Истина);
Таблица.Добавить().Имя = ИмяРоли;
КонецЦикла;
ВсеРоли = Новый Структура;
ВсеРоли.Вставить("Массив", Новый ФиксированныйМассив(Массив));
ВсеРоли.Вставить("Соответствие", Новый ФиксированноеСоответствие(Соответствие));
ВсеРоли.Вставить("Таблица", Таблица);
Возврат ОбщегоНазначения.ФиксированныеДанные(ВсеРоли, Ложь);
КонецФункции
|
|
После выполения этих этапов вы сможете назначать роли из расширения для профиля