Ключевые слова: составной, тип, реквизита, значения
Понятие «тип реквизита» отличается от понятия «тип значения»
Конкретное значение не может быть составного типа. Одно конкретное значение может быть только одного типа данных.
Реквизит может быть как одного типа, так и составного типа. В последнем случае его тип описывается объектом «ОписаниеТипов», т.е. список возможных типов, значения которых могут храниться в этой колонке. Например, СправочникСсылка.М1, СправочникСсылка.М2, Строка, Число, ДокументСсылка.Д1.
В каждой строке (элементе, записи) содержится какое-то свое значение, но каждое из них — одного типа. Например, «СправочникСсылка.М1». Если же в ячейке колонки, имеющей составной тип, даже не выбран (не назначен) тип значения, то оно содержит значение «Неопределено» (это значение и одновременно тип). Если же тип выбран (кнопкой Т или установлен программно), то ячейка содержит пустое значение этого типа, например, пустую ссылку на элемент справочника (см. v8: Пустые ссылки), пустую строку «» или 0.
Чтобы реквизиту составного типа установить конкретный тип, достаточно присвоить ему пустое значение этого типа.
Более подробное описание работы со составными типами
Взято с itland.ru
http://itland.ru/forum//index.php?showtopic=2577
Вопрос:
Какие существуют особенности работы с составными типами данных.
Ответ
Этот вопрос имеет два стороны:
1) Сторона элемента формы.
Для элемента формы мы можем установить только ограничение на типы которые можно выбрать.
Т.е. с помощью кода:
МассивТипов=Новый Массив();
МассивТипов.Добавить(Тип("СправочникСсылка.Контрагенты"));
ЭлементыФормы.ПолеВвода1.ОграничениеТипа=Новый ОписаниеТипов(МассивТипов);
Мы ограничиваем возможный типы только одним «СправочникСсылка.Контрагенты».
НО это не действует на значение которое хранится в источнике данных.
Поэтому если реквизит который связан с «ПолеВвода1» имеет «составной» тип, например Любая ссылка,
он будет неопределенного типа даже после «ЭлементыФормы.ПолеВвода1.ОграничениеТипа=Новый ОписаниеТипов(МассивТипов);»
2) Сторона источника данных.
Здесь ограничение на тип накладывается либо в конфигураторе, либо в момент создания этого элемента из языка.
Но если у реквизита установлен «составной» тип значение реквизита будет неопределенно до тех пор, пока ему не будет присвоено значение конкретного типа.
Присвоить конкретное значение можно либо из языка, либо выбрав это значение в форме.
Из выше описанного можно сделать вывод:
Если у реквизита установлен «Составной» тип данных, то даже при ограничении возможных типов у элемента формы до одного возможного, у пользователя будет запрошен тип который нужно будет присвоить реквизиту.
Если мы хотим оградить пользователя от лишних движений, т.е. выбора единственно возможного типа, нам нужно предварительно установить тип реквизита.
Сделать это можно следующим образом:
//"Значение1" это реквизит связанный с "ПолеВвода1". Значение1 = ЭлементыФормы.ПолеВвода1.ОграничениеТипа.ПривестиЗначение(Значение1);
Добавление от ezh (особенности при работе с элементами в табличном поле):
1.
Вместо этого:
ЭлементыФормы.ПолеВвода1.ОграничениеТипа=Новый ОписаниеТипов(МассивТипов);
Пишем это:
ЭлементыФормы.ИмяТабличнойЧасти.Колонки.ИмяКолонки.ЭлементУправления.ОграничениеТипа = Новый ОписаниеТипов(МассивТипов);
2.
Вместо этого:
Значение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С.
Определение типа 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С, или другой документации.
Примитивные типы значений в 1С
Значения примитивных типов не содержат в себе ничего, кроме литерала своего типа. Например, значение типа число может определяться литералом 12345, типа строка – “12345”, типа булево – Истина, и т.д.
Всего примитивных типов в 1С шесть:
- Число
- Строка
- Дата
- Булево
- Неопределено
- 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С
К интерфейсным типам относятся типы данных, позволяющие организовать интерактивное взаимодействие прикладного решения с пользователем. Прежде всего, это типы, связанные с формами и их элементами, например “КнопкаФормы”, “ПолеФормы” и др. Также к интерфейсным типам данных относятся значения, позволяющие работать с избранным, историей, окном клиентского приложения, и т.д.
Общие типы данных
Платформа предоставляет специфичные объекты языка, отвечающие за различную функциональность: ТабличныйДокумент, Диаграмма, ПостроительЗапроса, Картинка и др.
В отличие от примитивных типов, значения общих типов представляют собой совокупность значений свойств конкретного объекта. Каждое значение общего типа называется “экземпляром объекта”, и создается ключевым словом Новый – Новый ТекстовыйДокумент, Новый ХранилищеЗначения, и т.д.
Универсальные коллекции значений
Для работы с временными наборами данных в течение сеанса работы пользователя используются универсальные коллекции, такие как Массив, ТаблицаЗначений, Структура и др. Они не являются объектами базы данных, и в ней не хранятся. Универсальные коллекции используются для сбора, группировки, анализа и обработки данных.
Значения типа универсальной коллекции создаются при помощи ключевого слова Новый, например – Новый СписокЗначений, Новый ДеревоЗначений.
Платформа также предоставляет разработчику связанные типы значений, такие как КолонкаТаблицыЗначений, СтрокаДереваЗначений, КлючИЗначение, для работы с содержимым универсальных коллекций.
Следует учитывать, что два одинаковых экземпляра универсальной коллекции для платформы будут разными объектами, даже если эти два экземпляра полностью идентичны.
Составные типы значений
Реквизиты объектов конфигурации могут иметь составной тип. Например, для реквизита “Платежный документ” может быть указаны типы “Приходная накладная”, “Авансовый отчет”, “Оприходование товаров”. В этом случае разработчик указывает, что реквизит имеет составной тип, и отмечает нужные типы на этапе конфигурирования, а пользователь в процессе эксплуатации может выбрать в реквизит значение одного из доступных типов. Следует иметь в виду, что в каждый конкретный момент времени значение имеет только один конкретный тип. Если значение составного типа не указано, тип будет Неопределено. Одновременно двух типов значение составного типа быть не может.
Проверка типа конкретного значения
При реализации прикладной логики, часто возникает необходимость проверить, к какому типу принадлежит то или иное значение. Например, если в параметр процедуры передана структура – реализуется одно поведение, а если единственное значение – то другое.
Для такой проверки используется два метода глобального контекста: Тип и ТипЗнч.
Пример. Реквизит Плательщик имеет составной тип – плательщиками могут быть Сотрудники и Контрагенты. Нам нужно проверить, что выбранное значение реквизита является элементом справочника Контрагенты:
Если ТипЗнч(Плательщик) = Тип("СправочникСсылка.Контрагенты") Тогда
Как определить, что значение является справочником или документом?
Иногда в коде нужно определить, что переданное значение или параметр является справочником или документом. Например, это может быть необходимо в общей подписке на события при записи объектов. Для этого следует использовать методы ТипВсеСсылки() и Содержит().
Пример. В подписке ПриЗаписи мы получаем параметр Источник, который может быть как любым элементом любого справочника, так и любым документом.
Если Справочники.ТипВсеСсылки().Содержит(ТипЗнч(Источник)) Тогда // Это справочник ИначеЕсли Документы.ТипВсеСсылки().Содержит(ТипЗнч(Источник)) Тогда // Это документ КонецЕсли;


