Табличная часть
Табличная часть элемента проекта — это вложенная таблица, предназначенная для хранения вместе с каждым элементом данных однородной по своей структуре информа ции. Количество строк такой информации заранее неизвестно и может быть разным для разных элементов данных.
Например, справочник Проекты для каждого проекта может хранить список сведений о задачах: номер задачи, ее описание и срочность. В проектах может быть разное количество задач:

Чтобы смоделировать это в «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С:Исполнитель» не сможет выполнить реструктуризацию таблиц базы данных и вам придется переносить данные самостоятельно.
Также рекомендуется использовать табличную часть в контракте сущности, если в реализациях планируется расширение состава полей. При использовании реквизита-коллекции сделать это не получится.