mirror of
https://github.com/tormozit/RDT1C.git
synced 2025-12-17 13:14:11 +00:00
293 lines
21 KiB
Plaintext
293 lines
21 KiB
Plaintext
//ирПортативный Перем ирПортативный Экспорт;
|
||
//ирПортативный Перем ирОбщий Экспорт;
|
||
//ирПортативный Перем ирСервер Экспорт;
|
||
//ирПортативный Перем ирКэш Экспорт;
|
||
//ирПортативный Перем ирПривилегированный Экспорт;
|
||
|
||
Перем РежимОтладки Экспорт;
|
||
Перем ТаблицаСтарая;
|
||
Перем ПользовательСтарый;
|
||
Перем РольСтарый;
|
||
Перем ОбъектМетаданныхСтарый;
|
||
|
||
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
|
||
|
||
#Если _ Тогда
|
||
СхемаКомпоновки = Новый СхемаКомпоновкиДанных;
|
||
КонечнаяНастройка = Новый НастройкиКомпоновкиДанных;
|
||
ВнешниеНаборыДанных = Новый Структура;
|
||
ДокументРезультат = Новый ТабличныйДокумент;
|
||
#КонецЕсли
|
||
ДокументРезультат.Очистить();
|
||
СтандартнаяОбработка = Ложь;
|
||
Если Ложь
|
||
Или ТаблицаСтарая = Неопределено
|
||
Или (Истина
|
||
И ЗначениеЗаполнено(ОбъектМетаданныхСтарый)
|
||
И ОбъектМетаданных <> ОбъектМетаданныхСтарый)
|
||
Или (Истина
|
||
И ЗначениеЗаполнено(ПользовательСтарый)
|
||
И Пользователь <> ПользовательСтарый)
|
||
Или (Истина
|
||
И ЗначениеЗаполнено(РольСтарый)
|
||
И Роль <> РольСтарый)
|
||
Тогда
|
||
Таблица = Новый ТаблицаЗначений;
|
||
Таблица.Колонки.Добавить("ТипМетаданных", Новый ОписаниеТипов("Строка"));
|
||
Таблица.Колонки.Добавить("ОбъектМетаданных", Новый ОписаниеТипов("Строка"));
|
||
Таблица.Колонки.Добавить("ОбъектМетаданныхПредставление", Новый ОписаниеТипов("Строка"));
|
||
Таблица.Колонки.Добавить("Роль", Новый ОписаниеТипов("Строка"));
|
||
Таблица.Колонки.Добавить("Право", Новый ОписаниеТипов("Строка"));
|
||
Таблица.Колонки.Добавить("Доступ", Новый ОписаниеТипов("Строка"));
|
||
МассивПрав = Новый Структура;
|
||
МассивПрав.Вставить("Чтение", "1.Чтение");
|
||
МассивПрав.Вставить("Просмотр", "2.Просмотр");
|
||
МассивПрав.Вставить("Добавление", "3.Добавление");
|
||
МассивПрав.Вставить("ИнтерактивноеДобавление", "4.Интерактивное Добавление");
|
||
МассивПрав.Вставить("Изменение", "5.Изменение");
|
||
МассивПрав.Вставить("Редактирование", "6.Интерактивное изменение");
|
||
МассивПрав.Вставить("Удаление", "7.Удаление");
|
||
МассивПрав.Вставить("ИнтерактивноеУдаление", "8.Интерактивное Удаление");
|
||
МассивПрав.Вставить("Использование", "9.Использование");
|
||
ПраваСсылочные = Новый Структура;
|
||
ПраваСсылочные.Вставить("Чтение");
|
||
ПраваСсылочные.Вставить("Просмотр");
|
||
ПраваСсылочные.Вставить("Добавление");
|
||
ПраваСсылочные.Вставить("ИнтерактивноеДобавление");
|
||
ПраваСсылочные.Вставить("Изменение");
|
||
ПраваСсылочные.Вставить("Редактирование");
|
||
ПраваСсылочные.Вставить("Удаление");
|
||
ПраваСсылочные.Вставить("ИнтерактивноеУдаление");
|
||
ПраваРегистры = Новый Структура;
|
||
ПраваРегистры.Вставить("Чтение");
|
||
ПраваРегистры.Вставить("Просмотр");
|
||
ПраваРегистры.Вставить("Изменение");
|
||
ПраваРегистры.Вставить("Редактирование");
|
||
ПраваЖурналы = Новый Структура;
|
||
ПраваЖурналы.Вставить("Чтение");
|
||
ПраваЖурналы.Вставить("Просмотр");
|
||
ПраваНехранимые = Новый Структура;
|
||
ПраваНехранимые.Вставить("Использование");
|
||
ПраваНехранимые.Вставить("Просмотр");
|
||
мПлатформа = ирКэш.Получить();
|
||
#Если Сервер И Не Сервер Тогда
|
||
мПлатформа = Обработки.ирПлатформа.Создать();
|
||
#КонецЕсли
|
||
ТипыМетаданных = мПлатформа.ПолучитьТаблицуТиповМетаОбъектов(Истина, Ложь, Ложь);
|
||
Если ЗначениеЗаполнено(Роль) Тогда
|
||
Роли = Новый Массив;
|
||
Роли.Добавить(Метаданные.Роли[Роль]);
|
||
ИначеЕсли ЗначениеЗаполнено(Пользователь) Тогда
|
||
Если Пользователь = ИмяПользователя() Тогда
|
||
ПользовательИБ = ПользователиИнформационнойБазы.ТекущийПользователь();
|
||
Иначе
|
||
ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени(Пользователь);
|
||
КонецЕсли;
|
||
Если ПользовательИБ = Неопределено Тогда
|
||
Сообщить("Пользователь с именем """ + Пользователь + """ не найден", СтатусСообщения.Внимание);
|
||
Возврат;
|
||
КонецЕсли;
|
||
Роли = ПользовательИБ.Роли;
|
||
Иначе
|
||
Роли = Метаданные.Роли;
|
||
КонецЕсли;
|
||
ПользовательСтарый = Пользователь;
|
||
РольСтарый = Роль;
|
||
ОбъектМетаданныхСтарый = ОбъектМетаданных;
|
||
ИндикаторТиповМетаданных = ирОбщий.ПолучитьИндикаторПроцессаЛкс(ТипыМетаданных.Количество(), "Объекты. Типы метаданных");
|
||
Для Каждого СтрокаТипаМетаданных Из ТипыМетаданных Цикл
|
||
ирОбщий.ОбработатьИндикаторЛкс(ИндикаторТиповМетаданных);
|
||
Попытка
|
||
КоллекцияМетаОбъектов = Метаданные[СтрокаТипаМетаданных.Множественное];
|
||
Исключение
|
||
Продолжить;
|
||
КонецПопытки;
|
||
КорневойТип = СтрокаТипаМетаданных.Единственное;
|
||
Если ирОбщий.ЛиКорневойТипПеречисленияЛкс(КорневойТип) Тогда
|
||
Продолжить;
|
||
КонецЕсли;
|
||
ЛиКорневойТипСсылочный = ирОбщий.ЛиКорневойТипСсылкиЛкс(КорневойТип);
|
||
ЛиКорневойТипРегистра = ирОбщий.ЛиКорневойТипРегистраБДЛкс(КорневойТип);
|
||
ЛиКорневойТипЖурнала = ирОбщий.ЛиКорневойТипЖурналаДокументовЛкс(КорневойТип);
|
||
ЛиКорневойТипНехранимый = Не ЛиКорневойТипСсылочный И Не ЛиКорневойТипРегистра И Не ЛиКорневойТипЖурнала;
|
||
Если Истина
|
||
И ЛиКорневойТипНехранимый
|
||
//И ТипМетаданныхИмяЕдинственное <> "HttpСервис"
|
||
//И ТипМетаданныхИмяЕдинственное <> "WebСервис"
|
||
И КорневойТип <> "Интерфейс"
|
||
И КорневойТип <> "КритерийОтбора"
|
||
И КорневойТип <> "Отчет"
|
||
И КорневойТип <> "Обработка"
|
||
И КорневойТип <> "ОбщаяКоманда"
|
||
И КорневойТип <> "ОбщаяФорма"
|
||
И КорневойТип <> "ОбщийРеквизит"
|
||
И КорневойТип <> "ПараметрСеанса"
|
||
Тогда
|
||
Продолжить;
|
||
КонецЕсли;
|
||
Если ЛиКорневойТипСсылочный Или ЛиКорневойТипЖурнала Тогда
|
||
ИмяПоляТипаМетаданных = "Ссылка";
|
||
ИначеЕсли ЛиКорневойТипРегистра Тогда
|
||
ИмяПоляТипаМетаданных = "Период";
|
||
Иначе
|
||
ИмяПоляТипаМетаданных = Неопределено;
|
||
КонецЕсли;
|
||
ИндикаторОбъектов = ирОбщий.ПолучитьИндикаторПроцессаЛкс(КоллекцияМетаОбъектов.Количество(), СтрокаТипаМетаданных.Множественное);
|
||
Для Каждого МетаОбъект Из КоллекцияМетаОбъектов Цикл
|
||
#Если Сервер И Не Сервер Тогда
|
||
МетаОбъект = Метаданные.Обработки.ирАнализЖурналаРегистрации;
|
||
#КонецЕсли
|
||
ирОбщий.ОбработатьИндикаторЛкс(ИндикаторОбъектов);
|
||
ПолноеИмяМДЦикла = МетаОбъект.ПолноеИмя();
|
||
ПредставлениеМД = МетаОбъект.Представление();
|
||
ИмяПоляОбъекта = ИмяПоляТипаМетаданных;
|
||
Если Истина
|
||
И ЗначениеЗаполнено(ОбъектМетаданных)
|
||
и ОбъектМетаданных <> ПолноеИмяМДЦикла
|
||
Тогда
|
||
Продолжить;
|
||
КонецЕсли;
|
||
Для Каждого КлючИЗначение Из МассивПрав Цикл
|
||
Если Ложь
|
||
Или ЛиКорневойТипСсылочный И Не ПраваСсылочные.Свойство(КлючИЗначение.Ключ)
|
||
Или ЛиКорневойТипРегистра И Не ПраваРегистры.Свойство(КлючИЗначение.Ключ)
|
||
Или ЛиКорневойТипЖурнала И Не ПраваЖурналы.Свойство(КлючИЗначение.Ключ)
|
||
Или ЛиКорневойТипНехранимый И Не ПраваНехранимые.Свойство(КлючИЗначение.Ключ)
|
||
Тогда
|
||
Продолжить;
|
||
КонецЕсли;
|
||
//ИндикаторРолей = ирОбщий.ПолучитьИндикаторПроцессаЛкс(Метаданные.Роли.Количество(), "Роли");
|
||
Для Каждого РольЦикл Из Роли Цикл
|
||
Право = КлючИЗначение.Ключ;
|
||
ПрерватьЦикл = Ложь;
|
||
Если ЛиКорневойТипНехранимый Тогда
|
||
Попытка
|
||
ПараметрыДоступа = ПравоДоступа(Право, МетаОбъект, РольЦикл);
|
||
Исключение
|
||
Прервать;
|
||
КонецПопытки;
|
||
Иначе
|
||
Попытка
|
||
ПараметрыДоступа = ПараметрыДоступа(Право, МетаОбъект, ИмяПоляОбъекта, РольЦикл);
|
||
Исключение
|
||
ИмяПоляОбъекта = "";
|
||
ПараметрыДоступа = ирОбщий.ПараметрыДоступаКОбъектуМДЛкс(Право, МетаОбъект, РольЦикл, ПрерватьЦикл, ИмяПоляОбъекта);
|
||
Если ПрерватьЦикл Тогда
|
||
Прервать;
|
||
КонецЕсли;
|
||
КонецПопытки;
|
||
КонецЕсли;
|
||
СтрокаТаблицы = Таблица.Добавить();
|
||
СтрокаТаблицы.ТипМетаданных = КорневойТип;
|
||
СтрокаТаблицы.ОбъектМетаданных = ПолноеИмяМДЦикла;
|
||
СтрокаТаблицы.ОбъектМетаданныхПредставление = ПредставлениеМД;
|
||
СтрокаТаблицы.Роль = РольЦикл.Имя;
|
||
СтрокаТаблицы.Право = КлючИЗначение.Значение;
|
||
Если ТипЗнч(ПараметрыДоступа) = Тип("Булево") Тогда
|
||
Если ПараметрыДоступа Тогда
|
||
Доступ = "да";
|
||
Иначе
|
||
Доступ = "нет";
|
||
КонецЕсли;
|
||
ИначеЕсли ПараметрыДоступа.Доступность Тогда
|
||
Если ПараметрыДоступа.ОграничениеУсловием Тогда
|
||
Доступ = "да ограничено";
|
||
Иначе
|
||
Доступ = "да";
|
||
КонецЕсли;
|
||
Иначе
|
||
Доступ = "нет";
|
||
КонецЕсли;
|
||
СтрокаТаблицы.Доступ = Доступ;
|
||
КонецЦикла;
|
||
КонецЦикла;
|
||
//ирОбщий.ОсвободитьИндикаторПроцессаЛкс();
|
||
КонецЦикла;
|
||
ирОбщий.ОсвободитьИндикаторПроцессаЛкс();
|
||
КонецЦикла;
|
||
ирОбщий.ОсвободитьИндикаторПроцессаЛкс();
|
||
ТаблицаСтарая = Таблица;
|
||
КонецЕсли;
|
||
ПрофилиГруппДоступа = Новый ТаблицаЗначений;
|
||
ПрофилиГруппДоступа.Колонки.Добавить("РольИмя", Новый ОписаниеТипов("Строка"));
|
||
ПрофилиГруппДоступа.Колонки.Добавить("ПрофильГруппДоступа", Новый ОписаниеТипов("Строка"));
|
||
ПрофилиГруппДоступа.Колонки.Добавить("КоличествоРолей", Новый ОписаниеТипов("Число"));
|
||
Если ирКэш.НомерВерсииБСПЛкс() >= 200 Тогда
|
||
Запрос = Новый Запрос;
|
||
Запрос.Текст =
|
||
"
|
||
|ВЫБРАТЬ
|
||
| ПрофилиГруппДоступаРоли.Ссылка КАК ПрофильГруппДоступа,
|
||
| Профили.КоличествоРолей КАК КоличествоРолей,
|
||
| ПрофилиГруппДоступаРоли.Роль.Имя КАК РольИмя
|
||
|ИЗ
|
||
| Справочник.ПрофилиГруппДоступа.Роли КАК ПрофилиГруппДоступаРоли
|
||
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
|
||
| ПрофилиГруппДоступа_РолиТ.Ссылка КАК Ссылка,
|
||
| КОЛИЧЕСТВО(ПрофилиГруппДоступа_РолиТ.Роль) КАК КоличествоРолей
|
||
| ИЗ
|
||
| Справочник.ПрофилиГруппДоступа.Роли КАК ПрофилиГруппДоступа_РолиТ
|
||
|
|
||
| СГРУППИРОВАТЬ ПО
|
||
| ПрофилиГруппДоступа_РолиТ.Ссылка) КАК Профили
|
||
| ПО Профили.Ссылка = ПрофилиГруппДоступаРоли.Ссылка
|
||
|";
|
||
ПрофилиГруппДоступа = Запрос.Выполнить().Выгрузить();
|
||
КонецЕсли;
|
||
РолиПользователей = Новый ТаблицаЗначений;
|
||
РолиПользователей.Колонки.Добавить("Роль", Новый ОписаниеТипов("Строка"));
|
||
РолиПользователей.Колонки.Добавить("Пользователь", Новый ОписаниеТипов("Строка"));
|
||
Если ПравоДоступа("Администрирование", Метаданные) Тогда
|
||
ДоступныеПользователи = ПользователиИнформационнойБазы.ПолучитьПользователей();
|
||
Иначе
|
||
ДоступныеПользователи = Новый Массив;
|
||
ДоступныеПользователи.Добавить(ПользователиИнформационнойБазы.ТекущийПользователь());
|
||
КонецЕсли;
|
||
Для Каждого ПользовательИБ Из ДоступныеПользователи Цикл
|
||
#Если Сервер И Не Сервер Тогда
|
||
ПользовательИБ = ПользователиИнформационнойБазы.СоздатьПользователя();
|
||
#КонецЕсли
|
||
Для Каждого РольЦикл Из ПользовательИБ.Роли Цикл
|
||
СтрокаРоли = РолиПользователей.Добавить();
|
||
СтрокаРоли.Роль = РольЦикл.Имя;
|
||
СтрокаРоли.Пользователь = ПользовательИБ.Имя;
|
||
КонецЦикла;
|
||
КонецЦикла;
|
||
|
||
КонечнаяНастройка = КомпоновщикНастроек.ПолучитьНастройки();
|
||
Если ЗначениеЗаполнено(Пользователь) Тогда
|
||
ирОбщий.НайтиДобавитьЭлементОтбораКомпоновкиЛкс(КонечнаяНастройка, "Пользователь", Пользователь,,, Ложь);
|
||
КонецЕсли;
|
||
Если ЗначениеЗаполнено(ОбъектМетаданных) Тогда
|
||
ирОбщий.НайтиДобавитьЭлементОтбораКомпоновкиЛкс(КонечнаяНастройка, "ОбъектМетаданных", ОбъектМетаданных,,, Ложь);
|
||
КонецЕсли;
|
||
Если ЗначениеЗаполнено(Роль) Тогда
|
||
ирОбщий.НайтиДобавитьЭлементОтбораКомпоновкиЛкс(КонечнаяНастройка, "Роль", Роль,,, Ложь);
|
||
КонецЕсли;
|
||
ВнешниеНаборыДанных = Новый Структура("Таблица, РолиПользователей, ПрофилиГруппДоступа", ТаблицаСтарая, РолиПользователей, ПрофилиГруппДоступа);
|
||
Если РежимОтладки = 2 Тогда
|
||
ирОбщий.ОтладитьЛкс(СхемаКомпоновкиДанных, , КонечнаяНастройка, ВнешниеНаборыДанных);
|
||
Возврат;
|
||
КонецЕсли;
|
||
ирОбщий.СкомпоноватьВТабличныйДокументЛкс(СхемаКомпоновкиДанных, КонечнаяНастройка, ДокументРезультат, ВнешниеНаборыДанных, ДанныеРасшифровки);
|
||
|
||
КонецПроцедуры
|
||
|
||
//ирПортативный лФайл = Новый Файл(ИспользуемоеИмяФайла);
|
||
//ирПортативный ПолноеИмяФайлаБазовогоМодуля = Лев(лФайл.Путь, СтрДлина(лФайл.Путь) - СтрДлина("Модули\")) + "ирПортативный.epf";
|
||
//ирПортативный #Если Клиент Тогда
|
||
//ирПортативный Контейнер = Новый Структура();
|
||
//ирПортативный Оповестить("ирПолучитьБазовуюФорму", Контейнер);
|
||
//ирПортативный Если Не Контейнер.Свойство("ирПортативный", ирПортативный) Тогда
|
||
//ирПортативный ирПортативный = ВнешниеОбработки.ПолучитьФорму(ПолноеИмяФайлаБазовогоМодуля);
|
||
//ирПортативный ирПортативный.Открыть();
|
||
//ирПортативный КонецЕсли;
|
||
//ирПортативный #Иначе
|
||
//ирПортативный ирПортативный = ВнешниеОбработки.Создать(ПолноеИмяФайлаБазовогоМодуля, Ложь); // Это будет второй экземпляр объекта
|
||
//ирПортативный #КонецЕсли
|
||
//ирПортативный ирОбщий = ирПортативный.ПолучитьОбщийМодульЛкс("ирОбщий");
|
||
//ирПортативный ирКэш = ирПортативный.ПолучитьОбщийМодульЛкс("ирКэш");
|
||
//ирПортативный ирСервер = ирПортативный.ПолучитьОбщийМодульЛкс("ирСервер");
|
||
//ирПортативный ирПривилегированный = ирПортативный.ПолучитьОбщийМодульЛкс("ирПривилегированный");
|
||
|
||
РежимОтладки = 0; |