Табличная часть
Табличная часть элемента проекта — это вложенная таблица, предназначенная для хранения вместе с каждым элементом данных однородной по своей структуре информации. Количество строк такой информации заранее неизвестно и может быть разным для разных элементов данных.
Например, справочник Проекты для каждого проекта может хранить список сведений о задачах: номер задачи, ее описание и срочность. В проектах может быть разное количество задач:
Чтобы смоделировать это в , используется табличная часть.
Табличные части в элементах проекта
Табличные части поддерживаются в ссылочных сущностях: в элементах проекта Справочник, Документ, ПланОбмена, ХранилищеНастроек, КонтрактСущности. Табличные части по сути являются единым целым с объектом, к которому относятся: они считываются и записываются вместе с ним, а также используют его права доступа (в том числе нельзя настроить ограничения доступа к строкам табличных частей).
Табличные части описываются в свойстве ТабличныеЧасти объекта-владельца. Для каждой табличной части порождается структурный тип ИмяЭлементаСТабличнойЧастью.ИмяТабличнойЧасти. В примере выше это Проекты.Задачи. Тип доступен на клиенте и сервере. Значения этого типа используются в качестве строк табличной части. Тип может иметь модуль.
- Ид — Ууид, идентификатор табличной части;
- Имя — Строка, имя табличной части;
- Реквизиты — обычные хранимые реквизиты; табличные части без явно заданных реквизитов не поддерживаются;
- Индексы — поля, соответствующие явно задаваемым реквизитам, а также стандартные поля Контейнер и Индекс.
Табличные части в механизме отражения
Табличные части доступны в механизме отражения (свойство ТабличныеЧасти: ЧитаемыйМассив<ОтражениеТабличнойЧастиСущности> типа ОтражениеОбъектнойСущности).
- Владелец — ОтражениеСущности, сущность, которой принадлежит табличная часть;
- Ид — Ууид, идентификатор табличной части;
- Имя — ДвуязычнаяСтрока, имя на двух языках;
- Реквизиты — ЧитаемыйМассив<ОтражениеХранимогоСвойства>, реквизиты сущности.
- ПолучитьТаблицу(): ОтражениеТаблицы — позволяет получить таблицу, хранящую данные табличной части.
Пример создания справочника с табличной частью
- В демонстрационном приложении в подсистеме
Основное
создайте справочник
Проекты со стандартными реквизитами
Наименование и Код. Тогда
YAML-файл справочника будет выглядеть
так:
ВидЭлемента: Справочник Ид: ee3618d6-a21c-443b-8ed6-c2087b661536 Имя: Проекты ОбластьВидимости: ВПодсистеме Реквизиты: - Имя: Наименование - Имя: Код Тип: Строка Автонумерация: Использовать: Ложь
- Добавьте табличную часть Задачи.
В
- Добавьте реквизиты Номер,
Описание и
Срочность.
В YAML-файле добавится описание свойства ТабличныеЧасти с реквизитами:
ТабличныеЧасти: - Ид: 64a781a9-e9fb-4f87-a63a-3445ceea58a7 Имя: Задачи Реквизиты: - Ид: 2a280a5b-31d8-4e67-84d7-dd0416c17d44 Имя: Номер Тип: Число - Ид: be4269cc-f7d0-4d2a-a704-a07c6f88a0ac Имя: Описание Тип: Строка - Ид: e6d73627-d246-4ac1-9849-a4a75811c66e Имя: Срочность Тип: Булево
- В панели Свойства табличной части
Задачи добавьте индекс по полю
Номер.
Полный YAML-файл справочника Проекты будет выглядеть следующим образом:ВидЭлемента: Справочник Ид: ee3618d6-a21c-443b-8ed6-c2087b661536 Имя: Проекты ОбластьВидимости: ВПодсистеме Реквизиты: - Имя: Наименование - Имя: Код Тип: Строка Автонумерация: Использовать: Ложь ТабличныеЧасти: - Ид: d72d66c6-2f9e-49ef-8815-7dfd719cfbed Имя: Задачи Реквизиты: - Ид: 674cd65b-2650-4f0b-90c7-73a21f2f0807 Имя: Номер Тип: Число - Ид: d1962b99-9de5-46aa-8610-8c670e8923ef Имя: Описание Тип: Строка - Ид: 1d5e0f82-c21c-452d-8f4c-60a7715b2cf2 Имя: Срочность Тип: Булево Индексы: - Имя: Номер Поля: - Номер
Примеры работы с табличной частью
Реквизиты:
...
-
Ид: c8c87d62-c920-43ce-8f33-9aff0305fe30
Имя: Проект
Тип: Проекты.Ссылка?
ТабличныеЧасти:
-
Ид: 705b7d99-af1a-491a-aaad-2c8cc38440bc
Имя: Задачи
Реквизиты:
-
Ид: bc3d285c-a681-47da-af6c-1a4c9f9d8736
Имя: Номер
Тип: Число
-
Ид: b5862322-3d53-4219-b495-40286928c671
Имя: Описание
Тип: Строка
-
Ид: 162ab406-a0b6-462b-819f-3a20c7db7b6d
Имя: Срочность
Тип: Булево
- Заполнение табличной части с помощью метода ДобавитьНовый()
на основе данных другой табличной
части:
пер ТекущийПроект = Проект.ЗагрузитьОбъект() для СтрокаПроекта из ТекущийПроект.Задачи пер СтрокаЗадачи = Задачи.ДобавитьНовый() СтрокаЗадачи.Номер = СтрокаПроекта.Номер СтрокаЗадачи.Описание = СтрокаПроекта.Описание СтрокаЗадачи.Срочность = СтрокаПроекта.Срочность ;
- Заполнение табличной части с помощью конструктора на основе данных другой
табличной
части:
пер ТекущийПроект = Проект.ЗагрузитьОбъект() для СтрокаПроекта из ТекущийПроект.Задачи Задачи.Добавить(новый Сотрудники.Задачи( Номер = СтрокаПроекта.Номер, Описание = СтрокаПроекта.Описание, Срочность = СтрокаПроекта.Срочность )) ;
- Изменение данных во всех
строках:
пер ТекущийПроект = Проект.ЗагрузитьОбъект() для СтрокаПроекта из ТекущийПроект.Задачи СтрокаПроекта.Срочность = Истина ;
Пример обращения к табличной части с помощью языка запросов
- Владелец — ИмяЭлементаПроекта.Ссылка, ссылка на запись, владеющую строками табличной части;
- Индекс — Число, индекс строки табличной части в рамках одного владельца;
- НомерСтроки — Число, номер строки табличной части в рамках одного владельца (индекс + 1);
- ИмяРеквизитаТабличнойЧасти — ТипРеквизитаТабличнойЧасти, поле с данными реквизита табличной части.
ВЫБРАТЬ
Индекс,
НомерСтроки,
Номер,
Описание,
Срочность,
Владелец
ИЗ
Проекты.Задачи
ГДЕ
Владелец.Представление == "Проект 1"
УПОРЯДОЧИТЬ ПО
НомерСтроки
Табличные части в контрактах сущностей
В контрактах сущностей поддерживается использование табличных частей. Для каждой табличной части в контракте сущности порождается контракт типа с именем ИмяКонтрактаСущности.ИмяТабличнойЧасти. Контракт доступен на клиенте и сервере. В таком контракте типа есть свойства для всех реквизитов табличной части, доступные на чтение и запись (если иное не указано в описании соответствующего реквизита табличной части контракта).
В объектах контрактов сущностей табличные части представлены одноименными свойствами с типом ИзменяемыйМассив<ИмяКонтрактаСущности.ИмяТабличнойЧасти>. Свойства доступны только для чтения. Если в контракте сущности есть табличная часть, во всех реализациях должна быть табличная часть с таким же именем и всеми реквизитами контракта.
ВидЭлемента: КонтрактСущности
Ид: a5105ca6-19d6-49a9-bac8-51b0752ed7a8
Имя: КонтрактСущностиПроект
ОбластьВидимости: ВПодсистеме
ТабличныеЧасти:
-
Ид: b177a736-c491-483d-9740-f64d75f5fefb
Имя: Задачи
Реквизиты:
-
Ид: e8efd298-4170-49a3-bbef-98e2e719faae
Имя: Номер
Тип: Число
ТолькоЧтение: Истина
-
Ид: d310ed62-345b-4840-97c0-0cfdac54b088
Имя: Описание
Тип: Строка
-
Ид: 08df8c71-c6c0-454b-87cc-e5bcbe72809f
Имя: Срочность
Тип: Булево
ТолькоЧтение: Истина
Свойства:
-
Ид: 62f1864c-be4b-4000-9959-90ebccff55e0
Имя: Наименование
Тип: Строка
МаксимальнаяДлина: 10
ТолькоЧтение: Истина
ВидЭлемента: Справочник
Ид: 6eb669ed-40af-4f39-b4de-598d06c78545
Имя: МойСправочникСКонтрактом
ОбластьВидимости: ВПодсистеме
НастройкиТипов:
Справочник.Объект:
Контракты:
- КонтрактСущностиПроект.Объект
Реквизиты:
-
Имя: Наименование
Длина: 10
ТабличныеЧасти:
-
Ид: b1acc279-c3c0-47e7-a33a-13f5d8f257f7
Имя: Задачи
Реквизиты:
-
Ид: 2fe0cf63-8771-4cdb-8cbe-b55ad229994c
Имя: Номер
Тип: Число
-
Ид: cfd7cdf0-44d4-472d-867f-bb67b677e450
Имя: Описание
Тип: Строка
-
Ид: e07b8a10-24ca-411e-8099-369d57215c77
Имя: Срочность
Тип: Булево
Выбор между табличной частью и реквизитом-коллекцией
- нужно хранить множество неизменяемых значений (например, чисел или ссылок), если добавление дополнительной информации к значениям не планируется;
- если в проекте есть готовая хранимая структура, к которой не планируется
добавление дополнительной информации, и нужно хранить множество таких
структур.Важно: Если вам понадобится добавить дополнительную информацию в реквизит-коллекцию, то придется переносить данные и переходить к использованию табличной части.