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