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