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