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

· 9 мин

Содержание

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

Разберём каждый шаг подробно: подготовку базы, настройку свойств поля, вывод реквизита на управляемую форму, обращение к нему из кода и запросов. Все действия описаны для платформы 8.3 с интерфейсом «Такси» на примере типовой конфигурации вроде «Бухгалтерии предприятия 3.0».

С чего начать: подготовка базы и прав на изменение

Добавление реквизита меняет структуру таблиц СУБД, поэтому к делу готовятся заранее.

🔹 Сделайте резервную копию. Для файловой базы достаточно скопировать файл 1Cv8.1CD, для клиент-серверной — выгрузить в .dt через Администрирование → Выгрузить информационную базу в Конфигураторе или сделать бэкап средствами СУБД.

🔹 Снимите конфигурацию с поддержки частично. Типовые конфигурации стоят на поддержке поставщика и закрыты для изменения. Откройте Конфигурация → Поддержка → Настройка поддержки, нажмите Включить возможность изменения и разрешите редактирование объектов. Полностью снимать с поддержки не нужно — автообновление сохранится.

🔹 Запланируйте монопольный доступ. Само добавление реквизита и правку свойств можно делать при работающих пользователях. А вот финальный шаг — обновление структуры базы — потребует, чтобы в базе никого не было.

Если не хотите трогать поддержку, новый реквизит можно добавить через расширение конфигурации — к этому способу вернёмся в конце. Он доступен с версии платформы 8.3.6.

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

Как добавить реквизит в справочник или документ

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

  1. Откройте Конфигуратор: Конфигурация → Открыть конфигурацию.
  2. В дереве метаданных раскройте нужную ветку, например Справочники → Номенклатура или Документы → РеализацияТоваровУслуг.
  3. Внутри объекта найдите подчинённую ветку Реквизиты.
  4. Выделите её и нажмите кнопку Добавить в командной панели (или Ins на клавиатуре, или правой кнопкой Добавить).
  5. В открывшейся палитре свойств заполните как минимум два поля: Имя и Тип.

Имя пишется латиницей или кириллицей без пробелов, с заглавной буквы, в стиле «ВерблюжьейНотации»: СрокГодности, НомерПаспорта, ОтветственныйМенеджер. По нему обращаются к реквизиту из кода и запросов.

Синоним заполняется автоматически из имени, но его стоит поправить — именно синоним видит пользователь на формах и в отчётах. Например, имя СрокГодности, синоним — «Срок годности».

💡 Если реквизит однотипен для нескольких объектов, не копируйте его вручную. Для справочников и документов можно вынести общие поля через Общие реквизиты — одно определение подключается к множеству объектов сразу.

Реквизит табличной части

Отдельная ветка Реквизиты есть у каждого объекта, но у документов и части справочников бывают ещё и табличные части (строки). Если поле должно повторяться по строкам — например, ставка НДС в каждой строке товаров, — реквизит добавляют не в шапку, а в табличную часть.

  1. Раскройте ветку Табличные части объекта и нужную таблицу, например Товары.
  2. Внутри неё есть своя подчинённая ветка Реквизиты.
  3. Добавьте реквизит в неё теми же действиями.

В коде к такому реквизиту обращаются по строке: СтрокаТовара.СтавкаНДС, в запросе — через имя табличной части: РеализацияТоваровУслуг.Товары.(СтавкаНДС).

Выбор типа данных и настройка свойств поля

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

ТипЧто хранитКогда применять
Строкатекстназвания, примечания, номера документов
Числочисло с точностьюколичество, суммы, проценты
Датадату и/или времясрок, дата события
Булевода/нетпризнаки, флажки
СправочникСсылка.<Имя>ссылку на элемент справочникасвязь с контрагентом, складом, видом
ПеречислениеСсылка.<Имя>значение из фиксированного спискастатус, тип, категория

Эти уточняющие свойства называются квалификаторами. Для строки задайте Длину и Допустимую длину (переменная экономит место, фиксированная удобна для кодов фиксированного формата). Нулевая длина означает строку неограниченной длины — её нельзя индексировать и соединять в запросах, поэтому для поля, по которому будут искать, задавайте конкретную длину.

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

Отдельно стоит продумать ещё несколько свойств:

🔹 Индексировать. Если по реквизиту будут искать, фильтровать списки или связывать в запросах — поставьте Индексировать или Индексировать с доп. упорядочиванием. Индекс ускоряет отбор, но замедляет запись, поэтому вешать его на всё подряд не нужно.

🔹 Проверка заполнения. Значение Выдавать ошибку заставит платформу требовать заполнения реквизита при проведении или записи.

🔹 Использование (для справочников). Свойство определяет, у чего будет реквизит: Для элемента, Для группы или Для элемента и группы. Для иерархических справочников это важно: реквизит карточки товара не нужен в группе-папке.

🔹 Составной тип данных. Если реквизит должен хранить значения разных типов (например, ссылку на контрагента ИЛИ на физлицо), включите флажок Составной тип данных и отметьте нужные типы галочками.

Как вывести реквизит на форму

Здесь часто спотыкаются: реквизит добавлен, а в режиме «1С:Предприятие» его не видно.

Если у объекта нет собственной формы и используется автогенерируемая, новый реквизит появится на ней сам — платформа строит форму из состава реквизитов на лету.

Если у объекта есть явно созданная управляемая форма, реквизит нужно добавить вручную:

  1. Раскройте ветку объекта до узла Формы и откройте нужную, например ФормаЭлемента.
  2. В левой верхней части редактора формы — список Реквизиты формы. Найдите основной реквизит с типом объекта (обычно Объект).
  3. Раскройте его — внутри перечислены все поля объекта, включая новый реквизит.
  4. Перетащите новый реквизит мышью из списка Реквизиты в дерево Элементы в нужное место.

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

