К статье
Практический материал

Разработка и Конфигурация · 11 мин

Для чего предназначены реквизиты и табличные части документа 1С

Для чего нужны реквизиты и табличные части документа в 1С, чем они отличаются, как проектировать структуру, заполнять, контролировать данные и избегать типичных ошибок.

Документ в 1С — это объект, фиксирующий факт хозяйственной жизни: отгрузку товара, прием сотрудника на работу, оплату поставщику. Чтобы этот факт был описан полно и однозначно, структура документа разделяется на две части: реквизиты и табличные части. Реквизиты хранят единичные значения, относящиеся к документу в целом, а табличные части — списки строк, повторяющиеся внутри одного документа.

Такое разделение не случайно. Система 1С строит движения по регистрам, отчеты и печатные формы, опираясь на структуру метаданных: платформа «знает», что реквизит «Контрагент» — одно значение на документ, а табличная часть «Товары» — набор строк с номенклатурой, количеством и ценой. От того, насколько правильно спроектированы реквизиты и табличные части, зависит удобство ввода, скорость проведения и корректность учета.

Понимание назначения каждой части структуры нужно не только разработчику, но и внедренцу, аналитику и продвинутому пользователю: именно на уровне реквизитов и табличных частей принимаются решения о том, где хранить данные, как их контролировать и как выводить в отчетах.

Что такое реквизиты документа и какие задачи они решают

Реквизит документа — это поле, которое имеет одно значение на весь документ. Типичные примеры: номер и дата (системные реквизиты, которые есть у любого документа), организация, контрагент, договор, склад, ответственный, комментарий. Каждый реквизит имеет тип данных: строка, число, дата, булево или ссылка на другой объект — справочник, документ, перечисление.

Реквизиты решают несколько задач одновременно. Во-первых, они идентифицируют документ и его контекст: по ним строятся журналы документов, отборы и поиск. Во-вторых, реквизиты-ссылки связывают документ с остальной системой: указав контрагента и договор, вы подключаете документ к взаиморасчетам. В-третьих, реквизиты часто служат параметрами проведения: например, реквизит «Склад» определяет, по какому складу пойдут движения товаров.

Отдельная группа — служебные реквизиты, которые платформа создает автоматически: номер, дата, признак проведения, пометка удаления. Их нельзя удалить, но можно настроить: например, длину и тип номера, периодичность нумерации, контроль уникальности.

Что такое табличные части и когда они нужны

Табличная часть — это вложенная в документ таблица, каждая строка которой содержит собственный набор реквизитов. Классический пример — табличная часть «Товары» в документе «Реализация товаров и услуг»: в каждой строке указываются номенклатура, количество, цена, сумма, ставка НДС. Строк может быть сколько угодно — от одной до нескольких тысяч.

Табличные части нужны всегда, когда внутри одного документа описывается множество однотипных позиций. Без них пришлось бы создавать отдельный документ на каждую позицию товара, что разрушило бы логику учета: накладная — это единый факт, а не набор разрозненных записей. Кроме того, табличные части участвуют в проведении: типовой обход строк в цикле формирует движения по регистрам.

У одного документа может быть несколько табличных частей. Например, в заказе покупателя могут сосуществовать «Товары», «Услуги» и «Дополнительные расходы». Разделение на несколько табличных частей оправдано, когда наборы строк имеют разную структуру и разную логику обработки — иначе пришлось бы хранить полупустые колонки.

Ключевые различия: что выносить в реквизит, а что в табличную часть

Правило выбора простое: если значение одно на документ — это реквизит шапки; если значений потенциально много и они однородны — это строки табличной части. Ошибки возникают на пограничных случаях. Например, «Склад» в накладной: если отгрузка всегда идет с одного склада — это реквизит шапки; если строки могут отгружаться с разных складов — склад должен быть реквизитом табличной части.

Второй критерий — как данные используются в проведении и отчетах. Реквизиты шапки удобны для отборов и группировок, реквизиты табличных частей — для детализации. Если по полю нужно строить аналитику в разрезе каждой строки (например, подразделение-получатель затрат по каждой услуге), его место в табличной части.

КритерийРеквизит шапкиРеквизит табличной части
Количество значенийОдно на документСвое в каждой строке
Типичное применениеКонтрагент, организация, договор, комментарийНоменклатура, количество, цена, сумма
Использование в отборахУдобно, поле доступно в журналеОтбор по строкам требует специальных запросов
Движения по регистрамОбщие параметры проведенияИсточник строк движений
Маршрут решения

Куда поместить поле

Значение одно на весь документ и нужно для отбора в журналеСоздавайте реквизит шапки
Значения повторяются списком и различаются по строкамСоздавайте табличную часть и реквизиты внутри нее
Сейчас значение одно, но бизнес-процесс может потребовать разных значений по строкамЗакладывайте поле в табличную часть — перенос туда позже будет дешевле, чем обратно

Как добавить и настроить реквизиты и табличные части в конфигураторе

Все изменения структуры выполняются в конфигураторе. Для документа в дереве конфигурации есть ветви «Реквизиты» и «Табличные части». Добавление реквизита сводится к указанию имени, типа и свойств: обязательность заполнения, проверка, индексирование, признак «Заполнять из данных заполнения». Для табличной части сначала создается сама часть, затем внутри нее — ее реквизиты.

После изменения структуры нужно обновить форму документа: новые поля не появятся на форме автоматически, если форма уже доработана вручную. Также следует проверить обработчики проведения и печатные формы — новые данные должны быть учтены там, где это требуется логикой учета.

