//ирПортативный Перем ирПортативный Экспорт; //ирПортативный Перем ирОбщий Экспорт; //ирПортативный Перем ирСервер Экспорт; //ирПортативный Перем ирКэш Экспорт; //ирПортативный Перем ирПривилегированный Экспорт; Перем РежимОтладки Экспорт; Перем ТаблицаПрав Экспорт; Перем Роли Экспорт; Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) #Если _ Тогда СхемаКомпоновки = Новый СхемаКомпоновкиДанных; КонечнаяНастройка = Новый НастройкиКомпоновкиДанных; ВнешниеНаборыДанных = Новый Структура; ДокументРезультат = Новый ТабличныйДокумент; #КонецЕсли СтандартнаяОбработка = Ложь; ПрофилиГруппДоступа = Новый ТаблицаЗначений; ПрофилиГруппДоступа.Колонки.Добавить("РольИмя", Новый ОписаниеТипов("Строка")); ПрофилиГруппДоступа.Колонки.Добавить("ПрофильГруппДоступа", Новый ОписаниеТипов("Строка")); ПрофилиГруппДоступа.Колонки.Добавить("КоличествоРолей", Новый ОписаниеТипов("Число")); Если ирКэш.НомерВерсииБСПЛкс() >= 200 Тогда Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ | ПрофилиГруппДоступаРоли.Ссылка КАК ПрофильГруппДоступа, | Профили.КоличествоРолей КАК КоличествоРолей, | ПрофилиГруппДоступаРоли.Роль.Имя КАК РольИмя |ИЗ | Справочник.ПрофилиГруппДоступа.Роли КАК ПрофилиГруппДоступаРоли | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ | ПрофилиГруппДоступа_РолиТ.Ссылка КАК Ссылка, | КОЛИЧЕСТВО(ПрофилиГруппДоступа_РолиТ.Роль) КАК КоличествоРолей | ИЗ | Справочник.ПрофилиГруппДоступа.Роли КАК ПрофилиГруппДоступа_РолиТ | | СГРУППИРОВАТЬ ПО | ПрофилиГруппДоступа_РолиТ.Ссылка) КАК Профили | ПО Профили.Ссылка = ПрофилиГруппДоступаРоли.Ссылка |"; ПрофилиГруппДоступа = Запрос.Выполнить().Выгрузить(); КонецЕсли; РолиПользователей = Новый ТаблицаЗначений; РолиПользователей.Колонки.Добавить("Роль", Новый ОписаниеТипов("Строка")); РолиПользователей.Колонки.Добавить("Пользователь", Новый ОписаниеТипов("Строка")); Если ПравоДоступа("Администрирование", Метаданные) Тогда ДоступныеПользователи = ПользователиИнформационнойБазы.ПолучитьПользователей(); Иначе ДоступныеПользователи = Новый Массив; ДоступныеПользователи.Добавить(ПользователиИнформационнойБазы.ТекущийПользователь()); КонецЕсли; Для Каждого ПользовательИБ Из ДоступныеПользователи Цикл #Если Сервер И Не Сервер Тогда ПользовательИБ = ПользователиИнформационнойБазы.СоздатьПользователя(); #КонецЕсли Для Каждого РольЦикл Из ПользовательИБ.Роли Цикл СтрокаРоли = РолиПользователей.Добавить(); СтрокаРоли.Роль = РольЦикл.Имя; СтрокаРоли.Пользователь = ПользовательИБ.Имя; КонецЦикла; КонецЦикла; ТаблицаРоли = Новый ТаблицаЗначений; ТаблицаРоли.Колонки.Добавить("Роль", Новый ОписаниеТипов("Строка")); ТаблицаРоли.Колонки.Добавить("УстанавливатьПраваДляНовыхОбъектов"); ТаблицаРоли.Колонки.Добавить("НезависимыеПраваПодчиненныхОбъектов"); ТаблицаРоли.Колонки.Добавить("УстанавливатьПраваДляРеквизитовИТабличныхЧастейПоУмолчанию"); Если ИзвлечьСвойстваРолей Тогда мПлатформа = ирКэш.Получить(); #Если Сервер И Не Сервер Тогда мПлатформа = Обработки.ирПлатформа.Создать(); #КонецЕсли Для Каждого МетаРоль Из Роли Цикл ФайлРоли = Новый Файл("" + мПлатформа.СтруктураПодкаталоговФайловогоКэша.КэшРолей.ПолноеИмя + "\Роль." + МетаРоль.Имя + ".Права.xml"); Если Не ФайлРоли.Существует() Тогда Сообщить("В кэше ролей не обнаружен файл роли """ + МетаРоль.Имя + """. Для извлечения свойств этой роли необходимо обновить кэш прав."); Продолжить; КонецЕсли; СтрокаРоли = ТаблицаРоли.Добавить(); СтрокаРоли.Роль = МетаРоль.Имя; ЧтениеXML = Новый ЧтениеXML; ЧтениеXML.ОткрытьФайл(ФайлРоли.ПолноеИмя); ЧтениеXML.Прочитать(); Для Счетчик = 1 По 3 Цикл ЧтениеXML.Прочитать(); Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда Если ЧтениеXML.ЛокальноеИмя = "setForNewObjects" Тогда ЧтениеXML.Прочитать(); СтрокаРоли.УстанавливатьПраваДляНовыхОбъектов = Булево(ЧтениеXML.Значение); ИначеЕсли ЧтениеXML.ЛокальноеИмя = "setForAttributesByDefault" Тогда ЧтениеXML.Прочитать(); СтрокаРоли.НезависимыеПраваПодчиненныхОбъектов = Булево(ЧтениеXML.Значение); ИначеЕсли ЧтениеXML.ЛокальноеИмя = "independentRightsOfChildObjects" Тогда ЧтениеXML.Прочитать(); СтрокаРоли.УстанавливатьПраваДляРеквизитовИТабличныхЧастейПоУмолчанию = Булево(ЧтениеXML.Значение); КонецЕсли; ЧтениеXML.Прочитать(); КонецЕсли; КонецЦикла; КонецЦикла; КонецЕсли; ФункциональныеОпции.Очистить(); ФункциональныеОпцииПолей.Очистить(); Если ВычислятьФункциональныеОпции Тогда Для Каждого ФункциональнаяОпция Из Метаданные.ФункциональныеОпции Цикл СтрокаТаблицы = ФункциональныеОпции.Добавить(); СтрокаТаблицы.ФункциональнаяОпция = ФункциональнаяОпция.Имя; СтрокаТаблицы.ФункциональнаяОпцияВключена = ПолучитьФункциональнуюОпцию(ФункциональнаяОпция.Имя); КонецЦикла; ДобавленныеОбъектыМД = Новый Соответствие; ИменаГруппировок = "ОбъектМетаданных, ТабличнаяЧасть, Поле, ПолеПолноеИмя"; ПолныеИменаПолей = ТаблицаПрав.Скопировать(, ИменаГруппировок); ПолныеИменаПолей.Свернуть(ИменаГруппировок); ВычисленныеФункОпцииРодительскихОбъектов = Новый Соответствие; Для Каждого СтрокаПоля Из ПолныеИменаПолей Цикл РодительскийОбъектМД = ирКэш.ОбъектМДПоПолномуИмениЛкс(СтрокаПоля.ОбъектМетаданных); Если ЗначениеЗаполнено(СтрокаПоля.ТабличнаяЧасть) Тогда ТЧ_МД = РодительскийОбъектМД.ТабличныеЧасти.Найти(СтрокаПоля.ТабличнаяЧасть); Если ТЧ_МД <> Неопределено Тогда РодительскийОбъектМД = ТЧ_МД; КонецЕсли; КонецЕсли; ДочернийОбъектМД = ирОбщий.ДочернийОбъектМДПоИмениЛкс(РодительскийОбъектМД, СтрокаПоля.Поле); Если ДочернийОбъектМД <> Неопределено Тогда ОбъектМД = ДочернийОбъектМД; ПрямоеНазначение = Истина; Иначе Если ЗначениеЗаполнено(СтрокаПоля.Поле) Тогда Продолжить; КонецЕсли; ОбъектМД = РодительскийОбъектМД; ПрямоеНазначение = Ложь; КонецЕсли; ДобавленыСтроки = Ложь; ДобавленыСтрокиРодителя = Ложь; Для Каждого ФункциональнаяОпция Из Метаданные.ФункциональныеОпции Цикл Если ФункциональнаяОпция.Состав.Содержит(ОбъектМД) Тогда СтрокаТаблицы = ФункциональныеОпцииПолей.Добавить(); СтрокаТаблицы.ФункциональнаяОпция = ФункциональнаяОпция.Имя; СтрокаТаблицы.ПолеПолноеИмя = СтрокаПоля.ПолеПолноеИмя; СтрокаТаблицы.ПрямоеНазначение = ПрямоеНазначение = ЗначениеЗаполнено(СтрокаПоля.Поле); ДобавленыСтроки = Истина; КонецЕсли; КонецЦикла; //Если Не ДобавленыСтроки Тогда // // Если объект не входит в функциональные опции // СтрокаТаблицы = ФункциональныеОпцииПолей.Добавить(); // СтрокаТаблицы.ФункциональнаяОпция = ""; // СтрокаТаблицы.ПолеПолноеИмя = СтрокаПоля.ПолеПолноеИмя; // СтрокаТаблицы.ПрямоеНазначение = ПрямоеНазначение = ЗначениеЗаполнено(СтрокаПоля.Поле); //КонецЕсли; КонецЦикла; КонецЕсли; КонечнаяНастройка = КомпоновщикНастроек.ПолучитьНастройки(); Если ЗначениеЗаполнено(Пользователь) Тогда ирОбщий.НайтиДобавитьЭлементОтбораКомпоновкиЛкс(КонечнаяНастройка, "Пользователь", Пользователь,,, Ложь); КонецЕсли; Если ЗначениеЗаполнено(ОбъектМетаданных) Тогда ирОбщий.НайтиДобавитьЭлементОтбораКомпоновкиЛкс(КонечнаяНастройка, "ОбъектМетаданных", ОбъектМетаданных,,, Ложь); КонецЕсли; Если ЗначениеЗаполнено(Роль) Тогда ирОбщий.НайтиДобавитьЭлементОтбораКомпоновкиЛкс(КонечнаяНастройка, "Роль", Роль,,, Ложь); КонецЕсли; ВнешниеНаборыДанных = Новый Структура; ВнешниеНаборыДанных.Вставить("ПрофилиГруппДоступа", ПрофилиГруппДоступа); ВнешниеНаборыДанных.Вставить("РолиПользователей", РолиПользователей); ВнешниеНаборыДанных.Вставить("Роли", ТаблицаРоли); ВнешниеНаборыДанных.Вставить("Таблица", ТаблицаПрав); ВнешниеНаборыДанных.Вставить("ФункциональныеОпции", ФункциональныеОпции); ВнешниеНаборыДанных.Вставить("ФункциональныеОпцииПолей", ФункциональныеОпцииПолей); Если РежимОтладки = 2 Тогда ирОбщий.ОтладитьЛкс(СхемаКомпоновкиДанных, , КонечнаяНастройка, ВнешниеНаборыДанных); Возврат; КонецЕсли; ДокументРезультат.Очистить(); ирОбщий.СкомпоноватьВТабличныйДокументЛкс(СхемаКомпоновкиДанных, КонечнаяНастройка, ДокументРезультат, ВнешниеНаборыДанных, ДанныеРасшифровки); КонецПроцедуры //ирПортативный лФайл = Новый Файл(ИспользуемоеИмяФайла); //ирПортативный ПолноеИмяФайлаБазовогоМодуля = Лев(лФайл.Путь, СтрДлина(лФайл.Путь) - СтрДлина("Модули\")) + "ирПортативный.epf"; //ирПортативный #Если Клиент Тогда //ирПортативный Контейнер = Новый Структура(); //ирПортативный Оповестить("ирПолучитьБазовуюФорму", Контейнер); //ирПортативный Если Не Контейнер.Свойство("ирПортативный", ирПортативный) Тогда //ирПортативный ирПортативный = ВнешниеОбработки.ПолучитьФорму(ПолноеИмяФайлаБазовогоМодуля); //ирПортативный ирПортативный.Открыть(); //ирПортативный КонецЕсли; //ирПортативный #Иначе //ирПортативный ирПортативный = ВнешниеОбработки.Создать(ПолноеИмяФайлаБазовогоМодуля, Ложь); // Это будет второй экземпляр объекта //ирПортативный #КонецЕсли //ирПортативный ирОбщий = ирПортативный.ПолучитьОбщийМодульЛкс("ирОбщий"); //ирПортативный ирКэш = ирПортативный.ПолучитьОбщийМодульЛкс("ирКэш"); //ирПортативный ирСервер = ирПортативный.ПолучитьОбщийМодульЛкс("ирСервер"); //ирПортативный ирПривилегированный = ирПортативный.ПолучитьОбщийМодульЛкс("ирПривилегированный"); РежимОтладки = 0;