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