Где посмотреть код расширения конфигурации и как с ним работать
Содержание
Модуль расширения 1С открывают в Конфигураторе: Конфигурация → Расширения конфигурации, выделите нужное расширение и откройте его дерево кнопкой «Конфигурация» в окне списка. В дереве расширения найдите объект и откройте его модуль так же, как в основной конфигурации: двойным щелчком по модулю или через контекстное меню.
Если расширения ещё нет в базе, сначала загрузите файл .cfe в то же окно. В режиме «1С:Предприятие» код расширения посмотреть нельзя: там его можно только подключить, отключить или удалить. Для чтения кода без базы есть второй путь: выгрузить расширение в XML-файлы и смотреть их в любом редакторе.
Файлы .cf и .cfe и что нужно для работы
Расширения появились в платформе 8.3.6. С тех пор у разработчика два основных формата файлов конфигурации.
| Файл | Что внутри | Куда загружать |
|---|---|---|
.cf | Основная конфигурация целиком | Конфигурация → Загрузить конфигурацию из файла |
.cfe | Расширение: свои объекты и заимствованные из основной конфигурации | Окно Расширения конфигурации |
.epf, .erf | Внешняя обработка или отчёт | Открываются через Файл → Открыть, к расширениям не относятся |
| Каталог с XML | Выгрузка конфигурации или расширения в файлы | Загрузка из файлов или импорт в EDT |
Файл .cfe нельзя загрузить как основную конфигурацию. Если загрузить его через пункт для .cf, платформа откажется. Путаница частая: файл расширения похож на обычную конфигурацию, но живёт поверх неё.
Что понадобится:
- 🖥️ установленная платформа 8.3 с Конфигуратором (тонкого клиента недостаточно);
- 🔑 пользователь базы с правами администратора, иначе Конфигуратор не откроется;
- 📦 сама база, в которой расширение подключено, или файл
.cfe; - 🧪 копия базы, если собираетесь не только смотреть, но и менять код.
Чтобы просто прочитать чужой .cfe, рабочая база не нужна. Создайте пустую файловую информационную базу без конфигурации, откройте её в Конфигураторе и загрузите расширение туда. Применить его к пустой базе платформа не сможет, но само дерево и код модулей будут доступны для чтения.
Учтите ограничение: в пустой базе заимствованные объекты окажутся «висящими» — основной конфигурации под ними нет. Для полноценной проверки нужна база с той конфигурацией, под которую расширение писали.
Как загрузить расширение в базу и открыть его
Порядок для Конфигуратора, когда у вас есть только файл:
- Запустите базу в режиме Конфигуратор.
- Откройте основную конфигурацию:
Конфигурация → Открыть конфигурацию. Так удобнее сверять заимствованные объекты с типовыми. - Выберите
Конфигурация → Расширения конфигурации. Откроется список расширений базы. - Если нужного расширения нет, добавьте новую строку, а затем загрузите в неё файл
.cfeчерез меню «Действия» этого окна (команда загрузки расширения из файла). - Выделите расширение и нажмите «Конфигурация». Откроется отдельное дерево с заголовком вида «Расширение: ИмяРасширения».
- Если загружали или правили расширение, обновите конфигурацию базы данных для него:
Конфигурация → Обновить конфигурацию базы данныхпри активном окне расширения.
Загрузка .cfe и обновление конфигурации БД — два отдельных шага. Пока не выполнен второй, пользователи работают со старой версией расширения.
Подключение без Конфигуратора
В пользовательском режиме расширение подключают, но код не открывают. В типовых конфигурациях на БСП путь такой:
| Конфигурация | Где список расширений |
|---|---|
| Бухгалтерия предприятия 3.0 | Администрирование → Печатные формы, отчеты и обработки → Расширения |
| ЗУП 3.1 | Администрирование → Печатные формы, отчеты и обработки → Расширения |
| Любая конфигурация | Все функции → Стандартные → Управление расширениями конфигурации |
Команда «Все функции» появляется после включения в Сервис и настройки → Параметры. После добавления расширения программа попросит перезапуск: изменения применятся при новом сеансе.
Где найти модули расширения в дереве
В дереве расширения видны два типа объектов.
- 🟢 Собственные — созданы прямо в расширении: новые общие модули, обработки, отчёты, справочники. Их модули открываются как обычно.
- 🟡 Заимствованные — объекты основной конфигурации, перенесённые в расширение. У них значок с пометкой, а модуль содержит только перехваченные процедуры.
Где лежит конкретный код:
- Модули расширения уровня приложения. Щёлкните правой кнопкой по корню дерева расширения. В меню есть команды открытия модуля сеанса, модуля управляемого приложения, модуля внешнего соединения.
- Общие модули — ветка
Общие → Общие модулив дереве расширения. - Модуль объекта или менеджера документа, справочника — откройте объект двойным щелчком, перейдите на закладку «Прочее» и выберите нужный модуль. Либо выберите модуль из контекстного меню объекта в дереве.
- Модуль формы — раскройте ветку «Формы» у объекта, откройте форму и переключитесь на закладку «Модуль» внизу редактора формы.
Если объекта нет в дереве расширения, его модуль в расширении пустой: расширение ничего в нём не меняет. Код этого объекта смотрите в основной конфигурации.
Как читать перехваченный код
В заимствованных модулях процедуры отмечены аннотациями. Именно они показывают, что расширение делает с типовым кодом:
&После("ПередЗаписью")
Процедура Расш_ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
// выполняется после типовой процедуры ПередЗаписью
КонецПроцедуры
&Вместо("ЗаполнитьТабличнуюЧасть")
Процедура Расш_ЗаполнитьТабличнуюЧасть()
// типовой код не выполнится, пока не вызвать ПродолжитьВызов()
ПродолжитьВызов();
КонецПроцедуры
Что означают аннотации:
| Аннотация | Когда выполняется код расширения |
|---|---|
&Перед | До типовой процедуры |
&После | После типовой процедуры |
&Вместо | Вместо типовой; типовая выполнится только через ПродолжитьВызов() |
&ИзменениеИКонтроль | Копия типовой процедуры с помеченными вставками и удалениями |
Аннотация &ИзменениеИКонтроль есть только в свежих версиях платформы. Если расширение с ней не загружается, проверьте версию платформы и режим совместимости.
Чтобы быстро найти все процедуры модуля, откройте его и вызовите список процедур и функций с панели редактора. Для поиска по всему расширению подойдёт глобальный поиск из меню «Правка»: в области поиска оставьте только расширение.
Как добавить в расширение модуль, которого там ещё нет
Нужный объект не заимствован, а перехватить его процедуру надо? В дереве основной конфигурации щёлкните по объекту правой кнопкой и выберите «Добавить в расширение», затем укажите расширение. Объект появится в дереве расширения. Откройте его модуль, щёлкните правой кнопкой по нужной процедуре в модуле основной конфигурации и выберите добавление в расширение: платформа сама создаст заготовку с аннотацией.
Выгрузка кода расширения в файлы
Читать код в Конфигураторе неудобно, если нужно сравнить версии или положить расширение в 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 | Включён флаг «Безопасный режим» в списке расширений | Снимать флаг только для проверенных расширений |
Пароль на модуль ставят из меню редактора модуля, команда связана с паролем текста. Такая защита закрывает только чтение исходника. Поведение расширения от неё не меняется.
Снимать защиту с чужого кода сторонними утилитами — это нарушение лицензионного договора с автором. Если расширение купленное, спросите у поставщика исходники или доработку: многие разработчики дают открытую версию за отдельную плату.
Флаги «Безопасный режим» и «Защита от опасных действий» видны колонками в окне Расширения конфигурации. Расширения из внешних источников по умолчанию подключаются в безопасном режиме. Снимайте его, только если прочитали код и понимаете, что он делает с файлами, сетью и внешними компонентами.
Что мешает открыть или применить расширение
Ошибки при работе с модулями расширения обычно связаны не с самим кодом, а с версиями. Ниже симптомы и решения.
Ещё одна частая ловушка — флаг «Активно». Если он снят, расширение есть в списке и его код можно читать, но в работе базы оно не участвует. При поиске ошибки сначала смотрите на этот флаг.
Сравнение версий и отладка кода расширения
Когда расширение пришло в новой версии, не загружайте его поверх вслепую. Сначала сравните.
Сравнение
- Откройте дерево текущего расширения.
- Выберите
Конфигурация → Сравнить, объединить с конфигурацией из файлапри активном окне расширения и укажите новый.cfe. - В окне сравнения отметьте объекты, которые нужно взять из файла, и посмотрите различия модулей построчно.
- Сформируйте отчёт о сравнении, если изменения нужно согласовать с кем-то ещё.
Для истории изменений удобнее Git: выгружайте каждую версию в XML и сравнивайте файлы .bsl обычными средствами. Так видно, кто и когда поменял конкретную процедуру.
Отладка
Точки останова в модулях расширения ставятся так же, как в основной конфигурации: F9 на нужной строке.
- 🐞 В файловой базе запустите отладку из Конфигуратора (
F5) и выполните действие, которое вызывает перехваченную процедуру. - 🖧 В клиент-серверной базе отладка серверного кода должна быть разрешена на сервере 1С. Без этого точки в серверных процедурах не сработают. Включение отладки на сервере требует перезапуска службы агента — все сеансы пользователей оборвутся, делайте это вне рабочего времени.
- 🔎 Если точка в процедуре
&Передне срабатывает, проверьте, что имя в аннотации совпадает с именем типовой процедуры и что расширение активно.
Для проверки, что именно поменяло расширение, удобен простой приём: временно снимите флаг «Активно» в копии базы и повторите действие. Если поведение вернулось к типовому, дело в расширении.
Можно ли открыть код расширения в режиме 1С:Предприятие?
Чем расширение отличается от внешней обработки?
.epf живёт отдельно и открывается через меню «Файл». Её код читают через Файл → Открыть в Конфигураторе.