Работа с расширениями конфигурации 1С 8.3: от файла .cfe до обновления типовой

· 10 мин

Содержание

Расширение 1С подключают двумя способами. Пользователю с правами администратора хватит режима предприятия: в БП 3.0, ЗУП 3.1 и УТ 11 это Администрирование → Печатные формы, отчеты и обработки → Расширения, кнопка Добавить из файла, затем перезапуск программы. Разработчик работает в Конфигураторе: Конфигурация → Расширения конфигурации, где расширение можно не только загрузить, но и открыть, изменить и отладить.

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

Что даёт расширение и чем оно лучше правки типовой

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

Что обычно делают расширением:

  • 🖨️ свою печатную форму или правку макета типового документа;
  • 📝 новый реквизит в документе или справочнике и поле на форме;
  • ✅ дополнительные проверки при записи и проведении;
  • 📊 отчёт или обработку, которые должны быть в меню, а не во внешнем файле;
  • 🩹 исправление ошибки в типовом модуле до выхода официального релиза.
ПодходОбновление типовойГде хранится доработкаРиски
Правка конфигурацииЧерез сравнение-объединение, вручнуюВ основной конфигурацииСнятие с поддержки, долгие обновления
Внешняя обработка / печатная формаШтатноВо внешнем файле .epf/.erfТолько то, что разрешает БСП: печать, заполнение, отчёты
РасширениеШтатно, с проверкой применимостиОтдельно, в базе и в .cfeПосле обновления может перестать применяться

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

Назначение расширений: исправление, адаптация, дополнение

У каждого расширения есть свойство Назначение. Оно задаёт порядок, в котором платформа применяет расширения, если их несколько:

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

Порядок важен, когда два расширения трогают один и тот же объект. Исправление ляжет первым, адаптация — поверх него, дополнение — поверх обоих.

Ещё несколько свойств, которые стоит заполнить сразу при создании:

  • 🏷️ Префикс имён, например Расш1_. Платформа подставляет его в имена новых объектов и процедур, чтобы они не пересекались с типовыми.
  • ⚙️ Режим совместимости — по умолчанию совпадает с основной конфигурацией; без причины его не меняют.
  • 🔢 Версия — заполняйте сами. Через год без неё не разобраться, какой .cfe последний.

Как установить и подключить расширение 1С

Способ 1. В режиме 1С:Предприятие

Подходит для готового .cfe, который прислал разработчик или поставщик.

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

В списке видно, применилось ли расширение. Если рядом с ним сообщение об ошибке применимости — переходите к разделу про ошибки ниже.

Способ 2. В Конфигураторе

  1. Откройте Конфигурация → Расширения конфигурации.
  2. Нажмите Добавить — появится пустое расширение.
  3. В меню Действия этого окна выберите загрузку из файла и укажите .cfe. Или откройте расширение и наполняйте его сами.
  4. Выполните Обновить конфигурацию базы данных для расширения (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. Заимствуйте документ РеализацияТоваровУслуг и его основную форму ФормаДокумента.
  2. В документе расширения добавьте реквизит Расш1_НомерДоговораПокупателя, тип «Строка», длина 50.
  3. Перетащите реквизит на форму в нужную группу.
  4. Обновите конфигурацию БД.

Данные нового реквизита хранятся в базе и попадают в выгрузку .dt.

Пример 2. Проверка при записи через аннотацию

Перехват типового кода делают аннотациями перед процедурой в модуле расширения:

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

Код в модуле объекта заимствованного документа:

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

    Если ОбменДанными.Загрузка Тогда
        Возврат;
    КонецЕсли;

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

КонецПроцедуры

Проверка ОбменДанными.Загрузка обязательна: без неё документы будут спотыкаться при загрузке из обмена.

Пример 3. Доработка формы

В модуле заимствованной формы:

&НаСервере
&После("ПриСозданииНаСервере")
Процедура Расш1_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
    Элементы.Расш1_НомерДоговораПокупателя.АвтоОтметкаНезаполненного = Истина;
КонецПроцедуры

&Вместо без ПродолжитьВызов() полностью отключает типовую процедуру. После обновления типовой в ней могут появиться новые важные действия, а ваше расширение их тихо проглотит. Используйте &Вместо только там, где без этого нельзя.

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

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

Удаление расширения со своими объектами удаляет и их данные. Перед удалением сохраните .dt.

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

Как отлаживать код

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

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

Если точка не срабатывает, проверьте три вещи: расширение активно, конфигурация БД обновлена, аннотация ссылается на существующую процедуру с точным именем.

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

Где смотреть ошибки

  • 📒 Администрирование → Обслуживание → Журнал регистрации — отбор по уровню «Ошибка» и по времени запуска.
  • 🧩 Список расширений в режиме предприятия — показывает расширения, которые не применились.
  • 🛠️ Конфигуратор — при обновлении конфигурации БД выводит полный текст конфликта.
Диагностика: выберите симптом

Как расширения влияют на скорость работы

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

Что реально тормозит:

  • 🐢 запрос внутри цикла в обработчике &После("ПриСозданииНаСервере") — он срабатывает при каждом открытии формы;
  • 🐢 лишние серверные вызовы из клиентских обработчиков формы;
  • 🐢 «тяжёлые» проверки в ПередЗаписью у часто записываемых объектов — например, у регистров сведений, которые пишутся пакетами;
  • 🐢 заимствование «на всякий случай» — объектов, которые расширение не меняет.

Как держать расширение лёгким:

  1. Заимствуйте только то, что меняете. Лишние объекты удаляйте из расширения.
  2. Данные для формы собирайте одним запросом, а не обращением к реквизитам через точку.
  3. В обработчиках записи проверяйте условие выхода в самом начале — как с ОбменДанными.Загрузка выше.
  4. Замеряйте: в Конфигураторе есть замер производительности (Отладка → Замер производительности). Он показывает, сколько времени заняла каждая строка, в том числе в модулях расширения.

Безопасный режим и права доступа

У расширения два флажка защиты:

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

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

Отдельная тема — права на собственные объекты расширения. Если вы добавили новый справочник, пользователи не получат к нему доступ автоматически. Есть два пути:

  1. Создать роль в расширении с правами на новые объекты и назначить её пользователям или включить в профили групп доступа.
  2. Заимствовать типовую роль (например, ту, что уже есть у бухгалтеров) и выставить в ней права на новые объекты расширения.

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

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

Обновление типовой и сопровождение расширений

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

  1. Сохраните текущее расширение в .cfe с номером версии в имени файла.
  2. Обновите копию базы, а не рабочую.
  3. Откройте расширение в Конфигураторе копии и проверьте применимость.
  4. Исправьте конфликты: перезаимствуйте изменённые объекты, сравните процедуры с &ИзменениеИКонтроль.
  5. Проверьте сценарии вручную: откройте доработанные формы, проведите документ, выведите печатную форму.
  6. Повторите обновление на рабочей базе и загрузите исправленный .cfe.

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

Перед обновлением типовой с расширениями
Выполнено: 0 / 6

Несколько привычек, которые сильно облегчают сопровождение:

  • 📁 храните все версии .cfe в одном месте, а лучше в системе контроля версий;
  • 📝 в комментарии к каждой процедуре пишите, что и зачем она меняет;
  • 🔀 не смешивайте в одном расширении срочное исправление и долгоживущую доработку — разведите их по назначению;
  • 🗂️ одно расширение — одна задача или один заказчик; так проще отключать и обновлять по частям.

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

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