1с описание типов справочник
Разберем методы, при помощи которых, в 1С 8.3 можно определить тип значения переменной (или реквизита какого-нибудь объекта). Причем, эти методы могут работать со всеми типами: примитивными, объектными и коллекциями значений.
Для работы с типами, в платформе 1С имеется специальный тип, который так и называется Тип. Этот тип необходим для идентификации типов значений различных данных. Значения типа Тип возвращают только две функции Тип и ТипЗнч.
Функция ТипЗнч в 1С
Разберем функцию ТипЗнч. Эта функция принимает в качестве параметра любое значение и возвращает тип этого значения.
Рассмотрим пример: будем использовать в качестве параметра этой функции число, таблицу значений и объект какого-нибудь справочника.
Посмотрим в отладке, что вернет этот метод.
Как видите, все значения, которые вернул метод ТипЗнч имеют тип Тип. Но, сами по себе знания о том, какой тип у того или иного значения нам ни чего не дают. Разве что можно сравнить одинаковы ли типы у двух разных значений. Эти знания применимы только тогда, когда можно точно определить какого типа наше значение. Делается это при помощи функции Тип.
Функция Тип в 1С
Функция тип имеет один параметр имя получаемого типа в строковом представлении, возвращает тип Тип.
Переделаем предыдущий пример: будем получать типы значений, используя функцию Тип.
В переменных будут те же значения, что и в прошлый раз.
Чтобы быстро получить название какого-то типа, достаточно «задержаться» в написании после первой кавычки, или нажать комбинацию клавиш Ctrl+Пробел.
Появится выпадающий список всех названий типов, где набирая первые символы названия можно быстро найти нужный тип.
Обе функции Тип и ТипЗНЧ возвращают значения одного типа – Тип. Но, если в случае функции ТипЗнч мы не можем точно знать, что вернет эта функция (поскольку, иногда, возникают ситуации, когда точно не известно какого тип та или иная переменная), то при работе с функцией Тип, мы точно знаем, какое значение вернет эта функция, поскольку сами указали строковое представление типа в параметре.
Как проверить тип значения
Для того, чтобы проверить какой тип значения у той или иной переменой, достаточно использовать обе этих функции (Тип и ТипЗнч) вместе: сравнивая, что возвращает функция ТипЗнч, в параметре которой указано какое-либо значение, с функцией Тип, в параметре которой мы указали конкретный тип.
Рассмотрим пример: будем заполнять массив значениями разных типов, потом при помощи генератора случайных чисел выберем нужный элемент массива, и определим какого типа этот элемент массива. В этот массив поместим число, дату, строку и какой-нибудь список значений.
В этом коде я использовал условие, где обрабатывал сравнение значений, которые возвращают функции Тип и ТипЗнч.
Статьи о примитивных типах в 1С:
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Научитесь понимать архитектуру 1С;
- Станете писать код на языке 1С;
- Освоите основные приемы программирования;
- Закрепите полученные знания при помощи задачника.
Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
- Очень доступный и понятный язык изложения
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Поймете идеологию управляемого приложения 1С
- Узнаете, как разрабатывать управляемое приложение;
- Научитесь разрабатывать управляемые формы 1С;
- Сможете работать с основными и нужными элементами управляемых форм
- Программирование под управляемым приложением станет понятным
Эти книги, плюс книга по программированию оперативного учета имеются в едином комплекте: комплект книг по разработке в 1С.
Только для читателей моего блога,
промо-код на скидку в 300 рублей на весь комплект: blog
Если Вам понравился этот урок, был полезен или помог решить какую-нибудь проблему, то Вы можете поддержать мой проект, перечислив любую сумму.
можно оплатить вручную:
// Описание типа строки:
НовСтрока = Новый ОписаниеТипов ( "Строка" );
// Описание строки с уточнением через квалификатор: максимальная длина строки = 50 символов
КвалификаторыСтроки = Новый КвалификаторыСтроки ( 50 );
НовСтрока_50 = Новый ОписаниеТипов ( "Строка" , , КвалификаторыСтроки );
// Описание типа числа:
НовЧисло = Новый ОписаниеТипов ( "Число" );
// Описание числа с уточнением через квалификатор: общее число разрядов = 14, число дробной части = 3
КвалификаторыЧисла = Новый КвалификаторыЧисла ( 14 , 3 , ДопустимыйЗнак . Любой );
НовЧисло_14_3 = Новый ОписаниеТипов ( "Число" , КвалификаторыЧисла );
// Описание типа даты:
НовДата = Новый ОписаниеТипов ( "Дата" );
// Описание даты с уточнением через квалификатор: храниться только дата, без времени
КвалификаторыДаты = Новый КвалификаторыДаты ( ЧастиДаты . Дата );
НовДата_БезВремени = Новый ОписаниеТипов ( "Дата" , , , КвалификаторыДаты );
// Описание типа булево:
НовБулево = Новый ОписаниеТипов ( "Булево" ); // Истина, Ложь
// Описание типа справочника:
НовНоменклатура = Новый ОписаниеТипов ( "СправочникСсылка.Номенклатура" );
// Описание типа перечисление:
НовСпособОплаты = Новый ОписаниеТипов ( "ПеречислениеСсылка.СпособыОплаты" );
// Описание типа документа:
НовДоговор = Новый ОписаниеТипов ( "ДокументСсылка.Договор" );
// Описание типа структуры:
НовСтруктура = Новый ОписаниеТипов ( "Структура" );
// Описание типа соответствия:
НовСоответствие = Новый ОписаниеТипов ( "Соответствие" );
// Описание типа массива:
НовМассив = Новый ОписаниеТипов ( "Массив" );
// Описание типа хранилище значения:
НовХранилищеЗначения = Новый ОписаниеТипов ( "ХранилищеЗначения" );
// Описание типа таблица значений:
НовТаблицаЗначений = Новый ОписаниеТипов ( "ТаблицаЗначений" );
// Описание типа список значений:
НовТаблицаЗначений = Новый ОписаниеТипов ( "СписокЗначений" );
// Описание типа картинки:
НовКартинка = Новый ОписаниеТипов ( "Картинка" );
// Описание типа уникального идентификатора:
НовУникальныйИдентификатор = Новый ОписаниеТипов ( "УникальныйИдентификатор" );
// Описание типа объекта метаданых:
НовОбъектМетаданных = Новый ОписаниеТипов ( "ОбъектМетаданных, Строка" );
// Описание составного типа (Например: строка+структура+справочник):
СписокМассив = Новый Массив ;
СписокМассив . Добавить ( "Строка" );
СписокМассив . Добавить ( "Структура" );
СписокМассив . Добавить ( "СправочникСсылка.Номенклатура" );
ОписаниеСоставногоТипа = Новый ОписаниеТипов ( СписокМассив );
При создании определяемого типа нужно указать его имя и тип. Можно указать составной тип данных:
Для выбора доступно множество различных типов, в том числе примитивные типы, ссылки, объекты, менеджеры, системные перечисления, некоторые универсальные коллекции и т.п.
Теперь данный определяемый тип можно указывать как тип для реквизитов объектов:
Если в дальнейшем нужно будет изменить тип реквизита Ответственный, то достаточно будет добавить новый тип в состав определяемого типа. Тип реквизитов, где был выбран определяемый тип будет изменен автоматически.
Также через определяемый тип можно определять квалификаторы примитивных типов. Например, создать определяемый тип Артикул типа строка и указать для него длину 30.
Если в качестве типа для реквизитов выбирать данный определяемый тип, то гарантируется, что длина везде будет 30 символов.
У определяемого типа есть некоторые ограничения:
- его нельзя использовать как тип значения в плане видов характеристик
- он не может входить в составной тип данных
- не может входить в состав другого определяемого типа
- доступен только начиная с версии платформы 8.3.3
Определяемый тип программно
Чтобы программно указать тип свойства как определяемый тип можно просто создать Описание типов и перечислить все те типы, которые указаны для определяемого типа. Но можно получить готовое описание типов через метаданные:
В дереве метаданных справочники находятся в узле Справочники. При добавлении нового справочника открывается окно редактирования свойств справочника, в котором, переходя по закладкам можно заполнить основные свойства справочника:
Структура справочника
При создании нового справочника в базе данных автоматически создается таблица для хранения данных этого справочника. Если в справочнике нет ни одного реквизита, то в таблице будут колонки только для полей Код, Наименование, ПометкаУдаления, Ссылка и некоторых других служебных реквизитов. При этом если на закладке Данные указать длину кода или наименования равной нулю, то для них не будет создана колонка в таблице:
Если добавить в справочник несколько реквизитов:
То в таблицу базы данных автоматически будут добавлены две колонки: Артикул и Поставщик:
Ссылка | Наименование | Код | Артикул | Поставщик |
---|
Каждый элемент справочника хранится в отдельной строке (записи) таблицы. Например, если в пользовательском режиме добавить несколько элементов:
То таблица базы данных будет выглядеть следующим образом:
Ссылка | Наименование | Код | Артикул | Поставщик |
---|---|---|---|---|
8eae102c-86d5-11eb-80a3-e0d55e4e2669 | Клавиатура | 000000001 | Клав20 | Привезу все |
8eae102d-86d5-11eb-80a3-e0d55e4e2669 | Смартфон | 000000002 | См-30 | Привезу все |
Табличные части справочника
Табличная часть справочника хранится в отдельной таблице. В этой таблице есть колонки Ссылка и НомерСтроки, а также по одной колонке для каждого реквизита табличной части. Основная таблица справочника и табличная часть связаны между собой через поле Ссылка.
Если мы добавим в справочник табличную часть для хранения цен:
И для элемента Клавиатура заполним ее следующим образом:
То в базе данных будет создана следующая таблица:
Ссылка | Номер строки | Вид цены | Цена |
---|---|---|---|
8eae102c-86d5-11eb-80a3-e0d55e4e2669 | 1 | Оптовая | 500 |
8eae102c-86d5-11eb-80a3-e0d55e4e2669 | 2 | Розничная | 1000 |
В поле Ссылка хранится тот же самый идентификатор, что и в основной таблице справочника.
Иерархические справочники
Справочники могут быть иерархическими, то есть внутри одного элемента могут храниться другие элементы. Настройка иерархии выполняется на закладке Иерархия:
Если установить флаг Иерархический справочник, то в пользовательском режиме можно будет создавать как элементы, так и группы:
Элементы можно перетаскивать в группы, тогда они будут находиться внутри этой группы:
На уровне базы данных иерархия реализована через поля ЭтоГруппа и Родитель. В поле Родитель хранится ссылка на группу, в которой находится элемент (или группа, группы могут быть вложены друг в друга). Поле ЭтоГруппа имеет тип булево и в нем хранится признак группа это или элемент.
Для текущего состояния справочника таблица будет выглядеть следующим образом (для упрощения в поле Ссылка я буду отображать наименование элемента, а не идентификатор. Из реквизитов в таблице только код и наименование):
Ссылка | Наименование | Код | Это группа | Родитель |
---|---|---|---|---|
Смартфоны | Смартфоны | 000000004 | Да | |
Смартфон | Смартфон | 000000002 | Нет | Смартфоны |
Составляющие ПК | Составляющие ПК | 000000003 | Да | |
Клавиатура | Клавиатура | 000000001 | Нет | Составляющие ПК |
Для элементов или групп, которые находятся на верхнем уровне иерархии поле Родитель не заполнено.
Иерархия может быть двух видов:
- Иерархия групп и элементов
- Иерархия элементов
Пример иерархии групп и элементов можно увидеть выше. Это когда есть группы и есть элементы. Иерархия элементов выглядит следующим образом:
В этом случае нет разделения на группы и элементы. При этом элементы могут быть вложены друг в друга.
Флаг Размещать группы сверху определяет как будет выполняться сортировка. Если данный флаг установлен, то группы всегда будут выше элементов:
Если снять данный флажок, то сортировка будет выполняться независимо от признака ЭтоГруппа:
Также можно ограничить использование реквизитов. Для этого у каждого в реквизита в свойствах можно указать Использование:
Подчиненные справочники
Один справочник может быть подчинен другому справочнику. Например, есть справочник контрагентов и справочник договоров контрагентов. Чтобы в справочнике договоров не заводить отдельный реквизит для указания контрагента можно сделать его подчиненным справочнику контрагентов. В этом случае в таблице справочника будет добавлено поле Владелец, которое будет хранить ссылку на владельца.
Настройка подчиненности выполняется на закладке Владельцы в подчиненном справочнике:
Для добавления владельца нужно нажать на кнопку с зеленым карандашом и указать справочники-владельцы. Можно указать несколько справочников, тогда поле Владелец будет составного типа.
В поле Использование подчинения можно указать могут ли владельцами быть группы справочников или только элементы.
После настройки подчиненности, в пользовательском режиме у справочника-владельца вверху, в панели навигации формы появится ссылка для перехода в подчиненный справочник, причем автоматически будет выполнен отбор по владельцу:
Нумерация
Настройка нумерации справочников выполняется на закладке Нумерация:
Флаг Автонумерация позволяет автоматически заполнять поле Код при записи. Новый код будет на единицу больше предыдущего. Если данный флаг снят, то поле Код придется заполнять вручную. Как правило данный флаг оставляют включенным.
Флаг Контроль уникальности позволяет контролировать уникальность кодов справочника. Ниже можно указать в пределах чего контролировать уникальность:
Также на закладке Данные можно указать Длину кода и Тип кода. Тип может быть строковым или числовым:
Формы справочника
На закладке формы можно создать формы для справочника и указать некоторые из них как основные:
Читайте также: