К статье
Практический материал

Разработка и Конфигурация · 11 мин

Как создать табличную часть справочника в 1С

Пошаговая инструкция по созданию табличной части справочника в 1С через конфигуратор: настройка реквизитов, формы, кода, типичные ошибки и проверка результата.

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

Создаётся табличная часть только в конфигураторе — в пользовательском режиме «1С:Предприятие» изменить структуру метаданных нельзя. Понадобятся права на изменение конфигурации, а в клиент-серверном варианте — возможность выполнить обновление конфигурации базы данных, что обычно требует монопольного доступа.

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

Когда табличная часть — правильное решение, а когда нет

Табличная часть подходит, когда набор строк жёстко привязан к элементу справочника и не имеет самостоятельного смысла вне него. Классические примеры: состав комплекта номенклатуры, телефоны и email контрагента, этапы производственного маршрута, перечень файлов-вложений. Строки табличной части записываются и удаляются вместе с элементом-владельцем.

Если же данные нужно анализировать в разрезе периодов, сравнивать между элементами или строить по ним отчёты с группировками, лучше использовать регистр сведений с измерением на элемент справочника. Табличная часть неудобна для запросов: обращение к ней идёт через точку (Справочник.Номенклатура.СоставКомплекта), и сложная аналитика по таким данным пишется тяжелее.

Способы хранения связанных данных

Табличная часть справочника

Строки принадлежат элементу, удаляются вместе с ним. Подходит для составов, контактов, настроек. Слабо подходит для аналитики и отчётов.

Подчинённый справочник

Каждая запись — отдельный объект со своим кодом и наименованием. Подходит, когда строкам нужны собственные реквизиты, права и ссылки из документов.

Регистр сведений

Лучший вариант для аналитики, периодических данных и отчётов. Требует отдельной формы или обработки для удобного ввода.

Добавление табличной части в конфигураторе

Откройте конфигуратор, в дереве конфигурации найдите ветку «Справочники» и дважды щёлкните нужный объект. В окне редактирования перейдите на вкладку «Данные». В нижней части окна расположены три списка: реквизиты, табличные части и реквизиты табличных частей. Нажмите кнопку добавления над списком «Табличные части» и задайте имя, например «КонтактныеЛица» или «СоставКомплекта».

Имя табличной части — это идентификатор: оно пишется без пробелов, в русской или английской нотации, и именно по нему вы будете обращаться к данным в коде и запросах. Синоним заполните понятным для пользователя — он отобразится как заголовок таблицы на форме.

После создания самой табличной части добавьте её реквизиты — колонки будущей таблицы. Выделите табличную часть в списке и нажмите кнопку добавления реквизита. Для каждого реквизита укажите имя, тип данных и, при необходимости, длину строки или состав даты.

Порядок действий в конфигураторе
  1. 1
    Откройте конфигуратор и найдите нужный справочник в дереве конфигурации
  2. 2
    Перейдите на вкладку «Данные» окна редактирования объекта
  3. 3
    Добавьте табличную часть, задайте имя и синоним
  4. 4
    Добавьте реквизиты табличной части с нужными типами данных
  5. 5
    Создайте или откройте форму элемента и перенесите табличную часть на форму
  6. 6
    Обновите конфигурацию базы данных (F7) и подтвердите реструктуризацию
  7. 7
    Откройте элемент справочника в режиме 1С:Предприятие и проверьте ввод строк

Настройка реквизитов табличной части

Для каждой колонки выбирайте тип осознанно. Если колонка ссылается на другой объект (например, «Номенклатура» в составе комплекта), укажите ссылочный тип — СправочникСсылка.Номенклатура. Для количества используйте Число с нужной разрядностью дробной части, для цен и сумм — достаточную точность, чтобы избежать ошибок округления.

Обратите внимание на свойство «Проверка заполнения» у реквизита. Значение «Выдавать ошибку» заставит платформу блокировать запись элемента, пока колонка не заполнена. Это удобно для обязательных данных, но слишком жёсткая проверка по всем колонкам мешает пользователям сохранять черновики.

Стандартный реквизит «НомерСтроки» платформа ведёт автоматически — добавлять его вручную не нужно. Если требуется ключевое поле для связи строк между собой (как «КлючСтроки» в типовых конфигурациях), добавьте реквизит типа Число или Строка и заполняйте его программно.

Вывод табличной части на форму элемента

Само по себе создание табличной части в метаданных не делает её видимой для пользователя — её нужно разместить на форме элемента. Если форма ещё не создана, на вкладке «Формы» окна редактирования справочника нажмите кнопку добавления формы элемента и пройдите конструктор: платформа предложит автоматически включить табличную часть в реквизиты формы.

Если форма уже существует, откройте её в конфигураторе. В правой панели реквизитов формы разверните узел «Объект», найдите табличную часть и перетащите её в дерево элементов формы в нужное место — например, на отдельную закладку страницы. Платформа создаст таблицу формы с колонками по реквизитам.

Для удобства пользователей настройте командную панель таблицы: кнопки добавления, удаления, перемещения строк и копирования добавляются автоматически, но можно включить и группировку по папкам, сортировку, вывод итогов по числовым колонкам через свойство «Подвал» таблицы формы.

Программная работа с табличной частью

В коде табличная часть доступна как коллекция строк объекта справочника. Чтобы заполнить её программно, получите объект элемента методом ПолучитьОбъект(), добавьте строки и запишите объект. Работа через ссылку без получения объекта невозможна — ссылка предназначена только для чтения реквизитов.

ЭлементОбъект = Справочники.Номенклатура.НайтиПоКоду("000001").ПолучитьОбъект();

ЭлементОбъект.СоставКомплекта.Очистить();

НоваяСтрока = ЭлементОбъект.СоставКомплекта.Добавить();

НоваяСтрока.Комплектующая = Справочники.Номенклатура.НайтиПоКоду("000015");

НоваяСтрока.Количество = 2;

ЭлементОбъект.Записать();

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

ВЫБРАТЬ

Состав.Ссылка КАК Комплект,

Состав.Комплектующая КАК Комплектующая,

Состав.Количество КАК Количество

ИЗ

Справочник.Номенклатура.СоставКомплекта КАК Состав

ГДЕ

Состав.Ссылка = &Комплект

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

Проверка результата и типичные ошибки

После обновления конфигурации базы данных откройте элемент справочника в режиме предприятия. Признаки корректной настройки: таблица отображается на форме, строки добавляются и сохраняются, после перезаписи элемента данные не пропадают, запрос к табличной части возвращает строки.

Если табличная часть не видна на форме — чаще всего она просто не перенесена в дерево элементов формы. Если кнопка «Добавить» недоступна — проверьте свойство таблицы «ИзменятьСоставСтрок» и права пользователя на справочник. Если данные пропадают после записи — убедитесь, что в модуле формы нет кода, очищающего табличную часть при записи или чтении объекта.

Типичные ошибки
01
Табличная часть создана в метаданных, но не выведена на форму — пользователь не видит таблицу и считает, что «ничего не работает»
02
Попытка изменить строки через ссылку без ПолучитьОбъект() — изменения не сохраняются, ошибка не всегда очевидна
03
Избыточная проверка заполнения всех колонок — пользователи не могут сохранить черновик элемента
04
Хранение аналитических данных в табличной части вместо регистра сведений — отчёты становятся громоздкими и медленными
05
Изменение типа реквизита в рабочей базе без копии — потеря данных при реструктуризации
Контрольные точки

Как проверить результат

Отображение на форме
Норма

Таблица видна на форме элемента, колонки соответствуют реквизитам

Тревожный признак

Таблицы нет или часть колонок отсутствует — проверьте дерево элементов формы

Сохранение данных
Норма

Строки сохраняются и отображаются после перезакрытия элемента

Тревожный признак

Строки пропадают — ищите очистку в коде формы или запись другого объекта

Доступ из запроса
Норма

Запрос к Справочник.Имя.ТабличнаяЧасть возвращает строки

Тревожный признак

Ошибка «таблица не найдена» — проверьте имя табличной части в метаданных

Частые вопросы

Можно ли добавить табличную часть справочника без конфигуратора, в режиме предприятия?

Нет. Табличная часть — это объект метаданных, и создать её можно только в конфигураторе с последующим обновлением конфигурации базы данных. В режиме предприятия доступны лишь дополнительные реквизиты и сведения через механизм БСП, но это не полноценная табличная часть.

Сколько табличных частей может быть у одного справочника?

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

Почему в запросе не видна табличная часть справочника?

Проверьте точное имя табличной части в конфигураторе — обращение идёт строго по имени: Справочник.ИмяСправочника.ИмяТабличнойЧасти. Также убедитесь, что конфигурация базы данных обновлена: если табличная часть добавлена, но обновление не выполнено, запрос завершится ошибкой.

Как перенести данные табличной части при внедрении в другую базу?

Строки табличной части переносятся вместе с элементом-владельцем. При обмене через типовые правила конвертации или универсальный обмен данными XML табличные части выгружаются автоматически как часть объекта. При ручном переносе обработкой нужно получать объект, заполнять строки и записывать.

Можно ли сделать табличную часть доступной только для чтения?

Да. На форме установите у таблицы свойство «ТолькоПросмотр» или снимите разрешение «ИзменятьСоставСтрок». Для разграничения по пользователям используйте роли: право «Изменение» на справочник распространяется и на его табличные части, поэтому тонкая настройка обычно делается программно в обработчиках формы.

Чем табличная часть отличается от дополнительных реквизитов в типовых конфигурациях?

Дополнительные реквизиты и сведения — механизм библиотеки стандартных подсистем, позволяющий добавлять поля без изменения конфигурации, но они хранятся в отдельных служебных таблицах и медленнее в запросах. Табличная часть — «родная» структура объекта: быстрее, надёжнее, но требует доработки конфигурации.

Итог

Что важно запомнить

Табличная часть справочника создаётся в конфигураторе на вкладке «Данные»: добавьте табличную часть, определите реквизиты, выведите таблицу на форму элемента и обновите конфигурацию базы данных. Программно строки заполняются через ПолучитьОбъект() и Записать(), в запросах — через обращение по имени. Для аналитики и отчётов вместо табличной части используйте регистр сведений, а перед изменением структуры рабочей базы всегда делайте резервную копию.