Обновлено: 15.11.2007
Система компоновки данных позволяет работать с характеристиками - дополнительными свойствами объектов, определяемыми вне конфигурации. В данной статье описываются особенности работы с данным механизмом.
Характеристики в системе компоновки данных описываются в тексте запроса набора данных специальной инструкцией системы компоновки данных, начинающейся с ключевого слова ХАРАКТЕРИСТИКИ.
Пример запроса:
Копировать в буфер обменаВЫБРАТЬ
РасходнаяНакладнаяСостав.Ссылка КАК Документ,
РасходнаяНакладнаяСостав.Номенклатура,
РасходнаяНакладнаяСостав.Количество,
РасходнаяНакладнаяСостав.Цена,
РасходнаяНакладнаяСостав.Сумма,
РасходнаяНакладнаяСостав.НомерСтроки
ИЗ
Документ.РасходнаяНакладная.Состав КАК РасходнаяНакладнаяСостав
{ХАРАКТЕРИСТИКИ
ТИП(Справочник.Номенклатура)
СПИСОК ПланВидовХарактеристик.ВидыДопСвойств
ИДЕНТИФИКАТОР Ссылка
ИМЯ Наименование
ТИПЗНАЧЕНИЯ ТипЗначения
ЗНАЧЕНИЯ РегистрСведений.ДопСвойства
ОБЪЕКТ Номенклатура
ХАРАКТЕРИСТИКА ВидСвойства
ЗНАЧЕНИЕ Свойство }
В данном примере описываются характеристики для полей типа Справочник.Номенклатура.
В описании характеристики указывается:
Характеристики описываются для определенного типа. Например, можно описать характеристики для типа Справочник.Номенклатура, при этом система автоматически будет использовать эти характеристики для всех полей запроса, которые имеют тип Справочник.Номенклатура, включая и реквизиты полей.
Возможно описание характеристики для составного типа. При этом характеристики будут применяться ко всем полям, в типе значений которых есть хотя бы один из типов, для которых описаны характеристики.
В предложении ХАРАКТЕРИСТИКИ тип указывается в скобках после ключевого слова ТИП. Синтаксис описания типа такой же, как в описании типа конструкции ВЫРАЗИТЬ языка запроса. Типы, входящие в составной тип перечисляются через запятую.
Для того чтобы система компоновки данных выдала пользователю список полей - характеристик, необходимо описать, откуда получать список характеристик.
О каждой характеристике системе необходимо знать следующую информацию:
Описание списка характеристик используется на этапе редактирования настроек, для получения списка характеристик для создания полей - реквизитов. Для каждой характеристики из списка будет создан новый реквизит для поля определенного типа.
Рассмотрим пример. Будем описывать характеристики для поля типа Справочник.Номенклатура.
Допустим, в нашей конфигурации есть план видов характеристик ВидыДопСвойств, содержащий следующие записи:
Ссылка | ПометкаУдаления | Предопределенный | Код | Наименование | ТипЗначения | |
---|---|---|---|---|---|---|
Масса | ложь | ложь | 000000001 | Масса | Число | |
Ширина | ложь | ложь | 000000003 | Ширина | Число | |
Высота | ложь | ложь | 000000004 | Высота | Число |
В качестве идентификатора характеристики будем использовать поле Ссылка. В качестве имени характеристик - Наименование. А в качестве типа значения - поле ТипЗначения.
Таким образом, система получит следующий список характеристик:
Идентификатор | Имя | ТипЗначения | |
---|---|---|---|
Масса | Масса | Число | |
Ширина | Ширина | Число | |
Высота | Высота | Число |
Пусть в отчете имеется поле Номенклатура, типа Справочник.Номенклатура. На основе списка характеристик система автоматически создаст для этого поля три поля: Масса, Ширина, Высота. Тип всех полей будет Число.
Как видно, данные поля отображаются в списке реквизитов поля Номенклатура и ничем не отличаются от обычных реквизитов.
Результат отчета, в который выводятся поля - характеристики, может выглядеть так:
Номенклатура | Код | Масса |
---|---|---|
Лазерный принтер 5250197-203 Minolta-QMS | 0000031 | 5 800 |
Лазерный принтер Canon LBP-810 | 0000030 | 4 300 |
Лазерный принтер HP LaserJet 2200 | 0000032 |
В данном примере в отчет выводится характеристика Масса.
При описании списка характеристик можно указать, из какой таблицы информационной базы получать характеристики, либо указать запрос, результат исполнения которого будет использоваться для построения списка характеристик. В приведенном выше примере список характеристик можно напрямую получать из плана видов характеристик, т.к. данный план видов характеристик содержит только характеристики для номенклатуры. Однако, если бы в таблице содержались характеристики и для других справочников, то следовало бы воспользоваться запросом, в котором получать только характеристики номенклатуры.
Список характеристик описывается при помощи ключевых слов СПИСОК, ИДЕНТИФИКАТОР, ИМЯ, ТИПЗНАЧЕНИЯ. После ключевого слова СПИСОК идет имя таблицы, из которой получается список характеристик, либо в скобках текст запроса, при помощи которого получается список характеристик. После ключевых слов ИДЕНТИФИКАТОР, ИМЯ, ТИПЗНАЧЕНИЯ указываются имена полей для получения идентификатора, имени и типа значений характеристики соответственно.
Пример:
Копировать в буфер обмена{ХАРАКТЕРИСТИКИ
ТИП(Справочник.Номенклатура)
СПИСОК ПланВидовХарактеристик.ВидыДопСвойств
ИДЕНТИФИКАТОР Ссылка
ИМЯ Наименование
ТИПЗНАЧЕНИЯ ТипЗначения
ЗНАЧЕНИЯ РегистрСведений.ДопСвойства
ОБЪЕКТ Номенклатура
ХАРАКТЕРИСТИКА ВидСвойства
ЗНАЧЕНИЕ Свойство }
В данном примере список характеристик получается из таблицы ПланВидовХарактеристик.ВидыДопСвойств. В качестве идентификатора характеристики используется поле Ссылка, в качестве имени характеристики используется поле Наименование, в качестве типа - поле ТипЗначения.
Пример с получением списка характеристик из запроса:
Копировать в буфер обмена{ХАРАКТЕРИСТИКИ
ТИП(Справочник.Номенклатура)
СПИСОК (ВЫБРАТЬ
ВидыДопСвойств.Ссылка,
ВидыДопСвойств.Наименование,
ВидыДопСвойств.ТипЗначения
ИЗ
ПланВидовХарактеристик.ВидыДопСвойств КАК ВидыДопСвойств
ГДЕ
ВидыДопСвойств.ПометкаУдаления = ЛОЖЬ)
ИДЕНТИФИКАТОР Ссылка
ИМЯ Наименование
ТИПЗНАЧЕНИЯ ТипЗначения
ЗНАЧЕНИЯ РегистрСведений.ДопСвойства
ОБЪЕКТ Номенклатура
ХАРАКТЕРИСТИКА ВидСвойства
ЗНАЧЕНИЕ Свойство }
В конструкторе запросов характеристики описываются на закладке Характеристики.
На данном рисунке описаны характеристики для типа Справочник.Номенклатура. Список характеристик получается из таблицы ПланВидовХарактеристик.ВидыДопСвойств, в качестве идентификатора характеристики используется поле Ссылка, в качестве имени характеристики используется поле Наименование, в качестве типа - поле ТипЗначения.
При необходимости получения списка характеристик при помощи запроса, в конструкторе следует указать в качестве источника Запрос и создать запрос.
На данном рисунке список характеристик получается при помощи запроса, в котором получаются только записи, у которых не установлена пометка удаления. Указание полей происходит также как и в случае с таблицей, только используются не поля таблицы, а поля запроса.
При выполнении отчета системе компоновки необходимо получать значения выбранных пользователем характеристик.
Для получения характеристик системе необходима следующая информация:
Рассмотрим пример. Пусть значения характеристик хранятся в регистре сведений ДопСвойства, который содержит следующие данные:
Номенклатура | ВидСвойства | Свойство |
---|---|---|
Лазерный принтер 5250197-203 Minolta-QMS | Ширина | 630 |
Лазерный принтер 5250197-203 Minolta-QMS | Высота | 320 |
Лазерный принтер 5250197-203 Minolta-QMS | Масса | 5 800 |
Лазерный принтер Canon LBP-810 | Масса | 4 300 |
Лазерный принтер Canon LBP-810 | Ширина | 470 |
Лазерный принтер Canon LBP-810 | Высота | 310 |
Идентификатором характеристики в данной таблице является поле ВидСвойства. Объектом - поле Номенклатура. А значение находится в поле Свойство. В запросе описание получения значений характеристик будет выглядеть так:
Копировать в буфер обмена{ХАРАКТЕРИСТИКИ
ТИП(Справочник.Номенклатура)
СПИСОК ПланВидовХарактеристик.ВидыДопСвойств
ИДЕНТИФИКАТОР Ссылка
ИМЯ Наименование
ТИПЗНАЧЕНИЯ ТипЗначения
ЗНАЧЕНИЯ РегистрСведений.ДопСвойства
ОБЪЕКТ Номенклатура
ХАРАКТЕРИСТИКА ВидСвойства
ЗНАЧЕНИЕ Свойство }
После ключевого слова ЗНАЧЕНИЯ указывается имя таблицы, из которой будут получаться значения характеристики, или, в скобках, текст запроса, при помощи которого будут получаться значения. После ключевого слова ОБЪЕКТ указывается имя поля, в котором содержится объект. После слова ХАРАКТЕРИСТИКА указывается поле - идентификатор характеристики, а поле ЗНАЧЕНИЕ - имя поля, из которого будут получаться значения характеристики.
При генерации макета компоновки данных компоновщик макета, для используемых в настройках полей - характеристик, создаст в результирующем запросе соединения с таблицей значений характеристик.
Пример. Пусть исходный запрос набора данных схемы компоновки данных содержал следующий запрос:
Копировать в буфер обменаВЫБРАТЬ
РасходнаяНакладнаяСостав.Ссылка КАК Документ,
РасходнаяНакладнаяСостав.Номенклатура,
РасходнаяНакладнаяСостав.Количество,
РасходнаяНакладнаяСостав.Цена,
РасходнаяНакладнаяСостав.Сумма,
РасходнаяНакладнаяСостав.НомерСтроки
ИЗ
Документ.РасходнаяНакладная.Состав КАК РасходнаяНакладнаяСостав
{ХАРАКТЕРИСТИКИ
ТИП(Справочник.Номенклатура)
СПИСОК ПланВидовХарактеристик.ВидыДопСвойств
ИДЕНТИФИКАТОР Ссылка
ИМЯ Наименование
ТИПЗНАЧЕНИЯ ТипЗначения
ЗНАЧЕНИЯ РегистрСведений.ДопСвойства
ОБЪЕКТ Номенклатура
ХАРАКТЕРИСТИКА ВидСвойства
ЗНАЧЕНИЕ Свойство }
Пользователь указал, что в отчет нужно выводить поля Номенклатура, Номенклатура.Масса и Номенклатура.Высота.
Запрос, который сгенерирует компоновщик макета компоновки данных, будет выглядеть следующим образом:
Копировать в буфер обменаВЫБРАТЬ
РасходнаяНакладнаяСостав.Номенклатура КАК Номенклатура,
ПРЕДСТАВЛЕНИЕССЫЛКИ(РасходнаяНакладнаяСостав.Номенклатура) КАК НоменклатураПредставление,
ДопСвойства.Свойство КАК Свойство,
ДопСвойства1.Свойство КАК Свойство1
ИЗ
Документ.РасходнаяНакладная.Состав КАК РасходнаяНакладнаяСостав
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДопСвойства КАК ДопСвойства
ПО (ДопСвойства.Номенклатура = РасходнаяНакладнаяСостав.Номенклатура
И ДопСвойства.ВидСвойства = &П)
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДопСвойства КАК ДопСвойства1
ПО (ДопСвойства1.Номенклатура = РасходнаяНакладнаяСостав.Номенклатура
И ДопСвойства1.ВидСвойства = &П2)
Значения параметров: П = Масса, П2 = Высота
Видно, что в результирующий запрос, для каждой использованной характеристики, было добавлено соединение с таблицей, из которой получается значения характеристик. При этом, поле, описанное как идентификатор объекта (ДопСвойства.Номенклатура) связано с полем, для которого получаются значения характеристик (РасходнаяНакладнаяСостав.Номенклатура). Значение же поля - идентификатора характеристики (ДопСвойства.ВидСвойства) фильтруется по идентификатору характеристики, полученному из списка характеристик (Масса, Высота). В качестве значения характеристики, выдаваемого в результат запроса, используется поле, описанное как значение свойства: ДопСвойства.Свойство.
При помощи механизма характеристик системы компоновки данных можно описывать и категории - характеристики, не имеющие значений, а имеющие лишь признак наличия/отсутствия.
Рассмотрим пример.
Допустим, список категорий хранится в справочнике Категории, содержащей следующие записи:
Ссылка | ПометкаУдаления | Предопределенный | Код | Наименование | |
---|---|---|---|---|---|
Импортные | ложь | ложь | 000000001 | Импортные | |
Бухгалтерия | ложь | ложь | 000000002 | Бухгалтерия |
В регистре сведений КатегорииНоменклатуры содержатся установленные категории номенклатуры:
Номенклатура | Категория | |
---|---|---|
Принтер HP DeskJet 1500 | Импортные | |
1С:Бухгалтерия 7.7 Базовая версия | Бухгалтерия | |
1С:Бухгалтерия 7.7 Стандартная версия | Бухгалтерия | |
1С:Бухгалтерия ПРОФ версия 7.7 | Бухгалтерия |
Тогда описание характеристик может выглядеть так:
Копировать в буфер обмена{ХАРАКТЕРИСТИКИ
ТИП(Справочник.Номенклатура)
СПИСОК Справочник.Категории
ИДЕНТИФИКАТОР Ссылка
ИМЯ Наименование
ЗНАЧЕНИЯ РегистрСведений.КатегорииНоменклатуры
ОБЪЕКТ Номенклатура
ХАРАКТЕРИСТИКА Категория }
Как видно, в описании характеристик не указано поле ТипЗначения, а в таком случае, считается, что характеристика имеет логический тип. Кроме того, не указано поле, из которого будет получаться значение характеристики. В таком случае считается, что значение характеристики Истина в случае, если характеристика для объекта присутствует в таблице значений характеристик и Ложь в противном случае.
При таких условиях в полях - реквизитах поля Номенклатура появятся дополнительные поля:
Если пользователь укажет, что поле Номенклатура.Бухгалтерия необходимо выводить в результат, то запрос в макете компоновки данных будет выглядеть следующим образом:
Копировать в буфер обменаВЫБРАТЬ
РасходнаяНакладнаяСостав.Номенклатура КАК Номенклатура,
ПРЕДСТАВЛЕНИЕССЫЛКИ(РасходнаяНакладнаяСостав.Номенклатура) КАК НоменклатураПредставление,
ВЫБОР
КОГДА КатегорииНоменклатуры.Номенклатура ЕСТЬ НЕ NULL
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ КАК Поле1
ИЗ
Документ.РасходнаяНакладная.Состав КАК РасходнаяНакладнаяСостав
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КатегорииНоменклатуры КАК КатегорииНоменклатуры
ПО (КатегорииНоменклатуры.Номенклатура = РасходнаяНакладнаяСостав.Номенклатура
И КатегорииНоменклатуры.Категория = &П)
Как видно, запрос аналогичен запросу, формируемому для обычных характеристик. Исключение составляет получение значения характеристики. В данном случае это следующая конструкция:
Копировать в буфер обменаВЫБОР
КОГДА КатегорииНоменклатуры.Номенклатура ЕСТЬ НЕ NULL
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
Как видно, результатом данного выражения будет Истина, в случае если связь выполнилась, т.е. категория установлена, и Ложь в противном случае.