Звёзд с неба она не хвататет, но дело своё делает.
Привожу код ниже:
// !!! Роли !!!
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Роль");
Для каждого пользователь из ПользователиИнформационнойБазы.ПолучитьПользователей() Цикл
Для каждого роль из пользователь.роли Цикл
Строка = ТЗ.Добавить();
Строка.Роль = Роль;
КонецЦикла;
КонецЦикла;
ТЗ.Свернуть("Роль");
ИспользуемыеРолиБезПовторов = ТЗ;
// !!! Документы !!!
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Документ");
Для Каждого Документ Из Метаданные.Документы Цикл
Строка = ТЗ.Добавить();
Строка.Документ = Документ;
КонецЦикла;
ТЗ_Документы = ТЗ;
// !!! Справочники !!!
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Справочник");
Для Каждого Справочник Из Метаданные.Справочники Цикл
Строка = ТЗ.Добавить();
Строка.Справочник = Справочник;
КонецЦикла;
ТЗ_Ссправочники = ТЗ;
// !!! Шапка таблицы значений !!!
ТаблицаРезультат = Новый ТаблицаЗначений;
ТаблицаРезультат.Колонки.Добавить("ОбъектМетаданных");
ТаблицаРезультат.Колонки.Добавить("Право");
Для каждого элем из ИспользуемыеРолиБезПовторов Цикл
ТаблицаРезультат.Колонки.Добавить(элем.Роль.Имя);
КонецЦикла; // Роли в ТаблицуРезультат
// !!! Права доступа!!!
МассивПрав = Новый Массив;
МассивПрав.Добавить("Чтение");
МассивПрав.Добавить("Добавление");
МассивПрав.Добавить("Изменение");
МассивПрав.Добавить("Удаление");
МассивПрав.Добавить("Проведение");
МассивПрав.Добавить("ОтменаПроведения");
МассивПрав.Добавить("Просмотр");
МассивПрав.Добавить("ИнтерактивноеДобавление");
МассивПрав.Добавить("Редактирование");
МассивПрав.Добавить("Использование");
МассивПрав.Добавить("ВводПоСтроке");
// !!! Проверка Документов !!!
Для каждого документ Из ТЗ_Документы Цикл
Для каждого элемент Из МассивПрав Цикл
НоваяСтрокаТЗ = ТаблицаРезультат.Добавить();
НоваяСтрокаТЗ.ОбъектМетаданных = документ.Документ;
НоваяСтрокаТЗ.Право = элемент;
Для каждого роль Из ИспользуемыеРолиБезПовторов Цикл
Колонка = ТаблицаРезультат.Колонки.Найти(роль.Роль.Имя);
НомерКолонки = ТаблицаРезультат.Колонки.Индекс(Колонка);
НоваяСтрокаТЗ.Установить(НомерКолонки, ПравоДоступа(элемент, документ.Документ, роль.Роль));
КонецЦикла;
КонецЦикла;
КонецЦикла;
// !!! Проверка Справочников!!!
Для каждого справочник Из ТЗ_Ссправочники Цикл
Для каждого элемент Из МассивПрав Цикл
НоваяСтрокаТЗ = ТаблицаРезультат.Добавить();
НоваяСтрокаТЗ.ОбъектМетаданных = справочник.Справочник;
НоваяСтрокаТЗ.Право = элемент;
Для каждого роль Из ИспользуемыеРолиБезПовторов Цикл
Колонка = ТаблицаРезультат.Колонки.Найти(роль.Роль.Имя);
НомерКолонки = ТаблицаРезультат.Колонки.Индекс(Колонка);
НоваяСтрокаТЗ.Установить(НомерКолонки, ПравоДоступа(элемент, справочник.Справочник, роль.Роль));
КонецЦикла;
КонецЦикла;
КонецЦикла;