Образец отчета можно скачать по ссылке.
Постановка задачи
Предположим что у нас есть отчет на СКД, в котором используются доп. реквизиты и стоит задача вывести отбор для пользователя по данным доп. реквизитам.
Как устроены доп.реквизиты
Не секрет, что связка объекта, свойство ПВХ и значение ПВХ для доп. реквизита храниться в соответствующей табличной части объекта.
Предположим, что у справочника Подразделения организации уже создан доп. реквизит Промышленный признак, который может принимать значения ППП, не ППП и др. из справочника “ЗначенияСвойствОбъектов” (синоним: Дополнительные значения).
где ЗначениеПВХ.Владелец = СвойствоПВХ.
* для дополнительных сведений эта же связка храниться в регистре сведений “ДополнительныеСведения”.
Наша задача организовать отбор по значению, когда пользователь выбирает ППП, в отчет попадают все подразделения с указанным промышленным признаком.
Реализация
На просторах интернета существуют разные способы реализации данной задачи, в данной статье будет рассмотрен вариант с использованием связи параметров выбора свойств и значений объекта.
* Данную задачу можно было реализовать через Характеристики, но они доступны только в пользовательском режиме
Для этого создадим новый отчет, откроем схему компоновки и добавим набор данных “Запрос”:
ВЫБРАТЬ
ПодразделенияОрганизаций.Ссылка КАК Ссылка,
ЕСТЬNULL(ПодразделенияДополнительныеРеквизиты.Значение, ЗНАЧЕНИЕ(Справочник.ЗначенияСвойствОбъектов.ПустаяСсылка)) КАК ПромышленныйПризнак
ИЗ
Справочник.ПодразделенияОрганизаций КАК ПодразделенияОрганизаций
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПодразделенияОрганизаций.ДополнительныеРеквизиты КАК ПодразделенияДополнительныеРеквизиты
ПО ПодразделенияОрганизаций.Ссылка = ПодразделенияДополнительныеРеквизиты.Ссылка
И (ПодразделенияДополнительныеРеквизиты.Свойство.Имя = "Подразделения_ПромышленныйПризнак")
И (ПодразделенияДополнительныеРеквизиты.Значение = &ЗначениеПВХ)
В запросе у нас появился один параметр &ЗначениеПВХ, по идеи, если дадим пользователю заполнять этот параметр, то вопрос будет решен, но на практике мы сталкиваемся со следующими проблемами:
Прежде чем добраться до нужного значения, пользователю сначала приходится выбрать его тип, затем найти его в длинном списке ПВХ, в котором перечислены значения всех свойств.
Для решения этой проблемы, создадим в СКД еще один параметр &СвойствоПВХ с типом ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения. По данному параметру можно будет определить тип и определить владельца &ЗначенияПВХ. Для этого в “параметрах редактирования” установим связь параметров выбора, как Отбор.Владелец = ПараметрыДанных.СвойствоПВХ и связь по типу, как ПараметрыДанных.СвойствоПВХ
И получим нужный нам результат
Но данная конструкция работает только в случаи, когда пользователь установил СвойствоПВХ, если же его не установить то проблема остаётся прежней.
Что бы избавить пользователя от этой задачи, будем устанавливать данный параметр программно и для этого не нужно создавать свою форму, а все можно прописать в модуле объекта нашего отчета:
// Настройки общей формы отчета подсистемы "Варианты отчетов".
Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт
Настройки.События.ПередЗагрузкойНастроекВКомпоновщик = Истина;
КонецПроцедуры
Процедура ПередЗагрузкойНастроекВКомпоновщик(Контекст, КлючСхемы, КлючВарианта, НовыеНастройкиКД, НовыеПользовательскиеНастройкиКД) Экспорт
СвойствоПВХ = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", "Подразделения_ПромышленныйПризнак");
ПараметрКомпоновки = Новый ПараметрКомпоновкиДанных("СвойствоПВХ");
ПараметрСКД = НовыеНастройкиКД.ПараметрыДанных.НайтиЗначениеПараметра(ПараметрКомпоновки);
ПараметрСКД.Значение = СвойствоПВХ;
ПараметрСКД.Использование = Истина;
КонецПроцедуры
И получим нужный нам результат, готовый образец отчета можно скачать по ссылке в начале описания.