Как изменить расширение конфигурации 1С и не сломать базу

· 9 мин

Содержание

Редактировать код, формы и состав объектов расширения можно только в Конфигураторе: Конфигурация → Расширения конфигурации, выделить расширение и открыть его дерево. В режиме 1С:Предприятие расширение можно лишь подключить, заменить файлом .cfe, выгрузить, отключить или удалить. Править модуль прямо из пользовательского режима нельзя.

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

Где править расширение: два режима и их границы

Расширения появились в платформе 8.3.6. С тех пор механизм сильно вырос, и часть приёмов работает только на свежих платформах. Перед правкой посмотрите номер платформы в окне Справка → О программе.

Что нужно сделатьРежим ПредприятияКонфигуратор
Подключить готовый .cfe✅✅
Заменить расширение новой версией из файла✅✅
Выгрузить в файл✅✅
Включить или отключить, снять безопасный режим✅ (при наличии прав)✅
Изменить код модуля, форму, макет❌✅
Заимствовать объект типовой конфигурации❌✅
Отладка с точками останова❌✅

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

Как изменить расширение 1С в режиме Предприятия

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

Администрирование → Печатные формы, отчеты и обработки → Расширения

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

Заменить расширение новой версией

  1. Получите от разработчика свежий файл .cfe и сохраните в надёжном месте текущую версию — кнопкой выгрузки в файл в списке расширений.
  2. Выделите расширение в списке и найдите команду обновления из файла на диске. В форме БСП она в меню «Ещё», в платформенной форме — на командной панели.
  3. Укажите новый .cfe. Имя расширения в файле должно совпадать с подключённым, иначе система добавит второе расширение рядом.
  4. Перезапустите программу. Изменения расширений вступают в силу в новом сеансе, у других пользователей — после их перезахода.

Флажки, которые влияют на работу

  • 🔒 Безопасный режим. Расширение, загруженное через Предприятие, по умолчанию работает в безопасном режиме. Ему запрещён доступ к файлам, внешним компонентам, COM и привилегированным операциям. Если доработка пишет файл или вызывает внешнюю компоненту, флажок придётся снять.
  • 🛡 Защита от опасных действий. Перед потенциально опасными операциями система спрашивает подтверждение.
  • ⏸ Активно. Снятый флажок отключает расширение без удаления. Удобно, чтобы проверить, виновато ли оно в ошибке.

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

Правка расширения в Конфигураторе: пошагово

Основная работа идёт здесь. Порядок действий одинаков для любой типовой.

Открыть расширение

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

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

Создать новое расширение

В том же списке нажмите «Добавить». Заполните:

  • Имя — латиницей или кириллицей без пробелов, например ДоработкиПечати.
  • Префикс — его платформа подставит к именам новых объектов и процедур. Например, дп_. Префикс спасает от совпадения имён с объектами типовой после обновления.
  • Назначение — «Исправление», «Адаптация» или «Дополнение». Назначение влияет на порядок применения, если расширений несколько: сначала исправления, потом адаптации, потом дополнения.

Внести изменения в код

Модули заимствованных объектов в расширении пустые. Вы не правите исходную процедуру, а пишете свою и указываете аннотацией, как она связана с типовой:

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

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

Пример точечной правки через &ИзменениеИКонтроль:

&ИзменениеИКонтроль("ЗаполнитьТабличнуюЧасть")
Процедура дп_ЗаполнитьТабличнуюЧасть()
	Для Каждого Строка Из Объект.Товары Цикл
		#Вставка
		Если Строка.Количество = 0 Тогда
			Продолжить;
		КонецЕсли;
		#КонецВставки
		Строка.Сумма = Строка.Цена * Строка.Количество;
	КонецЦикла;
КонецПроцедуры

Строки между #Вставка и #КонецВставки добавляются, строки между #Удаление и #КонецУдаления выбрасываются. Остальной текст платформа сверяет с типовым при каждом запуске. Если после обновления типовая процедура поменялась, расширение перестанет применяться и сообщит об этом. Это защита от тихой поломки.

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

