1с как определить что реквизит ссылочного типа

Как проверить что реквизит ссылочного типа

Я
   bborisko

20.09.13 — 15:40

Как определить что реквизит является ссылкой?

  

Партнерская программа EFSOL Oblako

   Neeki

1 — 20.09.13 — 15:45

из справки 1с

Если ТипЗнч(ТекОбъект) = Тип(«СправочникСсылка.Номенклатура») Тогда

    …

КонецЕсли;

   bborisko

2 — 20.09.13 — 15:46

Я это знаю. Мне надо перебирая реквизиты объекта метаданных определить ссылка это или простой тип.

   МихаилМ

3 — 20.09.13 — 15:47

попытка

ссылка.скопировать

   BuHu

4 — 20.09.13 — 15:48

(2) простой тип это : булево , дата , число , строка ?

   Ненавижу 1С

5 — 20.09.13 — 15:48

ТвойТип = ТипЗнч(Реквизит);

ЭтоСсылка = Справочники.СодержитТип(ТвойТип)

или Документы.СодержитТип(ТвойТип)

или …. //все виды ссылочних типов

   Лефмихалыч

6 — 20.09.13 — 15:49

Метаданные.НайтиПоТИпу(ТипЗнч())

   banco

7 — 20.09.13 — 15:50

(0)

ОбщегоНазначения.ЗначениеСсылочногоТипа(Значение)

ОбщегоНазначения.ЭтоСсылка(Тип)

  

МихаилМ

8 — 20.09.13 — 15:51

+(3)

ошибся

Пустая()

Быстрый старт в Python для 1С Разработчиков | 1s-to-python.ru

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

Сегодня мы поговорим подробнее про типы объектов конфигурации 1С (тип документа 1С, тип справочника 1С и др.)

Так как в программном коде мы работаем со значениями, то периодически требуется знать их тип. Тип 1С всегда указывается в метаданных у реквизитов — в справочниках, документах.

Работа с типами 1С часто используется:

  • Условия в программе
    Разные действия в зависимости от типа значения 1С в конструкции «Если … Тогда …»
  • Ограничения при работе в интерфейсе
    Запрет или разрешение пользователю вводить в поле на форме значения определенных типов 1С.
  • Определение фактического параметра функции/процедуры
    Если параметр функции/процедуры может быть любого типа 1С, то нужно его определить, чтобы правильно получить значение.

Тип 1С можно получить:

  • Определить тип фактического значения 1С
  • Значения-объекты имеют свойства, в которых указан разрешенный тип 1С (например типы 1С разрешенные в колонке таблицы, в поле на форме, в метаданных) или методы, которые возвращают эти типы 1С
  • Из метаданных – можно получить тип 1С так, как он указан в метаданных в конфигураторе.

Типы 1С можно разделить на три вида:

  • Базовые типы 1С
  • Типы 1С базы данных (ссылочные, объекты)
  • Типы 1С.

Определение типа 1С и сравнение типов 1С

Узнать тип значения 1С можно с помощью функции ТипЗнч(Переменная)

Чтобы понять какой тип 1С эта функция вернула – нужно указать нужный нам Тип(«ИмяТипа»)

Например, определение (сравнение) типа 1С переменной:
Если ТипЗнч(Переменная) = Тип("ИмяТипа") Тогда

Какие типы писать в качестве ИмяТипа?

Базовые типы

Базовые типы 1С — число, строка, дата, булево.

Например:
Знч = 12;
Если ТипЗнч(Знч) = Тип("Число") Тогда
ИначеЕсли Знч = Тип("Строка") Тогда
ИначеЕсли Знч = Тип("Дата") Тогда
ИначеЕсли Знч = Тип("Булево") Тогда
КонецЕсли;

Типы базы данных

1С хранит данные в базе данных, но не в виде отдельных записей, а в виде объектов.

Большинство сохраняемых объектов (в том числе: справочники, документы, перечисления, бизнес-процессы, задачи) доступны в виде Объекта (для изменения и записи) и в виде Ссылки (для чтения). Подробнее см. «Ссылки и объекты».

