Новое поле в типовом справочнике или документе без снятия с поддержки

· 10 мин

Содержание

Чтобы добавить реквизит в расширение 1С, заимствуйте нужный объект (справочник, документ) в расширение, создайте в нём новый реквизит с префиксом расширения, включите у расширения свойство Изменяет структуру данных конфигурации и выполните Обновить конфигурацию базы данных. Если поле нужно пользователю, заимствуйте ещё и форму объекта и перетащите реквизит на неё. Работает на платформе 1С:Предприятие 8.3 с номером не ниже 8.3.11: в более ранних версиях добавлять реквизиты в заимствованные объекты было нельзя.

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

Зачем добавлять реквизиты через расширение, а не в основную конфигурацию

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

Что это даёт на практике:

  • ✅ типовая конфигурация не снимается с поддержки, обновления ставятся без сравнения-объединения;
  • ✅ доработку можно выгрузить в файл .cfe и перенести в другую базу за минуту;
  • ✅ расширение подключается из пользовательского режима, без Конфигуратора;
  • ⚠️ данные нового реквизита хранятся в базе, а значит, удаление расширения приведёт к потере этих данных;
  • ⚠️ при крупном обновлении типовой заимствованный объект могут переименовать или удалить, и расширение придётся поправить.
СпособКогда подходитРиски
Реквизит в расширенииТиповая на поддержке, доработок немногоНужно следить за совместимостью после обновлений
Реквизит в основной конфигурацииКонфигурация уже сильно доработана и снята с поддержкиКаждое обновление требует объединения
Дополнительные реквизиты (БСП)Нужно простое поле без кода и отборов в запросахХранятся в табличной части, в запросах неудобны

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

Подготовка: версия платформы, режим совместимости и права

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

Версия платформы и режим совместимости

  1. Откройте Справка → О программе и посмотрите номер платформы. Нужен номер не ниже 8.3.11.
  2. В Конфигураторе откройте свойства корня основной конфигурации и найдите Режим совместимости. Если там указана версия ниже 8.3.11, добавить реквизит в заимствованный объект не получится, даже если сама платформа новее.
  3. У создаваемого расширения есть своё свойство Режим совместимости. Платформа заполняет его по основной конфигурации, менять без причины не нужно.

Права и доступ к базе

  • 🔑 Для работы в Конфигураторе нужна роль с административными правами (в типовых — Полные права или Администратор системы).
  • 🔒 Монопольный доступ понадобится, когда вы будете применять изменения структуры к базе. Если реструктуризация затрагивает таблицу, с которой работают пользователи, планируйте обновление на время, когда в базе никого нет.
  • 💾 Сделайте резервную копию: выгрузку .dt или бэкап СУБД.

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

Пошаговая инструкция: как добавить реквизит в расширение конфигурации

Пример ниже — поле «Ответственный менеджер» в справочнике Контрагенты Бухгалтерии предприятия 3.0. Для документа порядок тот же.

Шаг 1. Создать расширение

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

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

Шаг 2. Заимствовать объект

  1. В дереве основной конфигурации найдите Справочники → Контрагенты.
  2. Правой кнопкой — Добавить в расширение и выберите своё расширение.
  3. В дереве расширения справочник появится с пометкой заимствованного объекта.

Заимствованный объект — это «ссылка» на типовой. Его реквизиты видны, но менять их нельзя. Свои реквизиты добавлять можно.

Шаг 3. Добавить реквизит

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

Шаг 4. Включить изменение структуры данных

Откройте свойства корня расширения и установите флажок Изменяет структуру данных конфигурации. Без него платформа не применит расширение с новыми реквизитами к базе.

Шаг 5. Вывести реквизит на форму

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

Шаг 6. Применить изменения к базе

  1. Сначала проверьте расширение: в окне его дерева Конфигурация → Проверка конфигурации.
  2. Затем Конфигурация → Обновить конфигурацию базы данных (F7), находясь в окне расширения.
  3. Платформа покажет список изменений структуры. Подтвердите реорганизацию.
  4. Запустите программу (F5) и откройте карточку контрагента.
Перед обновлением базы
Выполнено: 0 / 6

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

Для кода основной конфигурации и расширения новый реквизит выглядит как обычный: Объект.Расш1_ОтветственныйМенеджер. Типовой код о нём не знает, поэтому логику пишут в модулях заимствованных объектов с аннотациями.

Заполнение в обработчике события

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

&После("ПередЗаписью")
Процедура Расш1_ПередЗаписьюПосле(Отказ)

	Если ОбменДанными.Загрузка Тогда
		Возврат;
	КонецЕсли;

	Если Не ЗначениеЗаполнено(Расш1_ОтветственныйМенеджер) Тогда
		Расш1_ОтветственныйМенеджер = Пользователи.ТекущийПользователь();
	КонецЕсли;

КонецПроцедуры

