Как получить свойство в запросе 1с

Обновлено: 07.07.2024

Использование характеристик в системе компоновки данных

Система компоновки данных позволяет работать с характеристиками - дополнительными свойствами объектов, определяемыми вне конфигурации. В данной статье описываются особенности работы с данным механизмом.

Описание характеристик

Характеристики в системе компоновки данных описываются в тексте запроса набора данных специальной инструкцией системы компоновки данных, начинающейся с ключевого слова ХАРАКТЕРИСТИКИ .

В данном примере описываются характеристики для полей типа Справочник.Номенклатура .

В описании характеристики указывается:

  1. Тип, для которого определяются характеристики
  2. Описание списка характеристик
  3. Описание значений характеристик

Тип, для которого определяются характеристики

Характеристики описываются для определенного типа. Например, можно описать характеристики для типа Справочник.Номенклатура , при этом система автоматически будет использовать эти характеристики для всех полей запроса, которые имеют тип Справочник.Номенклатура , включая и реквизиты полей.

Возможно описание характеристики для составного типа. При этом характеристики будут применяться ко всем полям, в типе значений которых есть хотя бы один из типов, для которых описаны характеристики.

В предложении ХАРАКТЕРИСТИКИ тип указывается в скобках после ключевого слова ТИП . Синтаксис описания типа такой же, как в описании типа конструкции ВЫРАЗИТЬ языка запроса. Типы, входящие в составной тип перечисляются через запятую.

Описание списка характеристик

Для того чтобы система компоновки данных выдала пользователю список полей - характеристик, необходимо описать, откуда получать список характеристик.

О каждой характеристике системе необходимо знать следующую информацию:

  1. Идентификатор - внутренний идентификатор характеристики - по данному свойству характеристика будет находиться в списке значений характеристик. Идентификатор может иметь любой тип, для которого может использоваться сравнение в языке запросов.
  2. Имя характеристики - имя, под которым пользователь вводил характеристику. Например, масса, длина, рост и т.п. Значение этого свойства будет использоваться в качестве имени поля, создаваемого для характеристики.
  3. Тип значения характеристики - значения какого типа могут содержаться в характеристике. Данная информация используется, в отборе для фильтрации по полю - характеристике. Может иметь тип ОписаниеТипов , либо произвольное значение. В случае если тип значения содержит описание типов, то данное описание типов будет использовано как тип значения характеристики. Если тип значения содержит произвольное значение, то типом характеристики будет тип данного значения. Например, если в качестве типа значения используется числовое значение, то типом характеристики будет Число . Если тип значения характеристики не указан, то типом будет считаться тип Булево .

Описание списка характеристик используется на этапе редактирования настроек, для получения списка характеристик для создания полей - реквизитов. Для каждой характеристики из списка будет создан новый реквизит для поля определенного типа.

Рассмотрим пример. Будем описывать характеристики для поля типа Справочник.Номенклатура .

Допустим, в нашей конфигурации есть план видов характеристик ВидыДопСвойств , содержащий следующие записи:

Ссылка ПометкаУдаления Предопределенный Код Наименование ТипЗначения
Масса ложь ложь 000000001 Масса Число
Ширина ложь ложь 000000003 Ширина Число
Высота ложь ложь 000000004 Высота Число

В качестве идентификатора характеристики будем использовать поле Ссылка . В качестве имени характеристик - Наименование . А в качестве типа значения - поле ТипЗначения .

Таким образом, система получит следующий список характеристик:

Идентификатор Имя ТипЗначения
Масса Масса Число
Ширина Ширина Число
Высота Высота Число

Пусть в отчете имеется поле Номенклатура , типа Справочник.Номенклатура . На основе списка характеристик система автоматически создаст для этого поля три поля: Масса , Ширина , Высота . Тип всех полей будет Число .


Как видно, данные поля отображаются в списке реквизитов поля Номенклатура и ничем не отличаются от обычных реквизитов.

Результат отчета, в который выводятся поля - характеристики, может выглядеть так:

Номенклатура Код Масса
Лазерный принтер 5250197-203 Minolta-QMS 0000031 5 800
Лазерный принтер Canon LBP-810 0000030 4 300
Лазерный принтер HP LaserJet 2200 0000032

В данном примере в отчет выводится характеристика Масса .

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

