Сформировать отчет СКД в привилегированном режиме
Как сформировать отчет СКД в привилегированном режиме? Делаю так не работает:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка= Ложь;
УстановитьПривилегированныйРежим(Истина);
Настройки = КомпоновщикНастроек.ПолучитьНастройки();
П_пользователь = Настройки.ПараметрыДанных.Элементы.Найти("ТекущийПользователь");
Если Не П_пользователь = Неопределено Тогда
П_пользователь.Значение = Пользователи.ТекущийПользователь();
КонецЕсли;
Если Не РольДоступна("Снабжение") Тогда
Для Каждого ЭлКолонки Из Настройки.Выбор.Элементы Цикл
Если ЭлКолонки.Поле = Новый ПолеКомпоновкиДанных("Цена") Тогда
ЭлКолонки.Использование = Ложь;
КонецЕсли;
Если ЭлКолонки.Поле = Новый ПолеКомпоновкиДанных("СуммаЗаказа") Тогда
ЭлКолонки.Использование = Ложь;
КонецЕсли;
Если ЭлКолонки.Поле = Новый ПолеКомпоновкиДанных("ЦенаПоступления") Тогда
ЭлКолонки.Использование = Ложь;
КонецЕсли;
Если ЭлКолонки.Поле = Новый ПолеКомпоновкиДанных("СуммаПоступления") Тогда
ЭлКолонки.Использование = Ложь;
КонецЕсли;
Если ЭлКолонки.Поле = Новый ПолеКомпоновкиДанных("ЦенаТребуется") Тогда
ЭлКолонки.Использование = Ложь;
КонецЕсли;
Если ЭлКолонки.Поле = Новый ПолеКомпоновкиДанных("СуммаТребуется") Тогда
ЭлКолонки.Использование = Ложь;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,Настройки,ДанныеРасшифровки);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.НачатьВывод();
ЭлементРезультата = ПроцессорКомпоновки.Следующий();
Пока ЭлементРезультата <> Неопределено Цикл
ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата);
ЭлементРезультата = ПроцессорКомпоновки.Следующий();
КонецЦикла;
ПроцессорВывода.ЗакончитьВывод();
УстановитьПривилегированныйРежим(Ложь );
КонецПроцедуры
ПоказатьПо теме из базы знаний
- Удаление данных с отбором и построением дерева ссылок в базах 1С 8.1-8.3 УТ 10.3./11, БП 2/3, ЗУП 2.5/3, КА 1.1/2, УНФ 1.6/3.0
- Шаблон типового отчета (СКД) в привилегированном режиме
- Многопоточность. Универсальный «Менеджер потоков» (фреймворк) с отслеживанием зависимости объектов
- Описание почти всех событий технологического журнала
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Установить привилегированный режим можно в общем модуле.
В модуле объекта внешнего отчета:
В общем модуле КФ_СерверВызов:
В модуле объекта внешнего отчета:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
Организации=КФ_СерверВызов.ДоступныеОрганизацииПоДокументам("ЗаявкаНаРасходованиеДенежныхСредств");
Параметры=Новый Структура("Организации",Организации);
ВПривилегированномРежиме=Истина;
ССообщениями=Истина;
КФ_СерверВызов.СКДПриКомпоновкеРезультата(ЭтотОбъект,ДокументРезультат,ДанныеРасшифровки,СтандартнаяОбработка,
ВПривилегированномРежиме,Параметры,ССообщениями);
КонецПроцедуры
ПоказатьВ общем модуле КФ_СерверВызов:
Функция СКДПриКомпоновкеРезультата(ОтчетОбъект,ДокументРезультат,ДанныеРасшифровки,СтандартнаяОбработка,
ВПривилегированномРежиме=Ложь,Параметры=Неопределено,ССообщениями=Ложь,ОриентСтр=Неопределено,ИспользоватьКФМакетОформления=Истина) Экспорт
Если ВПривилегированномРежиме Тогда
//Для внешних отчетов в функции СведенияОВнешнейОбработке()
//нужно ПараметрыРегистрации.Вставить("БезопасныйРежим",Ложь). Иначе не работает.
УстановитьПривилегированныйРежим(Истина);
Если ССообщениями И Не ПривилегированныйРежим() Тогда
Сообщить("Ошибка в программе. Не установился привилегированный режим.");
КонецЕсли;
КонецЕсли;
СтандартнаяОбработка=Ложь;
//Макет компоновки
КомпоновщикМакета=Новый КомпоновщикМакетаКомпоновкиДанных;
Настройки=ОтчетОбъект.КомпоновщикНастроек.ПолучитьНастройки();
...
КонецФункции
Показать
(8) не поможет
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
УстановитьПривилегированныйРежим(Истина);
Настройки = КомпоновщикНастроек.ПолучитьНастройки();
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,Настройки,ДанныеРасшифровки,,,Ложь);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.НачатьВывод();
ЭлементРезультата = ПроцессорКомпоновки.Следующий();
Пока ЭлементРезультата <> Неопределено Цикл
ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата);
ЭлементРезультата = ПроцессорКомпоновки.Следующий();
КонецЦикла;
ПроцессорВывода.ЗакончитьВывод();
КонецПроцедуры
Показать
(9) Так не работает, пишет, что ресурсы и измерения не выбраны. Т.е. ошибка в настройках.
Причина в том, что при получении настроек отбрасываются поля на которые нет прав. Даже если стоит УстановитьПривилегированныйРежим(Истина);
Решение - использовать настройки по умолчанию:
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,СхемаКомпоновкиДанных.НастройкиПоУмолчанию,ДанныеРасшифровки);
Но тогда настройки сделанные на форме не будет действовать.
Возможно это зависит от версии платформы, использую 8.3.22.2143
Причина в том, что при получении настроек отбрасываются поля на которые нет прав. Даже если стоит УстановитьПривилегированныйРежим(Истина);
Решение - использовать настройки по умолчанию:
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,СхемаКомпоновкиДанных.НастройкиПоУмолчанию,ДанныеРасшифровки);
Но тогда настройки сделанные на форме не будет действовать.
Возможно это зависит от версии платформы, использую 8.3.22.2143
Дополнение.
Что бы не отбрасывались поля есть еще два варианта:
1. Делать две схемы, одну для настроек, одну для формирования и при исполнении отчета программно подменять схему компоновки данных на нужную
2. В СКД сделать "объединение" и второй запрос в объединении в котором прописать нужные поля. В этом случае отчет сформируется со всеми полями, но будет одна пустая строка. Ее нужно убрать через Отбор.
Что бы не отбрасывались поля есть еще два варианта:
1. Делать две схемы, одну для настроек, одну для формирования и при исполнении отчета программно подменять схему компоновки данных на нужную
2. В СКД сделать "объединение" и второй запрос в объединении в котором прописать нужные поля. В этом случае отчет сформируется со всеми полями, но будет одна пустая строка. Ее нужно убрать через Отбор.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот