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

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

Табличная часть в 1С: для чего используется и как с ней работать

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

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

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

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

Где встречаются табличные части в типовых конфигурациях

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

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

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

Для чего табличная часть используется на практике

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

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

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

Документ проведён, но отчёт пустСтроки не попали в табличную часть

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

Сумма документа не сходитсяОшибка в одной из строк

Проверьте итоги по колонкам суммы и НДС, найдите строку с нулевой или некорректной ценой

Печатная форма неполнаяЧасть данных берётся из шапки или связанных объектов

Сверьте, какие реквизиты строки выводятся в макет, и заполнены ли они

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

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

Для редактирования доступны стандартные операции: копирование строки (F9), удаление (Delete или Shift+Delete с подтверждением), перемещение вверх и вниз, сортировка по колонкам. Многие документы поддерживают вставку из буфера обмена — можно скопировать строки из Excel через специальную форму загрузки, если она есть в конфигурации.

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

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

Как работать с табличной частью программно

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

Пример перебора строк документа и расчёта общего количества:

ВсегоКоличество = 0;

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

ВсегоКоличество = ВсегоКоличество + СтрокаТовары.Количество;

КонецЦикла;

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

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

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

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

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

Табличная часть и проведение документа

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

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

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

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

Самая распространённая ошибка разработчика — обращение к табличной части по ссылке вместо объекта. У ссылки (ДокументСсылка) табличная часть недоступна для изменения: нужно получить объект методом ПолучитьОбъект(), внести изменения и записать. Попытка изменить строки через ссылку вызовет ошибку исполнения.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Каждая строка табличной части отражена в регистрах

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

Движений нет или их меньше, чем строк — документ проведён с пустой или некорректной табличной частью

Дубли номенклатуры
Норма

Каждый товар встречается один раз с суммарным количеством

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

Одна позиция повторяется в нескольких строках с разными ценами

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

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

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

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

Да. Пользователю доступны кнопки копирования строк или ввод документа на основании другого — тогда табличная часть переносится автоматически. Программно используют метод Загрузить() с выгрузкой табличной части источника через Выгрузить().

Почему документ провёлся, а в отчёте пусто?

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

Есть ли ограничение на количество строк в табличной части?

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

Как быстро найти нужную строку в большой табличной части?

В форме используйте поиск по таблице (Ctrl+F) или сортировку по колонке. Программно — метод НайтиСтроки() с отбором по реквизитам, который возвращает массив подходящих строк без полного перебора.

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

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

Итог

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

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