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