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

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

Табличная часть в 1С: что это и для чего она нужна

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

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

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

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

Что такое табличная часть и как она устроена

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

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

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

Для чего нужна табличная часть: основные задачи

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

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

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

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

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

Можно добавлять и удалять строки, есть кнопки «Добавить», «Подбор», «Заполнить»

В конфигуратореВетка «Табличные части» у объекта

У документа или справочника раскройте структуру — там перечислены табличные части и их реквизиты

В запросеИмя вида Документ.РеализацияТоваровУслуг.Товары

Обращение идёт через точку: объект, затем имя табличной части

Где встречаются табличные части

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

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

Табличные части есть у обработок и отчётов. У внешней обработки табличная часть часто играет роль временного хранилища: пользователь загружает в неё данные из Excel, проверяет и запускает обработку.

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

Базовые действия доступны в любой типовой форме. Строка добавляется кнопкой «Добавить» или клавишей Insert, удаляется — кнопкой с крестиком или Delete. Кнопка «Подбор» открывает форму множественного выбора номенклатуры: вы отмечаете несколько позиций, и все они попадают в табличную часть одним действием — это заметно быстрее построчного ввода.

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

Для массового ввода полезны копирование и вставка строк: выделите строку, нажмите F9 (или «Скопировать» в меню «Ещё»), затем измените нужные колонки. Часть колонок пересчитывается автоматически: при изменении количества или цены пересчитается сумма, при смене ставки НДС — сумма налога. Если автопересчёт не сработал, проверьте, не отключены ли обработчики в результате доработок конфигурации.

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

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

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

В запросах табличная часть фигурирует как отдельная таблица с составным именем: Документ.РеализацияТоваровУслуг.Товары. Такой запрос возвращает строки всех документов этого вида, а связь с шапкой обеспечивается полем «Ссылка». Это удобно для отчётов по содержимому документов, но помните: соединение табличной части с шапкой по ссылке — стандартный приём, и именно так строятся большинство выборок «документ + его товары».

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

НоваяСтрока = Объект.Товары.Добавить();

НоваяСтрока.Номенклатура = НайденнаяНоменклатура;

НоваяСтрока.Количество = 2;

НоваяСтрока.Цена = 1500;

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

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

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

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

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

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

Типичные ошибки
01
Удаление строк табличной части внутри цикла перебора — часть строк пропускается; удаляйте по собранному списку после цикла
02
Ожидание автопересчёта сумм при программном заполнении — обработчики формы на сервере не срабатывают, пересчитывайте явно
03
Заполнение табличной части до заполнения шапки — значения по умолчанию (склад, договор) не подставляются
04
Хранение в табличной части данных, нужных после удаления документа — строки исчезают вместе с объектом, используйте регистр сведений

Табличная часть или другие механизмы: что выбрать

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

КритерийТабличная частьРегистр сведенийПодчинённый справочник
Жизнь после удаления владельцаСтроки удаляются вместе с объектомЗаписи сохраняютсяЭлементы сохраняются
Доступ из других объектовТолько через объект-владелецНезависимый доступНезависимый доступ
Собственные реквизиты строкиЕсть, ограниченный наборИзмерения и ресурсыПолный набор, как у справочника
Типичное применениеТовары в накладной, сотрудники в приказеЦены, курсы валют, адресаДоговоры контрагента, банковские счета
Маршрут решения

Как выбрать механизм хранения

Данные — неотделимая часть документа и нужны только внутри негоИспользуйте табличную часть
Записи должны накапливаться и читаться независимо от документовИспользуйте регистр сведений
У каждой строки нужен свой код, наименование и много реквизитовИспользуйте подчинённый справочник

Как проверить корректность заполнения

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

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

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

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

Итог по колонке «Сумма»
Норма

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

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

Расхождение — ищите строку с неверной ценой или количеством

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

Во всех строках заполнены номенклатура, количество, ставка НДС

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

Пустые ячейки — документ не проведётся или проведётся с ошибкой

Движения документа после проведения
Норма

Записи в регистрах соответствуют строкам табличной части

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

Записей меньше, чем строк, или суммы не сходятся

Дубли строк
Норма

Каждая позиция встречается один раз или дубли осознанны

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

Случайные повторы одной номенклатуры завышают списание

Итог

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

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

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

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

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

Можно ли восстановить удалённую строку табличной части?

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

Почему при проведении документа возникает ошибка с указанием номера строки?

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

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

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

Как выгрузить содержимое табличной части в Excel?

В большинстве типовых форм есть вывод списка: меню «Ещё» → «Вывести список» — содержимое табличной части откроется в табличном документе, который сохраняется в Excel или CSV. В управляемых формах также работает выделение строк и копирование через буфер обмена.

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

Да, через составное имя таблицы: Документ.ИмяДокумента.ИмяТабличнойЧасти. Связь с шапкой обеспечивается полем Ссылка. Но обязательно накладывайте отбор по ссылке или периоду — выборка строк по всем документам без ограничений на большой базе выполняется медленно.