Например:
Знч = Справочники.Организации.ПустаяСсылка();
Если ТипЗнч(Знч) = Тип("СправочникСсылка.Организации") Тогда
ИначеЕсли Знч = Тип("СправочникОбъект.Организации") Тогда
ИначеЕсли ТипЗнч(Знч) = Тип("ДокументСсылка.ПоступлениеТоваров") Тогда
ИначеЕсли Знч = Тип("ДокументОбъект.ПоступлениеТоваров") Тогда
КонецЕсли;

Регистры могут быть представлены различными типами. Имя типа регистра составное:
РегистрТипрегистраТипдоступа.ИмяРегистра

Типы 1С регистров:

  • Сведений
  • Накопления
  • Бухгалтерии
  • Расчета.

Типов доступов к регистру несколько. Чаще всего используются:

  • НаборЗаписей
  • Список
  • Выборка
  • Запись
  • КлючЗаписи.

Итого, пример:
Если ТипЗнч(Знч) = Тип("РегистрСведенийСписок.ИмяРегистра") Тогда
ИначеЕсли Знч = Тип("РегистрНакопленияНаборЗаписей.ИмяРегистра") Тогда
КонецЕсли;

Типы 1С

Язык 1С позволяет работать со множеством объектов, создаваемых динамически в программе, например – массив, список значений, таблица значений, структура…

Такие типы 1С указываются по их названию (одним словом, без пробелов). Например:
Если ТипЗнч(Знч) = Тип("Массив") Тогда
ИначеЕсли Знч = Тип("СписокЗначений") Тогда
КонецЕсли;

Определение значения ссылочного типа 1С

Работа со всеми объектами базы данных (справочники, документы…) ведется через ссылки. Например, если мы хотим в документе сделать реквизит – справочник, то его тип 1С будет «СправочникСсылка.ИмяСправочника».

Мы можем определить является ли ссылка справочником или документом с помощью метода ТипВсеСсылки()

Например:
Значение = Справочники.Организации.ПустаяСсылка();
Если Справочники.ТипВсеСсылки().Содержит( ТипЗнч(Значение) ) Тогда
     //это справочник
ИначеЕсли Документы.ТипВсеСсылки().Содержит( ТипЗнч(Значение)) Тогда
     //это документ
КонецЕсли;

Работа с типами 1С в запросе

В запросе тип 1С можно проверить двумя способами.

Первый – аналогично описанному, но в имени типа 1С не указывается «Ссылка» или «Объект», то есть вместо «СправочникСсылка.Организации» пишем «Справочник.Организации»

Получение доступных типов 1С

У множества объектов есть свойство .ТипЗначения, которое содержит список типов 1С:

  • Поле на форме толстого клиента
    ЭлементыФормы.ИмяПоля.ТипЗначения
  • Поле на форме тонкого клиента (исключение: называется ДоступныеТипы)
    Элементы.ИмяПоля.ДоступныеТипы
  • Колонка таблицы значений, дерева значений
  • Реквизит формы
  • Элемент отбора

Как работать с этим списком типов 1С в поле .ТипЗначения – см. «ОписаниеТипов» в разделе «Язык 1С».

Работа с типами 1С реквизитов в метаданных конфигурации

При добавлении и редактировании реквизитов в конфигураторе программист указывает тип(ы) 1С реквизита. В программном коде на языке 1С можно получить (узнать) тип(ы) 1С реквизита.

Подробнее про работу с метаданными см. далее «Работа с метаданными».

Основные методы:

  • У объекта 1С вызвать метод Метаданные(), который возвращает метаданные конкретного объекта и далее работать со списком реквизитов (и реквизитов табличной части)
    Документы.ПоступлениеТоваров.ПустаяСсылка().Метаданные().Реквизиты
  • Использовать глобальную переменную «Метаданные», которая возвращает все метаданные конфигурации, и далее выйти на реквизиты конкретного объекта
    Метаданные.Документы.ПоступлениеТоваров.Реквизиты

У реквизита есть свойство .Тип, которое содержит список типов 1С, установленный в конфигураторе у этого реквизита.

Как работать с этим списком типов 1С – см. «ОписаниеТипов» в разделе «Язык 1С».

Указать фильтр типов 1С

У многих объектов возможно указать фильтр типов значений 1С, возможных к использованию, например:

  • Список значений (.ДоступныеЗначения)
  • Поле формы управляемого клиента (.ДоступныеТипы)

Там, где фильтра не доступен к изменению, доступно указать фильтр в методе объекта. Например у колонки таблицы (дерева) значений есть .ТипЗначения и мы не можем его изменять, но при добавлении колонки с помощью метода .Добавить() вторым параметром можно указать список доступных типов 1С.

Чтобы указать список типов 1С для фильтра – используется список типов 1С, как с ним работать – см. «Описание типов» в разделе «Язык 1С».

Загрузка…

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

Содержание

Вместо предисловия

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

Примитивные типы значений в 1С

Значения примитивных типов не содержат в себе ничего, кроме литерала своего типа. Например, значение типа число может определяться литералом 12345, типа строка – “12345”, типа булево – Истина, и т.д.

Всего примитивных типов в 1С шесть:

  1. Число
  2. Строка
  3. Дата
  4. Булево
  5. Неопределено
  6. NULL

Значения примитивных типов могут преобразовываться к другим типам. Для явного преобразования используются соответствующие методы глобального контекста – например, Строка(12345) приведет число к строке, Дата(“20210101”) – преобразует строку в дату 01.01.2021, и др.

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

Пример:

Строка1 = 1;
Строка2 = "2";
Строка3 = Строка1 + Строка2; // Вернет число 3
Строка4 = Строка2 + Строка1; // Вернет строку "21"
Строка5 = "2" + 2 - 2 ; // Вернет число 20, т.к. оператор "минус" не работает со строковыми выражениями, и оба его операнда преобразуются к числу.

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

Значение Null – это литерал, обозначающий отсутствие значения в выборке данных. Прежде всего это значение используется при работе с запросами, например, при левом соединении двух таблиц, отсутствующие значения в левой таблице будут заменены значениями Null. Также значение Null будет иметь реквизит иерархического справочника для элемента-группы, если в свойствах реквизита указано, что данный реквизит используется только для элементов. Аналогично для реквизитов, которые используются только для групп, их значения в обычных элементах справочника будут равны Null.

Прикладные типы значений

Прикладные типы значений создаются платформой, когда разработчик добавляет новые прикладные объекты – документы, справочники, регистры и т.д. При этом при создании одного прикладного объекта становятся доступны сразу несколько прикладных типов данных. Например, при добавлении в конфигурацию справочника “Пользователи”, платформа создаст следующие типы:

  • СправочникСсылка.Пользователи
  • СправочникОбъект.Пользователи
  • СправочникМенеджер.Пользователи
  • СправочникСписок.Пользователи
  • СправочникВыборка.Пользователи

Каждый прикладной тип служит для определенной функциональности – например, ссылка нужна для доступа к свойствам конкретного элемента на чтение, объект – для возможности редактировать свойства это элемента, выборка – для перебора коллекции элементов, и т.п.

Изначально прикладные типы платформой не поддерживаются, и существуют только в конкретном прикладном решении. Следует иметь в виду, что при создании двух разных справочников, даже с одинаковым набором реквизитов, например “Покупатели” и “Поставщики”, для платформы это будут разные типы данных, несмотря на одинаковый реквизитный состав, и унаследованную базовую функциональность типа “Справочники”.

Интерфейсные типы данных в 1С

К интерфейсным типам относятся типы данных, позволяющие организовать интерактивное взаимодействие прикладного решения с пользователем. Прежде всего, это типы, связанные с формами и их элементами, например “КнопкаФормы”, “ПолеФормы” и др. Также к интерфейсным типам данных относятся значения, позволяющие работать с избранным, историей, окном клиентского приложения, и т.д.

Общие типы данных

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

В отличие от примитивных типов, значения общих типов представляют собой совокупность значений свойств конкретного объекта. Каждое значение общего типа называется “экземпляром объекта”, и создается ключевым словом Новый – Новый ТекстовыйДокумент, Новый ХранилищеЗначения, и т.д.

Универсальные коллекции значений

