Как настроить запуск отчета на СКД в привилегированом режиме?

1. vkozak 30.05.16 11:39 Сейчас в теме
Проблема вот в чем. Есть отчет по зарплате сотрудников. Если его запускаешь под полными правами выдается расшифровка по документам начисления, если под правами с запретом на просмотр документов начисления - без этой расшифровки. Но нужно что бы сотрудник видел эти документы.
В обычных отчетах эта проблема решается включением привилегированного режима.
Как это сделать в СКД?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. Armando 1400 30.05.16 17:17 Сейчас в теме
(1) vkozak, надо отчет формировать программно.
КомпоновщикМакетаКомпоновкиДанных (DataCompositionTemplateComposer)
Выполнить (Execute)
Синтаксис:

Выполнить(<Схема>, <Настройки>, <ДанныеРасшифровки>, <МакетОформления>, <ТипГенератора>, <ПроверятьДоступностьПолей>, <ПараметрыФункциональныхОпций>)
Параметры:

<Схема> (обязательный)

Тип: СхемаКомпоновкиДанных.
Схема, для которой требуется построить макет.
<Настройки> (обязательный)

Тип: НастройкиКомпоновкиДанных.
Настройки, для которых необходимо создать макет.
<ДанныеРасшифровки> (необязательный)

Тип: ДанныеРасшифровкиКомпоновкиДанных.
Содержит переменную, в которую будут помещены данные расшифровки. Если параметр не указан, расшифровка заполняться не будет.
<МакетОформления> (необязательный)

Тип: МакетОформленияКомпоновкиДанных.
Макет оформления, в соответствии с которым необходимо оформлять макет компоновки данных. Если не указан, будет использоваться макет оформления по умолчанию.
<ТипГенератора> (необязательный)

Тип: Тип.
Указывает тип генератора макета компоновки данных.
Возможные типы:
ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений (DataCompositionValueCollectionTemplateGenerator);
ГенераторМакетаКомпоновкиДанных (DataCompositionTemplateGenerator)
.
Значение по умолчанию: Тип("ГенераторМакетаКомпоновкиДанных").
<ПроверятьДоступностьПолей> (необязательный)

Тип: Булево.
Определяет, выполнять ли проверку прав на просмотр полей и проверку доступности поля во включенных функциональных возможностях.
Значение по умолчанию: Истина.

<ПараметрыФункциональныхОпций> (необязательный)

Тип: Структура.
Содержит параметры функциональных опций, используемые при исполнении отчета.
Возвращаемое значение:

Тип: МакетКомпоновкиДанных.
Созданный макет компоновки.
Описание:

Выполняет компоновку макета.
marku; Designer1C; +2 Ответить
4. AllexSoft 30.05.16 17:25 Сейчас в теме
(3) Armando, функциональные опции тут не причем.. они никак не определяют доступ, они определяют именно Видимость!
7. Armando 1400 30.05.16 20:16 Сейчас в теме
(4) AllexSoft, я про функциональные опции ничего не писал
10. AllexSoft 31.05.16 09:41 Сейчас в теме
(7) Armando, у вас в посте (3) указано жирненьким шрифтом про ПроверятьДоступностьПолей.. отсюда подумал что намекаете автору на этот параметр
15. Armando 1400 31.05.16 10:48 Сейчас в теме
(10) AllexSoft, да, я намекал) Но кроме ФО там еще про права написано. У автора проблема именно с правами, о чем он сразу написал.
16. AllexSoft 31.05.16 11:26 Сейчас в теме
(15) Armando, процитирую вашу же выдержку из справки
и проверку доступности поля во включенных функциональных возможностях.

доступность поля в фукнциональных опциях определяет его видимость, поэтому по сути эта строка повторяет
проверку прав на просмотр полей
, поэтому в СП просто не совсем красиво написано, но не более того.. про проверку прав доступа, которая задается ролями, а не функциональными опциями в СП ничего не написано.

У автора проблема именно с правами, о чем он сразу написал

именно поэтому отключение проверки доступа\видимости полей по функциональным опциям для него ничего не решит
17. lisrws 145 31.05.16 13:10 Сейчас в теме
(16) AllexSoft, вы не видите разницу между "функциональные ОПЦИИ" и "функциональные ВОЗМОЖНОСТИ"?про именно "опции" там и слова нет. по поводу "я не вижу тут именно отключение проверки прав доступа": в описании сказано "выполнять ли проверку прав.... значение по-умолчанию истина". значит по-умолчанию будет "выполнять проверку прав", а если поставить в параметр "ЛОЖЬ", то будет "НЕ выполнять проверку прав"

