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

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

Как сделать табличную часть в 1С

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

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

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

Когда нужна табличная часть, а когда другой механизм

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

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

Сравнение вариантов хранения строк

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

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

Отдельный документ со ссылкой

Строки самостоятельны, имеют номер и дату. Подходит, когда строка — полноценная хозяйственная операция.

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

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

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

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

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

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

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

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

Обратите внимание на свойство «Проверка заполнения». Установите «Выдавать ошибку» для обязательных колонок — платформа сама не даст записать объект с пустой строкой. Для числовых колонок задайте минимальное и максимальное значение, если отрицательные или нулевые значения недопустимы по логике учёта.

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

Создание табличной части в структуре данных не добавляет её на форму автоматически. В управляемом приложении откройте форму объекта (или создайте её через закладку «Формы» → «Добавить» → «Форма объекта»). В правой части редактора формы находится дерево реквизитов: перетащите табличную часть «Товары» из реквизитов в дерево элементов формы слева.

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

Работа с табличной частью в коде

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

Для расчёта суммы строки при изменении цены или количества используйте обработчики событий формы: ТоварыКоличествоПриИзменении и ТоварыЦенаПриИзменении. Внутри обработчика получите текущую строку через Элементы.Товары.ТекущиеДанные и пересчитайте сумму. Общий итог по документу удобно выводить через Объект.Товары.Итог("Сумма").

&НаКлиенте

Процедура ТоварыКоличествоПриИзменении(Элемент)

Строка = Элементы.Товары.ТекущиеДанные;

Если Строка <> Неопределено Тогда

Строка.Сумма = Строка.Количество * Строка.Цена;

КонецЕсли;

КонецПроцедуры

Для программного заполнения строк в модуле объекта используйте метод Добавить(): НоваяСтрока = Товары.Добавить(); НоваяСтрока.Номенклатура = НайденныйТовар;. Очистка всей табличной части выполняется методом Товары.Очистить().

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

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

Контрольные точки

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

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

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

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

Таблицы нет или колонки пустые — таблица не связана с реквизитом формы

Сохранение строк
Норма

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

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

Строки пропадают — объект записывается с ошибкой или табличная часть очищается в коде

Проверка заполнения
Норма

Пустая обязательная колонка блокирует запись с сообщением

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

Записывается с пустыми значениями — не включена проверка заполнения

Пересчёт сумм
Норма

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

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

Сумма не меняется — обработчик события не назначен или не получает текущую строку

Типичные ошибки и ограничения

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

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

Типичные ошибки
01
Добавили реквизиты, но забыли вывести табличную часть на форму — пользователь не видит таблицу
02
Использовали строку вместо ссылки на справочник — теряется контроль целостности и отборы
03
Нет проверки заполнения обязательных колонок — в базе появляются строки с пустыми значениями
04
Пересчёт сумм сделан только на клиенте — при программном создании документа суммы остаются нулевыми
05
Изменили тип реквизита в рабочей базе без анализа — при реструктуризации данные колонки могут быть очищены

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

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

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

Если табличная часть нужна в типовой конфигурации на поддержке, добавляйте её через расширение конфигурации, а не изменением основной конфигурации. Это сохранит возможность автоматического обновления и не потребует снятия объекта с поддержки.
ПЗ
Практическое замечание

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

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

Да. Создание табличной части, реквизитов и вывод на форму выполняются мышью в конфигураторе без единой строки кода. Код понадобится только для автоматических расчётов (суммы, итоги) и нестандартной логики заполнения.

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

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

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

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

Чем табличная часть отличается от таблицы значений?

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

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

Жёсткого практического ограничения для типовых задач нет: документ может содержать несколько табличных частей, например «Товары», «Услуги» и «Оплаты». Каждая выводится на форму отдельной таблицей, часто на разных вкладках.

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

Программно: переберите строки источника в цикле и для каждой создайте строку в приёмнике методом Добавить() с копированием значений реквизитов. Для копирования всех колонок сразу используйте ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаИсточника).

Итог

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

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