Как дорабатывать типовую 1С через расширения и не снимать её с поддержки

· 9 мин

Содержание

Расширение конфигурации 1С — это отдельный пакет доработок, который платформа «накладывает» поверх типовой конфигурации при запуске базы. Основная конфигурация остаётся на поддержке поставщика и обновляется без ручного сравнения-объединения, а ваши изменения лежат рядом, в своём файле .cfe. Механизм появился в платформе 8.3.6 и с тех пор стал основным способом дорабатывать БП 3.0, ЗУП 3.1, УТ 11 и ERP.

Использовать расширения можно двумя путями: программист создаёт их в конфигураторе (Конфигурация → Расширения конфигурации), а администратор или бухгалтер подключает готовый файл прямо из программы, в разделе Администрирование → Печатные формы, отчеты и обработки → Расширения.

Что такое расширение конфигурации 1С и что в нём можно менять

Типовую конфигурацию раньше дорабатывали напрямую: снимали с поддержки, правили модули и формы. Каждое обновление после этого превращалось в сравнение двух версий кода, иногда на несколько дней.

Расширение работает иначе. Оно не правит исходный код, а перехватывает его:

  • 🧩 заимствует нужный объект основной конфигурации (документ, справочник, общий модуль, форму);
  • 🔁 добавляет обработчики до, после или вместо типовой процедуры;
  • ➕ добавляет своё — новые реквизиты, формы, отчёты, справочники, регистры, роли, команды;
  • 🎨 меняет формы — переставляет поля, скрывает элементы, добавляет кнопки.

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

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

Чем расширение отличается от внешней обработки

Внешняя обработка (.epf) и внешний отчёт (.erf) — самостоятельные инструменты. Они могут читать и записывать данные, но не могут изменить поведение типового документа: добавить проверку при проведении, новое поле на форму, команду в список.

Расширение встраивается в саму конфигурацию. Если доработка должна срабатывать «сама» при работе с типовыми объектами — нужно расширение.

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

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

НазначениеДля чегоТипичный автор
ИсправлениеСрочно закрыть ошибку типовой конфигурации до выхода релизаПоставщик, внедренец
АдаптацияПодогнать типовую под процессы конкретной компанииПрограммист компании или франчайзи
ДополнениеДобавить новую функциональность: интеграцию, отчёты, свои справочникиРазработчики тиражных модулей

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

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

Отдельно различают расширения по тому, хранят ли они свои данные:

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

Удаление расширения с данными удаляет и эти данные. Перед удалением сделайте выгрузку .dt или резервную копию СУБД.

Как создать расширение конфигурации в конфигураторе

Минимальный рабочий цикл: создать расширение , заимствовать документ, добавить проверку при записи.

1. Создайте расширение

  1. Откройте базу в режиме «Конфигуратор».
  2. Выберите Конфигурация → Расширения конфигурации.
  3. Нажмите «Добавить». Платформа предложит имя Расширение1 и префикс Расш1_.
  4. Задайте осмысленные имя, синоним и префикс, например КонтрольКомментария и кк_.
  5. Выберите назначение — для доработки под компанию это «Адаптация».

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

2. Заимствуйте объект

  1. Откройте дерево расширения двойным щелчком в списке расширений.
  2. В дереве основной конфигурации найдите нужный объект, например документ «Счет на оплату покупателю».
  3. В контекстном меню выберите «Добавить в расширение».

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

3. Напишите обработчик

Откройте модуль объекта заимствованного документа и добавьте процедуру с аннотацией:

&После("ОбработкаПроверкиЗаполнения")
Процедура кк_ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)

    Если Не ЗначениеЗаполнено(Комментарий) Тогда
        ОбщегоНазначения.СообщитьПользователю(
            "Укажите комментарий: для чего выставлен счёт.",
            ЭтотОбъект, "Комментарий", "Объект", Отказ);
    КонецЕсли;

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

Типовая проверка отработает как обычно, а следом — ваша. Методы основной конфигурации (здесь — ОбщегоНазначения из БСП) вызываются из расширения напрямую, заимствовать модуль ради вызова не нужно.

4. Сохраните и обновите

  1. Сохраните изменения расширения.
  2. При активном дереве расширения выполните «Обновить конфигурацию базы данных» (F7).
  3. Перезапустите пользовательский сеанс — изменения применяются при новом запуске.

Какие аннотации бывают

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

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

Преимущество &ИзменениеИКонтроль: если поставщик изменил исходный метод, платформа сообщит, что расширение больше не совпадает с основной конфигурацией. Ошибка всплывёт при проверке, а не у пользователя в работе.

Как изменить форму в расширении

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

Как подключить готовое расширение из файла .cfe

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

