Разработка и Конфигурация · 11 мин
Как создать табличную часть справочника в 1С
Пошаговая инструкция по созданию табличной части справочника в 1С через конфигуратор: настройка реквизитов, формы, кода, типичные ошибки и проверка результата.
Табличная часть справочника в 1С — это вложенная таблица, которая хранится внутри каждого элемента справочника и позволяет описывать множественные данные: состав комплекта, контактные лица контрагента, список аналогов товара, график работы подразделения. Без табличной части такие данные пришлось бы хранить в отдельных справочниках с подчинением или в регистрах сведений, что не всегда удобно.
Создаётся табличная часть только в конфигураторе — в пользовательском режиме «1С:Предприятие» изменить структуру метаданных нельзя. Понадобятся права на изменение конфигурации, а в клиент-серверном варианте — возможность выполнить обновление конфигурации базы данных, что обычно требует монопольного доступа.
Ниже разобран полный цикл: от добавления объекта в дереве конфигурации до программного заполнения строк и проверки результата. Примеры ориентированы на управляемые формы (платформа 8.3), но логика та же и для обычных форм.
Когда табличная часть — правильное решение, а когда нет
Табличная часть подходит, когда набор строк жёстко привязан к элементу справочника и не имеет самостоятельного смысла вне него. Классические примеры: состав комплекта номенклатуры, телефоны и email контрагента, этапы производственного маршрута, перечень файлов-вложений. Строки табличной части записываются и удаляются вместе с элементом-владельцем.
Если же данные нужно анализировать в разрезе периодов, сравнивать между элементами или строить по ним отчёты с группировками, лучше использовать регистр сведений с измерением на элемент справочника. Табличная часть неудобна для запросов: обращение к ней идёт через точку (Справочник.Номенклатура.СоставКомплекта), и сложная аналитика по таким данным пишется тяжелее.
Способы хранения связанных данных
Строки принадлежат элементу, удаляются вместе с ним. Подходит для составов, контактов, настроек. Слабо подходит для аналитики и отчётов.
Каждая запись — отдельный объект со своим кодом и наименованием. Подходит, когда строкам нужны собственные реквизиты, права и ссылки из документов.
Лучший вариант для аналитики, периодических данных и отчётов. Требует отдельной формы или обработки для удобного ввода.
Добавление табличной части в конфигураторе
Откройте конфигуратор, в дереве конфигурации найдите ветку «Справочники» и дважды щёлкните нужный объект. В окне редактирования перейдите на вкладку «Данные». В нижней части окна расположены три списка: реквизиты, табличные части и реквизиты табличных частей. Нажмите кнопку добавления над списком «Табличные части» и задайте имя, например «КонтактныеЛица» или «СоставКомплекта».
Имя табличной части — это идентификатор: оно пишется без пробелов, в русской или английской нотации, и именно по нему вы будете обращаться к данным в коде и запросах. Синоним заполните понятным для пользователя — он отобразится как заголовок таблицы на форме.
После создания самой табличной части добавьте её реквизиты — колонки будущей таблицы. Выделите табличную часть в списке и нажмите кнопку добавления реквизита. Для каждого реквизита укажите имя, тип данных и, при необходимости, длину строки или состав даты.
- 1Откройте конфигуратор и найдите нужный справочник в дереве конфигурации
- 2Перейдите на вкладку «Данные» окна редактирования объекта
- 3Добавьте табличную часть, задайте имя и синоним
- 4Добавьте реквизиты табличной части с нужными типами данных
- 5Создайте или откройте форму элемента и перенесите табличную часть на форму
- 6Обновите конфигурацию базы данных (F7) и подтвердите реструктуризацию
- 7Откройте элемент справочника в режиме 1С:Предприятие и проверьте ввод строк
Настройка реквизитов табличной части
Для каждой колонки выбирайте тип осознанно. Если колонка ссылается на другой объект (например, «Номенклатура» в составе комплекта), укажите ссылочный тип — СправочникСсылка.Номенклатура. Для количества используйте Число с нужной разрядностью дробной части, для цен и сумм — достаточную точность, чтобы избежать ошибок округления.
Обратите внимание на свойство «Проверка заполнения» у реквизита. Значение «Выдавать ошибку» заставит платформу блокировать запись элемента, пока колонка не заполнена. Это удобно для обязательных данных, но слишком жёсткая проверка по всем колонкам мешает пользователям сохранять черновики.
Стандартный реквизит «НомерСтроки» платформа ведёт автоматически — добавлять его вручную не нужно. Если требуется ключевое поле для связи строк между собой (как «КлючСтроки» в типовых конфигурациях), добавьте реквизит типа Число или Строка и заполняйте его программно.
Вывод табличной части на форму элемента
Само по себе создание табличной части в метаданных не делает её видимой для пользователя — её нужно разместить на форме элемента. Если форма ещё не создана, на вкладке «Формы» окна редактирования справочника нажмите кнопку добавления формы элемента и пройдите конструктор: платформа предложит автоматически включить табличную часть в реквизиты формы.
Если форма уже существует, откройте её в конфигураторе. В правой панели реквизитов формы разверните узел «Объект», найдите табличную часть и перетащите её в дерево элементов формы в нужное место — например, на отдельную закладку страницы. Платформа создаст таблицу формы с колонками по реквизитам.
Для удобства пользователей настройте командную панель таблицы: кнопки добавления, удаления, перемещения строк и копирования добавляются автоматически, но можно включить и группировку по папкам, сортировку, вывод итогов по числовым колонкам через свойство «Подвал» таблицы формы.
Программная работа с табличной частью
В коде табличная часть доступна как коллекция строк объекта справочника. Чтобы заполнить её программно, получите объект элемента методом ПолучитьОбъект(), добавьте строки и запишите объект. Работа через ссылку без получения объекта невозможна — ссылка предназначена только для чтения реквизитов.
ЭлементОбъект = Справочники.Номенклатура.НайтиПоКоду("000001").ПолучитьОбъект();
ЭлементОбъект.СоставКомплекта.Очистить();
НоваяСтрока = ЭлементОбъект.СоставКомплекта.Добавить();
НоваяСтрока.Комплектующая = Справочники.Номенклатура.НайтиПоКоду("000015");
НоваяСтрока.Количество = 2;
ЭлементОбъект.Записать();
В запросах табличная часть доступна как виртуальная таблица с указанием имени через точку. При этом в выборку попадают все строки всех элементов, поэтому почти всегда нужно условие по ссылке-владельцу.
ВЫБРАТЬ
Состав.Ссылка КАК Комплект,
Состав.Комплектующая КАК Комплектующая,
Состав.Количество КАК Количество
ИЗ
Справочник.Номенклатура.СоставКомплекта КАК Состав
ГДЕ
Состав.Ссылка = &Комплект
При массовом заполнении табличных частей в цикле вызывайте Записать() один раз на элемент, а не на каждую строку. Запись объекта — это транзакция, и тысячи лишних записей заметно замедляют обработку и раздувают журнал регистрации.
Проверка результата и типичные ошибки
После обновления конфигурации базы данных откройте элемент справочника в режиме предприятия. Признаки корректной настройки: таблица отображается на форме, строки добавляются и сохраняются, после перезаписи элемента данные не пропадают, запрос к табличной части возвращает строки.
Если табличная часть не видна на форме — чаще всего она просто не перенесена в дерево элементов формы. Если кнопка «Добавить» недоступна — проверьте свойство таблицы «ИзменятьСоставСтрок» и права пользователя на справочник. Если данные пропадают после записи — убедитесь, что в модуле формы нет кода, очищающего табличную часть при записи или чтении объекта.
Как проверить результат
Таблица видна на форме элемента, колонки соответствуют реквизитам
Таблицы нет или часть колонок отсутствует — проверьте дерево элементов формы
Строки сохраняются и отображаются после перезакрытия элемента
Строки пропадают — ищите очистку в коде формы или запись другого объекта
Запрос к Справочник.Имя.ТабличнаяЧасть возвращает строки
Ошибка «таблица не найдена» — проверьте имя табличной части в метаданных
Частые вопросы
Можно ли добавить табличную часть справочника без конфигуратора, в режиме предприятия?
Нет. Табличная часть — это объект метаданных, и создать её можно только в конфигураторе с последующим обновлением конфигурации базы данных. В режиме предприятия доступны лишь дополнительные реквизиты и сведения через механизм БСП, но это не полноценная табличная часть.
Сколько табличных частей может быть у одного справочника?
Количество табличных частей у справочника не ограничено жёстко. Практический предел определяется удобством: форма с пятью-шестью таблицами становится тяжёлой для пользователя, поэтому избыточные наборы данных лучше выносить в регистры сведений.
Почему в запросе не видна табличная часть справочника?
Проверьте точное имя табличной части в конфигураторе — обращение идёт строго по имени: Справочник.ИмяСправочника.ИмяТабличнойЧасти. Также убедитесь, что конфигурация базы данных обновлена: если табличная часть добавлена, но обновление не выполнено, запрос завершится ошибкой.
Как перенести данные табличной части при внедрении в другую базу?
Строки табличной части переносятся вместе с элементом-владельцем. При обмене через типовые правила конвертации или универсальный обмен данными XML табличные части выгружаются автоматически как часть объекта. При ручном переносе обработкой нужно получать объект, заполнять строки и записывать.
Можно ли сделать табличную часть доступной только для чтения?
Да. На форме установите у таблицы свойство «ТолькоПросмотр» или снимите разрешение «ИзменятьСоставСтрок». Для разграничения по пользователям используйте роли: право «Изменение» на справочник распространяется и на его табличные части, поэтому тонкая настройка обычно делается программно в обработчиках формы.
Чем табличная часть отличается от дополнительных реквизитов в типовых конфигурациях?
Дополнительные реквизиты и сведения — механизм библиотеки стандартных подсистем, позволяющий добавлять поля без изменения конфигурации, но они хранятся в отдельных служебных таблицах и медленнее в запросах. Табличная часть — «родная» структура объекта: быстрее, надёжнее, но требует доработки конфигурации.
Что важно запомнить
Табличная часть справочника создаётся в конфигураторе на вкладке «Данные»: добавьте табличную часть, определите реквизиты, выведите таблицу на форму элемента и обновите конфигурацию базы данных. Программно строки заполняются через ПолучитьОбъект() и Записать(), в запросах — через обращение по имени. Для аналитики и отчётов вместо табличной части используйте регистр сведений, а перед изменением структуры рабочей базы всегда делайте резервную копию.