Где посмотреть код расширения конфигурации и как с ним работать

· 9 мин

Содержание

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

Если расширения ещё нет в базе, сначала загрузите файл .cfe в то же окно. В режиме «1С:Предприятие» код расширения посмотреть нельзя: там его можно только подключить, отключить или удалить. Для чтения кода без базы есть второй путь: выгрузить расширение в XML-файлы и смотреть их в любом редакторе.

Файлы .cf и .cfe и что нужно для работы

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

ФайлЧто внутриКуда загружать
.cfОсновная конфигурация целикомКонфигурация → Загрузить конфигурацию из файла
.cfeРасширение: свои объекты и заимствованные из основной конфигурацииОкно Расширения конфигурации
.epf, .erfВнешняя обработка или отчётОткрываются через Файл → Открыть, к расширениям не относятся
Каталог с XMLВыгрузка конфигурации или расширения в файлыЗагрузка из файлов или импорт в EDT

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

Что понадобится:

  • 🖥️ установленная платформа 8.3 с Конфигуратором (тонкого клиента недостаточно);
  • 🔑 пользователь базы с правами администратора, иначе Конфигуратор не откроется;
  • 📦 сама база, в которой расширение подключено, или файл .cfe;
  • 🧪 копия базы, если собираетесь не только смотреть, но и менять код.

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

Учтите ограничение: в пустой базе заимствованные объекты окажутся «висящими» — основной конфигурации под ними нет. Для полноценной проверки нужна база с той конфигурацией, под которую расширение писали.

Как загрузить расширение в базу и открыть его

Порядок для Конфигуратора, когда у вас есть только файл:

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

Загрузка .cfe и обновление конфигурации БД — два отдельных шага. Пока не выполнен второй, пользователи работают со старой версией расширения.

Подключение без Конфигуратора

В пользовательском режиме расширение подключают, но код не открывают. В типовых конфигурациях на БСП путь такой:

КонфигурацияГде список расширений
Бухгалтерия предприятия 3.0Администрирование → Печатные формы, отчеты и обработки → Расширения
ЗУП 3.1Администрирование → Печатные формы, отчеты и обработки → Расширения
Любая конфигурацияВсе функции → Стандартные → Управление расширениями конфигурации

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

Где найти модули расширения в дереве

В дереве расширения видны два типа объектов.

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

Где лежит конкретный код:

  1. Модули расширения уровня приложения. Щёлкните правой кнопкой по корню дерева расширения. В меню есть команды открытия модуля сеанса, модуля управляемого приложения, модуля внешнего соединения.
  2. Общие модули — ветка Общие → Общие модули в дереве расширения.
  3. Модуль объекта или менеджера документа, справочника — откройте объект двойным щелчком, перейдите на закладку «Прочее» и выберите нужный модуль. Либо выберите модуль из контекстного меню объекта в дереве.
  4. Модуль формы — раскройте ветку «Формы» у объекта, откройте форму и переключитесь на закладку «Модуль» внизу редактора формы.

Если объекта нет в дереве расширения, его модуль в расширении пустой: расширение ничего в нём не меняет. Код этого объекта смотрите в основной конфигурации.

Как читать перехваченный код

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

&После("ПередЗаписью")
Процедура Расш_ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
    // выполняется после типовой процедуры ПередЗаписью
КонецПроцедуры

&Вместо("ЗаполнитьТабличнуюЧасть")
Процедура Расш_ЗаполнитьТабличнуюЧасть()
    // типовой код не выполнится, пока не вызвать ПродолжитьВызов()
    ПродолжитьВызов();
КонецПроцедуры

Что означают аннотации:

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

Аннотация &ИзменениеИКонтроль есть только в свежих версиях платформы. Если расширение с ней не загружается, проверьте версию платформы и режим совместимости.

Чтобы быстро найти все процедуры модуля, откройте его и вызовите список процедур и функций с панели редактора. Для поиска по всему расширению подойдёт глобальный поиск из меню «Правка»: в области поиска оставьте только расширение.

Как добавить в расширение модуль, которого там ещё нет