В пользовательском режиме (БП 3.0, ЗУП 3.1, УТ 11)

  1. Откройте Администрирование → Печатные формы, отчеты и обработки → Расширения.
  2. Нажмите «Добавить из файла» и выберите .cfe.
  3. Программа покажет предупреждение о безопасности. Подтвердите, если источник файла вам известен.
  4. Перезапустите программу.

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

В конфигураторе

  1. Конфигурация → Расширения конфигурации.
  2. Добавьте пустое расширение или выберите существующее для замены.
  3. Через меню «Конфигурация» окна расширений загрузите конфигурацию из файла .cfe.
  4. Выполните «Обновить конфигурацию базы данных» — это отдельный шаг, загрузка файла сама базу не обновляет.

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

Расширение или прямая доработка: что выбрать

Расширение закрывает большую часть задач, но не все. Сравнение по практическим критериям:

КритерийРасширениеПравка основной конфигурации
Обновление типовойШтатное, через загрузку .cfuСравнение и объединение вручную
Поддержка поставщикаСохраняетсяКонфигурация снимается с поддержки полностью или частично
Новые реквизиты типовых объектовДаДа
Удаление типовых реквизитов, смена их типаНетДа
Глубокая переделка механизма (например, партионного учёта)Трудно, много перехватовПроще
Подключение без программистаДа, из файлаНет
Работа в облаке 1С:ФрешС ограничениями, по правилам сервисаОбычно недоступна

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

Какая у вас задача?

Примеры применения расширений в типовых конфигурациях

Задачи, которые чаще всего решают расширениями:

  • 📝 Обязательные поля. Запрет записывать документ без комментария, подразделения или договора — как в примере выше.
  • 🖨️ Изменённый макет печатной формы. Заимствуют общий макет или модуль менеджера печати и подменяют макет своим: логотип, подписи, дополнительные строки.
  • 🏷️ Новый реквизит у справочника. Например, «Код в CRM» у контрагента — добавляется в заимствованный справочник и выводится на форму.
  • 🔄 Интеграция. HTTP-сервис или регламентное задание, которое отправляет документы во внешнюю систему.
  • 🔒 Ограничение действий. Скрыть кнопку проведения для отдельной роли или запретить изменение закрытого периода сверх типовых настроек.
  • 🩹 Временное исправление ошибки. Поставщик выпускает исправления для типовых в виде расширений, которые снимают после обновления.

Пример: изменить результат типовой функции

&Вместо("ПредставлениеДокументаДляПечати")
Функция кк_ПредставлениеДокументаДляПечати(Документ)

    Результат = ПродолжитьВызов(Документ);
    Возврат Результат + " (копия)";

КонецФункции

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

Ошибки и проблемы при работе с расширениями

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

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

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

Правила, которые продлевают жизнь расширению

Расширение живёт столько, сколько живёт совместимость с типовой. Несколько привычек сильно сокращают работу при каждом обновлении:

  1. Заимствуйте минимум. Чем меньше объектов в расширении, тем меньше точек, которые сломает новый релиз.
  2. Предпочитайте &Перед и &После. Они меньше зависят от внутренностей типового метода, чем &Вместо.
  3. Для правки в середине метода берите &ИзменениеИКонтроль, а не копирование процедуры через &Вместо: платформа сама подскажет, что исходник изменился.
  4. Один префикс на расширение. По нему видно, чей это объект, и исключены совпадения имён с новыми объектами поставщика.
  5. Одна задача — одно расширение. Шесть мелких независимых расширений проще сопровождать, чем одно на всё: неприменимым станет только одно.
  6. Храните .cfe и исходники в репозитории. Файл в базе — не архив; при восстановлении из старой копии расширение откатится вместе с ней.
  7. Тестируйте на копии. Каждое новое расширение и каждое обновление типовой — сначала на копии базы.
Перед обновлением типовой конфигурации
Выполнено: 0 / 6

Частые вопросы о расширениях конфигурации

Нужно ли снимать конфигурацию с поддержки, чтобы подключить расширение?
Нет. Расширение подключается к конфигурации на поддержке, режим поддержки не меняется.
Работают ли расширения в файловой базе?
Да, в файловом и клиент-серверном вариантах механизм одинаковый.
Можно ли подключить несколько расширений к одной базе?
Да. Платформа применяет их по назначению: исправления, затем адаптации, затем дополнения.
Где посмотреть, какие расширения подключены?
В программе — Администрирование → Печатные формы, отчеты и обработки → Расширения, в конфигураторе — Конфигурация → Расширения конфигурации.
Переносится ли расширение при выгрузке базы в .dt?
Да, расширения входят в выгрузку информационной базы вместе с их данными.