Содержание:
Файлы материала
Постановка задачи
Предположим, что у нас есть отчет на СКД, в котором используются доп. реквизиты и стоит задача вывести отбор для пользователя по данным доп. реквизитам.
Как устроены доп.реквизиты
Не секрет, что связка объект, свойство ПВХ и значение ПВХ для доп. реквизита храниться в соответствующей табличной части объекта.
Предположим, что у справочника Подразделения организации уже создан доп. реквизит Промышленный признак, который может принимать значения ППП, не ППП и др. из справочника “ЗначенияСвойствОбъектов” (синоним: Дополнительные значения).
где ЗначениеПВХ.Владелец = СвойствоПВХ.
Наша задача организовать отбор по значению, когда пользователь выбирает ППП, в отчет попадают все подразделения с указанным промышленным признаком.
Реализация
На просторах интернета существуют разные способы реализации данной задачи, в данной статье будет рассмотрен вариант с использованием связи параметров выбора свойств и значений объекта.
Для этого создадим новый отчет, откроем схему компоновки и добавим набор данных “Запрос”:
1 2 3 4 5 6 7 8 9 |
ВЫБРАТЬ ПодразделенияОрганизаций.Ссылка КАК Ссылка, ЕСТЬNULL(ПодразделенияДополнительныеРеквизиты.Значение, ЗНАЧЕНИЕ(Справочник.ЗначенияСвойствОбъектов.ПустаяСсылка)) КАК ПромышленныйПризнак ИЗ Справочник.ПодразделенияОрганизаций КАК ПодразделенияОрганизаций ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПодразделенияОрганизаций.ДополнительныеРеквизиты КАК ПодразделенияДополнительныеРеквизиты ПО ПодразделенияОрганизаций.Ссылка = ПодразделенияДополнительныеРеквизиты.Ссылка И (ПодразделенияДополнительныеРеквизиты.Свойство.Имя = "Подразделения_ПромышленныйПризнак") И (ПодразделенияДополнительныеРеквизиты.Значение = &ЗначениеПВХ) |
В запросе у нас появился один параметр &ЗначениеПВХ, по идеи, если дадим пользователю заполнять этот параметр, то вопрос будет решен, но на практике мы сталкиваемся со следующей проблемой:
Прежде чем добраться до нужного значения, пользователю сначала приходится выбрать его тип, затем найти его в длинном списке ПВХ, в котором перечислены значения всех свойств.
Для решения этой проблемы, создадим в СКД еще один параметр &СвойствоПВХ с типом ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения. По данному параметру можно будет определить тип и отобрать по владельцу &ЗначенияПВХ.
Для этого перейдем в “параметры редактирования” и установим связь по типу (ПараметрыДанных.СвойствоПВХ) и связь параметров выбора (Отбор.Владелец = ПараметрыДанных.СвойствоПВХ).
И получим нужный нам результат
Но данная конструкция работает только в случаи, когда пользователь установил СвойствоПВХ, если же его не установить то проблема остаётся прежней.
Что бы избавить пользователя от этой задачи, будем устанавливать данный параметр программно, в ЗУП 3.1 это получилось сделать, прописав следующий код в модуле объекта:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
// Настройки общей формы отчета подсистемы "Варианты отчетов". Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт Настройки.События.ПередЗагрузкойНастроекВКомпоновщик = Истина; КонецПроцедуры Процедура ПередЗагрузкойНастроекВКомпоновщик(Контекст, КлючСхемы, КлючВарианта, НовыеНастройкиКД, НовыеПользовательскиеНастройкиКД) Экспорт СвойствоПВХ = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", "Подразделения_ПромышленныйПризнак"); ПараметрКомпоновки = Новый ПараметрКомпоновкиДанных("СвойствоПВХ"); ПараметрСКД = НовыеНастройкиКД.ПараметрыДанных.НайтиЗначениеПараметра(ПараметрКомпоновки); ПараметрСКД.Значение = СвойствоПВХ; ПараметрСКД.Использование = Истина; КонецПроцедуры |
В других конфигурациях, чтобы сработал этот код, необходимо установить Форму отчета.
В итоге получим нужный результат, готовый образец отчета можно скачать в начале описания.
P. S.
- для дополнительных сведений эта же связка (Объект, Свойство, Значение) храниться в регистре сведений “ДополнительныеСведения”.
- Данную задачу можно было реализовать через Характеристики, но они доступны только в пользовательском режиме.
Спасибо, полезно и без воды.