Пример будем приводить на конфигурации "Управление производственным предприятием" версии 1.3. В информационной базе для всех элементов справочника "Организации" добавлены свойства "Основной склад", "Связанный контрагент" и "Страна размещения". Нам нужно создать отчет в системе компоновки данных (СКД), в котором мы сможем накладывать отбор по дополнительным характеристиками организаций.
При этом мы будем использовать стандартный функционал СКД для работы с характеристиками объектов. Также рассмотрим особенность разработки подобных отчетов, а именно - отсутствие возможности использовать дополнительные характеристики в конструкторе схемы компоновки данных в режиме "Конфигуратор". Последнее не позволяет использовать поля характеристик в настройке выводимых полей в отчете, отборах, группировка в структуре отчета и так далее.
Создадим простой отчет. В нем будет один набор данных со следующим запросом:
ТекстЗапроса = "ВЫБРАТЬ | Организации.Ссылка КАК Организация, | Организации.ИНН, | Организации.КПП |ИЗ Справочник.Организации КАК Организации";
Структура отчета будет иметь вывод только по детальным записям со всеми полями, выбираемыми в запросе. В конструкторе настройка структуры отчета будет выглядит следующим образом:
На скриншоте ниже представлен вывод отчета с текущими настройками.
Отлично. Теперь перейдем к настройке характеристик, но перед этим напомню в общих чертах работу механизма характеристик в большинстве типовых конфигураций, в том числе и УПП. Для этого используются несколько объектов конфигурации.
Опишем схему подробнее. В регистре сведений "ЗначенияСвойствОбъектов" в измерении "Объект" содержится ссылка на элемент информационной базы, для которого сохраняется свойство. В нашем примере это ссылка на элемент справочника "Организации". Все возможные свойства объекта определяются в плане видов характеристик (ПВХ) "СвойстваОбъектов". Значение характеристики, сохраняемое в регистре сведений, зависиот от доступных типов данных для элемента плана видов характеристик, записанного в измерение "Свойство". Это описание должно дать лишь общее представление о механизме доп. свойств. На практике он сложнее.
Теперь перейдем к настройке характеристик в схеме компоновки данных. Для этого запустим конструктор запроса и перейдем на вкладку "Характеристики". Здесь нужно добавить поле связи объекта информационной базы с таблицами свойств и значений свойств. Ранее мы рассматривали схему связи между объектами конфигурации для хранения доп. свойств/характеристик. В соответствии с этой информацией настройка будет следюущей:
После этого запрос набора данных дополнится инструкциями получения характеристик объектов.
"ВЫБРАТЬ | Организации.Ссылка КАК Организация, | Организации.ИНН, | Организации.КПП |ИЗ | Справочник.Организации КАК Организации | // Доп. инструкции для получения характеристик |{ХАРАКТЕРИСТИКИ | ТИП(Справочник.Организации) | ВИДЫХАРАКТЕРИСТИК ПланВидовХарактеристик.СвойстваОбъектов | ПОЛЕКЛЮЧА Ссылка | ПОЛЕИМЕНИ Наименование | ПОЛЕТИПАЗНАЧЕНИЯ ТипЗначения | ЗНАЧЕНИЯХАРАКТЕРИСТИК РегистрСведений.ЗначенияСвойствОбъектов | ПОЛЕОБЪЕКТА Объект | ПОЛЕВИДА Свойство | ПОЛЕЗНАЧЕНИЯ Значение }"
На этом все. Функционал отчета теперь позволяет выбрать поля дополнительных характеристик в отчете (поля вывода, отборы и т.д.). Но есть одно НО. Использовать эти поля в настройках отчета мы можем только в режиме 1С:Предприятия. В конфигураторе мы не можем увидеть поля характеристик, что логично, ведь характеристики вводятся пользователем и хранятся в информационной базе.
Но если есть необходимость, мы можем добавить поля характеристик, например, в отбор перед его открытием. Рассмотрим небольшой пример.
При открытии формы отчета выполним следующим программный код:
ТекущиеНастройки = КомпоновщикНастроек.Настройки; КоллекцияОтборов = ТекущиеНастройки.Отбор.Элементы; // Добавляем отбор по доп. реквизиту номенклатуры "Основной склад" НовЭл = КоллекцияОтборов.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); НовЭл.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; НовЭл.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Организация.[Основной склад]"); НовЭл.Использование = Ложь; // Добавляем отбор по доп. реквизиту номенклатуры "Страна размещения" НовЭл = КоллекцияОтборов.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); НовЭл.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; НовЭл.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Организация.[Страна размещения]"); НовЭл.Использование = Ложь; // Добавляем отбор по доп. реквизиту номенклатуры "Связанный контрагент" НовЭл = КоллекцияОтборов.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); НовЭл.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; НовЭл.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Организация.[Связанный контрагент]"); НовЭл.Использование = Ложь;
Тогда если мы посмотрим в отбор отчета в режиме 1С:Предприятие, то увидим следующиую картину:
Таким образом, мы программно добавили отбор по дополнительным характеристикам справочника "Организации", не смотря на то, что в конструкторе СКД эти поля не были доступны. Обратите внимание на синтаксис определения поля компоновки данных.
Новый ПолеКомпоновкиДанных("Организация.[Связанный контрагент]"),
а именно на текст "[Связанный контрагент]". Если мы напишем вот так:
Новый ПолеКомпоновкиДанных("Организация.СвязанныйКонтрагент"),
то при запуске отчета СКД неправильно определит поля компоновки. В настройках поля отбора будут выделены как некорректные:
Для дополнительных свойст и реквизитов, которые не доступны в конструкторе СКД, при программном обращении необходимо использовать следующий синтаксис:
Новый ПолеКомпоновкиДанных(".[]")
Таким образом, мы можем устанавливать настройки отчета, даже если поля недоступны в конструкторе СКД.
Использование настройки характеристик в СКД позволяет значительно упростить разработку сложных отчетов. Несмотря на некоторые недостатки в работе, такие как отсутствие возможности настройки отбора по доп. свойствам в конструкторе и т.д., механизм характеристик можно считать значительным шагом в упрощении разработки отчетов в системе 1С:Предприятие.
В статье мы рассмотрели далеко не все возможности характеристик в СКД. За рамками статьи остались такие возможности как: произвольное определение источников данных, как для свойств, так и для значений характеристик, а также отбор по владельцу для всех доступных характеристик в информационной базе и многое другое. Тема большая, есть куда расширять круг своих знания.