Добавляем новый реквизит в справочник или документ 1С 8.3
Содержание
Новый реквизит добавляют в Конфигураторе: в дереве метаданных раскрывают нужный объект (справочник, документ), выделяют ветку Реквизиты, добавляют строку, задают имя и тип, после чего обновляют структуру базы клавишей F7. Если конфигурация стоит на поддержке поставщика, перед этим включают возможность изменения или используют расширение.
Разберём каждый шаг подробно: подготовку базы, настройку свойств поля, вывод реквизита на управляемую форму, обращение к нему из кода и запросов. Все действия описаны для платформы 8.3 с интерфейсом «Такси» на примере типовой конфигурации вроде «Бухгалтерии предприятия 3.0».
С чего начать: подготовка базы и прав на изменение
Добавление реквизита меняет структуру таблиц СУБД, поэтому к делу готовятся заранее.
🔹 Сделайте резервную копию. Для файловой базы достаточно скопировать файл 1Cv8.1CD, для клиент-серверной — выгрузить в .dt через Администрирование → Выгрузить информационную базу в Конфигураторе или сделать бэкап средствами СУБД.
🔹 Снимите конфигурацию с поддержки частично. Типовые конфигурации стоят на поддержке поставщика и закрыты для изменения. Откройте Конфигурация → Поддержка → Настройка поддержки, нажмите Включить возможность изменения и разрешите редактирование объектов. Полностью снимать с поддержки не нужно — автообновление сохранится.
🔹 Запланируйте монопольный доступ. Само добавление реквизита и правку свойств можно делать при работающих пользователях. А вот финальный шаг — обновление структуры базы — потребует, чтобы в базе никого не было.
Если не хотите трогать поддержку, новый реквизит можно добавить через расширение конфигурации — к этому способу вернёмся в конце. Он доступен с версии платформы 8.3.6.
Перед обновлением структуры базы данных убедитесь, что есть свежая резервная копия: откат изменённой структуры вручную невозможен.
Как добавить реквизит в справочник или документ
Порядок одинаковый для справочников, документов, регистров и большинства прикладных объектов.
- Откройте Конфигуратор:
Конфигурация → Открыть конфигурацию. - В дереве метаданных раскройте нужную ветку, например
Справочники → НоменклатураилиДокументы → РеализацияТоваровУслуг. - Внутри объекта найдите подчинённую ветку
Реквизиты. - Выделите её и нажмите кнопку
Добавитьв командной панели (илиInsна клавиатуре, или правой кнопкойДобавить). - В открывшейся палитре свойств заполните как минимум два поля:
ИмяиТип.
Имя пишется латиницей или кириллицей без пробелов, с заглавной буквы, в стиле «ВерблюжьейНотации»: СрокГодности, НомерПаспорта, ОтветственныйМенеджер. По нему обращаются к реквизиту из кода и запросов.
Синоним заполняется автоматически из имени, но его стоит поправить — именно синоним видит пользователь на формах и в отчётах. Например, имя СрокГодности, синоним — «Срок годности».
💡 Если реквизит однотипен для нескольких объектов, не копируйте его вручную. Для справочников и документов можно вынести общие поля через Общие реквизиты — одно определение подключается к множеству объектов сразу.
Реквизит табличной части
Отдельная ветка Реквизиты есть у каждого объекта, но у документов и части справочников бывают ещё и табличные части (строки). Если поле должно повторяться по строкам — например, ставка НДС в каждой строке товаров, — реквизит добавляют не в шапку, а в табличную часть.
- Раскройте ветку
Табличные частиобъекта и нужную таблицу, напримерТовары. - Внутри неё есть своя подчинённая ветка
Реквизиты. - Добавьте реквизит в неё теми же действиями.
В коде к такому реквизиту обращаются по строке: СтрокаТовара.СтавкаНДС, в запросе — через имя табличной части: РеализацияТоваровУслуг.Товары.(СтавкаНДС).
Выбор типа данных и настройка свойств поля
Тип определяет, что можно хранить в реквизите и как платформа создаст колонку в таблице. Основные типы:
| Тип | Что хранит | Когда применять |
|---|---|---|
Строка | текст | названия, примечания, номера документов |
Число | число с точностью | количество, суммы, проценты |
Дата | дату и/или время | срок, дата события |
Булево | да/нет | признаки, флажки |
СправочникСсылка.<Имя> | ссылку на элемент справочника | связь с контрагентом, складом, видом |
ПеречислениеСсылка.<Имя> | значение из фиксированного списка | статус, тип, категория |
Эти уточняющие свойства называются квалификаторами. Для строки задайте Длину и Допустимую длину (переменная экономит место, фиксированная удобна для кодов фиксированного формата). Нулевая длина означает строку неограниченной длины — её нельзя индексировать и соединять в запросах, поэтому для поля, по которому будут искать, задавайте конкретную длину.
Для числа укажите Длину (всего разрядов) и Точность (число знаков после запятой), а при необходимости снимите флажок Неотрицательное, если допустимы отрицательные значения. Для даты выберите Состав даты: только дата, только время или дата и время — лишнее время в поле «срок» потом мешает отборам.
Отдельно стоит продумать ещё несколько свойств:
🔹 Индексировать. Если по реквизиту будут искать, фильтровать списки или связывать в запросах — поставьте Индексировать или Индексировать с доп. упорядочиванием. Индекс ускоряет отбор, но замедляет запись, поэтому вешать его на всё подряд не нужно.
🔹 Проверка заполнения. Значение Выдавать ошибку заставит платформу требовать заполнения реквизита при проведении или записи.
🔹 Использование (для справочников). Свойство определяет, у чего будет реквизит: Для элемента, Для группы или Для элемента и группы. Для иерархических справочников это важно: реквизит карточки товара не нужен в группе-папке.
🔹 Составной тип данных. Если реквизит должен хранить значения разных типов (например, ссылку на контрагента ИЛИ на физлицо), включите флажок Составной тип данных и отметьте нужные типы галочками.
Как вывести реквизит на форму
Здесь часто спотыкаются: реквизит добавлен, а в режиме «1С:Предприятие» его не видно.
Если у объекта нет собственной формы и используется автогенерируемая, новый реквизит появится на ней сам — платформа строит форму из состава реквизитов на лету.
Если у объекта есть явно созданная управляемая форма, реквизит нужно добавить вручную:
- Раскройте ветку объекта до узла
Формыи откройте нужную, напримерФормаЭлемента. - В левой верхней части редактора формы — список
Реквизитыформы. Найдите основной реквизит с типом объекта (обычноОбъект). - Раскройте его — внутри перечислены все поля объекта, включая новый реквизит.
- Перетащите новый реквизит мышью из списка
Реквизитыв деревоЭлементыв нужное место.
Платформа сама создаст поле ввода подходящего вида: для ссылки — поле выбора , для булева — флажок, для даты — поле с календарём. Подпись возьмётся из синонима.
Если форма наследуется от типовой и напрямую не редактируется, поле выводят через доработку формы в расширении: заимствуют форму, в обработчике ПриСозданииНаСервере программно добавляют новый элемент и связывают его с реквизитом. Так доработка переживёт обновление конфигурации
.
💡 Порядок полей на форме меняется перетаскиванием в дереве Элементы. Чтобы сгруппировать поля, добавьте элемент Группа и вложите поля в неё.
Как обратиться к реквизиту в коде и запросах
После добавления реквизит доступен и в модулях, и в языке запросов.
В коде к значению обращаются через точку от объекта:
// В модуле объекта
Если Объект.СрокГодности < ТекущаяДата() Тогда
Сообщить("Срок годности истёк");
КонецЕсли;
// По ссылке на элемент справочника
ЗначениеРеквизита = СсылкаНаТовар.СрокГодности;
Если нужно получить реквизит по ссылке массово, не дёргайте его в цикле — каждое обращение Ссылка.Реквизит — это отдельный запрос к базе. Соберите данные одним запросом.
💡 В типовых конфигурациях на «Библиотеке стандартных подсистем» для разовой проверки одного значения удобен метод ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, "СрокГодности"), а для нескольких реквизитов сразу — ЗначенияРеквизитовОбъектов. Они кешируют обращения и читают реквизиты без прав на сам объект.
В запросе реквизит становится обычным полем таблицы:
ВЫБРАТЬ
Номенклатура.Ссылка КАК Товар,
Номенклатура.СрокГодности КАК Срок
ИЗ
Справочник.Номенклатура КАК Номенклатура
ГДЕ
Номенклатура.СрокГодности < &ГраницаДаты
Пока структура базы не обновлена (следующий шаг), запрос к новому полю вернёт ошибку — колонки в таблице СУБД ещё нет.
Для реквизита-ссылки в запросе можно обращаться к полям связанного объекта через точку: Номенклатура.ОтветственныйМенеджер.Наименование. Платформа сама подставит соединение.
Обновление структуры базы данных
Добавленный реквизит пока существует только в конфигурации. Чтобы он появился в таблицах, структуру базы обновляют.
- Нажмите
F7или откройтеКонфигурация → Обновить конфигурацию базы данных. - Платформа покажет окно
Реорганизация информациисо списком изменений — там будет строка о новом реквизите. - Нажмите
Принять.
Для добавления нового реквизита, как правило, нужен монопольный доступ: платформа перестраивает таблицу, и делать это при активных сеансах нельзя.
🔹 В файловой базе просто закройте все остальные сеансы.
🔹 В клиент-серверной базе установите блокировку начала сеансов (Администрирование → Блокировка соединений с информационной базой в режиме «1С:Предприятие») и дождитесь, пока пользователи выйдут. После обновления снимите блокировку.
Обновление структуры прервёт работу всех, кто остался в базе, и может занять время на больших таблицах. Планируйте его на нерабочее время.
После успешного обновления реквизит виден в режиме «1С:Предприятие»: на форме, в списках, в запросах и отчётах.
Проверка и заполнение существующих данных
У всех записей, которые были в базе до добавления, новый реквизит окажется пустым (для числа — ноль, для строки — пустая строка, для ссылки — пустая ссылка). Это нормально: платформа создаёт колонку со значением по умолчанию, а не заполняет её задним числом.
Проверьте результат в режиме «1С:Предприятие»:
🔹 откройте любой элемент справочника или документ — поле должно отображаться и редактироваться; 🔹 заполните его в тестовой записи и запишите — значение должно сохраниться; 🔹 постройте отбор или отчёт по новому полю, чтобы убедиться, что индекс и тип работают.
Если по реквизиту нужны значения у старых записей, их заполняют отдельно: вручную, групповой обработкой Групповое изменение реквизитов (в типовых конфигурациях — в разделе администрирования или сервиса) либо собственной обработкой в цикле по выборке.
Как добавить реквизит через расширение конфигурации
Это альтернатива снятию с поддержки. Расширение — отдельный «слой» поверх типовой конфигурации, который не меняет её саму и переживает автообновления. Доступно с платформы 8.3.6.
- Откройте
Конфигурация → Расширения конфигурации, создайте расширение (назначение — «Дополнение»). - Нажмите кнопку открытия конфигурации расширения — откроется пустое дерево.
- Через контекстное меню добавьте в расширение заимствованный объект — тот справочник или документ, куда нужен реквизит.
- В заимствованном объекте добавьте собственный реквизит так же, как описано выше.
- Обновите конфигурацию базы данных (
F7) — здесь тоже нужен монопольный доступ.
💡 Собственные реквизиты из расширения в коде доступны через точку, как и обычные. В типовых конфигурациях это основной способ добавить своё поле, не ломая поддержку и обновления.
У способа есть ограничения. Реквизит из расширения не попадёт в типовые механизмы обмена данными (РИБ, синхронизация), если его там специально не учесть, а при сложной доработке нескольких объектов расширение ведут аккуратно, чтобы оно не конфликтовало с обновлениями основной конфигурации. Для одного-двух полей это почти всегда удобнее и безопаснее, чем снятие с поддержки.
Можно ли добавить реквизит без снятия конфигурации с поддержки?
Почему новый реквизит не виден в «1С:Предприятии»?
F7), реквизит не выведен на управляемую форму вручную, либо у справочника в свойстве Использование стоит значение, исключающее текущий элемент (например, «Для группы», а вы открываете элемент).