Расширения конфигурации 1С 8.3: как дорабатывать типовую базу и не терять обновления

· 10 мин

Содержание

Расширение конфигурации в 1С 8.3 — это отдельный «слой» доработок, который подключается поверх типовой конфигурации и не снимает её с поддержки. Устанавливается оно файлом .cfe через Администрирование → Печатные формы, отчеты и обработки → Расширения или в конфигураторе через Конфигурация → Расширения конфигурации, настройка сводится к трём флагам: активность, безопасный режим и защита от опасных действий.

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

Как устроено расширение конфигурации

Расширение — это мини-конфигурация со своим деревом объектов. В нём живут объекты двух видов.

  • 🧩 Собственные объекты — то, чего нет в типовой: новые отчёты, обработки, справочники, общие модули, роли.
  • 🔗 Заимствованные объекты — копии-ссылки на объекты основной конфигурации. Заимствовали документ — и можете добавить ему реквизит, изменить форму или вмешаться в обработчик модуля.

Чтобы имена не пересеклись с типовыми, у расширения есть префикс. Конфигуратор подставляет его к именам новых объектов и процедур: например, Расш1_ПечатьАкта. Это не формальность: если в следующем релизе разработчик типовой добавит объект с тем же именем, без префикса будет конфликт.

Назначение расширения

При создании указывают свойство «Назначение». От него зависит порядок применения, когда расширений несколько.

НазначениеДля чегоПорядок применения
ИсправлениеСрочная правка ошибки типовой (исправительный патч)Первым
АдаптацияДоработка под учёт конкретной компанииВторым
ДополнениеНовый функционал: отчёты, обработки, интеграцииПоследним

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

Как расширение вмешивается в код

Для заимствованного модуля доступны аннотации:

  • ⏮ &Перед("ИмяПроцедуры") — ваш код выполнится до типового;
  • ⏭ &После("ИмяПроцедуры") — после типового;
  • 🔁 &Вместо("ИмяПроцедуры") — полностью заменяет типовую процедуру; внутри можно вызвать оригинал через ПродолжитьВызов();
  • ✂️ &ИзменениеИКонтроль("ИмяПроцедуры") — копия типового кода с точечными вставками #Вставка … #КонецВставки и удалениями #Удаление … #КонецУдаления.

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

&Перед("ПередЗаписью")
Процедура Расш1_ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
	
	Если РежимЗаписи = РежимЗаписиДокумента.Проведение
		И Не ЗначениеЗаполнено(Комментарий) Тогда
		Сообщение = Новый СообщениеПользователю;
		Сообщение.Текст = "Заполните комментарий перед проведением.";
		Сообщение.Сообщить();
		Отказ = Истина;
	КонецЕсли;
	
КонецПроцедуры

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

Адаптация расширения при обновлении типовой

Каждый раз при запуске сеанса платформа берёт актуальную основную конфигурацию и накладывает на неё расширения. Поэтому после обновления релиза расширение не «перезаливают» — оно применяется к новой версии само.

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

Контроль заимствованных свойств

У заимствованного объекта можно включить контроль свойств. Платформа запоминает их значения на момент заимствования. Если после обновления типовой значение изменилось (например, поменялся тип реквизита), расширение не применится, а пользователь увидит ошибку применения. Это лучше, чем тихая некорректная работа.

Контроль кода в «ИзменениеИКонтроль»

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

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

Что делать после каждого обновления релиза:

  1. Обновите копию базы на тестовом стенде.
  2. Запустите её и убедитесь, что расширения применились без сообщений об ошибках.
  3. Пройдите сценарии, которые затрагивает доработка: проведите документ, сформируйте печатную форму, откройте изменённую форму.
  4. Только после этого обновляйте рабочую базу.

Создание расширения в конфигураторе: пошагово

Создавать расширения может пользователь с правами администратора. Конфигуратор для этого не требует монопольного доступа к базе: работать можно, пока пользователи в программе.

Шаг 1. Создаём пустое расширение

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

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

  1. В дереве основной конфигурации найдите нужный объект, например документ «Реализация товаров и услуг».
  2. В контекстном меню выберите «Добавить в расширение» и укажите ваше расширение.
  3. Объект появится в дереве расширения с пометкой заимствованного.
  4. Чтобы изменить форму, заимствуйте её отдельно из ветки «Формы» этого объекта. С модулем то же самое: откройте модуль заимствованного объекта и через контекстное меню типовой процедуры добавьте перехват с нужной аннотацией.

Шаг 3. Дорабатываем и сохраняем

  1. Добавьте свои реквизиты, элементы формы, код.
  2. Выполните Конфигурация → Обновить конфигурацию базы данных в окне расширения (F7). Это отдельный шаг от сохранения: без него изменения не попадут в базу.
  3. Для переноса в другую базу сохраните расширение в файл .cfe через меню «Конфигурация» окна расширения.

