ТаблицаЗначений в СКД с отборами

1. PerlAmutor 129 10.01.19 06:37 Сейчас в теме
Приветствую. Многие знают отчет "Движение документа" в типовых конфигурациях. Если обратите внимание, то он показывает движения по регистрам на которые у пользователя вообще может не быть прав на чтение. Возникла необходимость разработать внешний отчет для всех пользователей. Делал через СКД, поэтому пошли жалобы, что у некоторых из них не все поля выводятся. При проверке выяснилось, что на многие используемые в отчете регистры у пользователей нет прав. Раздавать права налево и направо я не хочу просто так. Настроек которые бы позволили вывести всю информацию через СКД независимо от прав я не нашел. Пробовал результат помещать во временную таблицу, но систему не обманешь. В итоге пришел к выводу, что можно попробовать это реализовать через ВнешнийИсточникДанных и подставить уже готовую таблицу значений. Но столкнулся с тем, что в запросе используется синтаксис ПостроителяОтчета, т.е. фигурные скобки "{}". И в этот отчет необходимо передавать отбор через параметры при открытии из другой формы. Как мы знаем, в объект Запрос можно передать параметры через УстановитьПараметры(). Но как туда программно передать параметры отборов типа этого?

|{ГДЕ
   |	ПартииТоваровКомпанииОбороты.Номенклатура.*,
   |	Регистратор.*,
   |	СУММА(ПартииТоваровКомпанииОбороты.СтоимостьПриход) КАК СтоимостьПриход,
   |	СУММА(ПартииТоваровКомпанииОбороты.СтоимостьРасход) КАК СтоимостьРасход}
+
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. dandykry 9 10.01.19 07:38 Сейчас в теме
(1) Фигурные скобки это расширение языка запросов для скд. К построителю отчетов он имеет косвенное отношение

http://prntscr.com/m5725i

На основании этих скобок скд понимает, по каким полям и в каких временных таблицах можно и нужно делать отборы, а по каким строго нельзя.

Если действительно есть сложное описание отборов, то могу предложить сформировать СКД в таблицузначений в привелигированном режиме

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

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

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

	
КонецПроцедуры


Показать


А дальше как и хотели через ВнешнийИсточникДанных эту таблицу. Важно, чтобы в таблице были значения тип строка. Т.е в каждом поле скд нужно написать ПРЕДСТАВЛЕНИЕ(Регистр.Сотрудник) КАК Сотрудник. иначе есть огромный шанс увидеть ОбъектНеНайден.....

Если конфигурация на БСП то там есть много хороших вещей по передаче и установке параметров при открытии формы отчета.
+
2. Sapiens_bru 4 10.01.19 07:24 Сейчас в теме
Сам не пробовал но как вариант. В модуле отчёта есть процедура ПриКомпоновкеРезультата. Там можно сделать Стандартная работка=Ложь и заполнить СКД программно, взяв из отчёта схему, параметры и настройки. Затем вызвать компоновку и этим получить тот же отчёт. Естественно программный код нужно обернуть в привелигированный режим
+
3. NatalkaBal 28 10.01.19 07:33 Сейчас в теме
А если при формирования отчета использовать УстановитьПривилегированныйРежим(Истина), а после УстановитьПривилегированныйРежим(Ложь)
+
5. dandykry 9 10.01.19 07:38 Сейчас в теме
(3) Не выйдет. Сначала откроется отчет, и из его полей пропадут все недоступные. А после хоть привелигированный, хоть нет, все равно будет пустота.
+
6. Dmitrij-2 45 10.01.19 07:45 Сейчас в теме
УстановитьПривилегированныйРежим(Истина) должно помочь
+
7. dandykry 9 10.01.19 07:59 Сейчас в теме
8. PerlAmutor 129 10.01.19 19:17 Сейчас в теме
Есть такой объект как ПостроительЗапроса, о нем ни слова не сказано в двух томах Руководства Разработчика. Возможности у него шире чем у обычного Запроса. Так как позволяет задавать те самые отборы для фигурных скобок. Есть еще объект ПостроительОтчета, но это похоже анахронизм, я не нашел в типовой конфигурации ERP ни строчки с ним. Зато ПостроительЗапроса там используется, не так много мест, но есть. В общем когда с отборами решил вопрос - появился другой. На что менять ОсновнуюСхемуКомпоновкиДанных, где прописаны все настройки, параметры. Я не могу просто так взять и стереть запрос из источника данных, так как сразу "летят" параметры. А это значит, что мне нужно полностью с нуля программно формировать нужную мне схему. А это дико не практично и не быстро. Кроме того относительно Привилегированного режима. Он не будет работать, если это отчет на основе БСП подключаемый через справочник. ДополнительныеОтчетыИОбработки и у него выставлено свойство безопасности = Истина.

Если взвесить все нюансы, то можно сделать вывод, что для реализации подобной задачи СКД мало подходит. Куда проще кинуть на форму ТабличныйДокумент и заполнить обычным Запросом. В этом случае теряется гибкость настроек, но появляется несколько свободных дней на реализацию чего-то другого.
+
Внимание! Тема сдана в архив

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