Найти в Дзене
Блог 1С программиста

Отбор по дополнительному реквизиту в отчете на СКД

Оглавление

Образец отчета можно скачать по ссылке.

Постановка задачи

Предположим что у нас есть отчет на СКД, в котором используются доп. реквизиты и стоит задача вывести отбор для пользователя по данным доп. реквизитам.

Как устроены доп.реквизиты

Не секрет, что связка объекта, свойство ПВХ и значение ПВХ для доп. реквизита храниться в соответствующей табличной части объекта.

Предположим, что у справочника Подразделения организации уже создан доп. реквизит Промышленный признак, который может принимать значения ППП, не ППП и др. из справочника “ЗначенияСвойствОбъектов” (синоним: Дополнительные значения).

-2

где ЗначениеПВХ.Владелец = СвойствоПВХ.

* для дополнительных сведений эта же связка храниться в регистре сведений “ДополнительныеСведения”.

Наша задача организовать отбор по значению, когда пользователь выбирает ППП, в отчет попадают все подразделения с указанным промышленным признаком.

Реализация

На просторах интернета существуют разные способы реализации данной задачи, в данной статье будет рассмотрен вариант с использованием связи параметров выбора свойств и значений объекта.

* Данную задачу можно было реализовать через Характеристики, но они доступны только в пользовательском режиме

Для этого создадим новый отчет, откроем схему компоновки и добавим набор данных “Запрос”:

ВЫБРАТЬ

ПодразделенияОрганизаций.Ссылка КАК Ссылка,

ЕСТЬNULL(ПодразделенияДополнительныеРеквизиты.Значение, ЗНАЧЕНИЕ(Справочник.ЗначенияСвойствОбъектов.ПустаяСсылка)) КАК ПромышленныйПризнак

ИЗ

Справочник.ПодразделенияОрганизаций КАК ПодразделенияОрганизаций

ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПодразделенияОрганизаций.ДополнительныеРеквизиты КАК ПодразделенияДополнительныеРеквизиты

ПО ПодразделенияОрганизаций.Ссылка = ПодразделенияДополнительныеРеквизиты.Ссылка

И (ПодразделенияДополнительныеРеквизиты.Свойство.Имя = "Подразделения_ПромышленныйПризнак")

И (ПодразделенияДополнительныеРеквизиты.Значение = &ЗначениеПВХ)

В запросе у нас появился один параметр &ЗначениеПВХ, по идеи, если дадим пользователю заполнять этот параметр, то вопрос будет решен, но на практике мы сталкиваемся со следующими проблемами:

-3

Прежде чем добраться до нужного значения, пользователю сначала приходится выбрать его тип, затем найти его в длинном списке ПВХ, в котором перечислены значения всех свойств.

Для решения этой проблемы, создадим в СКД еще один параметр &СвойствоПВХ с типом ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения. По данному параметру можно будет определить тип и определить владельца &ЗначенияПВХ. Для этого в “параметрах редактирования” установим связь параметров выбора, как Отбор.Владелец = ПараметрыДанных.СвойствоПВХ и связь по типу, как ПараметрыДанных.СвойствоПВХ

-4

И получим нужный нам результат

-5

Но данная конструкция работает только в случаи, когда пользователь установил СвойствоПВХ, если же его не установить то проблема остаётся прежней.

Что бы избавить пользователя от этой задачи, будем устанавливать данный параметр программно и для этого не нужно создавать свою форму, а все можно прописать в модуле объекта нашего отчета:

// Настройки общей формы отчета подсистемы "Варианты отчетов".

Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт

Настройки.События.ПередЗагрузкойНастроекВКомпоновщик = Истина;

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

Процедура ПередЗагрузкойНастроекВКомпоновщик(Контекст, КлючСхемы, КлючВарианта, НовыеНастройкиКД, НовыеПользовательскиеНастройкиКД) Экспорт

СвойствоПВХ = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", "Подразделения_ПромышленныйПризнак");

ПараметрКомпоновки = Новый ПараметрКомпоновкиДанных("СвойствоПВХ");

ПараметрСКД = НовыеНастройкиКД.ПараметрыДанных.НайтиЗначениеПараметра(ПараметрКомпоновки);

ПараметрСКД.Значение = СвойствоПВХ;

ПараметрСКД.Использование = Истина;

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

И получим нужный нам результат, готовый образец отчета можно скачать по ссылке в начале описания.

-6