Список характеристик описывается при помощи ключевых слов СПИСОК , ИДЕНТИФИКАТОР , ИМЯ , ТИПЗНАЧЕНИЯ . После ключевого слова СПИСОК идет имя таблицы, из которой получается список характеристик, либо в скобках текст запроса, при помощи которого получается список характеристик. После ключевых слов ИДЕНТИФИКАТОР , ИМЯ , ТИПЗНАЧЕНИЯ указываются имена полей для получения идентификатора, имени и типа значений характеристики соответственно.

В данном примере список характеристик получается из таблицы ПланВидовХарактеристик.ВидыДопСвойств . В качестве идентификатора характеристики используется поле Ссылка , в качестве имени характеристики используется поле Наименование , в качестве типа - поле ТипЗначения .

Пример с получением списка характеристик из запроса:

В конструкторе запросов характеристики описываются на закладке Характеристики .


На данном рисунке описаны характеристики для типа Справочник.Номенклатура . Список характеристик получается из таблицы ПланВидовХарактеристик.ВидыДопСвойств , в качестве идентификатора характеристики используется поле Ссылка , в качестве имени характеристики используется поле Наименование , в качестве типа - поле ТипЗначения .

При необходимости получения списка характеристик при помощи запроса, в конструкторе следует указать в качестве источника Запрос и создать запрос.


На данном рисунке список характеристик получается при помощи запроса, в котором получаются только записи, у которых не установлена пометка удаления. Указание полей происходит также как и в случае с таблицей, только используются не поля таблицы, а поля запроса.

Описание значений характеристик

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

Для получения характеристик системе необходима следующая информация:

  1. Из какой таблицы или запроса получать значения характеристик
  2. Поле - идентификатор характеристики. В данном поле будет искаться значение идентификатора, полученного в списке характеристик.
  3. Поле - идентификатор объекта. С данным полем будет осуществляться связь поля исходного запроса, для которого требуется получить значение характеристики.
  4. Поле - значение характеристики. Из данного поля будет получаться значение характеристики. Если поле - значение не указано, то значение характеристики будет иметь значение Истина , в случае, если в таблице будет найдена запись для характеристики объекта и Ложь в противном случае.

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

Номенклатура ВидСвойства Свойство
Лазерный принтер 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 Бухгалтерия

Тогда описание характеристик может выглядеть так:

Как видно, в описании характеристик не указано поле ТипЗначения , а в таком случае, считается, что характеристика имеет логический тип. Кроме того, не указано поле, из которого будет получаться значение характеристики. В таком случае считается, что значение характеристики Истина в случае, если характеристика для объекта присутствует в таблице значений характеристик и Ложь в противном случае.

При таких условиях в полях - реквизитах поля Номенклатура появятся дополнительные поля:


Если пользователь укажет, что поле Номенклатура.Бухгалтерия необходимо выводить в результат, то запрос в макете компоновки данных будет выглядеть следующим образом:

Как видно, запрос аналогичен запросу, формируемому для обычных характеристик. Исключение составляет получение значения характеристики. В данном случае это следующая конструкция:

Как видно, результатом данного выражения будет Истина , в случае если связь выполнилась, т.е. категория установлена, и Ложь в противном случае.

Распечатать

Вообщем сделала так;
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ЦеныНоменклатурыСрезПоследних.Номенклатура,
| ЦеныНоменклатурыСрезПоследних.Цена,
| ЦеныНоменклатурыСрезПоследних.ЕдиницаИзмерения,
| ЦеныНоменклатурыСрезПоследних.Валюта КАК ВалютаЦены
|ИЗ
| (ВЫБРАТЬ РАЗЛИЧНЫЕ

| Номенклатура.Ссылка КАК Номенклатура
| ИЗ
| Справочник.Номенклатура КАК Номенклатура
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
| ПО Номенклатура.Ссылка = ЗначенияСвойствОбъектов.Объект
| ГДЕ
| Номенклатура.Родитель = &Родитель
| И ЗначенияСвойствОбъектов.Свойство.Наименование В (&СписокНазначенийСвойств)
| И ЗначенияСвойствОбъектов.Значение.Наименование В (&СписокПараметров)) КАК ВложенныйЗапрос
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаРегистраСведений) КАК ЦеныНоменклатурыСрезПоследних
| ПО ВложенныйЗапрос.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура";

