Как ограничить список выбора дополнительных сведений в отчете на СКД?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия IT и автоматизация бизнеса
← На главную

При разработке отчетов на базе Схемы компоновки данных (СКД) в конфигурациях 1С (например, 1С:Бухгалтерия предприятия 3.0 или конфигурациях на базе БСП) часто возникает необходимость добавить отбор или отображение дополнительных сведений и реквизитов. Однако по умолчанию при попытке подбора значения из справочника ЗначенияСвойствОбъектов платформа выводит полный список элементов всех свойств для любых документов и объектов системы.

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

Причина возникновения проблемы

Справочник ЗначенияСвойствОбъектов является иерархическим или владеемым по отношению к плану видов характеристик ДополнительныеРеквизитыИСведения. Когда пользователь выбирает значение свойства в форме отчета, платформа 1С открывает стандартную форму выбора справочника. Если в настройках поля СКД не задана жесткая связь с конкретным владельцем (элементом плана видов характеристик), форма подбора отображает все элементы без фильтрации по владельцу.

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

Вариант 1. Настройка связи параметров выбора в СКД (Рекомендуемый)

Рассмотрим наиболее изящный способ, который позволяет ограничить выбор прямо в схеме компоновки данных с минимальным использованием кода.

Шаг 1. Создадим в схеме компоновки данных новый параметр, например ПВХ_Свойство, с типом ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения.

Шаг 2. В модуле объекта отчета (в событии ПриКомпоновкеРезультата или в процедуре инициализации) установим значение этого параметра, найдя нужное дополнительное сведение:


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

Шаг 3. Зайдем в настройки поля (или параметра отбора) на вкладке «Наборы данных» или «Поля» схемы СКД. В свойствах поля найдем коллекцию Параметры редактирования и откроем элемент Связи параметров выбора.

Шаг 4. Добавим новую связь:

  1. В поле Имя объекта перечисления указываем: Отбор.Владелец.
  2. В поле Выражение указываем созданный параметр: ПараметрыДанных.ПВХ_Свойство.

После этого переинициализируем компоновщик настроек отчета, чтобы изменения вступили в силу:


ИсточникНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных);
КомпоновщикНастроек.Инициализировать(ИсточникНастроек);

В результате при вызове формы подбора платформа автоматически передаст отбор Отбор.Владелец, и пользователь увидит только те значения, которые относятся к заданному дополнительному сведению.

Вариант 2. Программное заполнение коллекции «ДоступныеЗначения»

Посмотрим на случай, когда список разрешенных значений требуется сформировать динамически (например, выгрузить все доп. сведения, привязанные к набору свойств конкретного документа).

Выясним, как программно прочитать нужные данные и заполнить ими доступные значения отбора СКД:


Запрос = Новый Запрос;
Запрос.Текст = 
"ВЫБРАТЬ
|	ЗначенияСвойствОбъектов.Ссылка КАК Значение
|ИЗ
|	Справочник.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
|ГДЕ
|	ЗначенияСвойствОбъектов.Владелец.НаборСвойств = &НаборСвойств";

Запрос.УстановитьПараметр("НаборСвойств", 
	Справочники.НаборыДополнительныхРеквизитовИСведений.НайтиПоНаименованию("Документ Реализация товаров и услуг"));

ТаблицаЗначений = Запрос.Выполнить().Выгрузить();
МассивЗначений = ТаблицаЗначений.ВыгрузитьКолонку("Значение");

// Находим нужное поле в доступных полях отбора
ЭлементОтбора = КомпоновщикНастроек.Настройки.Отбор.ДоступныеПоляОтбора.Элементы.Найти("НашеСведение");

Если ЭлементОтбора <> Неопределено Тогда
	ЭлементОтбора.ДоступныеЗначения.ЗагрузитьЗначения(МассивЗначений);
КонецЕсли;

Важное примечание: Чтобы поле ДоступныеЗначения имело тип СписокЗначений и корректно принимало загружаемый массив, в конфигураторе на вкладке «Параметры» или в настройках поля схемы СКД предварительно необходимо указать хотя бы одно пустое значение в таблице доступных значений.

Вариант 3. Использование механизма «Характеристики» в СКД

В типовых конфигурациях 1С (БП, ERP, КА, УТ) механизм дополнительных реквизитов и сведений штатно встроен через характеристики СКД. Этот подход позволяет не связывать данные через левые соединения вручную в тексте запроса, а доверить это самой платформе.

Разберем порядок настройки характеристик:

  1. Откроем конструктор Схемы компоновки данных на вкладке Данные -> Характеристики.
  2. Добавим новую строку характеристик для вида данных ДокументСсылка.РеализацияТоваровУслуг.
  3. В качестве таблицы видов характеристик укажем ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.
  4. В качестве таблицы значений характеристик укажем регистр сведений ДополнительныеСведения (где поле объекта — Объект, поле вида — Свойство, поле значения — Значение).

При использовании штатного механизма характеристик платформа 1С автоматически контролирует типы данных, владельцев и формирует корректные формы выбора в режиме «1С:Предприятие» без написания дополнительных программных обвязок.

← На главную