Использование структур для описания модели данных
Зачастую при создании собственных алгоритмов вам требуются определенные модели данных, с которыми вам было бы удобно работать. Для их создания можно использовать структуры. «1С:Шина» предлагает три возможности работы со структурами:
- Структура в языке «1С:Элемент»;
- Структура — элемент проекта;
- ХранимаяСтруктура — элемент проекта.
Структура в языке «1С:Элемент» — это тип, имеющий фиксированный набор полей и методов, а также конструктор.
Элемент проекта Хранимая структура отличается от элемента проекта Структура тем, что:
- хранимую структуру можно использовать как тип реквизита справочника или тип измерения (ресурса, реквизита) регистра сведений (для хранения данных в базе данных), поэтому:
- окружение только КлиентИСервер;
- поля могут быть только таких типов, для которых обеспечивается хранение в базе данных;
- две структуры не могут иметь поля, ссылающиеся друг на друга;
- хранимую структуру можно использовать как тип параметра и как тип результата запланированного задания;
- хранимую структуру можно использовать в полнотекстовом поиске.
Чтобы создать собственную структуру, добавьте в проект элемент вида Структура. Например, структура в проекте может выглядеть следующим образом:
Она может иметь такое описание:
ВидЭлемента: Структура
ОбластьВидимости: ВПодсистеме
Ид: 3cc44843-e496-4d2e-8360-50d35ec258a8
Имя: ДанныеСотрудника
Окружение: КлиентИСервер
Поля:
-
Тип: Строка
Имя: ФИО
-
Тип: Число
Имя: Возраст
-
Тип: Строка
Имя: Город
Поля структуры и хранимой структуры являются реализацией свойств контракта типа.
Использование хранимой структуры в табличной части
Хранимую структуру можно использовать в табличной части элемента проекта. Например, справочник ИнформационныеСистемы вместе с каждым элементом может хранить определенные свойства участника: страну, город и тип участника (склад, офис и др.).
Справочник ИнформационныеСистемы имеет реквизит-коллекцию ИнформацияОбОбъекте, элементами которого являются экземпляры хранимой структуры СтрокаТаблицы.
Описание хранимой структуры СтрокаТаблицы.yaml выглядит следующим образом:
ВидЭлемента: ХранимаяСтруктура
Ид: 2d187506-7d2b-48a9-9dfd-f05cfeccc9b8
ОбластьВидимости: ВПодсистеме
Имя: СтрокаТаблицы
Поля:
-
Имя: Страна
Ид: f90c625c-dff7-4186-8d4b-91d212ba071b
Тип: Строка
ИспользоватьВПолнотекстовомПоиске: Ложь
-
Имя: Город
Ид: 9ac9970e-33a8-424b-bca8-4a2e8b21b506
Тип: Строка
ИспользоватьВПолнотекстовомПоиске: Ложь
-
Имя: Объект
Ид: 787d8424-9762-4015-9938-b539d8a5a0db
Тип: Строка
ИспользоватьВПолнотекстовомПоиске: Ложь
В структуре определены три поля: Страна, Город и Объект.
Реквизит ИнформацияОбОбъекте справочника ИнформационныеСистемы выглядит следующим образом:
Реквизиты:
-
Ид: 30870553-4c11-4518-8630-78c47d7cf48b
Имя: ИнформацияОбОбъекте
Тип: Массив<СтрокаТаблицы>
ИспользоватьВПолнотекстовомПоиске: Ложь
Заполнить такой реквизит из кода можно следующим образом:
// Создать объект справочника
пер Система = новый ИнформационныеСистемы.Объект()
// Заполнить реквизит ИнформацияОбОбъекте
Система.ИнформацияОбОбъекте.Добавить(новый СтрокаТаблицы("Россия", "Москва", "Магазин"))
Система.ИнформацияОбОбъекте.Добавить(новый СтрокаТаблицы("Россия", "Владивосток", "Склад"))
Система.ИнформацияОбОбъекте.Добавить(новый СтрокаТаблицы("Китай", "Хуньчунь", "Склад поставщика"))
Система.Записать()