Табличная часть
Табличная часть элемента проекта — это вложенная таблица, предназначенная для хранения вместе с каждым элементом данных однородной по своей структуре информа ции. Количество строк такой информации заранее неизвестно и может быть разным для разных элементов данных.
Например, справочник Проекты для каждого проекта может хранить список сведений о задачах: номер задачи, ее описание и срочность. В проектах может быть разное количество задач:
Чтобы смоделировать это в «1С:Шине», используется табличная часть.
Табличные части в элементах проекта
Табличные части поддерживаются в ссылочных сущностях: в элементах проекта Справочник, Документ, ПланОбмена, ХранилищеНастроек, КонтрактСущности. Табличные части по сути являются единым целым с объектом, к которому относятся: они считываются и записываются вместе с ним, а также используют его права доступа (в том числе нельзя настроить ограничения доступа к строкам табличных частей).
Табличные части описываются в свойстве ТабличныеЧасти
объекта-владельца. Для каждой табличной части порождается структурный тип ИмяЭлементаСТабличнойЧастью.ИмяТабличнойЧасти
. В примере выше это Проекты.Задачи
. Тип доступен на клиенте и сервере. Значения этого типа используются в качестве строк табличной части. Тип может иметь модуль.
Табличные части имеют следующие свойства:
Ид
—Ууид
, идентификатор табличной части;Имя
—Строка
, имя табличной части;Реквизиты
— обычные хранимые реквизиты; табличные части без явно заданных реквизитов не поддерживаются;Индексы
— поля, соответствующие явно задаваемым реквизитам, а также стандартные поляКонтейнер
иИндекс
.
В таблицах табличной части порождаются поля для всех явно заданных реквизитов табличной части, а также стандартные поля: Контейнер
, Индекс
, НомерСтроки
.
Табличные части в механизме отражения
Табличные части доступны в механизме отражения (свойство ТабличныеЧасти: ЧитаемыйМассив<ОтражениеТ абличнойЧастиСущности>
типа ОтражениеОбъектнойСущности
).
Табличную часть сущности описывает тип ОтражениеТабличнойЧастиСущности
. Тип имеет следующие свойства:
Владелец
—ОтражениеСущности
, сущность, которой принадлежит табличная часть;Ид
—Ууид
, идентификатор табличной части;Имя
—ДвуязычнаяСтрока
, имя на двух языках;Реквизиты
—ЧитаемыйМассив<ОтражениеХранимогоСвойства>
, реквизиты сущности.
Методы типа ОтражениеТабличнойЧастиСущности
:
ПолучитьТаблицу(): ОтражениеТаблицы
— позволяет получить таблицу, хранящую данные табличной части.
Пример создания справочника с табличной частью
-
В демонстрационном приложен ии в подсистеме Основное создайте справочник Проекты со стандартными реквизитами Наименование и Код. Тогда 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
Имя: Срочность
Тип: Булево
Индексы:
-
Имя: Номер
Поля:
- Номер
Примеры работы с табличной частью
В демонстрационном приложении в справочник Сотрудники добавьте реквизит Проект и табличную часть Задачи со структурой, аналогичной табличной части Проекты.Задачи. Описание добавленных реквизитов в YAML-файле справочника Сотрудники:
Реквизиты:
# ...
-
Ид: 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"
УПОРЯДОЧИТЬ ПО
НомерСтроки
Табличные части в контрактах сущностей
В контрактах сущностей поддерживается использование табличных частей. Для каждой табличной части в контракте сущности порождается контракт типа с именем ИмяКонтрактаСущности.ИмяТабличнойЧасти
. Контракт доступен на клиенте и сервере. В таком контракте типа есть свойства для всех реквизитов табличной части, доступные на чтение и запись (если иное не указано в описании соответствующего реквизита табличной части контракта).
В объектах контрактов сущностей табличные части представлены одноименными свойствами с типом ИзменяемыйМассив<ИмяКонтрактаСущности.ИмяТабличнойЧасти>
. Свойства доступны только для чтения. Если в контракте сущности есть табличная часть, во всех реализациях должна быть табличная часть с таким же именем и всеми реквизитами контракта.
Пример YAML-файла контракта сущности КонтрактСущностиПроект с табличной частью:
ВидЭлемента: КонтрактСущности
Ид: 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
ТолькоЧтение: Истина
Пример YAML-файла справочника МойСправочникСКонтрактом, реализующего этот контракт:
ВидЭлемента: Справочник
Ид: 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
Имя: Срочность
Тип: Булево
Выбор между табличной частью и реквизитом-коллекцией
Вместо табличной части вы можете использовать реквизит-коллекцию и хранимую структуру. Это может быть удобно в следующих случаях:
- нужно хранить множество неизменяемых значений (например, чисел или ссылок), при этом добавление дополнительной информации к значениям не планируется;
- если в проекте есть готовая хранимая структура, к которой не планируется добавление дополнительной информации, и нужно хранить множество таких структур.
Однако, если вам понадобится добавить дополнительную информацию в реквизит-коллекцию, то придется переносить данные и переходить к использованию табличной части. Например, если реквизит-коллекция имеет тип Массив<МоеПеречисление>
, а вы хотите изменить его на Массив<МояСтруктура>
, где МояСтруктура
— это некая структура с двумя полями типа Строка
и МоеПеречисление
, то в этом случае «1С:Шина» не сможет выполнить реструктуризацию таблиц базы данных и вам придется переносить данные самостоятельно.
Также рекомендуется использовать табличную часть в контракте сущности, если в реализациях планируется расширение состава полей. При использовании реквизита-коллекции сделать это не получится.