Для работы с временными наборами данных в течение сеанса работы пользователя используются универсальные коллекции, такие как Массив, ТаблицаЗначений, Структура и др. Они не являются объектами базы данных, и в ней не хранятся. Универсальные коллекции используются для сбора, группировки, анализа и обработки данных.
Значения типа универсальной коллекции создаются при помощи ключевого слова Новый, например – Новый СписокЗначений, Новый ДеревоЗначений.
Платформа также предоставляет разработчику связанные типы значений, такие как КолонкаТаблицыЗначений, СтрокаДереваЗначений,  КлючИЗначение, для работы с содержимым универсальных коллекций.

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

Составные типы значений

Реквизиты объектов конфигурации могут иметь составной тип. Например, для реквизита “Платежный документ” может быть указаны типы “Приходная накладная”, “Авансовый отчет”, “Оприходование товаров”. В этом случае разработчик указывает, что реквизит имеет составной тип, и отмечает нужные типы на этапе конфигурирования, а пользователь в процессе эксплуатации может выбрать в реквизит значение одного из доступных типов. Следует иметь в виду, что в каждый конкретный момент времени значение имеет только один конкретный тип. Если значение составного типа не указано, тип будет Неопределено. Одновременно двух типов значение составного типа быть не может.

Проверка типа конкретного значения

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

Для такой проверки используется два метода глобального контекста: Тип и ТипЗнч.

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

Если ТипЗнч(Плательщик) = Тип("СправочникСсылка.Контрагенты") Тогда

Как определить, что значение является справочником или документом?

Иногда в коде нужно определить, что переданное значение или параметр является справочником или документом. Например, это может быть необходимо в общей подписке на события при записи объектов. Для этого следует использовать методы ТипВсеСсылки() и Содержит().

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

Если Справочники.ТипВсеСсылки().Содержит(ТипЗнч(Источник)) Тогда
// Это справочник
ИначеЕсли Документы.ТипВсеСсылки().Содержит(ТипЗнч(Источник)) Тогда
// Это документ
КонецЕсли;

dextroza

0 / 0 / 0

Регистрация: 24.09.2016

Сообщений: 73

1

Вытащить тип ссылочного объекта

05.05.2018, 21:20. Показов 764. Ответов 1

Метки нет (Все метки)


Нужно выгрузить произвольный документ в текстовый файл.

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
&НаСервере
функция ЗаписатьФайл(ДокСсылка)
    перем Метаданные;
    Метаданные=ДокСсылка.метаданные(); 
        Текст=новый ТекстовыйДокумент;
        Текст.ДобавитьСтроку("Дата"+":"+ДокСсылка["Дата"]);
        //Текст.ДобавитьСтроку("Название"+":"+ДокСсылка.ПолноеИмя());
        Для Каждого реквизит из Метаданные.реквизиты цикл
            Если Найти(реквизит.тип(),"Ссылка")>0 Тогда
                
                ЗаписатьФайл(реквизит);
            Иначе
                сообщить(реквизит.типы());
                Текст.ДобавитьСтроку(реквизит + ":" +ДокСсылка[реквизит.имя]+Символы.ПС);
 
            КонецЕсли
            
        КонецЦикла;
            
        Текст.Записать(объект.ПутьКФайлу);

Если тип ссылочный,то функция вызывает саму себя уже для ссылочного объекта. Но не могу реализовать проверку на ссылку,подскажите какие функции или методы можно использовать.



0



polax

1808 / 1228 / 442

Регистрация: 16.01.2015

Сообщений: 5,396

06.05.2018, 00:57

2

dextroza, Если правильно понял, задача в том, чтобы определить имеет ли реквизит документа ссылочный тип.
Если так, то подойдет вариант

1C
1
2
3
4
5
6
7
8
9
10
11
12
//Определяем тип реквизита через XML
ТипРеквизита = XMLТипЗнч(Реквизит); 
//ТипРеквизита Возвращает строку с типом реквизита вида например "string" - строка 
//"DocumentRef.ЗаказКлиента" - ДокументССылка.ЗаказКлиента, 
//"CatalogRef.Номенклатура" - СправочникСсылка.Номенклатура и т.п.
//Наличие в названии Ref (reference - ссылка) говорит, что реквизит ссылочного типа
 
//Проверяем строку на наличие Ref
RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.Pattern = "+Ref.+";
Результат = RegExp.Test(ТипРеквизита); 
//Если Результат Истина - реквизит ссылочного типа

Добавлено через 12 минут
dextroza, С первой строкой ошибся. Замените на

