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