СКД: как определить в процедуре в модуле объекта "ПриКомпоновкеРезультата", какой вариант отчета компануется?
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) Сталкивался. Сначала было кинулся специальный реквизит отчета для этого дела создавать, типа, при загрузке варианта отчета, который должен заполнятся, ну и далее... Но потом подумав, решил, что проще создать параметр, который будет иметь собственное значение для каждого варианта (значение по умолчанию), сам параметр, при этом, в пользовательский интерфейс не выводить. Таким образом, при компоновке варианта отчета, анализируя значение этого параметра можно сделать вывод о том, какой вариант отчета загружен и используется. Этот способ имеет один недостаток: если используется настройка отображения параметров в сформированном отчете, то этот параметр будет выводиться вместе со всеми и, безусловно, путать пользователя. С этим делом пришлось бороться при помощи костылей - дорабатывать готовый сформированный табличный документ (в том же обработчике "При компоновке результата") "ручками" удалением из табличного документа строки, в которой этот параметр отображается.
(1) Можно, в КомпоновщикНастроек.Настройки.ДополнительныеСвойства можно посмотреть
Проверял на: УТ 11.4.13.46
ДопПараметр = НайтиПользовательскийПараметр(КомпоновщикНастроек, Новый ПараметрКомпоновкиДанных("ВыводитьОстатки"));
//Исключение
// Контекст.Вставить("ВыводитьОстатки", Ложь);
//КонецПопытки;
ДС = КомпоновщикНастроек.Настройки.ДополнительныеСвойства;
Если ДС.Свойство("ВариантНаименование")
И Найти(ВРЕГ(ДС.ВариантНаименование), "ОБОРОТЫ") <> 0 Тогда
ДопПараметр.Значение = ложь;
КонецЕсли;
//Сообщить(ДС.ВариантНаименование);
Контекст.Вставить("ВыводитьОстатки", ДопПараметр.Значение);
Функция НайтиПользовательскийПараметр(КомпоновщикНастроек, ПараметрКомпоновкиДанных)
Для Каждого ТекЭлемент ИЗ КомпоновщикНастроек.ПользовательскиеНастройки.Элементы Цикл
Если Тип(ТекЭлемент) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") И ТекЭлемент.Параметр = ПараметрКомпоновкиДанных Тогда
Возврат ТекЭлемент;
КонецЕсли;
КонецЦикла;
КонецФункции
ПоказатьПроверял на: УТ 11.4.13.46
Прикрепленные файлы:
Коллеги, блин, будьте настойчивее при поиске хороших встроенных функций. Их много и они удобны.
Кусок кода:
Кусок кода:
ДокументОбъект = РеквизитФормыВЗначение("Отчет");
//...
Если НЕ ЗначениеЗаполнено(ЭтаФорма.НаименованиеТекущегоВарианта) И ДокументОбъект.СхемаКомпоновкиДанных.ВариантыНастроек.Количество()>0 Тогда
Вариант = ДокументОбъект.СхемаКомпоновкиДанных.ВариантыНастроек[0];
ЭтаФорма.УстановитьТекущийВариант(Вариант.Имя);
КонецЕсли;
Если форма отчета не создана, тогда можно так:
Кто может подсказать, как можно узнать вариант, если отчет формируется из созданной формы отчета?
КлючВарианта = НеОпределено;
КомпоновщикНастроек.ПользовательскиеНастройки.ДополнительныеСвойства.Свойство("КлючВарианта", КлючВарианта);
Кто может подсказать, как можно узнать вариант, если отчет формируется из созданной формы отчета?
(7) по "КлючВарианта" можно найти в справочнике "ВариантыОтчетов" сам вариант
ВЫБРАТЬ
ВариантыОтчетов.Ссылка КАК Ссылка,
ВариантыОтчетов.КлючВарианта КАК КлючВарианта
ИЗ
Справочник.ВариантыОтчетов КАК ВариантыОтчетов
ГДЕ
ВариантыОтчетов.КлючВарианта = &КлючВарианта
В модуле формы, в процедуре ПриОбновленииСоставаПользовательскихНастроекНаСервере, пишем следующий код
После этого в Модуле Объекта в процедуре ПриКомпоновкеРезультата станет доступный реквизит КлючВарианта, как и при не созданной форме.
Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.ДополнительныеСвойства.Вставить("КлючВарианта",ЭтаФорма.КлючТекущегоВарианта);
После этого в Модуле Объекта в процедуре ПриКомпоновкеРезультата станет доступный реквизит КлючВарианта, как и при не созданной форме.
Добавляем параметр. Устанавливаем значение (например название варианта, просто строкой, для каждого варианта настроек свое), но не устанавливаем галочку использование.
В процедуре ПриКомпоновкеРезультата :
Настройки = КомпоновщикНастроек.ПолучитьНастройки();
НазваниеВарианта = Настройки.ПараметрыДанных.Элементы.Найти("ИмяПараметра").Значение; // получаем строковое значение
т.к. Настройки.ПараметрыДанных.Элементы.Найти("ИмяПараметра").Использование = ложь - в табличный документ параметр отчета выводиться не будет.
В процедуре ПриКомпоновкеРезультата :
Настройки = КомпоновщикНастроек.ПолучитьНастройки();
НазваниеВарианта = Настройки.ПараметрыДанных.Элементы.Найти("ИмяПараметра").Значение; // получаем строковое значение
т.к. Настройки.ПараметрыДанных.Элементы.Найти("ИмяПараметра").Использование = ложь - в табличный документ параметр отчета выводиться не будет.
+ еще 1 вариант:
На форму вывести элемент Отчет.КомпоновщикНастроек.ПользовательскиеНастройки (таблицу без колонок), если его там нет, обычно он там присутствует. Также на форме обычно присутствует стандартная кнопка выбора варианта отчета. После ее нажатия и выбора варианта, срабатывает событие ПриАктивизацииСтроки() у элемента таблицы ПользовательскиеНастройки, срабатывает оно также и при открытии формы, нужно в это событие написать такой код:
Отчет.КлючТекущегоВарианта = КлючТекущегоВарианта;
Обязательно в реквизиты отчета добавить реквизит КлючТекущегоВарианта, тип строка без ограничения длины.
Затем при нажатии кнопки Сформировать, срабатывает событие ПриКомпоновкеРезультата() в модуле объекта,
и вот здесь уже можно прочитать выбранный пользователем вариант:
Если КлючТекущегоВарианта = "Мой вариант" Тогда
// выбран нужный вариант
На форму вывести элемент Отчет.КомпоновщикНастроек.ПользовательскиеНастройки (таблицу без колонок), если его там нет, обычно он там присутствует. Также на форме обычно присутствует стандартная кнопка выбора варианта отчета. После ее нажатия и выбора варианта, срабатывает событие ПриАктивизацииСтроки() у элемента таблицы ПользовательскиеНастройки, срабатывает оно также и при открытии формы, нужно в это событие написать такой код:
Отчет.КлючТекущегоВарианта = КлючТекущегоВарианта;
Обязательно в реквизиты отчета добавить реквизит КлючТекущегоВарианта, тип строка без ограничения длины.
Затем при нажатии кнопки Сформировать, срабатывает событие ПриКомпоновкеРезультата() в модуле объекта,
и вот здесь уже можно прочитать выбранный пользователем вариант:
Если КлючТекущегоВарианта = "Мой вариант" Тогда
// выбран нужный вариант
В итоге ничего из ветки не подошло. Получил наименование исполняемого варианта в модуле отчета СКД так:
СхемаКомпоновки = СхемаКомпоновкиДанных;
НастройкиКомпоновки = ЭтотОбъект.КомпоновщикНастроек.ПолучитьНастройки();
Функция ФормируемыйВариантОтчета(СхемаКомпоновки, НастройкиКомпоновки)
Рез = "";
ИдТекущегоВарианта = НастройкиКомпоновки.Структура.ИдентификаторПользовательскойНастройки;
Для Каждого ВариантНастроек Из СхемаКомпоновки.ВариантыНастроек Цикл
Если ВариантНастроек.Настройки.Структура.ИдентификаторПользовательскойНастройки = ИдТекущегоВарианта Тогда
Рез = ВариантНастроек.Имя;
Прервать;
КонецЕсли;
КонецЦикла;
Возврат Рез;
КонецФункции
Показать
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
Вариант=ЭтотОбъект.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.ВариантНаименование;
ДокументРезультат.ФиксацияСлева=2;
КонецПроцедуры
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот