1. PerlAmutor 33 10.01.19 06:37 Сейчас в теме

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

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

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

http://prntscr.com/m5725i

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

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

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

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

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

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


Показать


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

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

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

Вакансии

Программист 1С
Москва
Полный день

Программист 1С
Видное
Полный день

Программист 1С
Москва
зарплата до 120 000 руб.
Полный день

Консультант-аналитик 1С
Москва
зарплата от 100 000 руб. до 170 000 руб.
Полный день