Diana13, у Вас запрос ничего не выводит, так как условия написаны некорректно. Мой запрос по указанным параметрам вывел номенклатуру.
Ваши условия противоречат друг другу. Как минимум нужно было писать не:
Код 1C v 8.х
а
Код 1C v 8.х .
А вообще. Что бы вывести нужные поля, нужно писать гдето так:
Код 1C v 8.х Тогда еще вопрос каким где назначить параметры Справочники.ЗначенияСвойствОбъектов и ПланыВидовХарактеристик.СвойстваОбъектов. И каким образом в обработке по подбору для каждого поля назначить список определенных значений из справочника. Т.е. например свойство цвет - белый, красный и .тд., а список открывается полностью.

Я примерно так и пишу, только он не выводит значения. У меня примерно так

Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка,
| Номенклатура.Представление,
| Номенклатура.Родитель,
| Номенклатура.ЭтоГруппа,
| Номенклатура.Код,
| ЗначенияСвойствОбъектов.Объект,
| ЗначенияСвойствОбъектов.Значение,
| ЗначенияСвойствОбъектов.Свойство
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
| ПО Номенклатура.Ссылка = ЗначенияСвойствОбъектов.Объект
|ГДЕ
| Номенклатура.Родитель = &РОдитель
| И ЗначенияСвойствОбъектов.Свойство.Наименование = &Покрытие
| ИЛИ ЗначенияСвойствОбъектов.Значение.Наименование = &ПОкрытиеНом
| И ЗначенияСвойствОбъектов.Свойство.Наименование = &Цвет
| ИЛИ ЗначенияСвойствОбъектов.Значение.Наименование = &ЦветНом

Войдите как ученик, чтобы получить доступ к материалам школы

Язык запросов 1С 8.3 для начинающих программистов: функции и операторы для работы с типами (ТИПЗНАЧЕНИЯ, ТИП, ССЫЛКА, ЕСТЬNULL, ВЫРАЗИТЬ)

Автор уроков и преподаватель школы: Владимир Милькин

Давайте вспомним, что каждый реквизит (свойство, поле) справочника, документа или любого другого прикладного объекта имеет свой тип . И этот тип мы можем посмотреть в конфигураторе:

01

В языке запросов существует целый класс функций и операторов для работы с типами реквизитов. Давайте рассмотрим их.

Функция ТИПЗНАЧЕНИЯ

Эта функция принимает один параметр (значение) и возвращает его тип. Для описанного на картинке (выше) реквизита Вкус справочника Еда вернётся следующее:

02

Если мы запросим тип поля Наименование, то, как и ожидается, получим Строка:

А теперь давайте рассмотрим реквизит ОтличительныйПризнак у справочника Города:

04

Вы видите, что этот реквизит может иметь один из нескольких типов: Строка, Справочник.Вкусы, Справочник.Цвета. Такой тип реквизитов называется СОСТАВНЫМ .

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

05

И только после нашего выбора позволит ввести значение выбранного типа.

Таким образом, элементы справочника одного вида (Справочник.Города) смогут хранить в одном и том же реквизите (ОтличительныйПризнак) значения разных типов (Строка, Цвета или Вкусы).

Вы можете убедиться в этом сами пощёлкав по элементам справочника Города в режиме 1С:Предприятие. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.

Здесь значение отличительного признака является элементом справочника Вкусы:

06

07

А здесь вообще элементом справочника Цвета:

09

Вот какие возможности открывает перед нами составной тип данных!

Интересно, как поведёт себя функция ТИПЗНАЧЕНИЯ на реквизите ОтличительныйПризнак, имеющий составной тип данных:

Это уже очень интересно. Давайте разбираться с каждой строкой в отдельности.

Тип значения отличительного признака для элемента Россия равен NULL. Мы впервые сталкиваемся с этим типом. Значения данного типа используются исключительно для определения отсутствующего значения при работе с базой данных.

Так и есть, ведь элемент Россия является группой, а не обычным элементом справочника Города, поэтому у него отсутствует поле ОтличительныйПризнак. А тип у отсутствующего значения, как мы прочитали выше, всегда равен NULL.

Тип значения отличительного признака для Перми равен Вкусы. Так и есть, ведь значение отличительного признака забитое в базе для города Пермь является ссылкой на элемент справочника Вкусы.

Для Красноярска тип признака равен Цвета, потому что значение выбранное в базе является ссылкой на элемент справочника Цвета.

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

Индия снова группа, поэтому значение отсутствует. А тип у отсутствующего значения, как мы помним, равен NULL.

Далее всё аналогично, кроме Сан-Паулу. Это не группа, а обычный элемент справочника (город), но тип его значения пустой. Как так?