Нужный объект не заимствован, а перехватить его процедуру надо? В дереве основной конфигурации щёлкните по объекту правой кнопкой и выберите «Добавить в расширение», затем укажите расширение. Объект появится в дереве расширения. Откройте его модуль, щёлкните правой кнопкой по нужной процедуре в модуле основной конфигурации и выберите добавление в расширение: платформа сама создаст заготовку с аннотацией.

Выгрузка кода расширения в файлы

Читать код в Конфигураторе неудобно, если нужно сравнить версии или положить расширение в Git. Для этого расширение выгружают в XML.

Из интерфейса. Сделайте активным окно дерева расширения, затем Конфигурация → Выгрузить конфигурацию в файлы. Укажите пустой каталог. Модули окажутся в файлах Module.bsl, ObjectModule.bsl, ManagerModule.bsl внутри папок объектов.

Из командной строки. Удобно для автоматизации и ночных выгрузок:

"C:\Program Files\1cv8\8.3.24.1548\bin\1cv8.exe" DESIGNER /F "D:\Bases\Buh" /N "Администратор" /P "" /DumpConfigToFiles "D:\Export\MyExt" -Extension "МоеРасширение" /Out "D:\Export\log.txt"

Номер версии в пути подставьте свой. Для серверной базы вместо /F используйте /S "сервер\имябазы". Ключ -Extension указывает, что выгружается расширение, а не основная конфигурация.

Сохранить расширение обратно в .cfe тоже можно командой:

"C:\Program Files\1cv8\8.3.24.1548\bin\1cv8.exe" DESIGNER /F "D:\Bases\Buh" /N "Администратор" /DumpCfg "D:\Export\MyExt.cfe" -Extension "МоеРасширение"

Загрузка выполняется парными ключами /LoadConfigFromFiles и /LoadCfg с тем же -Extension. После загрузки нужен запуск с /UpdateDBCfg -Extension "МоеРасширение", иначе изменения не применятся.

Чем открыть расширение без платформы

  • 🧰 1С:Enterprise Development Tools (EDT) — импортирует расширение из базы или из XML как отдельный проект.
  • 📝 Visual Studio Code с плагином для языка 1С (BSL) — читает выгруженные .bsl с подсветкой и навигацией.
  • 📂 v8unpack — сторонняя утилита с открытым кодом, разбирает контейнер .cf/.cfe на файлы без запуска 1С. Подходит для быстрого взгляда, но для работы надёжнее штатная выгрузка.

Защищённые модули и код без исходного текста

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

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

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

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

Флаги «Безопасный режим» и «Защита от опасных действий» видны колонками в окне Расширения конфигурации. Расширения из внешних источников по умолчанию подключаются в безопасном режиме. Снимайте его, только если прочитали код и понимаете, что он делает с файлами, сетью и внешними компонентами.

Что мешает открыть или применить расширение

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

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

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

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

Когда расширение пришло в новой версии, не загружайте его поверх вслепую. Сначала сравните.

Сравнение

  1. Откройте дерево текущего расширения.
  2. Выберите Конфигурация → Сравнить, объединить с конфигурацией из файла при активном окне расширения и укажите новый .cfe.
  3. В окне сравнения отметьте объекты, которые нужно взять из файла, и посмотрите различия модулей построчно.
  4. Сформируйте отчёт о сравнении, если изменения нужно согласовать с кем-то ещё.

Для истории изменений удобнее Git: выгружайте каждую версию в XML и сравнивайте файлы .bsl обычными средствами. Так видно, кто и когда поменял конкретную процедуру.

Отладка

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

  • 🐞 В файловой базе запустите отладку из Конфигуратора (F5) и выполните действие, которое вызывает перехваченную процедуру.
  • 🖧 В клиент-серверной базе отладка серверного кода должна быть разрешена на сервере 1С. Без этого точки в серверных процедурах не сработают. Включение отладки на сервере требует перезапуска службы агента — все сеансы пользователей оборвутся, делайте это вне рабочего времени.
  • 🔎 Если точка в процедуре &Перед не срабатывает, проверьте, что имя в аннотации совпадает с именем типовой процедуры и что расширение активно.

Для проверки, что именно поменяло расширение, удобен простой приём: временно снимите флаг «Активно» в копии базы и повторите действие. Если поведение вернулось к типовому, дело в расширении.

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