ЗЫ
про прекращение прив режима после выхода из процедуры - забыл. действительно, этот вариант не подойдет. pumbaE дал ссылку на отличную статью. там все классно написано. этого автору вполне хватит
18. AllexSoft 31.05.16 13:58 Сейчас в теме
(17) lisrws,
вы не видите разницу между "функциональные ОПЦИИ" и "функциональные ВОЗМОЖНОСТИ"?

ну и про права доступа к данным там ничего нет ;)
в описании сказано "выполнять ли проверку прав....

нет, там сказано не так, а именно
выполнять ли проверку прав на ПРОСМОТР полей

понимаете чем отличается чтение от просмотра ?)
значит по-умолчанию будет "выполнять проверку прав", а если поставить в параметр "ЛОЖЬ", то будет "НЕ выполнять проверку прав"

вот вы меня смутили, сделал тестовую роль с ограниченными правами доступа на регистр, сделал простенький отчет на СКД, делаю простую выборку списком из этого регистра на СКД, разумеется использую
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки,,, Ложь);

проверяю под полными правами - вижу все данные, выполняю отчет с ограниченными правами, вижу только часть данных.. почему? ведь по вашей логике получается что ПроверятьДоступностьПолей = Ложь должно было мне помочь?)

ПС: изменил роль, поставил полный доступ к регистру, что бы не ставить полные права.. формирую под тем же бесправным пользователем, но с полными правами на чтение из регистра.. все отлично, получаю в отчете все данные )
ПСС: вы задумайтесь зачем 1С сделало ПроверятьДоступностьПолей параметром КомпоновщикМакета, а не ПроцессорКомпоновкиДанных, ведь именно в Процессоре Компоновки Данных происходит выполнение отчета, а не в компановщие макета, а вот функциональные опции как раз применяются к макету, а не к данным)
19. lisrws 145 31.05.16 22:06 Сейчас в теме
(18) AllexSoft, хорошо)))) а по вашему мнению, на что влияет этот параметр?
20. herfis 513 01.06.16 09:43 Сейчас в теме
(19) lisrws, Тоже интересно узнать достоверно.
Больше всего интересно, влияет ли эта опция на доступность данных, для которых в ролях (целиком) чтение разрешено, а просмотр запрещен. Подозреваю, что не влияет. В этом случае совет для ТС был бесполезен.
Фраза "Определяет, выполнять ли проверку прав на просмотр полей" скорее всего относится только к механизму параметрической настройки доступности полей в управляемом интерфейсе (в смысле, настраивается в ролях, а проверяется в управляемом интерфейсе).
Фраза "проверку доступности поля во включенных функциональных возможностях" с сочетании с предыдущими выводами скорее всего относится все-таки к функциональным опциям (это тоже интерфейсная проверка, а не проверка доступов низкого уровня).
AllexSoft; +1 Ответить
21. AllexSoft 01.06.16 09:53 Сейчас в теме
(20) herfis, придерживаюсь такой же точки зрения..
ПС:
Больше всего интересно, влияет ли эта опция на доступность данных, для которых в ролях (целиком) чтение разрешено, а просмотр запрещен. Подозреваю, что не влияет. В этом случае совет для ТС был бесполезен.

с учетом что ТС спрашивал о ЗУПе, там доступ ограничивается типовым БСП-шным RLS-ом, собственно у ТС нет даже доступа на чтение под урезанными правами, поэтому в любом случае совет для ТС по поводу установки флага был бесполезен
22. lisrws 145 01.06.16 12:09 Сейчас в теме
(20) herfis, (21) AllexSoft, как мне показалось, в 12 посте по ссылке второй из описанных методов как раз использует этот параметр и на его примере там как раз ограничение на уровне настройки прав. и этот метод иллюстрирует в точности то, что я описал. может тут вопрос в релизе и у вас просто более старая версия платформы и там эта фичя не работает? сейчас занят, чтобы самому попробовать, но в статье все нормально описано.
а по поводу "вы задумайтесь зачем 1С сделало ПроверятьДоступностьПолей параметром КомпоновщикМакета, а не ПроцессорКомпоновкиДанных, ведь именно в Процессоре Компоновки Данных происходит выполнение отчета, а не в компановщие макета", так тут вроде все с точностью наоборот)))) КомпоновщикМакета как раз таки получает данные запросом(тот же метод "Выполнить") и именно ему важно смотреть на права при этом получении или их игнорить.
23. AllexSoft 01.06.16 12:25 Сейчас в теме
(22) lisrws,
может тут вопрос в релизе и у вас просто более старая версия платформы и там эта фичя не работает