А дело вот в чём. Если вы зайдёте в элемент справочника Города с наименованием Сан-Паулу, то увидите, что поле ОтличительныйПризнак совершенно никак не заполнено. Оно пустое. А все незаполненные поля составного типа имеют специальное значение НЕОПРЕДЕЛЕНО .

С НЕОПРЕДЕЛЕНО мы также сталкиваемся впервые.

Значение НЕОПРЕДЕЛЕНО применяется, когда необходимо использовать пустое значение, не принадлежащее ни к одному другому типу. Это как раз наша ситуация.

А тип для значения, которое не принадлежит ни к одному из типов, как вы уже наверное догадались отсутствует.

Функция ТИП

Она принимает всего один параметр - имя примитивного типа (СТРОКА, ЧИСЛО, ДАТА, БУЛЕВО), либо имя таблицы, тип ссылки которой нужно получить.

Результатом данной конструкции будет значение типа Тип для указанного типа.

Звучит туманно, не правда ли?

Давайте рассмотрим применение данной конструкции и всё сразу станет на свои места.

Пусть нам требуется отобрать все записи справочника Города, у которых составной реквизит ОтличительныйПризнак имеет значение типа СТРОКА:

01

Теперь давайте отберём все записи, у которых значения реквизита ОтличительныйПризнак являются ссылками на элементы справочника Цвета (таблица Справочник.Цвета):

02

Отступление

Как вы помните, некоторые элементы справочника Города не имеют реквизита ОтличительныйПризнак. Функция ТИПЗНАЧЕНИЯ для таких элементов выдаёт NULL.

Как можно сделать отбор таких элементов в запросе? Для этого предусмотрен специальный логический оператор ЕСТЬ NULL (не путать с функцией ЕСТЬNULL, которую мы рассмотрим ниже). Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.

Вот пример его использования:

03

Но есть и такие элементы (Сан-Паулу), у которых реквизит ОтличительныйПризнак (составного типа) просто не заполнен и равен специальному значению НЕОПРЕДЕЛЕНО.

Чтобы отобрать такие записи следует использовать другую конструкцию:

Но сравнение с НЕОПРЕДЕЛЕНО для определения пустых (не заполненных) реквизитов будет работать только для составных типов.

Кстати, у логического оператора ЕСТЬ NULL форма отрицания выглядит следующим образом:

Логический оператор ССЫЛКА

Оператор ССЫЛКА позволяет проверить, является ли значение выражения, указанного слева от него, ссылкой на таблицу , указанную справа.

К примеру, давайте выберем из справочника Города только те записи, у которых значение составного реквизита ОтличительныйПризнак являются ссылкой на элемент справочника Вкусы:

05

Как вы помните, эту же задачу мы могли бы решить используя ТИПЗНАЧЕНИЯ и ТИП:

Функция ЕСТЬNULL

Функция предназначена для замены значения NULL на другое значение.

Мы помним, что значение NULL возвращается в том случае, если запрашиваемый реквизит (поле, свойство) не существует.

Как например, реквизит ОтличительныйПризнак для групп справочника Города:

06

Функция ЕСТЬNULL поможет нам вывести другое значение в том случае, если это значение равно NULL. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь. Пусть в данном случае это будет строка "Такого реквизита нет!":

08

Получается, что если первый параметр функции ЕСТЬNULL не равен NULL, то возвращается он. Если же он равен NULL, то возвращается второй параметр.

Функция ВЫРАЗИТЬ

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

Как мы помним, составные поля могут быть одного из нескольких типов, указанных в конфигураторе.

Для поля ОтличительныйПризнак такими допустимыми типами являются СТРОКА, Справочник.Цвета и Справочник.Вкусы.

Иногда возникает необходимость привести значения составного поля к какому-либо определенному типу.

Давайте приведём все значения поля ОтличительныйПризнак к типу Справочник.Цвета:

09

В результате, все значения элементов, которые имели тип Справочник.Цвета, остались заполненными и оказались приведенными к указанному типу. Все значения других типов (СТРОКА, Справочник.Вкусы) теперь стали равны NULL. В этом состоит особенность приведения типа при помощи функции ВЫРАЗИТЬ.

Приводить тип можно или к примитивному типу (БУЛЕВО, ЧИСЛО, СТРОКА, ДАТА) или к ссылочному типу. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь. Но тип, к которому делается приведение, обязательно должен входить в список типов для данного составного поля, иначе система выдаст ошибку.

Читайте также: