|
ЗУП 3.х. Внешний отчет на СКД в привилегированном режиме | ☑ | ||
---|---|---|---|---|
0
Иван-1C
05.06.19
✎
11:49
|
Добрый день!
Подскажите, пожалуйста, как выполнить внешний отчет на СКД в привилегированном режиме? При компоновке результата добавляю СтандартнаяОбработка = Ложь; УстановитьПривилегированныйРежим(Истина); не помогает. |
|||
1
Amra
05.06.19
✎
12:14
|
Только добавлять во внешние отчеты и обработки и выполнение в небезопастном режиме (в СведенияОВнешнейОБработке указывается)
|
|||
2
palsergeich
05.06.19
✎
12:56
|
Внешние отчёты открываются только в безопасном режиме.
Безопасный режим имеет высший приоритет, нежели установитьПривеллигированныйРежим. Или писать обёртку, которая будет открывать этот же отчёт через ВнешниеОтчетыМенкджер с безопасный режим = ложь или встраивать в доп отчеты |
|||
3
Иван-1C
06.06.19
✎
10:26
|
(1) Не работает.
Кидаю в дополнительные отчеты и обработки. Вроде бы все классически делаю, ничего лишнего, но не работает. Под админом работает. А нужно с правами кадровика увидеть суммы по начислениям. Вот настройка небезопасного режима: Функция СведенияОВнешнейОбработке() Экспорт ПараметрыРегистрации = Новый Структура; МассивНазначений = Новый Массив; МассивНазначений.Добавить(""); ИмяОтчета = Метаданные().Представление(); ПараметрыРегистрации.Вставить("Вид", "ДополнительныйОтчет"); ПараметрыРегистрации.Вставить("Назначение", МассивНазначений); ПараметрыРегистрации.Вставить("Наименование", ИмяОтчета); ПараметрыРегистрации.Вставить("Версия", "1.0"); ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь); ПараметрыРегистрации.Вставить("Информация", "Дополнительный отчет"); ТаблицаКоманд = ПолучитьТаблицуКоманд(); ДобавитьКоманду(ТаблицаКоманд, ИмяОтчета, Метаданные().ПолноеИмя(), "ОткрытиеФормы", Истина); ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд); Возврат ПараметрыРегистрации; КонецФункции Вот Запрос на СКД: ВЫБРАТЬ Начисления.Сотрудник КАК Сотрудник, СУММА(Начисления.Результат) КАК РасчетноеНачисление ИЗ РегистрРасчета.Начисления КАК Начисления ГДЕ Начисления.ПериодРегистрации МЕЖДУ &НачалоПериода И &КонецПериода И Начисления.ВидРасчета В(&СписокНачислений) И Начисления.Сотрудник = &Сотрудник СГРУППИРОВАТЬ ПО Начисления.Сотрудник И вот компоновка результата: Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) СтандартнаяОбработка= Ложь; УстановитьПривилегированныйРежим(Истина); Настройки = КомпоновщикНастроек.ПолучитьНастройки(); КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,Настройки,ДанныеРасшифровки); ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновки.Инициализировать(МакетКомпоновки); ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(ДокументРезультат); ПроцессорВывода.НачатьВывод(); ЭлементРезультата = ПроцессорКомпоновки.Следующий(); Пока ЭлементРезультата <> Неопределено Цикл ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата); ЭлементРезультата = ПроцессорКомпоновки.Следующий(); КонецЦикла; ПроцессорВывода.ЗакончитьВывод(); КонецПроцедуры |
|||
4
Amra
06.06.19
✎
10:30
|
(3) Не верю. Погуглил за тебя ЗУП 3.1.3: Привилегированный режим из внешней обработки или ДвоичныеДанныеФайлов
|
|||
5
Иван-1C
06.06.19
✎
10:39
|
(4) там написано как ты и сказал.
Должно работать, где-то туплю.. |
|||
6
toypaul
гуру
06.06.19
✎
10:59
|
тут возможно фишка в методе ПолучитьНастройки
ты же не рассказываешь, что конкретно у тебя не работает. если выводятся какие-то колонки, но данных нет - это одно. если колонки вообще не выводятся, то это другое |
|||
7
toypaul
гуру
06.06.19
✎
11:01
|
БезопасныйРежим тут вообще не приделах - на права он никак не действует. это лишь параметр для создания внешней обработки методом Создать
|
|||
8
toypaul
гуру
06.06.19
✎
11:03
|
у КомпоновщикМакетаКомпоновкиДанных есть параметр в методе Выполнить - ПроверятьДоступностьПолей. попробуй там передать Ложь. а еще посмотри в Настройки список выбранных полей
|
|||
9
Иван-1C
06.06.19
✎
11:04
|
(7) даже колонки не выводятся. только установленные параметры
|
|||
10
toypaul
гуру
06.06.19
✎
11:10
|
(9) тогда предлагаю посмотреть для начала Настройки.Выбор и много думать
|
|||
11
Иван-1C
06.06.19
✎
13:35
|
(10) ПроверятьДоступностьПолей выставил - не помогло.
А по поводу Настройки.Выбор не пойму что на них смотреть. Два поля всего вывожу: Сотрудник и Сумма. Если вместо Регистра расчета Начисления, подставить например Регистр накопления Фактические отпуска, то все работает при тех же условиях, без изменений в коде. |
|||
12
toypaul
гуру
06.06.19
✎
14:16
|
а я все-таки предлагаю в отладчике посмотреть что в Настройки.Выбор
|
|||
13
Иван-1C
06.06.19
✎
14:37
|
(12) Отладчиком я умею смотреть такой отчет только через Файл - открыть.
Под кадровиком там пусто.. Ноль элементов.. Под админом мои две строки. И что делать-то???? Спаси, уважаемый) |
|||
14
toypaul
гуру
06.06.19
✎
14:44
|
(13) уже хорошо. я в (6) уже про это писал.
попробуй вот так МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,СхемаКомпоновкиДанных.НастройкиПоУмолчанию,ДанныеРасшифровки); и параметр в этом методе ПроверятьДоступностьПолей = ЛОЖЬ но такой способ отрубит все пользовательские настройки (если они есть) особенность метода ПолучитьНастройки (насколько я понимаю) в том что он формирует настройки с учетом функ. опций и прав пользователя у нас (в Ижевске) 29.05 проходил "митапчик" по СКД - я там про это рассказывал |
|||
15
toypaul
гуру
06.06.19
✎
14:47
|
а вот как заставить возвращать метод ПолучитьНастройки настройки без учета прав и ФО - это большой вопрос.
непонятненько почему метод УстановитьПривилегированныйРежим не отрубает в нем проверку прав есть такая мысль ... может быть УстановитьПривилегированныйРежим вызывать в ПриСозданииНаСервере или какой там обрабтчик самым первым срабатывает. чтобы обмануть компоновщик насчет прав... |
|||
16
Вафель
06.06.19
✎
14:50
|
в самой внешней обработке вроде никак нельзя привилегированный режим
|
|||
17
Вафель
06.06.19
✎
14:51
|
но если опасный режим, то привилегерованный режим в коде КОНФЫ не работает
|
|||
18
Вафель
06.06.19
✎
14:51
|
но можно решить задачу через расширение
|
|||
19
toypaul
гуру
06.06.19
✎
14:52
|
(13) вот еще какая есть подсказочка Отчет в привилегированном режиме
в самом конце темы - добавить РАЗРЕШЕННЫЕ в запрос. и вроде как должно заработать подозреваю, что в этом случае ПолучитьНастройки() не "портит" список выбранных полей |
|||
20
Иван-1C
06.06.19
✎
15:23
|
1. Разрешенные - не прокатило.
Это если группы физ.лиц какие-то открыты, какие-то закрыты, тогда да сработало бы для открытых. А тут в регистр расчетов вообще кадровику нос нельзя совать, но нужно 2. Если указываю МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,СхемаКомпоновкиДанных.НастройкиПоУмолчанию,ДанныеРасшифровки); то это убивает все выставленные параметры и отчет даже под админом ничего не выводит |
|||
21
toypaul
гуру
06.06.19
✎
15:29
|
(20) так никто счастья прям сразу и не обещал. про настройки я же написал. настройки нужно получать как-то самому и пользовательские настройки из компоновщика передавать
|
|||
22
toypaul
гуру
06.06.19
✎
15:33
|
кстати ... есть другой обходной вариант. сделать отчет через набор данных объект. и заполняй в модуле в привил. режиме набор как тебе захочется.
|
|||
23
toypaul
гуру
06.06.19
✎
15:35
|
и есть еще (совсем уж извращенческий вариант) - запрос делать по регистру, на который есть права, но опять же в модуле менять текст запроса на нужный регистр (ну и есс-но привил. режим) . такой варинт будет проще с точки зрения передачи параметров и отборов, заданных пользователем
|
|||
24
Иван-1C
06.06.19
✎
16:13
|
(21) А как передавать-то параметры?
Когда получил МакетКомпоновки в нем уже ничего менять нельзя. Можно настраивать и параметры и запрос до команды КомпоновщикМакета.Выполнить. Установил параметры, написал запрос какой хочу, а потом пишу МакетКомпоновки = КомпоновщикМакета.Выполнить И поскольку ставлю СхемаКомпоновкиДанных.НастройкиПоУмолчанию, то все параметры обнуляются. И подсунуть новые параметры позже уже нельзя. Макет скомпонован. МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,СхемаКомпоновкиДанных.НастройкиПоУмолчанию,ДанныеРасшифровки,,,Ложь) |
|||
25
toypaul
гуру
06.06.19
✎
16:21
|
"А как передавать-то параметры?" слишком много вопросов :) - а рабочий день уже подошел к концу. направление движения указано. если будет время, может сделаю тестовый пример
|
|||
26
Иван-1C
06.06.19
✎
17:32
|
(25) Да, буду ждать. было бы очень интересно.. А так по старинке сделал через ТабДок без СКД (((
|
|||
27
craxx
07.06.19
✎
09:25
|
(26) Что мешает запустить формирование табличного документа компоновщиком в модуле с привилегированным режимом? а потом вывести его в твоем отчете?
|
|||
28
Иван-1C
07.06.19
✎
09:43
|
(27) это же конфу менять
|
|||
29
craxx
07.06.19
✎
10:55
|
(28) Расширение
|
|||
30
Иван-1C
07.06.19
✎
12:33
|
(29) Не работает.
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; ... Вот на первой команде становлюсь отладчиком. Смотрю КомпоновщикНастроек и уже здесь в списке элементов настройки нет моего ресурса "РасчетноеНачисление". все дальнейшие действия в серверных модулях ни к чему не приводят |
|||
31
Иван-1C
07.06.19
✎
12:40
|
все как toypaul предсказывал..
|
|||
32
toypaul
гуру
07.06.19
✎
14:01
|
Самое просто что родилось
СтандартнаяОбработка = Ложь; УстановитьПривилегированныйРежим(Истина); Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию; НастройкиФормы = КомпоновщикНастроек.ПолучитьНастройки(); Для каждого Параметр Из НастройкиФормы.ПараметрыДанных.Элементы Цикл Если Параметр.Использование Тогда Настройки.ПараметрыДанных.УстановитьЗначениеПараметра(Параметр.Параметр, Параметр.Значение); КонецЕсли; КонецЦикла; КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,Настройки,ДанныеРасшифровки,,,ЛОЖЬ); ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,,ДанныеРасшифровки); ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(ДокументРезультат); ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных); если будут пользовательские отборы, то их тоже будет нужно переносить из настроек формы в настройки по умолчанию |
|||
33
Иван-1C
07.06.19
✎
14:31
|
(32) Жесть жестяная.. работает!!!
100500 лайков! Спасибо огромнейшее!!!!!! |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |