Версия для печати темы (https://pro1c.org.ua/index.php?s=aae6f480976c558226f20ff00c27c131&showtopic=27207)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Система компоновки данных _ Особенность использования механизма характеристик в СКД

Автор: Vofka 27.12.15, 16:44

Что у нас есть?

Пример будем приводить на конфигурации "Управление производственным предприятием" версии 1.3. В информационной базе для всех элементов справочника "Организации" добавлены свойства "Основной склад", "Связанный контрагент" и "Страна размещения". Нам нужно создать отчет в системе компоновки данных (СКД), в котором мы сможем накладывать отбор по дополнительным характеристиками организаций.



При этом мы будем использовать стандартный функционал СКД для работы с характеристиками объектов. Также рассмотрим особенность разработки подобных отчетов, а именно - отсутствие возможности использовать дополнительные характеристики в конструкторе схемы компоновки данных в режиме "Конфигуратор". Последнее не позволяет использовать поля характеристик в настройке выводимых полей в отчете, отборах, группировка в структуре отчета и так далее.

Создаем отчет и настраиваем характеристики

Создадим простой отчет. В нем будет один набор данных со следующим запросом:

ТекстЗапроса = 
"ВЫБРАТЬ
|    Организации.Ссылка КАК Организация,
|    Организации.ИНН,
|    Организации.КПП
|ИЗ    Справочник.Организации КАК Организации";


Структура отчета будет иметь вывод только по детальным записям со всеми полями, выбираемыми в запросе. В конструкторе настройка структуры отчета будет выглядит следующим образом:



На скриншоте ниже представлен вывод отчета с текущими настройками.



Отлично. Теперь перейдем к настройке характеристик, но перед этим напомню в общих чертах работу механизма характеристик в большинстве типовых конфигураций, в том числе и УПП. Для этого используются несколько объектов конфигурации.

Графически связь между объектом информационной базы и его характеристиками можно изобразить по такой схеме



Опишем схему подробнее. В регистре сведений "ЗначенияСвойствОбъектов" в измерении "Объект" содержится ссылка на элемент информационной базы, для которого сохраняется свойство. В нашем примере это ссылка на элемент справочника "Организации". Все возможные свойства объекта определяются в плане видов характеристик (ПВХ) "СвойстваОбъектов". Значение характеристики, сохраняемое в регистре сведений, зависи от доступных типов данных для элемента плана видов характеристик, записанного в измерение "Свойство". Это описание должно дать лишь общее представление о механизме доп. свойств. На практике он сложнее.

Теперь перейдем к настройке характеристик в схеме компоновки данных. Для этого запустим конструктор запроса и перейдем на вкладку "Характеристики". Здесь нужно добавить поле связи объекта информационной базы с таблицами свойств и значений свойств. Ранее мы рассматривали схему связи между объектами конфигурации для хранения доп. свойств/характеристик. В соответствии с этой информацией настройка будет следюущей:



После этого запрос набора данных дополнится инструкциями получения характеристик объектов.

"ВЫБРАТЬ
|    Организации.Ссылка КАК Организация,
|    Организации.ИНН,
|    Организации.КПП
|ИЗ
|    Справочник.Организации КАК Организации
| // Доп. инструкции для получения характеристик
|{ХАРАКТЕРИСТИКИ
|    ТИП(Справочник.Организации)
|    ВИДЫХАРАКТЕРИСТИК ПланВидовХарактеристик.СвойстваОбъектов
|    ПОЛЕКЛЮЧА Ссылка
|    ПОЛЕИМЕНИ Наименование
|    ПОЛЕТИПАЗНАЧЕНИЯ ТипЗначения
|    ЗНАЧЕНИЯХАРАКТЕРИСТИК РегистрСведений.ЗначенияСвойствОбъектов
|    ПОЛЕОБЪЕКТА Объект
|    ПОЛЕВИДА Свойство
|    ПОЛЕЗНАЧЕНИЯ Значение }"


На этом все. Функционал отчета теперь позволяет выбрать поля дополнительных характеристик в отчете (поля вывода, отборы и т.д.). Но есть одно НО. Использовать эти поля в настройках отчета мы можем только в режиме 1С:Предприятия. В конфигураторе мы не можем увидеть поля характеристик, что логично, ведь характеристики вводятся пользователем и хранятся в информационной базе.

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

Программная работа с характеристиками

При открытии формы отчета выполним следующим программный код:

    ТекущиеНастройки = КомпоновщикНастроек.Настройки;
    КоллекцияОтборов = ТекущиеНастройки.Отбор.Элементы;

    // Добавляем отбор по доп. реквизиту номенклатуры "Основной склад"
    НовЭл = КоллекцияОтборов.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    НовЭл.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
    НовЭл.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Организация.[Основной склад]");
    НовЭл.Использование = Ложь;
    
    // Добавляем отбор по доп. реквизиту номенклатуры "Страна размещения"
    НовЭл = КоллекцияОтборов.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    НовЭл.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
    НовЭл.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Организация.[Страна размещения]");
    НовЭл.Использование = Ложь;
    
    // Добавляем отбор по доп. реквизиту номенклатуры "Связанный контрагент"
    НовЭл = КоллекцияОтборов.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    НовЭл.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
    НовЭл.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Организация.[Связанный контрагент]");
    НовЭл.Использование = Ложь;


Тогда если мы посмотрим в отбор отчета в режиме 1С:Предприятие, то увидим следующиую картину:



Таким образом, мы программно добавили отбор по дополнительным характеристикам справочника "Организации", не смотря на то, что в конструкторе СКД эти поля не были доступны. Обратите внимание на синтаксис определения поля компоновки данных.

Новый ПолеКомпоновкиДанных("Организация.[Связанный контрагент]")


а именно на текст "[Связанный контрагент]". Если мы напишем вот так:

Новый ПолеКомпоновкиДанных("Организация.СвязанныйКонтрагент")


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



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

Новый ПолеКомпоновкиДанных(".[]")


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

Вывод

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

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

http://pro1c.org.ua/redirect.php?https://docs.google.com/file/d/0BwSAIrD9mKPpTmxtWi1aTjlsRTA/edit?usp=sharing

http://pro1c.org.ua/redirect.php?http://1clancer.ru/article/osobennost_ispolzovaniya_mekhanizma_kharakteristik_v_skd_821

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua