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

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

Зачем нужна табличная часть в 1С и как с ней работать

Зачем нужна табличная часть в 1С, как она хранит строки документа, чем отличается от реквизитов и как правильно её настраивать и заполнять.

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

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

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

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

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

Табличные части есть у большинства типовых объектов: у документов («Товары» в реализации, «Начисления» в документе начисления зарплаты), у справочников (например, состав комплекта у номенклатуры), у планов видов характеристик и у некоторых других объектов. Один объект может содержать несколько табличных частей: в заказе покупателя это «Товары», «Услуги», «Этапы оплаты».

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

Зачем нужна табличная часть: какие задачи она решает

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

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

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

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

Чем табличная часть отличается от реквизитов шапки

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

КритерийРеквизит шапкиТабличная часть
Количество значенийОдно на объектПроизвольное число строк
ПримерКонтрагент, склад, договорТовары, услуги, начисления
Участие в итогахНе суммируетсяСтроки суммируются в итог документа
Хранение в базеПоле основной таблицыОтдельная таблица со ссылкой на объект
Изменение структурыДобавить реквизит — простоДобавить колонку — тоже просто, но влияет на все строки

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

Как табличная часть устроена на уровне данных и кода

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

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

bsl
Для Каждого Строка Из Объект.Товары Цикл
    Строка.Сумма = Строка.Количество * Строка.Цена;
КонецЦикла;

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

ИтогСумма = Объект.Товары.Итог("Сумма");

У коллекции табличной части есть полезные встроенные методы: Итог("Сумма") для подсчёта итога по колонке, Найти() и НайтиСтроки() для поиска, Выгрузить() для получения таблицы значений, Свернуть() для группировки строк. Этого набора достаточно для большинства прикладных задач без прямых запросов к базе.

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

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

Порядок заполнения табличной части документа
  1. 1
    Заполните шапку документа: контрагента, договор, склад — от них зависят цены и счета учёта в строках
  2. 2
    Добавьте строки кнопкой «Добавить» или через подбор номенклатуры
  3. 3
    Проверьте автоматически подставленные цены, ставки НДС и счета в каждой строке
  4. 4
    Убедитесь, что итоговая сумма документа совпадает с первичным документом
  5. 5
    Проведите документ и проверьте движения по регистрам через «Ещё → Движения документа»

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

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

Когда табличная часть не подходит: ограничения и альтернативы

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

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

Маршрут решения

Что выбрать для хранения данных

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

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

Типичные ошибки при работе с табличными частями

Типичные ошибки
01
Хранение повторяющихся данных в реквизитах «Товар1, Товар2, Товар3» вместо табличной части — ломает отчёты и ограничивает число позиций
02
Заполнение строк программно без вызова расчётов сумм и налогов — итоги документа расходятся со строками
03
Прямая правка таблиц базы данных в обход платформы — нарушается целостность и движения по регистрам
04
Использование табличной части для данных, на которые нужны ссылки извне — приходится переделывать структуру
05
Выборка табличной части запросом без отбора по ссылке — тяжёлые запросы и падение производительности

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

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

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

Итог документа
Норма

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

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

Итог отличается — есть строки без суммы или с неверным пересчётом

Движения по регистрам
Норма

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

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

Движений нет, они задвоены или не по всем строкам

Печатная форма
Норма

Все позиции выведены с верными количеством и суммами

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

Строки пропущены или суммы не сходятся с экранной формой

Частые вопросы о табличных частях

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

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

Удалятся ли строки табличной части при удалении документа?

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

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

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

Как посчитать итог по колонке табличной части в коде?

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

Почему отчёт не видит данные из табличной части документа?

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

Сколько строк можно добавить в табличную часть?

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

Итог

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

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