СКД: как определить в процедуре в модуле объекта "ПриКомпоновкеРезультата", какой вариант отчета компануется?

Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. starjevschik 05.03.14 17:32 Сейчас в теме
(1) kvovka, мне так сдается, что никак. Из варианта берутся настройки и загружаются в компоновщик, он знает только свои настройки, а откуда они взялись, ему все равно.
ЗЫ компонуется, он же компоновщик.
Infinita; +1 Ответить
3. Kom-off 05.03.14 18:39 Сейчас в теме
(1) Сталкивался. Сначала было кинулся специальный реквизит отчета для этого дела создавать, типа, при загрузке варианта отчета, который должен заполнятся, ну и далее... Но потом подумав, решил, что проще создать параметр, который будет иметь собственное значение для каждого варианта (значение по умолчанию), сам параметр, при этом, в пользовательский интерфейс не выводить. Таким образом, при компоновке варианта отчета, анализируя значение этого параметра можно сделать вывод о том, какой вариант отчета загружен и используется. Этот способ имеет один недостаток: если используется настройка отображения параметров в сформированном отчете, то этот параметр будет выводиться вместе со всеми и, безусловно, путать пользователя. С этим делом пришлось бороться при помощи костылей - дорабатывать готовый сформированный табличный документ (в том же обработчике "При компоновке результата") "ручками" удалением из табличного документа строки, в которой этот параметр отображается.
17. fixin 4253 10.12.23 10:31 Сейчас в теме
(1) Можно, в КомпоновщикНастроек.Настройки.ДополнительныеСвойства можно посмотреть
	ДопПараметр = НайтиПользовательскийПараметр(КомпоновщикНастроек, Новый ПараметрКомпоновкиДанных("ВыводитьОстатки"));
	//Исключение
	//	Контекст.Вставить("ВыводитьОстатки", Ложь);
	//КонецПопытки;
	ДС = КомпоновщикНастроек.Настройки.ДополнительныеСвойства;
	Если ДС.Свойство("ВариантНаименование")
		И Найти(ВРЕГ(ДС.ВариантНаименование), "ОБОРОТЫ") <> 0 Тогда
		ДопПараметр.Значение = ложь;
	КонецЕсли;
	//Сообщить(ДС.ВариантНаименование);
	Контекст.Вставить("ВыводитьОстатки", ДопПараметр.Значение);

Функция НайтиПользовательскийПараметр(КомпоновщикНастроек, ПараметрКомпоновкиДанных)
	Для Каждого ТекЭлемент ИЗ КомпоновщикНастроек.ПользовательскиеНастройки.Элементы Цикл
		Если Тип(ТекЭлемент) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") И  ТекЭлемент.Параметр = ПараметрКомпоновкиДанных Тогда
			Возврат ТекЭлемент;
		КонецЕсли;
	КонецЦикла;
КонецФункции


Показать


Проверял на: УТ 11.4.13.46
Прикрепленные файлы:
4. kvovka 32 05.03.14 19:05 Сейчас в теме
Понятно. У меня пока такой способ - буду определять по имени первой группировки.
5. KrivosheevEV 06.03.14 10:48 Сейчас в теме
Коллеги, блин, будьте настойчивее при поиске хороших встроенных функций. Их много и они удобны.

Кусок кода:
ДокументОбъект = РеквизитФормыВЗначение("Отчет");
//...
Если НЕ ЗначениеЗаполнено(ЭтаФорма.НаименованиеТекущегоВарианта) И ДокументОбъект.СхемаКомпоновкиДанных.ВариантыНастроек.Количество()>0 Тогда
  Вариант = ДокументОбъект.СхемаКомпоновкиДанных.ВариантыНастроек[0];
  ЭтаФорма.УстановитьТекущийВариант(Вариант.Имя); 
КонецЕсли;
6. kvovka 32 06.03.14 11:05 Сейчас в теме
(5) KrivosheevEV, СКД: как определить в процедуре в модуле объекта "ПриКомпоновкеРезультата" (объект - отчет)
n0ther; Kom-off; +2 Ответить
7. imispb 5 20.05.15 20:33 Сейчас в теме
Если форма отчета не создана, тогда можно так:
КлючВарианта = НеОпределено;
КомпоновщикНастроек.ПользовательскиеНастройки.ДополнительныеСвойства.Свойство("КлючВарианта", КлючВарианта);