Применить изменения

  1. Проверьте синтаксис: Конфигурация → Проверка конфигурации при открытом дереве расширения или Ctrl+F7 в модуле.
  2. Сохраните и обновите конфигурацию базы данных в окне расширения (F7).
  3. Для переноса в рабочую базу выгрузите .cfe: при открытом расширении — Конфигурация → Сохранить конфигурацию в файл.

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

Состав расширения: заимствованные объекты и зависимости

Каждый объект в дереве расширения бывает двух видов:

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

Что тянется следом

Когда вы заимствуете форму, платформа добавляет в расширение и сам объект-владелец. Если в коде ссылаетесь на реквизит формы или на общий модуль типовой, их тоже нужно заимствовать, иначе проверка выдаст ошибку «объект не обнаружен». Лишние заимствования не ломают работу, но каждый из них становится точкой проверки при обновлении. Держите состав минимальным.

Контроль свойств

У заимствованного объекта в палитре свойств видно, какие свойства контролируются. Если включить контроль, например, типа реквизита, а в новом релизе типовой этот тип сменится, расширение не применится. Включайте контроль только для того, на что действительно опирается ваш код.

Расширения с данными

Начиная с платформы 8.3.11 расширение может добавлять реквизиты и табличные части к заимствованным справочникам и документам, а также собственные объекты с данными. Тогда расширение меняет структуру базы.

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

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

Отладка расширения ничем не отличается от отладки основной конфигурации. Точки останова ставятся в модулях расширения, а не в модулях типовой.

  1. Откройте модуль расширения и поставьте точку останова (F9) на нужной строке.
  2. Запустите Отладка → Начать отладку и выберите тонкий клиент.
  3. В открывшемся Предприятии выполните действие, которое вызывает перехваченную процедуру.

Что проверить, если код не срабатывает

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

Где тестировать

Правьте и отлаживайте на копии базы. Копию удобно делать выгрузкой .dt из Конфигуратора (Администрирование → Выгрузить информационную базу) и загрузкой в новую пустую базу. Загрузка .dt требует монопольного доступа к базе-приёмнику, поэтому грузите в отдельную тестовую базу, а не в рабочую.

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

Обновление расширения после выхода нового релиза типовой

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

Шаг 1. Проверить применимость

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

Шаг 2. Обновить заимствованные объекты

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

Шаг 3. Сверить процедуры под &ИзменениеИКонтроль

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

Шаг 4. Слить версии расширения

Если два разработчика вели разные копии расширения, используйте сравнение и объединение. При открытом расширении выберите Конфигурация → Сравнить, объединить с конфигурацией из файла и укажите второй .cfe. Отметьте нужные объекты и выполните объединение.

После обновления типовой
Выполнено: 0 / 6

Пакетная правка: командная строка и хранилище

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

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

Путь к платформе подставьте свой. Выгрузить расширение в файл — /DumpCfg "файл.cfe" -Extension Имя. Для хранения в Git используйте выгрузку в файлы: /DumpConfigToFiles "папка" -Extension Имя.

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

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

Можно ли поправить код расширения прямо в 1С:Предприятии?
Нет. В режиме Предприятия расширение можно только подключить, заменить файлом, выгрузить, отключить или удалить. Код, формы и макеты меняются в Конфигураторе.
Почему правка в расширении не видна другим пользователям?
Расширение применяется при входе в программу. Пользователям, которые работали в момент обновления, нужно перезапустить 1С.
Слетит ли расширение при обновлении типовой конфигурации?
Нет, оно останется в базе. Но если изменились перехваченные процедуры или контролируемые свойства, оно перестанет применяться до исправления.
Как узнать, какое расширение меняет нужную форму?
Отключайте расширения по одному флажком «Активно» и перезаходите. В Конфигураторе удобнее: откройте форму в дереве каждого расширения и посмотрите, есть ли она там.
Нужно ли снимать с поддержки типовую, чтобы править через расширение?
Нет. В этом и смысл расширений: типовая остаётся на поддержке и обновляется штатно, доработки живут отдельно.