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