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