Использование характеристик в системе компоновки данных
Система компоновки данных позволяет работать с характеристиками — дополнительными свойствами объектов, определяемыми вне конфигурации. В данной статье описываются особенности работы с данным механизмом.
Описание характеристик
Характеристики в системе компоновки данных описываются в тексте запроса набора данных специальной инструкцией системы компоновки данных, начинающейся с ключевого слова ХАРАКТЕРИСТИКИ .
В данном примере описываются характеристики для полей типа Справочник.Номенклатура .
В описании характеристики указывается:
- Тип, для которого определяются характеристики
- Описание списка характеристик
- Описание значений характеристик
Тип, для которого определяются характеристики
Характеристики описываются для определенного типа. Например, можно описать характеристики для типа Справочник.Номенклатура , при этом система автоматически будет использовать эти характеристики для всех полей запроса, которые имеют тип Справочник.Номенклатура , включая и реквизиты полей.
Возможно описание характеристики для составного типа. При этом характеристики будут применяться ко всем полям, в типе значений которых есть хотя бы один из типов, для которых описаны характеристики.
В предложении ХАРАКТЕРИСТИКИ тип указывается в скобках после ключевого слова ТИП . Синтаксис описания типа такой же, как в описании типа конструкции ВЫРАЗИТЬ языка запроса. Типы, входящие в составной тип перечисляются через запятую.
Описание списка характеристик
Для того чтобы система компоновки данных выдала пользователю список полей — характеристик, необходимо описать, откуда получать список характеристик.
О каждой характеристике системе необходимо знать следующую информацию:
- Идентификатор — внутренний идентификатор характеристики — по данному свойству характеристика будет находиться в списке значений характеристик. Идентификатор может иметь любой тип, для которого может использоваться сравнение в языке запросов.
- Имя характеристики — имя, под которым пользователь вводил характеристику. Например, масса, длина, рост и т.п. Значение этого свойства будет использоваться в качестве имени поля, создаваемого для характеристики.
- Тип значения характеристики — значения какого типа могут содержаться в характеристике. Данная информация используется, в отборе для фильтрации по полю — характеристике. Может иметь тип ОписаниеТипов , либо произвольное значение. В случае если тип значения содержит описание типов, то данное описание типов будет использовано как тип значения характеристики. Если тип значения содержит произвольное значение, то типом характеристики будет тип данного значения. Например, если в качестве типа значения используется числовое значение, то типом характеристики будет Число . Если тип значения характеристики не указан, то типом будет считаться тип Булево .
Описание списка характеристик используется на этапе редактирования настроек, для получения списка характеристик для создания полей — реквизитов. Для каждой характеристики из списка будет создан новый реквизит для поля определенного типа.
Рассмотрим пример. Будем описывать характеристики для поля типа Справочник.Номенклатура .
Допустим, в нашей конфигурации есть план видов характеристик ВидыДопСвойств , содержащий следующие записи:
Ссылка | ПометкаУдаления | Предопределенный | Код | Наименование | ТипЗначения | |
---|---|---|---|---|---|---|
Масса | ложь | ложь | 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 |
Идентификатором характеристики в данной таблице является поле ВидСвойства . Объектом — поле Номенклатура . А значение находится в поле Свойство . В запросе описание получения значений характеристик будет выглядеть так:
После ключевого слова ЗНАЧЕНИЯ указывается имя таблицы, из которой будут получаться значения характеристики, или, в скобках, текст запроса, при помощи которого будут получаться значения. После ключевого слова ОБЪЕКТ указывается имя поля, в котором содержится объект. После слова ХАРАКТЕРИСТИКА указывается поле — идентификатор характеристики, а поле ЗНАЧЕНИЕ — имя поля, из которого будут получаться значения характеристики.
При генерации макета компоновки данных компоновщик макета, для используемых в настройках полей — характеристик, создаст в результирующем запросе соединения с таблицей значений характеристик.
Пример. Пусть исходный запрос набора данных схемы компоновки данных содержал следующий запрос:
Пользователь указал, что в отчет нужно выводить поля Номенклатура , Номенклатура.Масса и Номенклатура.Высота .
Запрос, который сгенерирует компоновщик макета компоновки данных, будет выглядеть следующим образом:
Значения параметров: П = Масса, П2 = Высота
Видно, что в результирующий запрос, для каждой использованной характеристики, было добавлено соединение с таблицей, из которой получается значения характеристик. При этом, поле, описанное как идентификатор объекта ( ДопСвойства.Номенклатура ) связано с полем, для которого получаются значения характеристик ( РасходнаяНакладнаяСостав.Номенклатура ). Значение же поля — идентификатора характеристики ( ДопСвойства.ВидСвойства ) фильтруется по идентификатору характеристики, полученному из списка характеристик ( Масса, Высота ). В качестве значения характеристики, выдаваемого в результат запроса, используется поле, описанное как значение свойства: ДопСвойства.Свойство .
Использование категорий
При помощи механизма характеристик системы компоновки данных можно описывать и категории — характеристики, не имеющие значений, а имеющие лишь признак наличия/отсутствия.
Допустим, список категорий хранится в справочнике Категории , содержащей следующие записи:
Ссылка | ПометкаУдаления | Предопределенный | Код | Наименование | |
---|---|---|---|---|---|
Импортные | ложь | ложь | 000000001 | Импортные | |
Бухгалтерия | ложь | ложь | 000000002 | Бухгалтерия |
В регистре сведений КатегорииНоменклатуры содержатся установленные категории номенклатуры:
Номенклатура | Категория | |
---|---|---|
Принтер HP DeskJet 1500 | Импортные | |
1С:Бухгалтерия 7.7 Базовая версия | Бухгалтерия | |
1С:Бухгалтерия 7.7 Стандартная версия | Бухгалтерия | |
1С:Бухгалтерия ПРОФ версия 7.7 | Бухгалтерия |
Тогда описание характеристик может выглядеть так:
Как видно, в описании характеристик не указано поле ТипЗначения , а в таком случае, считается, что характеристика имеет логический тип. Кроме того, не указано поле, из которого будет получаться значение характеристики. В таком случае считается, что значение характеристики Истина в случае, если характеристика для объекта присутствует в таблице значений характеристик и Ложь в противном случае.
При таких условиях в полях — реквизитах поля Номенклатура появятся дополнительные поля:
Если пользователь укажет, что поле Номенклатура.Бухгалтерия необходимо выводить в результат, то запрос в макете компоновки данных будет выглядеть следующим образом:
Как видно, запрос аналогичен запросу, формируемому для обычных характеристик. Исключение составляет получение значения характеристики. В данном случае это следующая конструкция:
Как видно, результатом данного выражения будет Истина , в случае если связь выполнилась, т.е. категория установлена, и Ложь в противном случае.
Использование характеристик в СКД
В конструкторе запросов, когда он вызывается из формы настройки источника данных, для схемы компоновки данных. Есть закладка «Характеристики», использование которой не вполне ясно описано в документации. В этой статье я постараюсь объяснить, как и для чего используются характеристики в СКД.
В типовых конфигурациях активно используется механизм свойств и значений свойств доступный практически для любых объектов. Примитивно, на справочниках, этот механизм реализовывался еще в конфигурациях 7.7. Сейчас этот механизм реализован с использованием плана видов характеристик и регистра сведений, но идея осталась прежней.
Когда я впервые столкнулся с необходимостью использования этого механизма, в схеме СКД, я очень долго мучился, организовывал вложенные запросы, присоединял к основной выборке и ломал голову над тем, как учесть возможность появления новых видов свойств, которых нет на момент разработки отчета. Весь механизм свойств, будучи простым и логичным с точки зрения пользователя, не поддавался никакой нормальной обработке, пока я не разобрался с закладкой «Характеристики».
Таблица на закладке очень капризная, либо вы введете всю строку корректно, либо откажетесь от ввода строки совсем, оставить «на потом» не до конца заполненную строку система не даст.
Итак, перейдем к конкретике. Первая колонка: Тип — здесь выбираем тип объекта, к которому привяжутся характеристики, например СправочникСсылка.Номенклатура . Это означает, что теперь для всех объектов указанного типа можно будет получить значения свойств.
Далее в следующей колонке Источник видов мы должны задать параметры источника видов свойств. Возможны варианты таблица и запрос , зачем нужен вариант запрос расскажу позже, сейчас выберем пункт таблица .
В колонке Виды характеристик мы должны выбрать таблицу информационной базы, в которой хранятся нужные виды характеристик, в нашем примере это будет ПланВидовХарактеристик.СвойстваОбъектов .
Далее, значения доступные нам для выбора в колонках Поле ключа , Поле имени и Поле типа значения , непосредственно зависят от полей выбранной нами таблицы. В Поле ключа мы выбираем Ссылка , в Поле имени — Представление (именно его пользователь увидит в качестве имени реквизита), а в Поле типа соответственно ТипЗначения .
Теперь перейдем к источнику значений. Источником значений у нас будет регистр сведений ЗначенияСвойствОбъектов , поэтому мы выбираем в колонке Источник значений — таблица , а в колонке Значения характеристик — РегистрСведений.ЗначенияСвойствОбъектов . В колонках Объект , Свойство , Значение , выбираем соответствующие поля регистра Объект , Свойство , Значение .
Казалось бы, на этом все. Заходим в настройки схемы, добавляем группировку по товарам, и добавляем подчиненную ей группировку, допустим по брендам, есть у нас такое свойство. Разворачиваем список реквизитов группировки Номенклатура и … не видим там никаких свойств:
Дело в том, что мы находимся в конфигураторе, откуда нет доступа к данным. Как же сделать нужную настройку? Удобнее всего для этого использовать консоль компоновки данных, ту что на диске ИТС, или ту что входит в подсистему «Инструменты разработчика». Но можно и просто открыть настройку отчета в режиме предприятия.
Итак, откроем ту же настройку, но в режиме предприятия:
Как видите, у нас добавились новые Реквизиты , при этом свойство Бренд внешне не отличается от обычных реквизитов справочника. А свойство Вид товара взято в квадратные скобки, это связано с тем, что представление свойства содержит пробел.
Однако, у нас появилось и свойство Вид договора которое привязано к справочнику Договора и никакого отношения не имеет к Номенклатуре . Если не использовать в настройке Вид договор то все будет работать корректно, если же его выбрать, то в результате оно окажется не заполненным, потому что ни у одного элемента номенклатуры это свойство действительно не заполнено. Но как же отфильтровать лишние свойства, чтобы они не путались под ногами?
Для этого нам нужно изменить настройку источника видов, в конструкторе запроса, на закладке «Характеристики». Помните, я в начале статьи обещал рассказать, для чего нужен тип источника видов запрос ? Сейчас как раз такой случай. Меняем тип источника видов на запрос . В колонке виды характеристик нажимаем кнопочку […] и открывается новое окно конструктора запросов.
Вводим туда такой запрос:
В колонках Поле ключа , Поле имени и Поле типа значения , выберем соответствующие поля выборки: Ссылка , Наименование и ТипЗначения . Получится так:
Теперь, когда мы перейдем к настройке отчета, в списке реквизитов Номенклатуры картинка изменится:
Вот теперь у товара только те свойства, которые ему назначены, более того, они теперь заметно отличаются от обычных реквизитов, благодаря приписке (свойство), которую мы добавили к наименованию свойства в запросе.
На этом собственно и все, но многих может смутить невозможность настройки в конфигураторе. На самом деле ничего страшного нет. Достаточно сохранить настройку (или всю схему) в файл, а в конфигураторе восстановить.
Непонятные ему реквизиты конфигуратор отобразит красными крестами, как недоступные:
Но это уже не страшно, потому что отчет с такими настройками можно сохранить в конфигурации и он будет корректно работать при открытии пользователем.
СКД 1С программная установка параметров
Часто есть необходимость программно заполнять параметры отчета. Это можно сделать один раз в конфигураторе, но там можно установить только предопределенные типы данных. Например только предопределенные элементы справочника.
Параметры можно заполнить в режими предприятия, но пользователь может и не знать, что нужно заполнять да и это не нужная рутинная работа, ведь если можно автоматизировать, зачем делать руками?
Должно получиться вот так. В данном случае параметру Период присваивается ТекущаяДата().
В модуле отчета необходимо создать процедуру ПриКомпоновкеРезультата
Дополнительные реквизиты объектов с помощью плана видов характеристик
Достаточно часто возникает необходимость в добавлении объектам дополнительных реквизитов (характеристик). При этом каждый раз вносить для этого изменения в конфигурацию и проводить реструктуризацию базы данных не хочется.
В этой статье я расскажу о том, как реализовать такую возможность с помощью плана видов характеристик и регистра сведений и поделюсь парой приёмов использования этих реквизитов в отчётах и списках.
Изменения в конфигурации
Разработку конфигурации будем вести на базе платформе 1С: Предприятие 8.2 с установленным свойством “Основной режим запуска” – “Управляемое приложение”. В качестве основы для разработки подойдет любая демо-конфигурация. Добавим новый план видов характеристик “Виды характеристик”. На закладке “Основные” плана видов характеристик в поле “Тип значения характеристик” выберем необходимые типы.
В качестве одного из возможных типов значений характеристик выберем предварительно добавленный в конфигурацию справочник “Значения характеристик”, подчиненный плану видов характеристик “Виды характеристик”. Его же выберем в поле “Дополнительные значения характеристик”. Это позволит добавлять характеристики с произвольными ссылочными значениями (например, цвет или размер).
Создадим регистр сведений “Характеристики” с измерениями “Объект”, “Вид характеристики” и ресурсом “Значение”. Измерение “Объект” должно включать в себя все типы объектов для которых необходимо использовать дополнительные реквизиты. В нашем случае это будет справочник “Контрагенты”, В свойствах измерения “Объект” должны быть установлены флаги “Ведущее”, “Основной отбор” и “Запрет незаполненных”.
Это обеспечит связь объекта с записями регистра сведений. В форме элемента справочника “Контрагенты” переход к редактированию характеристик будет возможен с помощью соответствующего пункта меню “Перейти” в левой части формы.
Измерению “Вид характеристики” необходимо назначить тип “ПланВидовХарактеристикСсылка.ВидыХарактеристик”, а ресурсу “Значение” – “Характеристика.ВидыХарактеристик”.
Для обеспечения взаимосвязи значений ресурса “Значение” со значениями измерения “ВидХарактеристик” регистра “Характеристики” необходимо чтобы в свойстве “Связи параметров выбора” ресурса “Значение” было указано “Отбор.Владелец(ВидХарактеристики)”, а в свойстве “Связь по типу” – “ВидХарактеристики”
Теперь всё готово для того чтобы мы могли вводить в базу данных дополнительные реквизиты справочника “Контрагенты”.
Попробуем добавить дополнительный реквизит “Адрес”
Использование дополнительных реквизитов в отчётах и списках
После того как все необходимые изменения в конфигурации выполнены возникает вопрос о том как использовать дополнительные реквизиты для вывода и фильтрации данных в отчётах и списках.
Вариант №1
Начнём с использования характеристик в отчёте, разработанном с использованием системы компоновки данных. За основу возьмём отчёт “Ведомость взаиморасчетов”. Добавим в конфигурацию копию этого отчёта и назовём его “Ведомость взаиморасчетов (с характеристиками)”.
Оригинал отчёта нам понадобится для демонстрации второго варианта использования характеристик.
Итак, откроем набор данных “Взаиморасчеты” схемы компоновки данных нашего отчета в конструкторе запросов и перейдем на закладку “Характеристики”.
- В таблицу на вкладке “Характеристики” добавим строку.
- В поле “Тип” выберем “СправочникСсылка.Контрагенты” (это объект для которого в отчёте необходимо использовать дополнительные характеристики).
- В поле “Источник видов” выберем вариант “Запрос” (хотя в нашем случае можно ограничиться и вариантом “Таблица”).
- В колонку “Виды характеристик” внесём текст запроса, которым будут выбираться виды характеристик, используемые для справочника “Контрагенты”.
Текст запроса обязательно должен содержать три поля – ссылка на вид характеристики, наименование характеристики и тип значения характеристики. Наименования этих полей выбираются в колонках “Поле ключа”, “Поле имени” и “Поле типа значения” таблицы на закладке “Характеристики”.
- Для визуального выделения дополнительных реквизитов объекта в запросе по видам характеристик к наименованиям добавлен текст “(доп. реквизит)”.
- В колонке “Источник значений” на вкладке “Характеристики” выберем вариант “Таблица”.
- В колонке “Значения характеристик” выберем “РегистрСведений.Характеристики”,
- в колонке “Поле объекта” – наименование измерения регистра “Объект”,
- в колонке “Поле вида” – наименование измерения “ВидХарактеристики”,
- в колонке “Поле значения” – наименование ресурса “Значение”.
В тексте запроса схемы компоновки результат добавления характеристик выглядит следующим образом (в обычных запросах применение таких конструкций невозможно):
Проверим работу отчёта. Для этого откроем отчёт “Ведомость взаиморасчетов (с характеристиками)”. Перейдем в пункт меню “Все действия -> Изменить вариант”. В окне настроек перейдём на закладку “Отбор” и добавим отбора по дополнительному реквизиту контрагента “Адрес”
Вариант №2
Рассмотрим более универсальный вариант работы с характеристикам объектов, благодаря которому характеристики возможно будет использовать в любых отчетах, содержащих объект-владелец характеристик, а также устанавливать отборы по значению этих характеристик в формах списков.
Перейдём на закладку “Данные” справочника “Контрагенты” и нажмём кнопку “Характеристики”.
- В открывшемся окне “Дополнительных характеристик объекта метаданных” добавим строку.
- В колонке “Виды характеристик” выберем “ПланВидовХарактеристик.ВидыХарактеристик”, в колонке “Поле ключа” – “Ссылка”.
- В колонке “Значения характеристик” выберем “РегистрСведений.Характеристики”, в колонке “Поле объекта” – “Объект”,
- в колонке “Поле вида” – “ВидХарактеристики”, в колонке “Поле значения” – “Значение”.
Сохраним конфигурацию и попробуем воспользоваться дополнительными характеристиками справочника “Контрагенты” в форме списка (в отчёте “Ведомость взаиморасчетов” использование дополнительных реквизитов будет выглядеть аналогичному тому как это было описано в Варианте №1, с той лишь разницей, что наименованию вида характеристики не будет добавляться текст “(доп. реквизит)”).
Откроем список справочника “Контрагенты”, перейдем в пункт меню “Все действия -> Настройка списка” и установим отбор по дополнительному реквизиту “Адрес”.
Стоит отметить, что при использовании Варианта №1 в отчётах с использованием СКД отключается приведенный механизм платформы и используется описанный пользователем.
Статья найдена на просторах интернета.
Можно дурачить всех все время, — при условии, что реклама ведется правильно, а расходы на нее достаточно велики.
— Джозеф Левин