Расширения конфигурации 1С 8.3: доработки без снятия с поддержки
Содержание
Расширения в 1С нужны, чтобы дорабатывать типовую конфигурацию , не снимая её с поддержки. Все правки лежат в отдельном слое поверх основной конфигурации. Поэтому типовое обновление ставится как обычно, а ваши доработки после него остаются на месте.
Частое заблуждение — считать расширение «той же внешней обработкой, только посложнее». На деле это разные инструменты. Внешняя обработка живёт рядом с программой и вызывается вручную. Расширение встраивается в саму конфигурацию: меняет формы, добавляет реквизиты, перехватывает проведение документов. Технология работает с платформы 8.3.6 и не зависит от конкретной конфигурации: БП 3.0, ЗУП 3.1, УТ 11 и ERP устроены одинаково.
Назначение расширений и что они дают бизнесу
Раньше любая доработка типовой требовала снять её с поддержки или включить возможность изменения. После этого каждое обновление превращалось в ручное сравнение и объединение конфигураций. На базе с десятком правок это часы работы программиста на каждый релиз.
Расширение решает эту проблему так:
- 🧩 Отдельный слой. Основная конфигурация остаётся на поддержке «как есть», без замочков и снятых флажков.
- 🔄 Обновления без объединения. Типовой релиз ставится штатно, расширение подключается к новой версии само.
- 🎚️ Включение и отключение. Доработку можно выключить одной галочкой, не трогая основную конфигурацию.
- 📦 Переносимость. Расширение сохраняется в файл
.cfeи загружается в другую базу с той же конфигурацией. - 👥 Работа в пользовательском режиме. Готовое расширение администратор загружает без Конфигуратора.
Для бизнеса это прямая экономия на сопровождении. Обновления ставятся быстрее, база не отстаёт от релизов, а доработки не теряются при смене программиста.
В свойствах расширения задаётся назначение. От него зависит порядок применения, если расширений несколько:
| Назначение | Для чего | Пример |
|---|---|---|
| Исправление | Срочно поправить ошибку типовой до выхода релиза | Неверный расчёт в одной процедуре |
| Адаптация | Подогнать типовую под процессы компании | Свой реквизит в документе, правка формы |
| Дополнение | Новая функциональность сверху | Отдельный журнал, свой отчёт, интеграция |
Правка интерфейса и печатных форм через расширение
Самый частый повод создать расширение — изменить то, что пользователь видит на экране или на бумаге.
Формы объектов и списков
Чтобы изменить форму, её заимствуют: в дереве расширения в Конфигураторе нажимают правой кнопкой на объект основной конфигурации и выбирают Добавить в расширение. После этого в заимствованной форме можно:
- Добавить поля, группы, кнопки и команды.
- Скрыть или переставить типовые элементы.
- Добавить реквизиты формы.
- Повесить свои обработчики на события формы и элементов.
Типовые элементы при этом не удаляются физически. Расширение накладывает изменения поверх, и при обновлении платформа сравнивает их с новой версией формы.
Печатные формы
Для печатных форм есть два пути:
- 🖨️ Только поправить макет — сдвинуть поле, добавить подпись, логотип. В типовых на БСП это часто делается без расширения:
Администрирование → Печатные формы, отчеты и обработки → Макеты печатных форм. - 🛠️ Изменить состав данных — вывести реквизит, которого нет в типовом макете, или добавить новую печатную форму в меню «Печать». Здесь нужно расширение: заимствуют макет и модуль менеджера, где формируется печатная форма.
Если правка ограничивается оформлением, начните с редактирования макета в пользовательском режиме. Расширение оправдано, когда нужна новая логика заполнения.
Новые реквизиты в типовых объектах
В заимствованный справочник или документ можно добавить собственный реквизит или табличную часть. Типовой пример — поле «Ответственный менеджер» в заказе покупателя. Данные этого реквизита хранятся в базе так же, как типовые.
Расширение логики и алгоритмов программы
Расширение умеет не только рисовать кнопки. Оно встраивается в код типовых модулей и меняет поведение программы. Для этого в модуле расширения процедуру помечают аннотацией с именем перехватываемой процедуры.
| Аннотация | Что делает | Когда брать |
|---|---|---|
&Перед | Ваш код выполняется до типового | Проверка, заполнение перед записью |
&После | Ваш код выполняется после типового | Дозаполнить, добавить движения |
&Вместо | Типовой код не выполняется, работает ваш | Полная замена алгоритма |
&ИзменениеИКонтроль | Копия типовой процедуры с пометками вставок и удалений | Точечная правка внутри длинной процедуры |
Пример: дозаполнить поле после создания формы заказа.
&НаСервере
&После("ПриСозданииНаСервере")
Процедура Расш1_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Объект.Ссылка.Пустая() Тогда
Объект.Комментарий = "Создан менеджером " + Строка(ПараметрыСеанса.ТекущийПользователь);
КонецЕсли;
КонецПроцедуры
Пример точечной правки в проведении:
&ИзменениеИКонтроль("ОбработкаПроведения")
Процедура Расш1_ОбработкаПроведения(Отказ, РежимПроведения)
// ... типовой код без изменений ...
#Вставка
ДополнительныеДвиженияПоДокументу(Отказ);
#КонецВставки
// ... типовой код без изменений ...
КонецПроцедуры
Главный плюс &ИзменениеИКонтроль — контроль. Если после обновления типовая процедура изменилась, платформа сообщит, что расширение больше не совпадает с основной конфигурацией. Правку не придётся искать по всему коду вручную.
&Вместо — самый рискованный вариант. Вы полностью отключаете типовой код, и исправления фирмы 1С в этой процедуре до вас больше не доходят. Используйте только когда без этого никак.
Кроме перехвата, в расширении можно создавать собственные объекты: справочники, документы, регистры, отчёты, обработки, роли. Набор доступных видов объектов расширялся от версии к версии платформы, поэтому смотрите, что поддерживает ваша.
Расширение, снятие с поддержки или внешняя обработка
Выбор инструмента зависит от задачи. Сравнение по сути:
| Критерий | Расширение | Изменение основной конфигурации | Внешняя обработка / отчёт |
|---|---|---|---|
| Поддержка типовой | Сохраняется | Снимается или ослабляется | Сохраняется |
| Обновление релиза | Штатно, затем проверка расширения | Сравнение и объединение | Штатно |
| Правка форм и кода типовой | Да | Да | Нет |
| Новые реквизиты в типовых объектах | Да | Да | Нет |
| Подключение | Загрузка в базу, применяется к новым сеансам | Обновление конфигурации БД | Через «Дополнительные отчеты и обработки» |
| Кто ставит | Администратор или программист | Только программист в Конфигураторе | Пользователь с правами администратора |
Мини-кейс: три доработки торговой компании
Компания на УТ 11 попросила три правки: поле «Ответственный логист» в заказе клиента, запрет проведения реализации без указанного договора и свою печатную форму накладной с QR-кодом.
Раньше программист снял бы конфигурацию с поддержки. Каждый ежемесячный релиз превращался бы в объединение с ручным разбором конфликтов.
С расширением сделали так:
- Заимствовали документ «Заказ клиента», добавили реквизит и вывели его на форму.
- В модуле объекта реализации повесили
&Перед("ОбработкаПроверкиЗаполнения"): если договор пустой, выставляется отказ и выводится сообщение. - Добавили новую печатную форму через заимствованный модуль менеджера.
Итог: основная конфигурация осталась на поддержке. Очередной релиз поставили штатно, а расширение применилось без правок. Пересобирать его пришлось один раз, когда в новом релизе изменилась форма заказа.
Ограничения расширений, о которых узнают слишком поздно
Расширение не волшебная палочка. Перед тем как заказывать доработку, учтите нюансы.
- 🔒 Безопасный режим. По умолчанию расширение работает в безопасном режиме: без доступа к файлам, COM-объектам, внешним компонентам. Если код должен, например, читать файл с диска, флажок снимают в свойствах расширения. Платформа при этом предупредит об опасных действиях.
- 🔁 Зависимость от типовой. Расширение ссылается на заимствованные объекты по именам. Типовая переименовала реквизит или удалила процедуру — расширение не применится.
- 🧱 Роли и права. Новые объекты расширения недоступны пользователям, пока им не выданы права через роли расширения. Есть свойство, которое разрешает работу через основные роли, но его включают осознанно.
- 🗃️ Данные в собственных объектах. Если расширение добавило свой справочник или реквизит, данные лежат в базе. При удалении расширения их можно потерять.
- 🐢 Производительность. Каждый перехват — дополнительный вызов. Десяток расширений с тяжёлыми обработчиками на записи документа заметно замедлит проведение.
- ⏳ Применение не сразу. Изменённое расширение начинает работать в новых сеансах. Пользователям, которые уже в базе, нужно перезайти.
Перед загрузкой чужого расширения в рабочую базу сделайте резервную копию и проверьте его на копии. Расширение без безопасного режима получает те же возможности, что и код типовой.
Как загрузить, включить и обновить расширение
В пользовательском режиме (типовые на БСП)
- Откройте
Администрирование → Печатные формы, отчеты и обработки → Расширения. - Нажмите кнопку добавления из файла и выберите
.cfe. - Подтвердите предупреждение о безопасности, если расширение работает без безопасного режима.
- Проверьте, что в списке стоит флажок активности.
- Перезапустите сеанс 1С и проверьте доработку.
Из этого же списка расширение отключают, обновляют из нового файла и сохраняют в файл для переноса.
В Конфигураторе
- Откройте
Конфигурация → Расширения конфигурации. - Создайте новое расширение или загрузите существующее из файла.
- В свойствах задайте имя, префикс (например,
Расш1_), назначение и флажок безопасного режима. - Заимствуйте нужные объекты и внесите правки.
- Обновите конфигурацию базы данных для расширения (F7 в дереве расширения).
Загрузка файла и обновление конфигурации базы данных — два отдельных шага. Загрузили .cfe, но не обновили — изменения в базе не появятся.
Порядок при обновлении типовой
Префикс имён (Расш1_, Ком_ и т.п.) задавайте сразу и одинаковый для всех объектов. Так собственные объекты и процедуры расширения никогда не совпадут по имени с объектами следующего релиза.
Ошибки и вопросы при работе с расширениями
Типовые ситуации, с которыми приходят после обновления или установки: