Перейти к основному содержимому

Табличная часть

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

Например, справочник ИнформационныеСистемы может хранить дополнительный список сведений об объектах информационного обмена. Чтобы хранить такую информацию, в «1С:Шине» может быть использована табличная часть.

Табличные части в элементах проекта

Табличные части поддерживаются в элементе проекта Справочник.

Табличные части по сути являются единым целым с объектом, к которому относятся: они считываются и записываются вместе с ним, а также используют его права доступа (в том числе нельзя настроить ограничения доступа к строкам табличных частей).

Табличные части описываются в свойстве ТабличныеЧасти объекта-владельца. Для каждой табличной части порождается структурный тип ИмяЭлементаСТабличнойЧастью.ИмяТабличнойЧасти. В примере выше это Проекты.Задачи. Тип доступен на клиенте и сервере. Значения этого типа используются в качестве строк табличной части. Тип может иметь модуль.

Табличные части имеют следующие свойства:

  • Ид — Ууид, идентификатор табличной части;
  • Имя — Строка, имя табличной части;
  • Реквизиты — обычные хранимые реквизиты; табличные части без явно заданных реквизитов не поддерживаются;
  • Индексы — поля, соответствующие явно задаваемым реквизитам, а также стандартные поля Контейнер и Индекс.

В таблицах табличной части порождаются поля для всех явно заданных реквизитов табличной части, а также стандартные поля: Контейнер, Индекс, НомерСтроки.

Табличные части в механизме отражения

Табличные части доступны в механизме отражения (свойство ТабличныеЧасти: ЧитаемыйМассив<ОтражениеТабличнойЧастиСущности> типа ОтражениеОбъектнойСущности).

Табличную часть сущности описывает тип ОтражениеТабличнойЧастиСущности. Тип имеет следующие свойства:

  • Владелец — ОтражениеСущности, сущность, которой принадлежит табличная часть;
  • Ид — Ууид, идентификатор табличной части;
  • Имя — ДвуязычнаяСтрока, имя на двух языках;
  • Реквизиты — ЧитаемыйМассив<ОтражениеХранимогоСвойства>, реквизиты сущности.

Методы типа ОтражениеТабличнойЧастиСущности:

  • ПолучитьТаблицу(): ОтражениеТаблицы — позволяет получить таблицу, хранящую данные табличной части.

Пример добавления табличной части в справочник

  1. Для справочника ИнформационныеСистемы нажмите на значок плюса напротив пункта Табличные части и добавьте табличную часть ИнформацияОбОбъекте.

  2. Нажмите на значок плюса напротив табличной части ИнформацияОбОбъекте и добавьте реквизиты Номер, Страна, Город, Объект и Доступность.

  3. В панели Свойства табличной части добавьте индекс с именем Номер по полю Номер.

    Описание табличной части
    ТабличныеЧасти:
    -
    Ид: 8c6118ff-7019-49a5-8fea-b625baeaad11
    Имя: ИнформацияОбОбъекте
    Индексы:
    -
    Имя: Номер
    Поля:
    - Номер
    Реквизиты:
    -
    Ид: f837c40b-174b-47d0-86a1-4e1bafb20200
    Имя: Номер
    Тип: Число
    -
    Ид: 8840069f-24cb-4b41-95cb-b02e1ca26e34
    Имя: Страна
    Тип: Строка
    -
    Ид: f3f3f68c-92e0-4e00-8ba2-52493debc712
    Имя: Город
    Тип: Строка
    -
    Ид: 6c81a69b-39a6-4b98-a9eb-a052aedbdbaa
    Имя: Объект
    Тип: Строка
    -
    Ид: 667cdf92-867c-4d7d-944d-beeb6cd4922f
    Имя: Доступность
    Тип: Булево

Примеры работы с табличной частью

Создайте план обмена ОбменСКурьерскойСлужбой и добавьте реквизит Справочник типа ИнформационныеСистемы.Ссылка? и табличную часть ИнформацияОбОбъекте со структурой, аналогичной табличной части справочника из примера выше.

Фрагмент описания ОбменСКурьерскойСлужбой.yaml
Реквизиты:
# ...
-
Ид: 4f085742-fc12-4eb6-ba84-f0a95103faeb
Имя: Справочник
Тип: ИнформационныеСистемы.Ссылка?
ТабличныеЧасти:
-
Ид: c2b384f5-7379-45ae-83ae-80ea3ad06a4b
Имя: ИнформацияОбОбъекте
Реквизиты:
-
Ид: f837c40b-174b-47d0-86a1-4e1bafb20200
Имя: Номер
Тип: Число
-
Ид: 8840069f-24cb-4b41-95cb-b02e1ca26e34
Имя: Страна
Тип: Строка
-
Ид: f3f3f68c-92e0-4e00-8ba2-52493debc712
Имя: Город
Тип: Строка
-
Ид: 6c81a69b-39a6-4b98-a9eb-a052aedbdbaa
Имя: Объект
Тип: Строка
-
Ид: 667cdf92-867c-4d7d-944d-beeb6cd4922f
Имя: Доступность
Тип: Булево
  1. Заполнение табличной части с помощью метода ДобавитьНовый() на основе данных другой табличной части:

    метод ЗаполнитьТабличнуюЧастьСПомощьюМетода()
    пер ТекущаяИнформация = Справочник.ЗагрузитьОбъект()
    для СтрокаИнформации из ТекущаяИнформация.ИнформацияОбОбъекте
    пер НоваяСтрока = ИнформацияОбОбъекте.ДобавитьНовый()
    НоваяСтрока.Город = СтрокаИнформации.Город
    НоваяСтрока.Страна = СтрокаИнформации.Страна
    НоваяСтрока.Объект = СтрокаИнформации.Объект
    ;
    ;
  2. Изменение данных во всех строках:

    метод ИзменитьДанные()
    пер ТекущаяИнформация = Справочник.ЗагрузитьОбъект()
    для СтрокаИнформации из ТекущаяИнформация.ИнформацияОбОбъекте
    СтрокаИнформации.Доступность = Ложь
    ;
    ;

Пример обращения к табличной части с помощью языка запросов

Для табличной части порождается таблица языка запросов ИмяЭлементаПроекта.ИмяТабличнойЧасти. Таблица содержит следующие поля:

  • Владелец — ИмяЭлементаПроекта.Ссылка, ссылка на запись, владеющую строками табличной части;
  • Индекс — Число, индекс строки табличной части в рамках одного владельца;
  • НомерСтроки — Число, номер строки табличной части в рамках одного владельца (индекс + 1);
  • ИмяРеквизитаТабличнойЧасти — ТипРеквизитаТабличнойЧасти, поле с данными реквизита табличной части.

Пример использования:

ВЫБРАТЬ
ТабличнаяЧасть.Город КАК Город,
ТабличнаяЧасть.Владелец КАК Владелец,
ТабличнаяЧасть.Объект КАК Объект,
ТабличнаяЧасть.Номер КАК Номер
ИЗ
ИнформационныеСистемы.ИнформацияОбОбъекте КАК ТабличнаяЧасть

Табличные части в контрактах сущностей

В контрактах сущностей поддерживается использование табличных частей. Для каждой табличной части в контракте сущности порождается контракт типа с именем ИмяКонтрактаСущности.ИмяТабличнойЧасти. Контракт доступен на клиенте и сервере. В таком контракте типа есть свойства для всех реквизитов табличной части, доступные на чтение и запись (если иное не указано в описании соответствующего реквизита табличной части контракта).

В объектах контрактов сущностей табличные части представлены одноименными свойствами с типом ИзменяемыйМассив<ИмяКонтрактаСущности.ИмяТабличнойЧасти>. Свойства доступны только для чтения. Если в контракте сущности есть табличная часть, во всех реализациях должна быть табличная часть с таким же именем и всеми реквизитами контракта.

Пример YAML-файла контракта сущности УчастникиОповещений с табличной частью:

ВидЭлемента: КонтрактСущности
Ид: cb011e96-79cf-4f7a-b2fa-6ba010d2b4a7
Имя: УчастникиОповещений
ОбластьВидимости: ВПроекте
ТаблицыКонтракта: Доступны
Свойства:
-
Ид: 21e49337-0bf0-4270-8685-14133d807dfb
Имя: ИдентификаторОбъекта
Тип: Строка
ТолькоЧтение: Истина
ТабличныеЧасти:
-
Ид: c2b384f5-7379-45ae-83ae-80ea3ad06a4b
Имя: ИнформацияОбОбъекте
Реквизиты:
-
Ид: 8840069f-24cb-4b41-95cb-b02e1ca26e34
Имя: Страна
Тип: Строка
-
Ид: f3f3f68c-92e0-4e00-8ba2-52493debc712
Имя: Город
Тип: Строка
-
Ид: 6c81a69b-39a6-4b98-a9eb-a052aedbdbaa
Имя: Объект
Тип: Строка
-
Ид: f837c40b-174b-47d0-86a1-4e1bafb20200
Имя: Номер
Тип: Число
-
Ид: 667cdf92-867c-4d7d-944d-beeb6cd4922f
Имя: Доступность
Тип: Булево

Пример YAML-файла справочника ИнформационныеСистемы, реализующего этот контракт:

ВидЭлемента: Справочник
Ид: 6eb669ed-40af-4f39-b4de-598d06c78545
Имя: ИнформационныеСистемы
ОбластьВидимости: ВПодсистеме
НастройкиТипов:
Справочник.Объект:
Контракты:
- СправочникИнформационныхСистем.Объект
- УчастникиОповещений.Объект
Реквизиты:
-
Имя: Наименование
Длина: 255
-
Ид: 9fa89b2b-eb70-41c1-b63b-ef8e3f55a676
Имя: ИдентификаторОбъекта
Тип: Строка
# Другие реквизиты...
ТабличныеЧасти:
-
Ид: c2b384f5-7379-45ae-83ae-80ea3ad06a4b
Имя: ИнформацияОбОбъекте
Реквизиты:
-
Ид: 8840069f-24cb-4b41-95cb-b02e1ca26e34
Имя: Страна
Тип: Строка
-
Ид: f3f3f68c-92e0-4e00-8ba2-52493debc712
Имя: Город
Тип: Строка
-
Ид: 6c81a69b-39a6-4b98-a9eb-a052aedbdbaa
Имя: Объект
Тип: Строка
-
Ид: f837c40b-174b-47d0-86a1-4e1bafb20200
Имя: Номер
Тип: Число
-
Ид: 667cdf92-867c-4d7d-944d-beeb6cd4922f
Имя: Доступность
Тип: Булево

Выбор между табличной частью и реквизитом-коллекцией

Вместо табличной части вы можете использовать реквизит-коллекцию и хранимую структуру. Это может быть удобно в следующих случаях:

  • нужно хранить множество неизменяемых значений (например, чисел или ссылок), при этом добавление дополнительной информации к значениям не планируется;
  • если в проекте есть готовая хранимая структура, к которой не планируется добавление дополнительной информации, и нужно хранить множество таких структур.

Однако, если вам понадобится добавить дополнительную информацию в реквизит-коллекцию, то придется переносить данные и переходить к использованию табличной части. Например, если реквизит-коллекция имеет тип Массив<МоеПеречисление>, а вы хотите изменить его на Массив<МояСтруктура>, где МояСтруктура — это некая структура с двумя полями типа Строка и МоеПеречисление, то в этом случае «1С:Шина» не сможет выполнить реструктуризацию таблиц базы данных и вам придется переносить данные самостоятельно.

Также рекомендуется использовать табличную часть в контракте сущности, если в реализациях планируется расширение состава полей. При использовании реквизита-коллекции сделать это не получится.