Имя: Пароль:
1C
1С v8
СКД и права доступа
0 LisaAlisa
 
07.09.16
12:30
Есть запрос на СКД к договорам контрагентов, никакие другие таблицы не испльзуются. Права пользователей разграничены по Организациям.
Нужно, чтобы любой пользователь мог выполнить отчет и при этом в отчете видел даже те договоры, доступ к которым ему закрыт (т.к. отчет выявляет ошибки). Что можно предпринять?
1 rozer76
 
07.09.16
12:32
если rls  - под теми же пользователями не получиться
2 Метранпаж
 
07.09.16
12:34
Вынести формирование отчёта в привелигерованный модуль
3 LisaAlisa
 
07.09.16
12:36
(2) как это сделать, если это СКД?
4 Метранпаж
 
07.09.16
12:40
(3) СКД - это не устав воинской службы. Его можно применять и программно
5 LisaAlisa
 
07.09.16
12:53
УстановитьПривилегированныйРежим(Истина) в процедуре ПриКомпоновкеРезультата() не помогло
6 aleks_default
 
07.09.16
12:56
Пользователь, который выявляет ошибки - это аудитор. У него должны быть права на все организации. Иначе как выполнять аудит?
7 LisaAlisa
 
07.09.16
12:58
(6) это понятно, но приходится действовать в рамках поставленой задачи
8 Метранпаж
 
07.09.16
12:58
(5) А я сказал про модуль отчёта? Или я маленько по-другому выразился?
9 Fragster
 
гуру
07.09.16
12:59
(5) дополнительно надо сделать "стандартная обработка = ложь" и программное формирование и вывод отчета
10 LisaAlisa
 
07.09.16
13:00
(8) наверно имеешь в виду модуль конфигцрации? но этот вариант не подходит
11 Метранпаж
 
07.09.16
13:00
(10) Могу подарить 2 листа писчей бумаги формата А4.
И комплиментом - шариковую ручку.
12 LisaAlisa
 
07.09.16
13:01
(9) кратенько

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    
    ///УстановитьПривилегированныйРежим(Истина);
    
    ПараметрыСеанса.ИспользоватьОграниченияПравДоступаНаУровнеЗаписей=Ложь;
    
    ВнешниеНаборыДанных = Новый Структура;
    Запрос = Новый Запрос;

    Запрос.Текст = ...текст запроса
                  
    ВнешниеНаборыДанных.Вставить("ЗапросТЗ",Запрос.Выполнить());
    
    СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
    
    Настройки = КомпоновщикНастроек.ПолучитьНастройки();
    
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,Настройки,ДанныеРасшифровки);
    
    ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,ВнешниеНаборыДанных,ДанныеРасшифровки);    
    
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
    ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
    
    //УстановитьПривилегированныйРежим(Ложь);
    
    ПараметрыСеанса.ИспользоватьОграниченияПравДоступаНаУровнеЗаписей=Истина;

КонецПроцедуры
13 LisaAlisa
 
07.09.16
13:03
в оригинале УстановитьПривилегированныйРежим(Истина) не закомментировано
14 Fragster
 
гуру
07.09.16
13:08
либо у вас выводится "объект не найден" потому что вы не получаете представления (и, соответственно, не настроили выражения представления у полей набора данных), либо вы врёте, что не работает.
15 LisaAlisa
 
07.09.16
13:11
(14) если использовать полностью код из (12), то Да, выводит Объект не найден. Но в (13) я написала, что в оригинале вместо ПараметрыСеанса.ИспользоватьОграниченияПравДоступаНаУровнеЗаписей=Ложь; я использую УстановитьПривилегированныйРежим(Истина)
Под полными правами, естественно, ОК. Под огранченными "нарушение прав доступа"
2 + 2 = 3.9999999999999999999999999999999...