Работа с расширениями конфигурации 1С 8.3: от файла .cfe до обновления типовой
Содержание
Расширение 1С подключают двумя способами. Пользователю с правами администратора хватит режима предприятия: в БП 3.0, ЗУП 3.1 и УТ 11 это Администрирование → Печатные формы, отчеты и обработки → Расширения, кнопка Добавить из файла, затем перезапуск программы. Разработчик работает в Конфигураторе: Конфигурация → Расширения конфигурации, где расширение можно не только загрузить, но и открыть, изменить и отладить.
Сам механизм — часть платформы, а не конкретной конфигурации. Он появился в версии 8.3.6 и с тех пор сильно вырос. Главный плюс: типовая остаётся на поддержке, обновляется штатно, а все доработки лежат отдельно — в файле .cfe и в самой базе.
Что даёт расширение и чем оно лучше правки типовой
Без расширений любую доработку вносили прямо в конфигурацию. Её снимали с поддержки, и каждое обновление превращалось в сравнение-объединение на несколько часов. Расширение решает это иначе: платформа при запуске «накладывает» его поверх основной конфигурации.
Что обычно делают расширением:
- 🖨️ свою печатную форму или правку макета типового документа;
- 📝 новый реквизит в документе или справочнике и поле на форме;
- ✅ дополнительные проверки при записи и проведении;
- 📊 отчёт или обработку, которые должны быть в меню, а не во внешнем файле;
- 🩹 исправление ошибки в типовом модуле до выхода официального релиза.
| Подход | Обновление типовой | Где хранится доработка | Риски |
|---|---|---|---|
| Правка конфигурации | Через сравнение-объединение, вручную | В основной конфигурации | Снятие с поддержки, долгие обновления |
| Внешняя обработка / печатная форма | Штатно | Во внешнем файле .epf/.erf | Только то, что разрешает БСП: печать, заполнение, отчёты |
| Расширение | Штатно, с проверкой применимости | Отдельно, в базе и в .cfe | После обновления может перестать применяться |
Правило выбора простое. Нужна только печатная форма или обработка заполнения — хватит внешней обработки. Нужно изменить поведение типового объекта, форму или добавить реквизит — нужно расширение.
Назначение расширений: исправление, адаптация, дополнение
У каждого расширения есть свойство Назначение. Оно задаёт порядок, в котором платформа применяет расширения, если их несколько:
- Исправление — срочная правка ошибки в типовой. Применяется первым.
- Адаптация — доработка под конкретное внедрение: новые реквизиты, изменённые формы, проверки.
- Дополнение — самостоятельный функционал поверх конфигурации, например модуль интеграции. Применяется последним.
Порядок важен, когда два расширения трогают один и тот же объект. Исправление ляжет первым, адаптация — поверх него, дополнение — поверх обоих.
Ещё несколько свойств, которые стоит заполнить сразу при создании:
- 🏷️ Префикс имён, например
Расш1_. Платформа подставляет его в имена новых объектов и процедур, чтобы они не пересекались с типовыми. - ⚙️ Режим совместимости — по умолчанию совпадает с основной конфигурацией; без причины его не меняют.
- 🔢 Версия — заполняйте сами. Через год без неё не разобраться, какой
.cfeпоследний.
Как установить и подключить расширение 1С
Способ 1. В режиме 1С:Предприятие
Подходит для готового .cfe, который прислал разработчик или поставщик.
- Сделайте резервную копию базы
—
.dtвыгрузку или копию каталога файловой базы. - Откройте
Администрирование → Печатные формы, отчеты и обработки → Расширения. - Нажмите Добавить из файла и выберите
.cfe. - Программа покажет предупреждение о безопасности. Если расширение из надёжного источника — подтвердите.
- Проверьте флажки в строке расширения: Активно, Безопасный режим, Защита от опасных действий.
- Перезапустите 1С. Расширение начинает работать только после нового сеанса.
В списке видно, применилось ли расширение. Если рядом с ним сообщение об ошибке применимости — переходите к разделу про ошибки ниже.
Способ 2. В Конфигураторе
- Откройте
Конфигурация → Расширения конфигурации. - Нажмите Добавить — появится пустое расширение.
- В меню Действия этого окна выберите загрузку из файла и укажите
.cfe. Или откройте расширение и наполняйте его сами. - Выполните Обновить конфигурацию базы данных для расширения (F7 при открытом дереве расширения).
Загрузка .cfe и обновление конфигурации БД — два отдельных шага. Пока второй не выполнен, пользователи работают со старой версией расширения.
Способ 3. Из командной строки
Удобно для пакетной установки на несколько баз или в сценарии обновления:
"C:\Program Files\1cv8\8.3.x.xxxx\bin\1cv8.exe" DESIGNER /F"D:\Bases\Buh" /N"Администратор" /P"пароль" /LoadCfg "D:\ext\Dorabotki.cfe" -Extension "Dorabotki" /UpdateDBCfg -Extension "Dorabotki" /Out "D:\ext\log.txt"
Обратная операция — выгрузка расширения в файл: /DumpCfg "D:\ext\Dorabotki.cfe" -Extension "Dorabotki". Для серверной базы вместо /F используют /S"сервер\база".
Заимствование и правка объектов на примерах
Расширение не может просто так изменить типовой объект. Сначала объект заимствуют: в дереве основной конфигурации правый клик → Добавить в расширение. Объект появляется в расширении, и в нём можно добавлять реквизиты, элементы формы, макеты, обработчики.
Пример 1. Новый реквизит и поле на форме
Задача: в документе «Реализация (акт, накладная, УПД)» хранить номер договора поставки от покупателя строкой.
- Заимствуйте документ
РеализацияТоваровУслуги его основную формуФормаДокумента. - В документе расширения добавьте реквизит
Расш1_НомерДоговораПокупателя, тип «Строка», длина 50. - Перетащите реквизит на форму в нужную группу.
- Обновите конфигурацию БД.
Данные нового реквизита хранятся в базе и попадают в выгрузку .dt.
Пример 2. Проверка при записи через аннотацию
Перехват типового кода делают аннотациями перед процедурой в модуле расширения:
| Аннотация | Когда выполняется | Типовой код |
|---|---|---|
&Перед("Имя") | До типовой процедуры | Выполняется после вашей |
&После("Имя") | После типовой процедуры | Выполняется до вашей |
&Вместо("Имя") | Вместо типовой | Вызывается, только если вы вызвали ПродолжитьВызов() |
&ИзменениеИКонтроль("Имя") | Копия типовой с вашими вставками | Платформа сверяет текст при каждом обновлении |
Код в модуле объекта заимствованного документа:
&Перед("ПередЗаписью")
Процедура Расш1_ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
Если РежимЗаписи = РежимЗаписиДокумента.Проведение
И Не ЗначениеЗаполнено(Расш1_НомерДоговораПокупателя) Тогда
ОбщегоНазначения.СообщитьПользователю(
"Укажите номер договора покупателя",
ЭтотОбъект, "Расш1_НомерДоговораПокупателя", , Отказ);
КонецЕсли;
КонецПроцедуры
Проверка ОбменДанными.Загрузка обязательна: без неё документы будут спотыкаться при загрузке из обмена.
Пример 3. Доработка формы
В модуле заимствованной формы:
&НаСервере
&После("ПриСозданииНаСервере")
Процедура Расш1_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
Элементы.Расш1_НомерДоговораПокупателя.АвтоОтметкаНезаполненного = Истина;
КонецПроцедуры
&Вместо без ПродолжитьВызов() полностью отключает типовую процедуру. После обновления типовой в ней могут появиться новые важные действия, а ваше расширение их тихо проглотит. Используйте &Вместо только там, где без этого нельзя.
Собственные объекты расширения
В расширении можно создавать не только заимствованные, но и свои объекты: справочники, документы, регистры, отчёты, обработки, общие модули, роли. Их данные хранятся в базе так же, как данные типовых объектов.
Удаление расширения со своими объектами удаляет и их данные. Перед удалением сохраните .dt.
Отладка расширения и диагностика ошибок
Как отлаживать код
Отладчик работает с модулями расширения так же, как с типовыми:
- Откройте расширение в Конфигураторе и поставьте точку останова в процедуре (F9).
- Запустите
Отладка → Начать отладку → 1С:Предприятие. - Выполните действие в программе: запишите документ, откройте форму.
Если точка не срабатывает, проверьте три вещи: расширение активно, конфигурация БД обновлена, аннотация ссылается на существующую процедуру с точным именем.
Для серверной базы на сервере 1С должна быть включена отладка — иначе серверные процедуры точку останова не поймают. Включение отладки на рабочем сервере требует перезапуска службы 1С, а это оборвёт сеансы пользователей. Делайте это вне рабочего времени или на тестовой копии.
Где смотреть ошибки
- 📒
Администрирование → Обслуживание → Журнал регистрации— отбор по уровню «Ошибка» и по времени запуска. - 🧩 Список расширений в режиме предприятия — показывает расширения, которые не применились.
- 🛠️ Конфигуратор — при обновлении конфигурации БД выводит полный текст конфликта.
Как расширения влияют на скорость работы
Каждое активное расширение платформа применяет при старте сеанса. Одно-два небольших расширения заметной разницы не дают. Десяток расширений, каждое из которых заимствует сотни объектов, уже удлиняет вход в программу и первое открытие форм.
Что реально тормозит:
- 🐢 запрос внутри цикла в обработчике
&После("ПриСозданииНаСервере")— он срабатывает при каждом открытии формы; - 🐢 лишние серверные вызовы из клиентских обработчиков формы;
- 🐢 «тяжёлые» проверки в
ПередЗаписьюу часто записываемых объектов — например, у регистров сведений, которые пишутся пакетами; - 🐢 заимствование «на всякий случай» — объектов, которые расширение не меняет.
Как держать расширение лёгким:
- Заимствуйте только то, что меняете. Лишние объекты удаляйте из расширения.
- Данные для формы собирайте одним запросом, а не обращением к реквизитам через точку.
- В обработчиках записи проверяйте условие выхода в самом начале — как с
ОбменДанными.Загрузкавыше. - Замеряйте: в Конфигураторе есть замер производительности (
Отладка → Замер производительности). Он показывает, сколько времени заняла каждая строка, в том числе в модулях расширения.
Безопасный режим и права доступа
У расширения два флажка защиты:
| Флажок | Что ограничивает | Когда снимать |
|---|---|---|
| Безопасный режим | Запрещает код, опасный для системы: работу с файлами на сервере, COM, внешние компоненты, привилегированный режим | Только если расширению реально нужны эти возможности и вы доверяете автору |
| Защита от опасных действий | Предупреждает пользователя при попытке выполнить потенциально опасное действие | Почти никогда |
Устанавливать и включать расширения может только пользователь с административными правами. Обычный бухгалтер их не увидит и не подключит.
Отдельная тема — права на собственные объекты расширения. Если вы добавили новый справочник, пользователи не получат к нему доступ автоматически. Есть два пути:
- Создать роль в расширении с правами на новые объекты и назначить её пользователям или включить в профили групп доступа.
- Заимствовать типовую роль (например, ту, что уже есть у бухгалтеров) и выставить в ней права на новые объекты расширения.
Второй путь удобнее: права появляются у всех, у кого уже есть эта роль. Новые реквизиты заимствованных объектов наследуют права самого объекта, отдельно их настраивать не нужно.
Не снимайте безопасный режим с расширения из неизвестного источника. В таком режиме код получает те же возможности, что и сама конфигурация, включая доступ к файлам на сервере.
Обновление типовой и сопровождение расширений
Больше всего проблем с расширениями возникает в день обновления типовой. Порядок, при котором они не всплывают у пользователей:
- Сохраните текущее расширение в
.cfeс номером версии в имени файла. - Обновите копию базы, а не рабочую.
- Откройте расширение в Конфигураторе копии и проверьте применимость.
- Исправьте конфликты: перезаимствуйте изменённые объекты, сравните процедуры с
&ИзменениеИКонтроль. - Проверьте сценарии вручную: откройте доработанные формы, проведите документ, выведите печатную форму.
- Повторите обновление на рабочей базе и загрузите исправленный
.cfe.
Новую версию расширения загружают поверх старой — тем же действием загрузки из файла. Данные собственных объектов и новых реквизитов сохраняются, если вы не удаляли эти объекты и не меняли их тип.
Несколько привычек, которые сильно облегчают сопровождение:
- 📁 храните все версии
.cfeв одном месте, а лучше в системе контроля версий; - 📝 в комментарии к каждой процедуре пишите, что и зачем она меняет;
- 🔀 не смешивайте в одном расширении срочное исправление и долгоживущую доработку — разведите их по назначению;
- 🗂️ одно расширение — одна задача или один заказчик; так проще отключать и обновлять по частям.
Частые вопросы
Сохраняются ли расширения в выгрузке .dt?
.dt в новую базу расширения будут на месте.Можно ли перенести расширение из одной базы в другую?
.cfe и загрузите в другую базу. На сильно отличающемся релизе оно может не примениться.