Порядок добавления табличной части
  1. 1
    Откройте конфигуратор, найдите документ и разверните ветку «Табличные части»
  2. 2
    Добавьте новую табличную часть, задайте осмысленное имя без пробелов
  3. 3
    Внутри нее добавьте реквизиты строк с нужными типами и длинами
  4. 4
    Обновите форму документа: перетащите табличную часть на форму и настройте колонки
  5. 5
    Проверьте модуль проведения: добавьте обход строк и формирование движений
  6. 6
    Обновите конфигурацию базы данных и протестируйте на копии: создайте документ, заполните строки, проведите

Обращение к реквизитам и табличным частям из кода

В модуле объекта и в форме обращение к реквизиту выполняется по имени через точку: Объект.Контрагент. Табличная часть представляет собой коллекцию строк: ее можно перебрать циклом, найти строки методом НайтиСтроки() или получить итог по колонке методом Итог(). Это основа типовых операций: расчет суммы документа, проверка заполнения, формирование движений.

bsl
Для Каждого СтрокаТовары Из Объект.Товары Цикл
  Если СтрокаТовары.Количество <= 0 Тогда
    Сообщить("В строке " + СтрокаТовары.НомерСтроки + " не указано количество");
  КонецЕсли;
КонецЦикла;
ИтогоСумма = Объект.Товары.Итог("Сумма");

При работе в запросах табличные части доступны как виртуальные источники: Документ.РеализацияТоваровУслуг.Товары. Это позволяет строить отчеты по строкам документов без программного обхода.

Контроль заполнения и типичная валидация

Платформа предоставляет встроенные механизмы контроля: свойство «Проверка заполнения» у реквизита (выдавать ошибку или предупреждение при пустом значении), обязательность заполнения табличной части, обработчик ОбработкаПроверкиЗаполнения для сложных правил. Базовый контроль лучше поручить платформе, а в код выносить только перекрестные проверки: например, что сумма строк равна сумме оплаты или что дата отгрузки не раньше даты заказа.

Проверки внутри табличной части обычно строятся на событиях формы: ПриИзменении колонки пересчитывает сумму строки, ПриНачалеРедактирования подставляет значения по умолчанию. Такой подход дает пользователю мгновенную обратную связь и снижает число ошибок при проведении.

Контрольные точки

Как проверить результат

Создание документа с новыми полями
Норма

Поля отображаются на форме, сохраняются и восстанавливаются после закрытия

Тревожный признак

Поле не видно на форме или значение пропадает после записи

Проведение документа
Норма

Движения формируются по всем строкам табличной части

Тревожный признак

Часть строк не попадает в движения или проведение падает с ошибкой

Контроль заполнения
Норма

Пустые обязательные поля блокируют проведение с понятным сообщением

Тревожный признак

Документ проводится с пустыми критичными полями

Типичные ошибки при проектировании структуры

Типичные ошибки
01
Хранение списка значений в строковом реквизите через запятую — невозможно нормально отбирать, связывать со справочниками и строить отчеты; нужна табличная часть
02
Создание реквизита шапки там, где значения различаются по строкам — при первом же частном случае структуру приходится переделывать с миграцией данных
03
Дублирование данных справочника в реквизитах документа (например, хранить ИНН контрагента текстом) — данные расходятся; храните ссылку, а расшифровку получайте через точку
04
Слишком длинные строковые реквизиты без необходимости — лишний расход памяти и ограничения индексирования
05
Отсутствие проверки заполнения критичных полей — документы проводятся с неполными данными и ломают отчеты

Еще одна распространенная проблема — избыточное число табличных частей «на вырост». Каждая табличная часть — это отдельная таблица в базе, дополнительная нагрузка при записи и усложнение формы. Если две части всегда заполняются вместе и имеют схожую структуру, их стоит объединить, добавив поле-разделитель.

FAQ: частые вопросы о реквизитах и табличных частях

Можно ли добавить реквизит в типовой документ без снятия конфигурации с поддержки?

Да, в управляемых приложениях для этого служат расширения конфигурации: реквизит добавляется в расширении и подключается без изменения типового кода. Также во многих типовых решениях есть механизм дополнительных реквизитов и сведений, который позволяет добавить поле вообще без доработок — но такие поля хранятся отдельно и медленнее в отборах.

Чем табличная часть отличается от регистра сведений?

Табличная часть существует только внутри своего документа и удаляется вместе с ним. Регистр сведений — самостоятельный объект, данные которого живут независимо от документов. Если список нужен только как содержимое документа — это табличная часть; если данные должны использоваться вне документа и накапливаться — регистр.

Как посчитать итог по колонке табличной части?

Используйте метод Итог(): например, Объект.Товары.Итог("Сумма") вернет сумму по колонке. Для отображения итога на форме достаточно включить у таблицы свойство «Подвал» и указать путь к данным для итоговой колонки.

Что произойдет с данными при изменении типа реквизита?

При обновлении конфигурации платформа попытается привести существующие значения к новому типу. Если приведение невозможно (например, строка в ссылку на справочник), значения будут очищены без предупреждения. Поэтому перед изменением типа делают копию базы и, при необходимости, пишут обработку переноса данных.

Как ограничить количество строк в табличной части?

Штатного ограничения нет; контроль реализуется в обработчике ОбработкаПроверкиЗаполнения: сравнивается значение Объект.Товары.Количество() с допустимым пределом, и при превышении выдается отказ с сообщением пользователю.

Нужно ли индексировать реквизиты документа?

Индексировать стоит только те реквизиты, по которым регулярно выполняются отборы и поиск — например, контрагент или договор в крупных базах. Избыточное индексирование замедляет запись документов, поэтому включать его «про запас» не следует.

Итог

Что важно запомнить

Реквизиты описывают документ целиком и служат для отборов, связей и параметров проведения; табличные части хранят повторяющиеся строки и питают движения по регистрам. Правильное разделение данных между ними, встроенный контроль заполнения и осторожное изменение типов — основа надежной структуры документа.