1C
1
ТипРеквизита = XMLТипЗнч(Реквизит).ИмяТипа;



1



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

06.05.2018, 00:57

2

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

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

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

01

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

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

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

ВЫБРАТЬ
    Наименование,
    Вкус,
    ТИПЗНАЧЕНИЯ(Вкус)
ИЗ
    Справочник.Еда

02

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

ВЫБРАТЬ
    Наименование,
    ТИПЗНАЧЕНИЯ(Наименование)
ИЗ
    Справочник.Еда

03

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

04

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

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

05

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

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

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

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

06

Здесь строкой:

07

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

09

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

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

ВЫБРАТЬ
    Наименование,
    ОтличительныйПризнак,
    ТИПЗНАЧЕНИЯ(ОтличительныйПризнак)
ИЗ
    Справочник.Города

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

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

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

Идём дальше.

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

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

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

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

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

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

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

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

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

Функция ТИП

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

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

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

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

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

ВЫБРАТЬ
    Наименование,
    ОтличительныйПризнак,
    ТИПЗНАЧЕНИЯ(ОтличительныйПризнак)
ИЗ
    Справочник.Города
ГДЕ
    ТИПЗНАЧЕНИЯ(ОтличительныйПризнак) = ТИП(СТРОКА)

01

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

ВЫБРАТЬ
    Наименование,
    ОтличительныйПризнак,
    ТИПЗНАЧЕНИЯ(ОтличительныйПризнак)
ИЗ
    Справочник.Города
ГДЕ
    ТИПЗНАЧЕНИЯ(ОтличительныйПризнак) = ТИП(Справочник.Цвета)

02

Отступление

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

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

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

ВЫБРАТЬ
    Наименование,
    ОтличительныйПризнак,
    ТИПЗНАЧЕНИЯ(ОтличительныйПризнак)
ИЗ
    Справочник.Города
ГДЕ
    ОтличительныйПризнак ЕСТЬ NULL

03

Отлично.

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

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

ВЫБРАТЬ
    Наименование,
    ОтличительныйПризнак,
    ТИПЗНАЧЕНИЯ(ОтличительныйПризнак)
ИЗ
    Справочник.Города
ГДЕ
    ОтличительныйПризнак = НЕОПРЕДЕЛЕНО

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

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

ВЫБРАТЬ
    Наименование,
    ОтличительныйПризнак
ИЗ
    Справочник.Города
ГДЕ
    ОтличительныйПризнак ЕСТЬ НЕ NULL

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

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

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

ВЫБРАТЬ
    Наименование,
    ОтличительныйПризнак,
    ТИПЗНАЧЕНИЯ(ОтличительныйПризнак)
ИЗ
    Справочник.Города
ГДЕ
    ОтличительныйПризнак ССЫЛКА Справочник.Вкусы

05

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

ВЫБРАТЬ
    Наименование,
    ОтличительныйПризнак,
    ТИПЗНАЧЕНИЯ(ОтличительныйПризнак)
ИЗ
    Справочник.Города
ГДЕ
    ТИПЗНАЧЕНИЯ(ОтличительныйПризнак) = ТИП(Справочник.Вкусы)

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

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

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

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

ВЫБРАТЬ
    Наименование,
    ОтличительныйПризнак
ИЗ
    Справочник.Города

06

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

ВЫБРАТЬ
    Наименование,
    ЕСТЬNULL(ОтличительныйПризнак, "Такого реквизита нет!")
ИЗ
    Справочник.Города

08

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

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

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

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

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

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

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

ВЫБРАТЬ
    Наименование,
    ВЫРАЗИТЬ(ОтличительныйПризнак КАК Справочник.Цвета)
ИЗ
    Справочник.Города

09

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

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

Пройдите тест

а) Напишите запрос, который запрашивает из справочника Города реквизиты Наименование и Мэр, а также тип значения, которое находится в составном поле Мэр:

Понравилась статья? Поделить с друзьями:
  • Delko транспортная компания отзывы сотрудников
  • 1с как поместить в реквизит несколько значений
  • Deutsche bank trust company americas реквизиты
  • 1с как проверить документ на наличие реквизита
  • 1с как проверить наличие реквизита в структуре