Каталог решений - Привилегированные отчеты

Привилегированные отчеты

Привилегированные отчеты

В наличии

Расширение позволяет настроить для пользователей выполнение отчетов в привилегированном режиме. 1) Убирает тормоза формирования отчета, возникающие при наложении прав пользователя на запросы отчета; 2) Позволяет обойти ошибки формирования отчета из-за отсутствия прав на часть объектов у пользователя.

Категория:

Описание

Для чего это расширение:

1) Многие знают, что если "элитный" пользователь работает с ролью "Полные права", то все его операции в базе 1С выполняются по времени значительно быстрее, чем у пользователей, которые работают с наборами ролей. Это связано с тем, что платформа 1С при выполнении запросов навешивает на него подзапросы прав доступа, тем самым утяжеляя и увеличивая время выполнения. Т.е. если вы, например, админ 1С, работающий под полными правами, то запрос в отчете "А" на получение данных выполняется в кратчайшие сроки и в минимальном виде (считаем, что к серверу отправляется запрос практически таким, как написан в коде конфигуратора), но если вы один из пользователей, права которых заданы через профили, содержащие наборы ролей, то к этому же запросу отчета "А" платформой 1С навешиваются подзапросы прав на каждый реквизит и его тип (в итоге к серверу отправляется огромный расширенный текст запроса, утяжеленный подзапросами прав на используемые реквизиты и типы объектов, особенно тяжело это выглядит для составных типов. Не зря же советуют в запросах использовать Выразить(….КАК…)).

2) Многие также наталкиваются на ситуацию ошибки формирования отчета из-за нехватки прав пользователя на часть объектов, к которыми идет запрос чтения данных. При этом копаться в журнале регистрации (а там по факту можно найти информацию на какой объект идет отказ в праве), а затем найти подходящую роль на этот объект в базе 1С и назначить её пользователю, не всегда получается (бывает нет такой роли или она дает дополнительные права, которые избыточны для пользователя). Но отчет пользователю всё-таки дать нужно.

Вот для таких 2ух ситуаций данное расширение и можно применить:

  • Ускорить вывод отчета
  • Игнорировать ошибки прав доступа

Из чего состоит и как работает расширение:

Расширение состоит из

  • Перехвата события фонового выполнения операций ОбщийМодуль.ДлительныеОперации.ВыполнитьВФоне
  • Справочника Имена фоновых операций (расширение), который заполняется автоматически системой при выполнении процедуры, которая привязана к объему метаданных. (Т.е. вам нужно 1 раз запустить отчет и процедура, автоматически появится в справочнике)
  • Регистра сведений Привилегированные операции (расширение), в котором задается комбинация {Пользователь, Объект, Имя процедуры, Включен привилегированный режим} позволяющая персонифицировать подключение привилегированного режима для всех (Пользователя оставляем пустым) либо конкретному пользователю, к конкретному отчету. 

Рис.1 Справочник фоновых процедур

НАВИГАЦИОННАЯ ССЫЛКА: e1cib/list/Справочник.по_ИменаФоновыхОпераций

ПРИМЕЧАНИЕ: Справочник заполняется автоматически при выполнении операции

 

Рис.2 Имена отчетов и фоновых процедур c привилегированным режимом выполнения 

 

НАВИГАЦИОННАЯ ССЫЛКА: e1cib/list/РегистрСведений.по_ПривилегированныеОперации

ПРИМЕЧАНИЕ: Здесь в примере отчет Выпуск продукции выполняется в привилегированном режиме для пользователя Экономист производства, а отчет Продажи (он же Валовая прибыль) выполняется для всех в привилегированном режиме (т.к. Пользователь не указан).

 

Рис.3 Код общих модулей

 

&Вместо("ВыполнитьВФоне")
Функция по_ВыполнитьВФоне(Знач ИмяПроцедуры, Знач ПараметрыПроцедуры, Знач ПараметрыВыполнения)
	
	Если по_ДлительныеОперации.ОбработатьФоновуюОперацию(ИмяПроцедуры, ПараметрыПроцедуры, ПараметрыВыполнения) Тогда
		УстановитьПривилегированныйРежим(Истина);
	КонецЕсли;
	
	Результат = ПродолжитьВызов(ИмяПроцедуры, ПараметрыПроцедуры, ПараметрыВыполнения);
	
	Возврат Результат;
	