Загрузка и обновление из командной строки

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

"C:\Program Files\1cv8\8.3.24.1691\bin\1cv8.exe" DESIGNER /F"D:\Bases\Buh" /N"Администратор" /P"" ^
 /LoadCfg "D:\Ext\Dorabotki.cfe" -Extension "Доработки" ^
 /UpdateDBCfg -Extension "Доработки" ^
 /Out "D:\Ext\log.txt"

Путь к 1cv8.exe подставьте свой, номер платформы в нём у вас другой. Для клиент-серверной базы вместо /F указывают /S"сервер\имябазы". Результат смотрите в файле из /Out.

Подключение готового расширения в пользовательском режиме

Готовый .cfe от разработчика или поставщика сервиса можно установить без конфигуратора. В конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11, КА, ERP) путь одинаковый.

  1. Откройте Администрирование → Печатные формы, отчеты и обработки.
  2. Включите флаг «Расширения», если он ещё не включён, и перейдите по ссылке «Расширения».
  3. Нажмите «Добавить из файла» и выберите .cfe.
  4. Подтвердите предупреждение о безопасности. Расширение появится в списке.
  5. Перезапустите программу: расширение применяется к новым сеансам.

Перед установкой расширения от стороннего разработчика сделайте резервную копию базы — особенно если расширение меняет структуру данных (добавляет реквизиты и справочники). Откатить такое расширение отключением не всегда получится без последствий для данных.

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

Если у вас конфигурация без БСП или упрощённая, используйте платформенную обработку: Все функции → Стандартные → Управление расширениями конфигурации. Пункт «Все функции» включают в Сервис и настройки → Параметры.

Безопасный режим, ограничения и права

У каждого расширения в списке есть три ключевые настройки.

СвойствоЧто даётКогда снимать
АктивноВключает или выключает расширение без удаленияВременное отключение при поиске ошибки
Безопасный режимЗапрещает коду расширения привилегированные действия: работу с файлами на сервере, COM-объекты, внешние компоненты, запуск программТолько для доверенного расширения, которому реально нужен такой доступ
Защита от опасных действийПоказывает пользователю предупреждение при потенциально опасных операцияхКак правило, оставляют включённой

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

Чего расширение не умеет

  • 🚫 Удалить объект или реквизит основной конфигурации.
  • 🚫 Изменить тип типового реквизита.
  • 🚫 Сделать расширение, меняющее структуру данных, «на лету» без обновления конфигурации базы данных.
  • ⚠️ Расширения с изменением структуры данных накладывают ограничения на распределённые базы (РИБ): для них отдельно настраивают свойство использования в РИБ, и в узлах должна быть та же версия расширения.

Права в расширении

Если в расширении есть собственные объекты, к ним нужен доступ. Добавьте в расширение собственную роль с правами на эти объекты и включите её в профиль групп доступа пользователя. Заимствованные типовые роли тоже можно расширить, если нужно выдать права на новые реквизиты. Без этого пользователь получит ошибку нарушения прав при открытии новой обработки или отчёта.

Отладка и тестирование расширения

Код расширения отлаживается так же, как код основной конфигурации.

  1. В конфигураторе откройте модуль расширения и поставьте точку останова (F9).
  2. Запустите отладку: Отладка → Начать отладку → «1С:Предприятие». Для клиент-серверной базы на сервере 1С должна быть включена отладка (ключ -debug у службы агента сервера).
  3. Выполните в программе действие, которое вызывает перехваченную процедуру.
  4. Смотрите стек вызовов: в нём видно, где выполняется типовой код, а где — код расширения.

Включение отладки на рабочем сервере требует перезапуска службы агента сервера 1С. Все сеансы пользователей при этом оборвутся, поэтому делайте это вне рабочего времени или отлаживайте на тестовом сервере.

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

  • ✅ В конфигураторе расширения выполните проверку модулей (Конфигурация → Проверка конфигурации), отметив расширение.
  • ✅ Для массовой проверки после обновления релиза можно воспользоваться методом ПроверитьВозможностьПрименения() объекта расширения в коде обработки: он вернёт список проблем, не применяя расширение.
  • ✅ Держите тестовую копию базы на том же релизе, что и рабочая, и прогоняйте на ней расширение после каждого обновления.
Тестирование расширения перед выкладкой
Выполнено: 0 / 6

Частые ошибки с расширениями и способы их решения

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

Если ничего не помогло

  1. Отключите расширение флагом «Активно» и проверьте, что типовая работает без него. Так вы поймёте, в расширении проблема или в самой базе.
  2. Отключайте расширения по одному, если их несколько, чтобы найти виновника.
  3. Если расширение меняет структуру данных и база не запускается, загрузите резервную копию на тестовый стенд и разберитесь там, а не в рабочей базе.
  4. Для расширений сторонних разработчиков запросите у поставщика версию под ваш релиз: часто проблема решается его обновлением.

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

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