Разработка и Конфигурация · 12 мин
Зачем нужна табличная часть в 1С и как с ней работать
Зачем нужна табличная часть в 1С, как она хранит строки документа, чем отличается от реквизитов и как правильно её настраивать и заполнять.
Табличная часть — это набор строк, встроенный в объект 1С: документ, справочник или обработку. Если шапка документа хранит одно значение каждого реквизита (контрагент, дата, договор), то табличная часть хранит произвольное количество однотипных строк: товары в накладной, этапы работ в акте, сотрудники в ведомости. Без неё пришлось бы создавать отдельный документ на каждую позицию или искусственно ограничивать число строк.
Механизм решает фундаментальную задачу учёта: связать «один ко многим» внутри одного объекта. Один приходный ордер — много позиций номенклатуры. Один сотрудник в кадровом документе — много начислений. Платформа хранит эти строки физически в отдельных таблицах базы данных, но логически они принадлежат своему объекту: при удалении документа удаляются и его строки, при копировании — копируются вместе с ним.
Понимание того, зачем нужна табличная часть, важно не только разработчику. Пользователю это помогает правильно заполнять документы и искать ошибки, аналитику — проектировать структуру учёта, а программисту — выбирать между табличной частью, регистром сведений и отдельным справочником.
Что такое табличная часть и где она встречается
Табличная часть — это коллекция строк одинаковой структуры, подчинённая конкретному объекту конфигурации. У каждой строки есть набор колонок (реквизитов табличной части): например, «Номенклатура», «Количество», «Цена», «Сумма». Количество строк не фиксировано — от нуля до практически любого разумного предела.
Табличные части есть у большинства типовых объектов: у документов («Товары» в реализации, «Начисления» в документе начисления зарплаты), у справочников (например, состав комплекта у номенклатуры), у планов видов характеристик и у некоторых других объектов. Один объект может содержать несколько табличных частей: в заказе покупателя это «Товары», «Услуги», «Этапы оплаты».
Ключевое свойство: строки табличной части не являются самостоятельными объектами. На них нельзя сослаться из другого документа напрямую, у них нет собственного номера и даты, они не проводятся сами по себе. Движения по регистрам делает документ целиком, используя данные своих табличных частей.
Зачем нужна табличная часть: какие задачи она решает
Первая задача — многопозиционность документов. Реальная накладная содержит десятки позиций, и заводить отдельный документ на каждую строку было бы неудобно и медленно. Табличная часть позволяет оформить одну печатную форму, один номер, один контрагент — и любое количество товаров внутри.
Вторая задача — целостность данных. Строки не существуют без документа-владельца: нельзя случайно удалить одну позицию из базы, оставив «дыру», нельзя потерять связь строки с шапкой. Платформа гарантирует, что при записи, копировании, пометке на удаление и восстановлении документ и его табличные части обрабатываются как единое целое.
Третья задача — автоматические расчёты. Типовые конфигурации пересчитывают суммы, налоги и итоги при изменении строк: изменили количество — пересчиталась сумма строки и итог документа. Это возможно, потому что структура строк жёстко определена, и алгоритмы знают, какие колонки участвуют в расчёте.
Четвёртая задача — построение отчётов и проведение. При проведении документ обходит свои табличные части и формирует движения по регистрам: каждая строка «Товаров» превращается в запись регистра остатков. Отчёты строятся уже по регистрам, а табличная часть остаётся «исходным материалом» для них.
Чем табличная часть отличается от реквизитов шапки
Реквизит шапки хранит одно значение на объект: один контрагент, одна организация, одна дата. Табличная часть хранит множество строк, каждая из которых содержит свой набор значений. Выбор между ними при проектировании сводится к простому вопросу: сколько таких значений может быть у объекта — строго одно или произвольное количество.
| Критерий | Реквизит шапки | Табличная часть |
|---|---|---|
| Количество значений | Одно на объект | Произвольное число строк |
| Пример | Контрагент, склад, договор | Товары, услуги, начисления |
| Участие в итогах | Не суммируется | Строки суммируются в итог документа |
| Хранение в базе | Поле основной таблицы | Отдельная таблица со ссылкой на объект |
| Изменение структуры | Добавить реквизит — просто | Добавить колонку — тоже просто, но влияет на все строки |
Типичная ошибка проектирования — пытаться хранить повторяющиеся данные в реквизитах: «Товар1», «Товар2», «Товар3». Это ограничивает число позиций, ломает отчёты и расчёты. Если значений может быть больше одного — нужна табличная часть.
Как табличная часть устроена на уровне данных и кода
В базе данных каждая табличная часть хранится в собственной таблице, где каждая строка содержит ссылку на объект-владелец и номер строки. Поэтому платформа быстро выбирает все строки конкретного документа и не смешивает их со строками других документов.
Во встроенном языке доступ к табличной части выполняется как к коллекции. Обращение выглядит так: Документ.Товары — это коллекция строк, у каждой строки есть свойства-колонки: Строка.Номенклатура, Строка.Сумма. Типовые операции — обход циклом, добавление, удаление и поиск строк.
Для Каждого Строка Из Объект.Товары Цикл
Строка.Сумма = Строка.Количество * Строка.Цена;
КонецЦикла;
НоваяСтрока = Объект.Товары.Добавить();
НоваяСтрока.Номенклатура = НайденнаяНоменклатура;
ИтогСумма = Объект.Товары.Итог("Сумма");У коллекции табличной части есть полезные встроенные методы: Итог("Сумма") для подсчёта итога по колонке, Найти() и НайтиСтроки() для поиска, Выгрузить() для получения таблицы значений, Свернуть() для группировки строк. Этого набора достаточно для большинства прикладных задач без прямых запросов к базе.
Как правильно заполнять и редактировать табличную часть
В пользовательском режиме строки добавляются кнопкой «Добавить», подбором из справочника или вставкой из буфера обмена. В типовых конфигурациях часто доступен подбор с остатками и ценами — он быстрее ручного ввода и снижает число ошибок в номенклатуре.
- 1Заполните шапку документа: контрагента, договор, склад — от них зависят цены и счета учёта в строках
- 2Добавьте строки кнопкой «Добавить» или через подбор номенклатуры
- 3Проверьте автоматически подставленные цены, ставки НДС и счета в каждой строке
- 4Убедитесь, что итоговая сумма документа совпадает с первичным документом
- 5Проведите документ и проверьте движения по регистрам через «Ещё → Движения документа»
При программном заполнении важно вызывать те же обработчики, что работают при интерактивном вводе, либо явно повторять их логику: расчёт суммы, налогов, заполнение счетов. Простое присвоение Строка.Номенклатура = Значение без сопутствующих расчётов — частая причина расхождений в проведении.
Если нужно массово изменить строки уже проведённых документов, безопаснее делать это через перепроведение после изменения, а не прямой записью в базу. Прямая правка минует контроль остатков и последовательностей, и расхождения всплывут только в отчётах.
Когда табличная часть не подходит: ограничения и альтернативы
Табличная часть не подходит, когда строки должны жить независимо от объекта. Если на каждую позицию нужно ссылаться из других документов, ставить ей штрихкод, вести по ней отдельный учёт во времени — это уже не строки, а самостоятельные сущности, и их место в справочнике или регистре сведений.
Второе ограничение — аналитика по строкам. Отчёты в типовых конфигурациях строятся по регистрам, а не по табличным частям. Если по данным строк нужны сложные срезы, обороты и остатки на дату, эти данные должны попадать в регистры при проведении. Табличная часть — источник данных, но не инструмент оперативного учёта.
Что выбрать для хранения данных
Третье ограничение — объём. Технически табличная часть вмещает очень много строк, но документы с десятками тысяч позиций медленно открываются, проводятся и редактируются. На практике такие объёмы разбивают на несколько документов или загружают через специализированные механизмы.
Типичные ошибки при работе с табличными частями
Отдельно стоит проблема дублирования строк: пользователь дважды добавляет одну и ту же номенклатуру, и при проведении получает завышенное списание. В типовых конфигурациях есть настройки контроля дублей, а при доработках имеет смысл сворачивать строки перед проведением или проверять дубли в обработке проверки заполнения.
Как проверить результат
Сумма по колонке совпадает с итогом в подвале табличной части и с первичным документом
Итог отличается — есть строки без суммы или с неверным пересчётом
Количество записей соответствует строкам, остатки изменились ожидаемо
Движений нет, они задвоены или не по всем строкам
Все позиции выведены с верными количеством и суммами
Строки пропущены или суммы не сходятся с экранной формой
Частые вопросы о табличных частях
Может ли у одного документа быть несколько табличных частей?
Да. Например, документ может содержать «Товары», «Услуги» и «Этапы оплаты» одновременно. Каждая табличная часть имеет собственную структуру колонок и хранится в собственной таблице базы данных. При проведении документ может формировать движения из всех своих табличных частей.
Удалятся ли строки табличной части при удалении документа?
Да, строки принадлежат объекту и удаляются вместе с ним. При пометке на удаление документ и его табличные части обрабатываются как единое целое. Именно поэтому «осиротевших» строк без документа-владельца в нормально работающей базе быть не должно.
Можно ли сослаться на строку табличной части из другого документа?
Напрямую — нет, строка не является самостоятельным объектом и не имеет собственной ссылки. Можно хранить ссылку на документ-владелец и номер строки, но это лишь косвенная идентификация. Если на позиции нужно ссылаться регулярно, правильнее вынести их в справочник или регистр.
Как посчитать итог по колонке табличной части в коде?
Используйте встроенный метод коллекции: Объект.Товары.Итог("Сумма"). Он суммирует значения указанной колонки по всем строкам без явного цикла. Для более сложных группировок выгрузите табличную часть методом Выгрузить() и примените Свернуть().
Почему отчёт не видит данные из табличной части документа?
Большинство отчётов строится по регистрам, а не по табличным частям. Если документ не проведён или его движения не включают нужные данные строк, отчёт их не покажет. Проверьте, что документ проведён и что в модуле проведения строки табличной части записываются в соответствующие регистры.
Сколько строк можно добавить в табличную часть?
Жёсткого прикладного лимита нет, но практический предел определяется удобством и скоростью: документы с тысячами строк медленно открываются и проводятся. При больших объёмах данные разбивают на несколько документов или загружают пакетно через обработки.
Что важно запомнить
Табличная часть хранит произвольное число однотипных строк внутри объекта и не существует отдельно от него. Используйте её для позиций документов, проводите строки по регистрам для отчётности, не храните повторяющиеся данные в реквизитах и любые доработки структуры проверяйте на копии базы.