Реквизиты объектов 1С:Предприятия 8.3 — от поля в карточке до колонки в базе
Содержание
Реквизит в 1С — это свойство объекта конфигурации, в котором хранится одно значение: ИНН у контрагента, дата у документа, склад у поступления. Пользователь видит реквизит как поле на форме, а в базе данных он превращается в отдельную колонку таблицы этого объекта.
Частое заблуждение — считать реквизитом любое поле, которое видно на экране. Это не так. Часть полей формы ничего не хранит в базе и живёт, только пока форма открыта. Где проходит граница, какие бывают реквизиты в 1С:Предприятии 8.3 и как их добавлять, не ломая обновления, — по порядку.
Реквизит простыми словами: место в структуре конфигурации
Конфигурация 1С состоит из объектов: справочников, документов, планов видов характеристик, регистров и других. Каждый объект описывается набором данных. Этот набор и есть его реквизиты.
Удобно представлять так:
- 📁 объект (справочник «Контрагенты») — это таблица в базе;
- 📄 элемент (конкретный контрагент «ООО Ромашка») — строка этой таблицы;
- 🔤 реквизит (ИНН, КПП, Основной договор) — колонка.
Когда разработчик добавляет реквизит в конфигураторе и обновляет конфигурацию базы данных, платформа сама меняет структуру таблицы. Писать SQL руками не нужно, и делать этого нельзя.
Реквизиты есть не у всех объектов в одинаковом смысле. У регистров сведений и накопления помимо реквизитов есть измерения и ресурсы. Измерения задают разрезы учёта, ресурсы хранят суммы и количества, а реквизиты — сопутствующую информацию, по которой обычно не группируют. Путать эти три вида полей в регистре — частая ошибка начинающих разработчиков.
| Вид объекта | Что в нём хранится помимо реквизитов |
|---|---|
| Справочник | Табличные части, предопределённые элементы |
| Документ | Табличные части, движения по регистрам |
| Регистр сведений | Измерения и ресурсы |
| Регистр накопления | Измерения и ресурсы |
| План видов характеристик | Табличные части, тип значения характеристик |
Стандартные реквизиты и те, что добавляет разработчик
У каждого объекта есть реквизиты, которые платформа создаёт автоматически. Их нельзя удалить, но можно настроить: переименовать синоним, задать проверку заполнения, изменить длину кода.
Стандартные реквизиты справочника:
- 🔑
Ссылка— уникальный идентификатор элемента; - 🔢
Код— строка или число, длина задаётся в свойствах справочника; - 🏷️
Наименование; - 🗑️
ПометкаУдаления; - 📂
РодительиЭтоГруппа— для иерархических справочников; - 👤
Владелец— для подчинённых справочников (например, договоры подчинены контрагентам).
Стандартные реквизиты документа:
- 🔑
Ссылка; - 🔢
Номер; - 📅
Дата; - ✅
Проведен; - 🗑️
ПометкаУдаления.
Всё остальное — пользовательские реквизиты, которые создаёт разработчик конфигурации. В типовых решениях их сотни: «Организация», «Контрагент», «ДоговорКонтрагента», «Склад», «СуммаДокумента» и так далее.
Имя пользовательского реквизита не может совпадать с именем стандартного. Назвать реквизит документа Дата не получится — конфигуратор сообщит, что имя не уникально. Используйте ДатаОплаты, ДатаПоставки и подобные.
Типы реквизитов: какие значения можно хранить
Тип реквизита определяет, что в нём лежит и как с ним работает программа. Тип выбирают в палитре свойств реквизита, в поле «Тип».
Примитивные типы
| Тип | Что хранит | Что настраивают |
|---|---|---|
| Строка | Текст | Длину; 0 — неограниченная длина |
| Число | Суммы, количества, проценты | Длину и точность (знаков после запятой), неотрицательность |
| Дата | Дату, время или дату со временем | Состав даты |
| Булево | Да / Нет | — |
Пример: реквизит «Сумма» с длиной 15 и точностью 2 вмещает 13 знаков до запятой и 2 после. Максимальное значение — 9 999 999 999 999,99.
Ссылочные типы
Реквизит может хранить ссылку на элемент справочника, документ, значение перечисления, вид характеристики. Например, тип СправочникСсылка.Склады. В базе хранится только идентификатор, а наименование склада программа берёт из справочника. Поэтому, если переименовать склад, новое название сразу появится во всех документах.
Составной тип
Если отметить флаг «Составной тип данных», реквизит сможет хранить значения разных типов. Классический пример — реквизит «Субконто» в бухгалтерских проводках или «Документ расчётов», куда можно положить и реализацию, и поступление.
Составной тип удобен, но дорог. В базе под него создаётся несколько колонок, а запросы с обращением через точку к такому реквизиту получаются тяжёлыми. Использовать его стоит, только когда без него не обойтись.
Строка неограниченной длины
Длина 0 означает «без ограничения». Подходит для комментариев и описаний. Но у такого реквизита есть ограничения: его нельзя индексировать, по нему нельзя группировать и упорядочивать в запросе, а сравнивать приходится через функцию ПОДСТРОКА().
Шапка и табличная часть документа
Реквизиты документа и справочника делятся на две группы.
Реквизиты шапки хранят одно значение на весь объект. У счёта на оплату это дата, номер, организация, покупатель, договор, общая сумма.
Реквизиты табличной части хранят значения для каждой строки. У того же счёта табличная часть «Товары» содержит номенклатуру, количество, цену, сумму, ставку НДС. Строк может быть одна, а может быть пятьсот.
В базе данных табличная часть — это отдельная таблица, связанная с основной по ссылке на объект. У каждой строки есть стандартный реквизит НомерСтроки.
Пример обращения к обеим группам в запросе:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Поступление.Номер КАК Номер,
| Поступление.Склад КАК Склад,
| Товары.Номенклатура КАК Номенклатура,
| Товары.Количество КАК Количество
|ИЗ
| Документ.ПоступлениеТоваровУслуг КАК Поступление
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг.Товары КАК Товары
| ПО Поступление.Ссылка = Товары.Ссылка
|ГДЕ
| Поступление.Ссылка = &Документ";
Запрос.УстановитьПараметр("Документ", ДокументСсылка);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить(Строка(Выборка.Номенклатура) + ": " + Формат(Выборка.Количество, "ЧГ=0"));
КонецЦикла;
Как решить, куда положить новый реквизит? Задайте себе вопрос: значение одно на весь документ или может отличаться от строки к строке? Склад, общий для всей накладной, — в шапку. Склад, который в одной накладной разный для разных товаров, — в табличную часть.
Перенос реквизита из шапки в табличную часть после того, как в базе накопились данные, — не настройка, а миграция. Старые значения сами не переедут, их придётся переносить обработкой.
Реквизиты формы и реквизиты объекта: в чём разница
В управляемых формах 1С:Предприятия 8.3 есть второй вид реквизитов — реквизиты формы. Их создают в редакторе формы, на вкладке «Реквизиты».
Главное отличие:
| Реквизит объекта | Реквизит формы | |
|---|---|---|
| Где создаётся | В дереве конфигурации, в свойствах объекта | В редакторе формы |
| Хранится в базе | Да, колонка таблицы | Нет, только пока открыта форма |
| Доступен в отчётах и запросах | Да | Нет |
| Типичное назначение | Учётные данные | Служебные флажки, промежуточные итоги, отборы |
У формы объекта есть основной реквизит — обычно он называется Объект. Через него форма показывает реквизиты самого документа или справочника. Поле «Контрагент» на форме счёта связано с путём Объект.Контрагент, поэтому значение сохраняется при записи.
Если же разработчик добавил реквизит формы, например флажок «ПоказыватьЗакрытыеДоговоры», он управляет отображением, но в документ не попадёт. Закрыли форму — значение пропало, если его специально не сохранили в настройках.
Есть ещё одна особенность, которая постоянно сбивает с толку. На клиенте основной реквизит формы — это не сам объект, а его копия в виде данных формы. Обратиться через точку к реквизиту ссылки на клиенте нельзя: выражение Объект.Контрагент.ИНН в клиентском коде вызовет ошибку. Значение реквизита ссылки получают на сервере. В конфигурациях на БСП для этого есть функция ОбщегоНазначения.ЗначениеРеквизитаОбъекта():
&НаСервереБезКонтекста
Функция ИННКонтрагента(Контрагент)
Возврат ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Контрагент, "ИНН");
КонецФункции
Как добавить реквизит в конфигураторе
Порядок для справочника или документа одинаковый.
- Сделайте резервную копию базы
(
Администрирование → Выгрузить информационную базув конфигураторе). - Откройте конфигуратор и дерево конфигурации:
Конфигурация → Открыть конфигурацию. - Найдите объект, например
Справочники → Номенклатура, и откройте его двойным щелчком. - Перейдите на вкладку «Данные».
- В списке «Реквизиты» нажмите кнопку добавления. Для табличной части сначала выделите её и добавляйте реквизит внутрь неё.
- Заполните имя (латиница и кириллица без пробелов, начинается с буквы), синоним и тип.
- Настройте свойства в палитре: проверку заполнения, индексирование, подсказку.
- Откройте форму объекта на вкладке «Формы» и перетащите новый реквизит из списка
Объектв дерево элементов, чтобы поле появилось на экране. - Выполните
Конфигурация → Обновить конфигурацию базы данных(F7) и примите изменения структуры.
Свойства, которые стоит настроить сразу
- ✅ Проверка заполнения — «Выдавать ошибку», если без значения записывать объект нельзя.
- 🔎 Индексировать — если по реквизиту часто ищут или отбирают. Индекс ускоряет отбор, но замедляет запись и увеличивает базу.
- 🌳 Использование — для иерархических справочников: реквизит нужен у элемента, у группы или у обоих.
- 🧩 Связи параметров выбора — например, договор выбирается только из договоров указанного контрагента.
Типовая конфигурация: через расширение, а не снятие с поддержки
Если база на типовой конфигурации — Бухгалтерии 3.0, ЗУП 3.1, УТ 11, — добавлять реквизит прямо в основную конфигурацию плохая идея. Придётся включить возможность изменения, и каждое обновление превратится в сравнение и объединение.
Правильнее использовать расширение конфигурации (доступно с платформы 8.3.6):
- В конфигураторе откройте
Конфигурация → Расширения конфигурациии создайте расширение. - Заимствуйте в него нужный объект (контекстное меню объекта в основной конфигурации → «Добавить в расширение»).
- В заимствованном объекте добавьте свой реквизит.
- Заимствуйте форму и выведите на неё поле.
- Обновите конфигурацию базы данных.
Реквизиты, добавленные в расширение, хранятся в отдельных таблицах, а типовая конфигурация остаётся на поддержке и обновляется штатно.
Дополнительные реквизиты без программиста
Не всегда нужен конфигуратор. В конфигурациях на БСП есть механизм дополнительных реквизитов и сведений — пользователь с правами администратора создаёт новые поля прямо в режиме «Предприятие».
В Бухгалтерии 3.0 он включается в разделе Администрирование → Общие настройки: флажок «Дополнительные реквизиты и сведения». После включения рядом появляется ссылка на список дополнительных реквизитов, где выбирают объект и создают поле.
Чем отличаются два варианта:
| Дополнительный реквизит | Дополнительное сведение | |
|---|---|---|
| Где хранится | В табличной части самого объекта | В отдельном регистре сведений |
| Меняет версию объекта | Да | Нет |
| Где видно | На форме объекта | По отдельной команде формы |
Типовые сценарии: «Ответственный менеджер» у контрагента, «Номер тендера» у реализации, «Цвет» у номенклатуры. Такие поля доступны в отборах списков и в отчётах на СКД.
💡 Если поле нужно только для отборов и печати — хватит дополнительного реквизита. Если на нём строится логика проведения или расчёт — это задача для разработчика и расширения.
Ошибки при работе с реквизитами и как их избежать
Ещё несколько ошибок проектирования, которые проявляются не сразу:
- 🐢 Ссылочный реквизит без индекса у объекта с миллионами строк. Отборы по нему тормозят. Индекс добавляйте осознанно — только там, где реально ищут.
- 🔁 Дублирование данных. Реквизит «ИННКонтрагента» в документе, когда ИНН уже есть в карточке контрагента. При изменении карточки документы останутся со старым значением. Иногда это нужно (зафиксировать на дату), чаще — нет.
- 🧱 Слишком широкий составной тип. Реквизит, в который «можно положить что угодно», сложно проверять и дорого читать в запросах.
- ✍️ Синоним без смысла. Пользователь видит синоним, а не имя. «Реквизит1» на форме — это вопросы в поддержку.
Удаление реквизита в конфигураторе удаляет колонку вместе с данными при обновлении структуры. Если реквизит больше не нужен, безопаснее сначала переименовать его с префиксом Удалить и убрать с форм, а удалить в следующем цикле разработки, когда станет ясно, что данные не понадобятся.