КонецФункции
Функция ОбработатьФоновуюОперацию(ИмяПроцедуры, ПараметрыПроцедуры, ПараметрыВыполнения) Экспорт
	
	ВозвращаемоеЗначение = Ложь;
	
	УстановитьПривилегированныйРежим(Истина);
	
	Если ЗначениеЗаполнено(ИмяПроцедуры) И ТипЗнч(ПараметрыПроцедуры) = Тип("Структура") Тогда
		
		//Ищем владельца операции
		Владелец = Неопределено;
		
		Для Каждого Эл_ПараметрыПроцедуры Из ПараметрыПроцедуры Цикл 
			Если (ТипЗнч(Эл_ПараметрыПроцедуры.Значение) = Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных")
				ИЛИ ТипЗнч(Эл_ПараметрыПроцедуры.Значение) = Тип("СправочникСсылка.ИдентификаторыОбъектовРасширений")) Тогда
				Если ЗначениеЗаполнено(Эл_ПараметрыПроцедуры.Значение) Тогда
					Владелец = Эл_ПараметрыПроцедуры.Значение;
					Если Справочники.по_ИменаФоновыхОпераций.НайтиПоРеквизиту("ИмяПроцедуры", ИмяПроцедуры, , Владелец).Пустая() Тогда
						//Добавляем операцию в справочник
						Нов_Об = Справочники.по_ИменаФоновыхОпераций.СоздатьЭлемент();
						Нов_Об.Владелец = Владелец;
						Нов_Об.ИмяПроцедуры = ИмяПроцедуры;
						Нов_Об.Записать();
					КонецЕсли;
					Прервать;
				КонецЕсли;
			КонецЕсли;
		КонецЦикла;
		
		Если ЗначениеЗаполнено(Владелец) Тогда
			//Проверяем включен ли привелигированный режим для {объект, пользователь, процедура}
			Запрос = Новый Запрос("ВЫБРАТЬ ПЕРВЫЕ 1
								  //1. Приоритетной является персональная настройка
			                      |	Таб.Включен КАК Включен
			                      |ИЗ
			                      |	РегистрСведений.по_ПривилегированныеОперации КАК Таб
			                      |ГДЕ
			                      |	Таб.Пользователь = &Пользователь
			                      |	И Таб.Объект = &Объект
			                      |	И Таб.Операция.ИмяПроцедуры = &ИмяПроцедуры
			                      |	И Таб.Включен
			                      |
			                      |ОБЪЕДИНИТЬ ВСЕ
			                      |
			                      |ВЫБРАТЬ ПЕРВЫЕ 1
								  //2. Общая настройка менее приоритетна (например, если персональная настройка выключена, а общая - включена, то у пользователя будет выключен привилегированный режим)
			                      |	Таб.Включен
			                      |ИЗ
			                      |	РегистрСведений.по_ПривилегированныеОперации КАК Таб
			                      |ГДЕ
			                      |	Таб.Пользователь = ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка)
			                      |	И Таб.Объект = &Объект
			                      |	И Таб.Операция.ИмяПроцедуры = &ИмяПроцедуры
			                      |	И Таб.Включен");
			
			Запрос.УстановитьПараметр("Пользователь", Пользователи.ТекущийПользователь());
			Запрос.УстановитьПараметр("Объект", Владелец);
			Запрос.УстановитьПараметр("ИмяПроцедуры", ИмяПроцедуры);
			Выборка = Запрос.Выполнить().Выбрать();
			Если Выборка.Следующий() Тогда
				ВозвращаемоеЗначение = Выборка.Включен; //Привилегированный режим одобряем (по приоритету: перс. настройка выше общей)
			КонецЕсли;
		КонецЕсли;
		
	КонецЕсли;	

	Возврат ВозвращаемоеЗначение;
	
КонецФункции

Проверка работоспособности в конфигурациях:

Работа расширения успешно проверена на платформе 1С:Предприятие 8.3 (8.3.18.1520) в конфигурациях:

  • 1С:ERP Управление предприятием 2 (2.4.11.91, 2.5.7.201)

Расширение использует универсальные механизмы, общие для многих продуктов 1С, поэтому может быть подключено к разным продуктам 1С (БП, УТ, КА, УХ и т.п.) либо доработано с минимальными затратами (пишите мне в личку). Конфигурация продукта 1С должна быть построена на базе БСП (Библиотеки стандартных подсистем, входит в типовые конфигурации 8.3) и содержать следующие объекты:

  • ОбщийМодуль.ДлительныеОперации
  • Справочник.Пользователи
  • Справочник.ИдентификаторыОбъектовМетаданных
  • Справочник.ИдентификаторыОбъектовРасширений

Режим совместимости расширения от Версия 8.3.12.

 

has been added to your cart:
Оформление заказа