Если форма наследуется от типовой и напрямую не редактируется, поле выводят через доработку формы в расширении: заимствуют форму, в обработчике ПриСозданииНаСервере программно добавляют новый элемент и связывают его с реквизитом. Так доработка переживёт обновление конфигурации .

💡 Порядок полей на форме меняется перетаскиванием в дереве Элементы. Чтобы сгруппировать поля, добавьте элемент Группа и вложите поля в неё.

Как обратиться к реквизиту в коде и запросах

После добавления реквизит доступен и в модулях, и в языке запросов.

В коде к значению обращаются через точку от объекта:

// В модуле объекта
Если Объект.СрокГодности < ТекущаяДата() Тогда
    Сообщить("Срок годности истёк");
КонецЕсли;

// По ссылке на элемент справочника
ЗначениеРеквизита = СсылкаНаТовар.СрокГодности;

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

💡 В типовых конфигурациях на «Библиотеке стандартных подсистем» для разовой проверки одного значения удобен метод ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, "СрокГодности"), а для нескольких реквизитов сразу — ЗначенияРеквизитовОбъектов. Они кешируют обращения и читают реквизиты без прав на сам объект.

В запросе реквизит становится обычным полем таблицы:

ВЫБРАТЬ
    Номенклатура.Ссылка КАК Товар,
    Номенклатура.СрокГодности КАК Срок
ИЗ
    Справочник.Номенклатура КАК Номенклатура
ГДЕ
    Номенклатура.СрокГодности < &ГраницаДаты

Пока структура базы не обновлена (следующий шаг), запрос к новому полю вернёт ошибку — колонки в таблице СУБД ещё нет.

Для реквизита-ссылки в запросе можно обращаться к полям связанного объекта через точку: Номенклатура.ОтветственныйМенеджер.Наименование. Платформа сама подставит соединение.

Обновление структуры базы данных

Добавленный реквизит пока существует только в конфигурации. Чтобы он появился в таблицах, структуру базы обновляют.

  1. Нажмите F7 или откройте Конфигурация → Обновить конфигурацию базы данных.
  2. Платформа покажет окно Реорганизация информации со списком изменений — там будет строка о новом реквизите.
  3. Нажмите Принять.

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

🔹 В файловой базе просто закройте все остальные сеансы.

🔹 В клиент-серверной базе установите блокировку начала сеансов (Администрирование → Блокировка соединений с информационной базой в режиме «1С:Предприятие») и дождитесь, пока пользователи выйдут. После обновления снимите блокировку.

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

После успешного обновления реквизит виден в режиме «1С:Предприятие»: на форме, в списках, в запросах и отчётах.

Проверка и заполнение существующих данных

У всех записей, которые были в базе до добавления, новый реквизит окажется пустым (для числа — ноль, для строки — пустая строка, для ссылки — пустая ссылка). Это нормально: платформа создаёт колонку со значением по умолчанию, а не заполняет её задним числом.

Проверьте результат в режиме «1С:Предприятие»:

🔹 откройте любой элемент справочника или документ — поле должно отображаться и редактироваться; 🔹 заполните его в тестовой записи и запишите — значение должно сохраниться; 🔹 постройте отбор или отчёт по новому полю, чтобы убедиться, что индекс и тип работают.

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

Проверка перед обновлением структуры базы
Выполнено: 0 / 5

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

Это альтернатива снятию с поддержки. Расширение — отдельный «слой» поверх типовой конфигурации, который не меняет её саму и переживает автообновления. Доступно с платформы 8.3.6.

  1. Откройте Конфигурация → Расширения конфигурации, создайте расширение (назначение — «Дополнение»).
  2. Нажмите кнопку открытия конфигурации расширения — откроется пустое дерево.
  3. Через контекстное меню добавьте в расширение заимствованный объект — тот справочник или документ, куда нужен реквизит.
  4. В заимствованном объекте добавьте собственный реквизит так же, как описано выше.
  5. Обновите конфигурацию базы данных (F7) — здесь тоже нужен монопольный доступ.

💡 Собственные реквизиты из расширения в коде доступны через точку, как и обычные. В типовых конфигурациях это основной способ добавить своё поле, не ломая поддержку и обновления.

У способа есть ограничения. Реквизит из расширения не попадёт в типовые механизмы обмена данными (РИБ, синхронизация), если его там специально не учесть, а при сложной доработке нескольких объектов расширение ведут аккуратно, чтобы оно не конфликтовало с обновлениями основной конфигурации. Для одного-двух полей это почти всегда удобнее и безопаснее, чем снятие с поддержки.

Можно ли добавить реквизит без снятия конфигурации с поддержки?
Да, через расширение конфигурации. Оно не трогает исходную конфигурацию, поэтому автообновление типовой продолжает работать штатно.
Почему новый реквизит не виден в «1С:Предприятии»?
Три частые причины: не обновлена структура базы (F7), реквизит не выведен на управляемую форму вручную, либо у справочника в свойстве Использование стоит значение, исключающее текущий элемент (например, «Для группы», а вы открываете элемент).
Чем отличаются Имя и Синоним реквизита?
Имя — внутренний идентификатор для кода и запросов, без пробелов. Синоним — подпись, которую видит пользователь на форме и в отчётах. Имя после ввода значений лучше не менять, синоним можно править свободно.
Обязательно ли индексировать реквизит?
Нет. Индекс нужен, только если по реквизиту будут отбирать, сортировать списки или соединять таблицы в запросах. Лишние индексы замедляют запись и увеличивают размер базы.
Удалится ли реквизит из расширения при обновлении типовой конфигурации?
Нет. Собственные объекты и реквизиты расширения не затрагиваются обновлением основной конфигурации — в этом и смысл расширений.