Как дорабатывать типовую 1С через расширения и не снимать её с поддержки
Содержание
Расширение конфигурации
1С — это отдельный пакет доработок, который платформа «накладывает» поверх типовой конфигурации при запуске базы. Основная конфигурация остаётся на поддержке поставщика и обновляется без ручного сравнения-объединения, а ваши изменения лежат рядом, в своём файле .cfe. Механизм появился в платформе 8.3.6 и с тех пор стал основным способом дорабатывать БП 3.0, ЗУП 3.1, УТ 11 и ERP.
Использовать расширения можно двумя путями: программист создаёт их в конфигураторе (Конфигурация → Расширения конфигурации), а администратор или бухгалтер подключает готовый файл прямо из программы, в разделе Администрирование → Печатные формы, отчеты и обработки → Расширения.
Что такое расширение конфигурации 1С и что в нём можно менять
Типовую конфигурацию раньше дорабатывали напрямую: снимали с поддержки, правили модули и формы. Каждое обновление после этого превращалось в сравнение двух версий кода, иногда на несколько дней.
Расширение работает иначе. Оно не правит исходный код, а перехватывает его:
- 🧩 заимствует нужный объект основной конфигурации (документ, справочник, общий модуль, форму);
- 🔁 добавляет обработчики до, после или вместо типовой процедуры;
- ➕ добавляет своё — новые реквизиты, формы, отчёты, справочники, регистры, роли, команды;
- 🎨 меняет формы — переставляет поля, скрывает элементы, добавляет кнопки.
При запуске сеанса платформа собирает «итоговую» конфигурацию: типовая + все активные расширения. Пользователь видит единую программу и не замечает, где заканчивается типовая часть.
Расширение принадлежит конкретной информационной базе. Чтобы перенести доработку в другую базу, расширение сохраняют в файл .cfe и загружают там.
Чем расширение отличается от внешней обработки
Внешняя обработка (.epf) и внешний отчёт (.erf) — самостоятельные инструменты. Они могут читать и записывать данные, но не могут изменить поведение типового документа: добавить проверку при проведении, новое поле на форму, команду в список.
Расширение встраивается в саму конфигурацию. Если доработка должна срабатывать «сама» при работе с типовыми объектами — нужно расширение.
Назначение расширений: исправление, адаптация, дополнение
У каждого расширения есть свойство «Назначение». Оно задаётся при создании и определяет порядок применения: сначала платформа применяет исправления, затем адаптации, затем дополнения.
| Назначение | Для чего | Типичный автор |
|---|---|---|
| Исправление | Срочно закрыть ошибку типовой конфигурации до выхода релиза | Поставщик, внедренец |
| Адаптация | Подогнать типовую под процессы конкретной компании | Программист компании или франчайзи |
| Дополнение | Добавить новую функциональность: интеграцию, отчёты, свои справочники | Разработчики тиражных модулей |
На работу кода назначение почти не влияет — это скорее порядок и договорённость. Но когда в базе пять-шесть расширений от разных авторов, правильное назначение помогает понять, что и в каком порядке перекрывает друг друга.
Расширения с данными и без
Отдельно различают расширения по тому, хранят ли они свои данные:
- 📄 Без данных — только заимствованные объекты, обработчики и формы. Удаление такого расширения ничего не теряет: программа просто возвращается к типовому поведению.
- 🗄️ С данными — содержат свои справочники, регистры или новые реквизиты у типовых объектов. Здесь база получает новые таблицы.
Удаление расширения с данными удаляет и эти данные. Перед удалением сделайте выгрузку .dt или резервную копию СУБД.
Как создать расширение конфигурации в конфигураторе
Минимальный рабочий цикл: создать расширение , заимствовать документ, добавить проверку при записи.
1. Создайте расширение
- Откройте базу в режиме «Конфигуратор».
- Выберите
Конфигурация → Расширения конфигурации. - Нажмите «Добавить». Платформа предложит имя
Расширение1и префиксРасш1_. - Задайте осмысленные имя, синоним и префикс, например
КонтрольКомментарияикк_. - Выберите назначение — для доработки под компанию это «Адаптация».
Префикс подставляется к именам новых объектов и методов. Он нужен, чтобы ваши имена не совпали с теми, что поставщик добавит в следующих релизах.
2. Заимствуйте объект
- Откройте дерево расширения двойным щелчком в списке расширений.
- В дереве основной конфигурации найдите нужный объект, например документ «Счет на оплату покупателю».
- В контекстном меню выберите «Добавить в расширение».
Объект появится в дереве расширения. Заимствуется только то, что вы явно добавили: модуль объекта, нужная форма, конкретный реквизит. Остальное остаётся типовым.
3. Напишите обработчик
Откройте модуль объекта заимствованного документа и добавьте процедуру с аннотацией:
&После("ОбработкаПроверкиЗаполнения")
Процедура кк_ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
Если Не ЗначениеЗаполнено(Комментарий) Тогда
ОбщегоНазначения.СообщитьПользователю(
"Укажите комментарий: для чего выставлен счёт.",
ЭтотОбъект, "Комментарий", "Объект", Отказ);
КонецЕсли;
КонецПроцедуры
Типовая проверка отработает как обычно, а следом — ваша. Методы основной конфигурации (здесь — ОбщегоНазначения из БСП) вызываются из расширения напрямую, заимствовать модуль ради вызова не нужно.
4. Сохраните и обновите
- Сохраните изменения расширения.
- При активном дереве расширения выполните «Обновить конфигурацию
базы данных» (
F7). - Перезапустите пользовательский сеанс — изменения применяются при новом запуске.
Какие аннотации бывают
| Аннотация | Что делает | Когда брать |
|---|---|---|
&Перед("Имя") | Ваш код выполняется до типового | Подготовить данные, заполнить значения по умолчанию |
&После("Имя") | Ваш код выполняется после типового | Дополнительные проверки, дозаполнение |
&Вместо("Имя") | Ваш код заменяет вызов; типовой можно вызвать через ПродолжитьВызов() | Нужно изменить результат функции или условие вызова |
&ИзменениеИКонтроль("Имя") | Копия типового метода с правками в блоках #Вставка и #Удаление | Нужна правка в середине длинной процедуры |
&Вместо без вызова ПродолжитьВызов() полностью отключает типовой код. После обновления в типовой процедуре могут появиться исправления, которые ваша версия так и не выполнит. Используйте этот приём только осознанно.
Преимущество &ИзменениеИКонтроль: если поставщик изменил исходный метод, платформа сообщит, что расширение больше не совпадает с основной конфигурацией. Ошибка всплывёт при проверке, а не у пользователя в работе.
Как изменить форму в расширении
Заимствуйте нужную форму документа, откройте её в расширении и правьте как обычную форму: добавляйте реквизиты формы, элементы, команды. Обработчик события формы назначается в палитре свойств элемента с выбором типа вызова — перед, после или вместо типового обработчика.
Как подключить готовое расширение из файла .cfe
Обычно бухгалтер получает от программиста файл, а не исходники. Подключить его можно без конфигуратора.
В пользовательском режиме (БП 3.0, ЗУП 3.1, УТ 11)
- Откройте
Администрирование → Печатные формы, отчеты и обработки → Расширения. - Нажмите «Добавить из файла» и выберите
.cfe. - Программа покажет предупреждение о безопасности. Подтвердите, если источник файла вам известен.
- Перезапустите программу.
Расширение, подключённое так, по умолчанию работает в безопасном режиме: ему запрещены операции с файлами, COM-объектами, внешними компонентами и привилегированный режим. Если доработке это нужно, флажок безопасного режима снимает администратор в карточке расширения.
В конфигураторе
Конфигурация → Расширения конфигурации.- Добавьте пустое расширение или выберите существующее для замены.
- Через меню «Конфигурация» окна расширений загрузите конфигурацию из файла
.cfe. - Выполните «Обновить конфигурацию базы данных» — это отдельный шаг, загрузка файла сама базу не обновляет.
В клиент-серверной базе расширение достаточно подключить один раз — оно применится у всех пользователей. Копировать файл на каждый компьютер не нужно.
Расширение или прямая доработка: что выбрать
Расширение закрывает большую часть задач, но не все. Сравнение по практическим критериям:
| Критерий | Расширение | Правка основной конфигурации |
|---|---|---|
| Обновление типовой | Штатное, через загрузку .cfu | Сравнение и объединение вручную |
| Поддержка поставщика | Сохраняется | Конфигурация снимается с поддержки полностью или частично |
| Новые реквизиты типовых объектов | Да | Да |
| Удаление типовых реквизитов, смена их типа | Нет | Да |
| Глубокая переделка механизма (например, партионного учёта) | Трудно, много перехватов | Проще |
| Подключение без программиста | Да, из файла | Нет |
| Работа в облаке 1С:Фреш | С ограничениями, по правилам сервиса | Обычно недоступна |
Правило практика: если правка укладывается в «добавить», «проверить», «скрыть», «заполнить», «поменять результат» — это расширение. Если нужно переписать половину механизма и вы готовы сопровождать свою ветку конфигурации — прямая доработка.
Примеры применения расширений в типовых конфигурациях
Задачи, которые чаще всего решают расширениями:
- 📝 Обязательные поля. Запрет записывать документ без комментария, подразделения или договора — как в примере выше.
- 🖨️ Изменённый макет печатной формы. Заимствуют общий макет или модуль менеджера печати и подменяют макет своим: логотип, подписи, дополнительные строки.
- 🏷️ Новый реквизит у справочника. Например, «Код в CRM» у контрагента — добавляется в заимствованный справочник и выводится на форму.
- 🔄 Интеграция. HTTP-сервис или регламентное задание, которое отправляет документы во внешнюю систему.
- 🔒 Ограничение действий. Скрыть кнопку проведения для отдельной роли или запретить изменение закрытого периода сверх типовых настроек.
- 🩹 Временное исправление ошибки. Поставщик выпускает исправления для типовых в виде расширений, которые снимают после обновления.
Пример: изменить результат типовой функции
&Вместо("ПредставлениеДокументаДляПечати")
Функция кк_ПредставлениеДокументаДляПечати(Документ)
Результат = ПродолжитьВызов(Документ);
Возврат Результат + " (копия)";
КонецФункции
Имя функции здесь условное: подставьте метод, который реально есть в вашем модуле. Суть приёма — получить типовой результат через ПродолжитьВызов() и дополнить его, а не переписывать функцию целиком.
Ошибки и проблемы при работе с расширениями
Большинство проблем всплывает после обновления типовой конфигурации: поставщик переименовал процедуру, форму или реквизит, на которые опиралось расширение.
Проверку применимости стоит запускать до обновления рабочей базы: обновите копию, проверьте расширения и только потом переходите на новый релиз в основной базе.
Правила, которые продлевают жизнь расширению
Расширение живёт столько, сколько живёт совместимость с типовой. Несколько привычек сильно сокращают работу при каждом обновлении:
- Заимствуйте минимум. Чем меньше объектов в расширении, тем меньше точек, которые сломает новый релиз.
- Предпочитайте
&Переди&После. Они меньше зависят от внутренностей типового метода, чем&Вместо. - Для правки в середине метода берите
&ИзменениеИКонтроль, а не копирование процедуры через&Вместо: платформа сама подскажет, что исходник изменился. - Один префикс на расширение. По нему видно, чей это объект, и исключены совпадения имён с новыми объектами поставщика.
- Одна задача — одно расширение. Шесть мелких независимых расширений проще сопровождать, чем одно на всё: неприменимым станет только одно.
- Храните
.cfeи исходники в репозитории. Файл в базе — не архив; при восстановлении из старой копии расширение откатится вместе с ней. - Тестируйте на копии. Каждое новое расширение и каждое обновление типовой — сначала на копии базы.
Частые вопросы о расширениях конфигурации
Нужно ли снимать конфигурацию с поддержки, чтобы подключить расширение?
Работают ли расширения в файловой базе?
Можно ли подключить несколько расширений к одной базе?
Где посмотреть, какие расширения подключены?
Администрирование → Печатные формы, отчеты и обработки → Расширения, в конфигураторе — Конфигурация → Расширения конфигурации.