Проверка ОбменДанными.Загрузка нужна, чтобы код не срабатывал при загрузке данных обменом. Пользователи.ТекущийПользователь() — функция общего модуля БСП, она есть в типовых конфигурациях на её основе.

Основные аннотации для методов модулей:

АннотацияЧто делает
&Перед("Метод")Ваш код выполняется до типового
&После("Метод")Ваш код выполняется после типового
&Вместо("Метод")Ваш код заменяет типовой; вызвать исходный можно через ПродолжитьВызов()
&ИзменениеИКонтроль("Метод")Правка внутри типового метода с контролем изменений при обновлении

Для полей формы обработчики событий добавляют в заимствованной форме: при назначении обработчика платформа предлагает выбрать, вызывать его перед типовым, после или вместо.

&Вместо без ПродолжитьВызов() полностью отключает типовую логику. После обновления конфигурации её исправления до вас не дойдут. Используйте этот вариант только когда без него не обойтись.

Реквизит в запросе

В запросах реквизит расширения указывается так же, как типовой:

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|	Контрагенты.Ссылка КАК Контрагент,
|	Контрагенты.ИНН КАК ИНН
|ИЗ
|	Справочник.Контрагенты КАК Контрагенты
|ГДЕ
|	Контрагенты.Расш1_ОтветственныйМенеджер = &Менеджер";
Запрос.УстановитьПараметр("Менеджер", Пользователи.ТекущийПользователь());
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
	Сообщить(СтрШаблон("%1, ИНН %2", Выборка.Контрагент, Выборка.ИНН));
КонецЦикла;

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

Права пользователей на новый реквизит

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

Порядок настройки:

  1. В дереве расширения создайте собственную роль, например Расш1_РаботаСОтветственнымМенеджером.
  2. В роли дайте права Просмотр и Редактирование на реквизит Расш1_ОтветственныйМенеджер заимствованного справочника. Если в роль приходится заимствовать сам справочник, права на типовые реквизиты в ней не трогайте.
  3. Обновите конфигурацию базы данных.
  4. Назначьте роль пользователям. В типовых на БСП роли назначают через профили групп доступа: Администрирование → Настройки пользователей и прав → Профили групп доступа. Откройте нужный профиль (или его копию, если профиль поставляемый) и отметьте роль расширения.

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

Подключение готового расширения к рабочей базе

Разработку удобно вести в копии, а в рабочую базу переносить файл.

  1. В Конфигураторе, в окне расширения: Конфигурация → Сохранить конфигурацию в файл — получится файл .cfe.
  2. В рабочей базе в режиме 1С:Предприятие: в Бухгалтерии предприятия 3.0 Администрирование → Печатные формы, отчеты и обработки → Расширения. Универсальный путь для любой конфигурации — Все функции → Стандартные → Управление расширениями конфигурации (пункт «Все функции» включается в параметрах программы).
  3. Нажмите Добавить из файла и выберите .cfe.
  4. Снимите флажок Безопасный режим, если расширение обращается к функциям, которые в безопасном режиме запрещены. Снимайте его только для расширений из надёжного источника.
  5. Перезапустите программу. Изменения структуры применятся при перезапуске.

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

Проверка работы и отладка реквизита

После установки пройдите короткий сценарий:

  • 👀 откройте карточку под рядовым пользователем: поле видно и редактируется в соответствии с ролью;
  • 💾 заполните поле, запишите элемент, закройте и откройте снова — значение сохранилось;
  • 🔍 установите в списке контрагентов отбор по новому полю через меню Ещё формы списка;
  • 🧪 если есть код — поставьте точку останова в процедуре расширения и запустите отладку (F5 из Конфигуратора).

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

Полезно заглянуть в журнал регистрации (Администрирование → Обслуживание → Журнал регистрации в БП 3.0) с отбором по уровню «Ошибка»: ошибки применения расширений попадают туда.

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

Диагностика: выберите симптом

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

Частые вопросы

Можно ли добавить реквизит в табличную часть типового документа?
Да. Заимствуйте документ, раскройте в расширении нужную табличную часть и добавьте реквизит в неё. Порядок тот же, флажок изменения структуры тоже нужен.
Можно ли изменить тип или длину типового реквизита через расширение?
Нет. Свойства заимствованных реквизитов менять нельзя. Нужен другой тип — создайте свой реквизит с префиксом и заполните его из типового.
Попадёт ли реквизит расширения в обмен с другими базами?
Только если правила обмена его знают. Типовые правила о нём ничего не знают, поэтому значение не передаётся, пока вы не доработаете обмен.
Сколько реквизитов можно добавить в одно расширение?
Жёсткого ограничения для практических задач нет. Удобнее группировать доработки по смыслу: одно расширение на одну задачу проще сопровождать и отключать.
Работает ли такой реквизит в базе 1С:Фреш?
В облачном сервисе действуют свои правила установки расширений, особенно меняющих структуру данных. Перед разработкой уточните условия у своего провайдера.