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

Справочники и Данные · 10 мин

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

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

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

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

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

Что такое табличная часть и когда она нужна

Табличная часть добавляется справочнику на этапе конфигурирования и состоит из колонок (реквизитов табличной части) и строк. Каждая колонка имеет тип: строка, число, дата, булево или ссылка на другой объект. Платформа автоматически добавляет служебную колонку «Номер строки».

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

Ручное заполнение через форму элемента

Самый простой способ — открыть карточку элемента справочника и перейти на вкладку с табличной частью. Обычно она расположена внизу формы или на отдельной закладке. Для добавления строки нажмите кнопку «Добавить» (плюсик) на командной панели таблицы или клавишу Insert.

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

Ручное заполнение табличной части
  1. 1
    Откройте нужный элемент справочника на редактирование
  2. 2
    Перейдите на вкладку с табличной частью
  3. 3
    Нажмите «Добавить» или Insert для новой строки
  4. 4
    Заполните все обязательные колонки строки
  5. 5
    Повторите для остальных строк
  6. 6
    Нажмите «Записать» и проверьте, что строки сохранились

Полезные приёмы при ручном вводе

Строки можно копировать: выделите строку и нажмите F9 или кнопку «Скопировать» — это ускоряет ввод однотипных данных. Для изменения порядка строк используйте кнопки перемещения вверх/вниз или перетаскивание мышью, если оно включено в форме. Удаление строки — Delete или кнопка с крестиком.

Программное заполнение на встроенном языке

Разработчики заполняют табличные части кодом в модуле объекта, формы или во внешней обработке. Базовый шаблон: получить объект по ссылке, добавить строки через метод Добавить(), заполнить реквизиты строки и записать объект.

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

Если Не ЭлементСпр.Пустая() Тогда

ОбъектСпр = ЭлементСпр.ПолучитьОбъект();

НоваяСтрока = ОбъектСпр.ЕдиницыИзмерения.Добавить();

НоваяСтрока.ЕдиницаИзмерения = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию("шт");

НоваяСтрока.Коэффициент = 1;

ОбъектСпр.Записать();

КонецЕсли;

Ключевые моменты: работать нужно именно с объектом (ПолучитьОбъект()), а не со ссылкой — ссылка доступна только для чтения. После изменений обязателен вызов Записать(), иначе строки не сохранятся. Если нужно полностью перезаполнить табличную часть, сначала очистите её методом Очистить().

Заполнение при создании нового элемента

Если элемент справочника создаётся кодом с нуля, порядок такой же: СоздатьЭлемент(), заполнить реквизиты шапки, добавить строки табличной части, записать. Удобно заполнять табличную часть в обработчике «ОбработкаЗаполнения» модуля объекта — тогда строки появятся автоматически и при интерактивном создании элемента.

Массовая загрузка из Excel и внешних источников

Когда строк сотни или тысячи, ручной ввод неприемлем. Стандартный путь — обработка «Загрузка данных из табличного документа», которая входит в состав Библиотеки стандартных подсистем и доступна во многих типовых конфигурациях через раздел «Администрирование» или «НСИ». Она умеет сопоставлять колонки файла с реквизитами, включая реквизиты табличных частей.

Альтернатива — универсальные обработки загрузки из Excel, которые распространяются отдельно. При их использовании проверьте: поддерживает ли обработка именно табличные части (не все умеют), как она ищет элемент-владелец (по коду, наименованию или GUID) и что делает при отсутствии элемента — создаёт новый или пропускает строку.

Способы заполнения табличной части

Ручной ввод

Подходит для 1–20 строк и разовых правок. Не требует прав и навыков, но медленно и риск опечаток.

Программный код

Для разработчиков: гибкая логика, проверки, заполнение по условиям. Требует доступа к конфигуратору или внешней обработке.

Загрузка из файла

Для массового переноса из Excel или другой базы. Требует подготовленного файла и сопоставления колонок.

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

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

Частая проблема при загрузке из файлов — дубли строк, когда обработку запускают повторно без очистки табличной части. Вторая типичная ситуация: ссылочные колонки остаются пустыми, потому что искомый элемент не найден по наименованию из-за лишних пробелов или разного регистра. Третья — обязательные колонки не заполнены, и запись объекта завершается с ошибкой проверки заполнения.

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

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

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

Совпадает с количеством строк в источнике

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

Строк меньше или больше — есть пропуски или дубли

Ссылочные колонки
Норма

Все заполнены, ссылки открываются

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

Пустые значения или битые ссылки

Обязательные реквизиты
Норма

Элемент записывается без ошибок проверки заполнения

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

Сообщения о незаполненных полях при записи

Ограничения и особенности

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

В-третьих, если табличная часть содержит тысячи строк, форма элемента начинает открываться медленно, а запись объекта занимает заметное время. В таких случаях архитектурно правильнее вынести данные в отдельный регистр сведений с измерением «элемент справочника» — это снимает ограничение на запись объекта целиком и ускоряет работу.

Часто задаваемые вопросы

Можно ли заполнить табличную часть у нескольких элементов справочника сразу?

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

Почему при записи элемента строки табличной части пропадают?

Чаще всего причина в том, что в обработчике ПередЗаписью или ПриЗаписи стоит код, который очищает табличную часть, либо данные добавлялись в реквизит формы, но не переносились в объект. Также проверьте, не работаете ли вы с копией объекта, полученной до изменений.

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

Интерактивно — через копирование всего элемента (F9 в списке): табличные части копируются вместе с карточкой. Программно — циклом по строкам источника с добавлением строк в приёмник, либо методом Загрузить(): ОбъектПриёмник.ТабличнаяЧасть.Загрузить(ОбъектИсточник.ТабличнаяЧасть.Выгрузить()).

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

Да, в конфигураторе у реквизита табличной части есть свойство «Проверка заполнения» — установите «Выдавать ошибку». Тогда платформа не даст записать элемент с пустой колонкой. Дополнительно можно реализовать свою логику в обработчике ОбработкаПроверкиЗаполнения модуля объекта.

Что делать, если табличной части нет в нужном справочнике?

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

Влияет ли размер табличной части на скорость работы базы?

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

Итог

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

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