Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

ЗУП 3.х. Внешний отчет на СКД в привилегированном режиме

ЗУП 3.х. Внешний отчет на СКД в привилегированном режиме
Я
   Иван-1C
 
05.06.19 - 11:49
Добрый день!
Подскажите, пожалуйста, как выполнить внешний отчет на СКД в привилегированном режиме?

При компоновке результата добавляю
    СтандартнаяОбработка = Ложь;
    УстановитьПривилегированныйРежим(Истина);

не помогает.
 
 
   Amra
 
1 - 05.06.19 - 12:14
Только добавлять во внешние отчеты и обработки и выполнение в небезопастном режиме (в СведенияОВнешнейОБработке указывается)
   palsergeich
 
2 - 05.06.19 - 12:56
Внешние отчёты открываются только в безопасном режиме.
Безопасный режим имеет высший приоритет, нежели установитьПривеллигированныйРежим.
Или писать обёртку, которая будет открывать этот же отчёт через ВнешниеОтчетыМенкджер с безопасный режим = ложь или встраивать в доп отчеты
   Иван-1C
 
3 - 06.06.19 - 10:26
(1) Не работает.
Кидаю в дополнительные отчеты и обработки.
Вроде бы все классически делаю, ничего лишнего, но не работает. Под админом работает.
А нужно с правами кадровика увидеть суммы по начислениям.

Вот настройка небезопасного режима:
Функция СведенияОВнешнейОбработке() Экспорт

    ПараметрыРегистрации = Новый Структура;
    МассивНазначений = Новый Массив;
    МассивНазначений.Добавить("");

    ИмяОтчета = Метаданные().Представление();

    ПараметрыРегистрации.Вставить("Вид", "ДополнительныйОтчет");
    ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
    ПараметрыРегистрации.Вставить("Наименование", ИмяОтчета);
    ПараметрыРегистрации.Вставить("Версия", "1.0");
    ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);
    ПараметрыРегистрации.Вставить("Информация", "Дополнительный отчет");

    ТаблицаКоманд = ПолучитьТаблицуКоманд();

    ДобавитьКоманду(ТаблицаКоманд, ИмяОтчета, Метаданные().ПолноеИмя(), "ОткрытиеФормы", Истина);

    ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);

    Возврат ПараметрыРегистрации;
КонецФункции


Вот Запрос на СКД:

ВЫБРАТЬ
    Начисления.Сотрудник КАК Сотрудник,
    СУММА(Начисления.Результат) КАК РасчетноеНачисление
ИЗ
    РегистрРасчета.Начисления КАК Начисления
ГДЕ
    Начисления.ПериодРегистрации МЕЖДУ &НачалоПериода И &КонецПериода
    И Начисления.ВидРасчета В(&СписокНачислений)
    И Начисления.Сотрудник = &Сотрудник

СГРУППИРОВАТЬ ПО
    Начисления.Сотрудник


И вот компоновка результата:

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    
    СтандартнаяОбработка= Ложь;

    УстановитьПривилегированныйРежим(Истина);
    
    Настройки = КомпоновщикНастроек.ПолучитьНастройки();

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

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

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

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

    ЭлементРезультата = ПроцессорКомпоновки.Следующий();
    Пока ЭлементРезультата <> Неопределено Цикл
        ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата);
        ЭлементРезультата = ПроцессорКомпоновки.Следующий();
    КонецЦикла;
    ПроцессорВывода.ЗакончитьВывод();
    
КонецПроцедуры
   Amra
 
4 - 06.06.19 - 10:30
   Иван-1C
 
5 - 06.06.19 - 10:39
(4) там написано как ты и сказал.
Должно работать, где-то туплю..
   toypaul
 
6 - 06.06.19 - 10:59
тут возможно фишка в методе ПолучитьНастройки

ты же не рассказываешь, что конкретно у тебя не работает. если выводятся какие-то колонки, но данных нет - это одно. если колонки вообще не выводятся, то это другое
   toypaul
 
7 - 06.06.19 - 11:01
БезопасныйРежим тут вообще не приделах - на права он никак не действует. это лишь параметр для создания внешней обработки методом Создать
   toypaul
 
8 - 06.06.19 - 11:03
у КомпоновщикМакетаКомпоновкиДанных есть параметр в методе Выполнить - ПроверятьДоступностьПолей. попробуй там передать Ложь. а еще посмотри в Настройки список выбранных полей
   Иван-1C
 
9 - 06.06.19 - 11:04
(7) даже колонки не выводятся. только установленные параметры
   toypaul
 
10 - 06.06.19 - 11:10
(9) тогда предлагаю посмотреть для начала Настройки.Выбор и много думать
   Иван-1C
 
11 - 06.06.19 - 13:35
(10) ПроверятьДоступностьПолей  выставил - не помогло.

А по поводу Настройки.Выбор не пойму что на них смотреть. Два поля всего вывожу:
Сотрудник и Сумма.


Если вместо Регистра расчета Начисления, подставить например Регистр накопления Фактические отпуска, то все работает при тех же условиях, без изменений в коде.
   toypaul
 
12 - 06.06.19 - 14:16
а я все-таки предлагаю в отладчике посмотреть что в Настройки.Выбор
   Иван-1C
 
13 - 06.06.19 - 14:37
(12) Отладчиком я умею смотреть такой отчет только через Файл - открыть.

Под кадровиком там пусто.. Ноль элементов..

Под админом мои две строки.

