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