Кто может подсказать, как можно узнать вариант, если отчет формируется из созданной формы отчета?
_LkMaksimka_; afk; igee12; AnderWonder; +4 Ответить
8. imispb 5 21.05.15 14:48 Сейчас в теме
В модуле формы, в процедуре ПриОбновленииСоставаПользовательскихНастроекНаСервере, пишем следующий код
Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.ДополнительныеСвойства.Вставить("КлючВарианта",ЭтаФорма.КлючТекущегоВарианта);

После этого в Модуле Объекта в процедуре ПриКомпоновкеРезультата станет доступный реквизит КлючВарианта, как и при не созданной форме.
Santa1; user712426; user1330357; VIKINGmasterb2; _LkMaksimka_; afk; frkbvfnjh; v-sudakov@yandex.ru; MikeI; igee12; Гарин; Olenevod; kirich; Правдин; Jkey; malenushka1; binex; extrim-style; purgin; Detache; Anchoret; +21 Ответить
9. kvovka 32 21.05.15 18:36 Сейчас в теме
(8) imispb, без формы, но уже не актуально
10. Поручик 4674 21.05.15 22:43 Сейчас в теме
В конфигурациях на БСП передача дополнительных свойств для СКД реализована.
11. IvanKh 1 29.11.17 10:37 Сейчас в теме
Добавляем параметр. Устанавливаем значение (например название варианта, просто строкой, для каждого варианта настроек свое), но не устанавливаем галочку использование.

В процедуре ПриКомпоновкеРезультата :

Настройки = КомпоновщикНастроек.ПолучитьНастройки();
НазваниеВарианта = Настройки.ПараметрыДанных.Элементы.Найти("ИмяПараметра").Значение; // получаем строковое значение

т.к. Настройки.ПараметрыДанных.Элементы.Найти("ИмяПараметра").Использование = ложь - в табличный документ параметр отчета выводиться не будет.
user1839716; nick_krsk; frkbvfnjh; wauri; shevelyov; binx; Auser777; Gaffer; +8 Ответить
13. Auser777 23.06.19 16:26 Сейчас в теме
(11)
По-моему, самый ясный и оптимальный способ, так как не зависит от того, есть ли форма у отчета и т.п.
12. Mart 106 21.12.18 16:17 Сейчас в теме
+ еще 1 вариант:
На форму вывести элемент Отчет.КомпоновщикНастроек.ПользовательскиеНастройки (таблицу без колонок), если его там нет, обычно он там присутствует. Также на форме обычно присутствует стандартная кнопка выбора варианта отчета. После ее нажатия и выбора варианта, срабатывает событие ПриАктивизацииСтроки() у элемента таблицы ПользовательскиеНастройки, срабатывает оно также и при открытии формы, нужно в это событие написать такой код:

Отчет.КлючТекущегоВарианта = КлючТекущегоВарианта;

Обязательно в реквизиты отчета добавить реквизит КлючТекущегоВарианта, тип строка без ограничения длины.
Затем при нажатии кнопки Сформировать, срабатывает событие ПриКомпоновкеРезультата() в модуле объекта,
и вот здесь уже можно прочитать выбранный пользователем вариант:

Если КлючТекущегоВарианта = "Мой вариант" Тогда
// выбран нужный вариант
14. info1i 223 06.04.20 10:49 Сейчас в теме
(12)
Отчет.КлючТекущегоВарианта = КлючТекущегоВарианта;

А как получить переменную КлючТекущегоВарианта?
15. info1i 223 06.04.20 11:26 Сейчас в теме
(14) Оказывается, это встроенная платформенная переменная.
16. user726666 16.10.20 01:12 Сейчас в теме
(8)
(12) а как быть, если форма обычная ?
18. dusha0020 1107 13.02.24 13:04 Сейчас в теме
В итоге ничего из ветки не подошло. Получил наименование исполняемого варианта в модуле отчета СКД так:
СхемаКомпоновки = СхемаКомпоновкиДанных;
НастройкиКомпоновки = ЭтотОбъект.КомпоновщикНастроек.ПолучитьНастройки();

Функция ФормируемыйВариантОтчета(СхемаКомпоновки, НастройкиКомпоновки)

	Рез = "";
	ИдТекущегоВарианта = НастройкиКомпоновки.Структура.ИдентификаторПользовательскойНастройки;
	
	Для Каждого ВариантНастроек Из СхемаКомпоновки.ВариантыНастроек Цикл
		Если ВариантНастроек.Настройки.Структура.ИдентификаторПользовательскойНастройки = ИдТекущегоВарианта Тогда
			Рез = ВариантНастроек.Имя;
			Прервать;
		КонецЕсли;
	КонецЦикла;
	
	Возврат Рез;
	
КонецФункции
Показать
Оставьте свое сообщение

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