И что делать-то???? Спаси, уважаемый)
   toypaul
 
14 - 06.06.19 - 14:44
(13) уже хорошо. я в (6) уже про это писал.

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

и параметр в этом методе ПроверятьДоступностьПолей = ЛОЖЬ

но такой способ отрубит все пользовательские настройки (если они есть)

особенность метода ПолучитьНастройки (насколько я понимаю) в том что он формирует настройки с учетом функ. опций и прав пользователя

у нас (в Ижевске) 29.05 проходил "митапчик" по СКД - я там про это рассказывал
   toypaul
 
15 - 06.06.19 - 14:47
а вот как заставить возвращать метод ПолучитьНастройки настройки без учета прав и ФО - это большой вопрос.

непонятненько почему метод УстановитьПривилегированныйРежим не отрубает в нем проверку прав

есть такая мысль ... может быть УстановитьПривилегированныйРежим вызывать в ПриСозданииНаСервере или какой там обрабтчик самым первым срабатывает. чтобы обмануть компоновщик насчет прав...
   Вафель
 
16 - 06.06.19 - 14:50
в самой внешней обработке вроде никак нельзя привилегированный режим
   Вафель
 
17 - 06.06.19 - 14:51
но если опасный режим, то привилегерованный режим в коде КОНФЫ не работает
   Вафель
 
18 - 06.06.19 - 14:51
но можно решить задачу через расширение
   toypaul
 
19 - 06.06.19 - 14:52
(13) вот еще какая есть подсказочка Отчет в привилегированном режиме

в самом конце темы - добавить РАЗРЕШЕННЫЕ в запрос. и вроде как должно заработать
подозреваю, что в этом случае ПолучитьНастройки() не "портит" список выбранных полей
   Иван-1C
 
20 - 06.06.19 - 15:23
1. Разрешенные  - не прокатило.
Это если группы физ.лиц какие-то открыты, какие-то закрыты, тогда да сработало бы для открытых.
А тут в регистр расчетов вообще кадровику нос нельзя совать, но нужно

2. Если указываю 
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,СхемаКомпоновкиДанных.НастройкиПоУмолчанию,ДанныеРасшифровки);

то это убивает все выставленные параметры и отчет даже под админом ничего не выводит
   toypaul
 
21 - 06.06.19 - 15:29
(20) так никто счастья прям сразу и не обещал. про настройки я же написал. настройки нужно получать как-то самому и пользовательские настройки из компоновщика передавать
   toypaul
 
22 - 06.06.19 - 15:33
кстати ... есть другой обходной вариант. сделать отчет через набор данных объект. и заполняй в модуле в привил. режиме набор как тебе захочется.
   toypaul
 
23 - 06.06.19 - 15:35
и есть еще (совсем уж извращенческий вариант) - запрос делать по регистру, на который есть права, но опять же в модуле менять текст запроса на нужный регистр (ну и есс-но привил. режим) . такой варинт будет проще с точки зрения передачи параметров и отборов, заданных пользователем
   Иван-1C
 
24 - 06.06.19 - 16:13
(21) А как передавать-то параметры?

Когда получил МакетКомпоновки в нем уже ничего менять нельзя.

Можно настраивать и параметры и запрос до команды КомпоновщикМакета.Выполнить.
Установил параметры, написал запрос какой хочу, а потом пишу
МакетКомпоновки = КомпоновщикМакета.Выполнить

И поскольку ставлю СхемаКомпоновкиДанных.НастройкиПоУмолчанию, то все параметры обнуляются.
И подсунуть новые параметры позже уже нельзя. Макет скомпонован.

МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,СхемаКомпоновкиДанных.НастройкиПоУмолчанию,ДанныеРасшифровки,,,Ложь)
   toypaul
 
25 - 06.06.19 - 16:21
"А как передавать-то параметры?" слишком много вопросов :) - а рабочий день уже подошел к концу. направление движения указано. если будет время, может сделаю тестовый пример
   Иван-1C
 
26 - 06.06.19 - 17:32
(25) Да, буду ждать. было бы очень интересно.. А так по старинке сделал через ТабДок без  СКД  (((
   craxx
 
27 - 07.06.19 - 09:25
(26) Что мешает запустить формирование табличного документа компоновщиком в модуле с привилегированным режимом? а потом вывести его в твоем отчете?
   Иван-1C
 
28 - 07.06.19 - 09:43
(27) это же конфу менять
   craxx
 
29 - 07.06.19 - 10:55
(28) Расширение
   Иван-1C
 
30 - 07.06.19 - 12:33
(29) Не работает.

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
...


Вот на первой команде становлюсь отладчиком.
Смотрю КомпоновщикНастроек и уже здесь в списке элементов настройки нет моего ресурса "РасчетноеНачисление".

все дальнейшие действия в серверных модулях ни к чему не приводят
 
 
   Иван-1C
 
31 - 07.06.19 - 12:40
все как toypaul  предсказывал..
   toypaul
 
32 - 07.06.19 - 14:01
Самое просто что родилось

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


если будут пользовательские отборы, то их тоже будет нужно переносить из настроек формы в настройки по умолчанию
   Иван-1C
 
33 - 07.06.19 - 14:31
(32) Жесть жестяная.. работает!!!

100500 лайков! Спасибо огромнейшее!!!!!!


Список тем форума
Рекламное место пустует  Рекламное место пустует
Программист всегда исправляет последнюю ошибку.
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.