вчера пробовал на 8.3.8.1675, как бы новее нет.. только что попробовал на 8.3.6.2299, то же самое.

сейчас занят, чтобы самому попробовать

ну вот вы попробуйте, ради интереса.. ;)

КомпоновщикМакета как раз таки получает данные запросом(тот же метод "Выполнить")

вы глубоко заблуждаетесь, похоже от незнания СКД, вот вам выдержка из официального словаря 1С
http://v8.1c.ru/overview/Term_000000093.htm
в разделе "Устройство системы компоновки данных" есть хорошая схемка, для понимания что и как происходит.

собственно что такое
Макет компоновки данных

Макет компоновки данных представляет собой уже готовое описание того, как должен быть сформирован отчет. В нем соединяется схема компоновки и настройки компоновки. Фактически макет компоновки данных представляет собой результат применения конкретных настроек к схеме компоновки и является готовым заданием процессору компоновки на формирование отчета нужной структуры с учетом конкретных настроек.


КомпоновщикМакетаКомпоновкиДанных.Выполнить(<Схема>, <Настройки>, <ДанныеРасшифровки>, <МакетОформления>, <ТипГенератора>, <ПроверятьДоступностьПолей>, <ПараметрыФункциональныхОпций>)

Возвращаемое значение:

Тип: МакетКомпоновкиДанных.
Созданный макет компоновки.


эта функция генерирует МАКЕТ КОМПОНОВКИ, и никакого отношения к выборке данных (к выполнению запроса) не имеет

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

а вот это как раз выполняет запрос, получает данные


Матчасть бы вам почитать ;) или на курсы по СКД записаться, рекомендую УЦ 3, очень толково и глубоко объясняют такие моменты.
24. lisrws 145 03.06.16 20:10 Сейчас в теме
(23) AllexSoft, попробовал сам проделать эксперимент с установкой этого параметра. должен признать, что был не прав. как не было доступа, так он и не появился. по ссылке на статью скачал конфу и попробовал в ней. там у автора выполнение этого кода идет в привелегированном модуле, возможно когда описывал первый способ, забыл снять галку и погнал тестить второй. но вот только я снял галку прив режима в том модуле, так сразу 1ска заверещала, что недостаточно прав. вот так статьи могут ввести в заблуждение))) все надо перепроверять.
назначение того параметра остается загадкой. может 1с его для этих целей ввели, но механизм еще не реализовали или неверно реализовали. даже не знаю.
34. uno-c 238 17.08.19 13:55 Сейчас в теме
(24)
вот так статьи могут ввести в заблуждение))) все надо перепроверять
В статье написано "мы аналогично отказываемся от стандартной обработки процедуры и перенаправляем поток выполнения в общий модуль из галочкой привилегированный".
8. Swetlana 26 30.05.16 21:32 Сейчас в теме
(3) Armando, и что нужно поставить? если по умолчанию и так стоит истина?
9. Armando 1400 30.05.16 23:04 Сейчас в теме
(8) Swetlana, почему Вы решили, что там должна стоять Истина? Как значение "Истина" параметра "ПроверятьДоступностьПолей" поможет автору темы решить его проблему?
11. lisrws 145 31.05.16 09:52 Сейчас в теме
(8) Swetlana, (10) AllexSoft, прочтите внимательно описание параметра "ПроверятьДоступностьПолей" и вы поймете, что для отключения проверки прав нужно "ложь" передавать
13. AllexSoft 31.05.16 10:35 Сейчас в теме
(11) lisrws, копирую из справки:
<ПроверятьДоступностьПолей> (необязательный)

Тип: Булево.
Определяет, выполнять ли проверку прав на просмотр полей и проверку доступности поля во включенных функциональных возможностях.
Значение по умолчанию: Истина.

я не вижу тут именно отключение проверки прав доступа, то есть включение привилегированного режима.. тут либо справка врет (что вряд ли), либо вы не понимаете как работают функциональные опции, для чего они нужны и как влияют на доступ к данным, который определяется ролями!

еще появилась идея. если же юзаете шаблон скдшного отчета с уже имеющейся формой, то в этой форме включить прив режим в обработчике "присозданиинасервере". так должно сработать. думаю так проще, чем программно отчет компоновать и разные обработчики переопределять.
- это то же не сработает, привелигированный режим отключается автоматически при выходе из процедуры, то есть привилегированный режим в таком случае будет действовать только в процедуре ПриСозданииНаСервере, но никак при компановке..
33. Designer1C 457 26.06.19 11:41 Сейчас в теме
(3)Вот она, самая соль : ПроверятьДоступностьПолей = Ложь. Сразу стало работать !
5. herfis 513 30.05.16 17:40 Сейчас в теме
(1) vkozak, Точно так же. В ПриКомпоновкеРезультата отключаешь штатное формирование и формируешь программно в привелигированном режиме. Сам не делал но подобную реализацию встречал. Просто включить привелигированный режим, подозреваю, будет недостаточно - штатное формирование скорее всего все равно пройдет в обычном режиме.
2. lisrws 145 30.05.16 12:31 Сейчас в теме
в модуле объекта отчета есть обработчик "ПриКомпоновкеРезультата". попробуй в нем вызвать "УстановитьПривилегированныйРежим". если не получится, то программно компонуй отчет и вызывай установку режима там. как это делается написано у хрусталевой
6. lisrws 145 30.05.16 19:49 Сейчас в теме
еще появилась идея. если же юзаете шаблон скдшного отчета с уже имеющейся формой, то в этой форме включить прив режим в обработчике "присозданиинасервере". так должно сработать. думаю так проще, чем программно отчет компоновать и разные обработчики переопределять.
27. vkozak 16.06.16 09:05 Сейчас в теме
(6) lisrws, Форм нет, только СКД.
14. AllexSoft 31.05.16 10:46 Сейчас в теме
(12) pumbaE, там второй вариант работать не будет, только первый (через набор данных объект), в таком случае можно формировать таблицу данных в привилегированном режиме, обычным запросом и скармливать ее СКД для обработки..
Правильный вариант решения уже давали в (5), то есть ПриКомпановкиДанных установить стандартнаяобработка = ложь, включить привилегированный режим и выполнить программную компановку.
25. Armando 1400 03.06.16 21:10 Сейчас в теме
Этот параметр влияет, если у объекта есть право просмотра, а на какой-то реквизит этого объекта права просмотра нет.
Я сначала почему-то подумал, что там речь именно об этом. Если у пользователя нет права просмотра объекта, то этот параметр не поможет.
26. vkozak 15.06.16 17:15 Сейчас в теме
Спасибо сообществу, накидали идей. Буду изучать и пробовать.
Программно создавать отчет не хочется и не разумно, т.к. уже есть действующий из типовой конфигураци и хорошо работающий, вот кроме этого недоразумения.
Оставлю этот вариант на крайний случай, если уж ни что другое не сработает.
Поделюсь конечным результатом.
28. vkozak 20.06.16 09:46 Сейчас в теме
В общем по проблеме. Да запустить в привилегированном режиме получилось.
Создал форму отчета там в процедуре "" Установил в истину привилегированный режим.
Моей задачи это не решило. Если у пользователя на документ нет права просмотра, то в отчет строки с него все равно не попадают.
Если есть право просмотра то пользователь может открыть документ и посмотреть всю зарплату по всем сотрудникам.
Сделал так:
Всем сотрудникам дал право просмотра, при этом надобность в привилегированном режиме отпала.
Создал роль - Нельзя смотреть зарплатные документы.
Назначил ее всем кто не задействован в начислении зарплаты.
В форме документа начисления в процедуре При "создании на сервере" если Роль доступна взвожу отказ в истину.
Все.
29. AllexSoft 20.06.16 14:54 Сейчас в теме
(28) vkozak, мдааа) ну и костыль) почему просто при компановки данных в модуле объекта вашего отчета не сделать привелигированый режим ?)
30. vkozak 20.06.16 19:59 Сейчас в теме
Так сделал привилегированный - не сработало.
Вот костыль и изобрел.
31. lisrws 145 20.06.16 22:21 Сейчас в теме
(30) vkozak, прикомпоновкеданных - это не в форме, а в модуле отчета. после установки при режима в этом обработчике, пишете свой код по программной компоновке отчета и все работает. в форме действительно не получится, я ошибся выше
32. starik-2005 3076 20.06.16 22:46 Сейчас в теме
Так-то в три строки можно сделать: замутить переменную в модуле, в процедура при компоновке проверять, является ли она истиной, если нет - устанавливать привилегированный режим, записывать в переменную истину и что-то типа "результат = этотобъект.сформироватьотчет()", после чего стандартнаяобработка = ложь. Если переменная истинна, то просто ничего не делать, давая механизму отработать самостоятельно.
Оставьте свое сообщение

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