Отчет на СКД. Часть данных нужна в привилегированном режиме.

1. naa1c 79 30.11.17 14:59 Сейчас в теме
Ситуация:
Есть отчет на СКД. Набор данных - запрос. Формирование выходного набора данных производится с использованием агрегирования данных по таблицам с RLS.
И у пользователя нет доступа ко всем записям таких таблиц. Но учесть агрегированные данные надо по всем записям.
Пример. Есть таблица:
Подразделение Контрагент Договор
Подразделение1 Контрагент1 Договор1
Подразделение1 Контрагент2 Договор2
Подразделение2 Контрагент1 Договор3
Подразделение3 Контрагент2 Договор4
И у пользователя по РЛС, допустим, есть доступ только к записям с Подразделение В (Подразделение1, Подразделение2)
И в отчет надо вывести Подразделение + Контрагент с учетом РЛС, если у контрагента КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Договор) > 1 по ВСЕЙ таблице (без учета РЛС).

Как такое реализовать более-менее универсально?
Получается, что нужно выполнить компоновку без учета РЛС (привилегированно), а на результат уже как-то применить РЛС. Как такое сделать?
+
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Octopus 337 30.11.17 15:03 Сейчас в теме
Ну так выполняйте компоновку в привилегированном режиме. В модуле объекта вставьте вот это:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
	СтандартнаяОбработка = Ложь; 
	
	УстановитьПривилегированныйРежим(Истина);	
	
    Настройки = КомпоновщикНастроек.ПолучитьНастройки();

    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,Настройки,ДанныеРасшифровки,,,Ложь);

    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки);

    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ДокументРезультат);

    ПроцессорВывода.НачатьВывод();

    ЭлементРезультата = ПроцессорКомпоновки.Следующий();
    Пока ЭлементРезультата <> Неопределено Цикл
        ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата);
        ЭлементРезультата = ПроцессорКомпоновки.Следующий();
    КонецЦикла;
    ПроцессорВывода.ЗакончитьВывод();
    
КонецПроцедуры
Показать


В цикле вывода "Пока ЭлементРезультата <> Неопределено Цикл" программно применяйте ограничения
BarsukM; +1
4. naa1c 79 30.11.17 16:32 Сейчас в теме
(2) Можно поподробнее про "В цикле вывода "Пока ЭлементРезультата <> Неопределено Цикл" программно применяйте ограничения"?
+
3. VmvLer 30.11.17 15:18 Сейчас в теме
я бы формировал наборы данных объекты, причем каждый набор в отдельной процедуре с "игрой" по RLS.

Важно, чтобы результирующие наборы содержали только примитивные типы, т.е. вместо ссылок представления и т.д.
+
5. Skill 30.11.17 16:45 Сейчас в теме
(0) Собираете данные по доступным подразделениям и контрагентам для пользователя в обычном режиме, потом передаете в запрос и левым к нему то что получите по отобранным подразделениям+контрагентам в привилегированном режиме.
+
Внимание! Тема сдана в архив

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот