Расширение конфигурации 1С 8.3: доработка без снятия с поддержки
Содержание
Расширение конфигурации
создают в Конфигураторе: Конфигурация → Расширения конфигурации → Добавить. Платформа создаёт пустое расширение со своим деревом объектов. Туда заимствуют нужные объекты типовой конфигурации и дорабатывают их, а сама типовая остаётся на поддержке и обновляется без ручного сравнения и объединения.
Механизм есть в платформе с версии 8.3.6. Альтернатив две: снять типовую с поддержки и править её напрямую или писать внешние обработки. Первый путь делает каждое обновление ручной работой. Второй не умеет менять типовые формы и модули. Расширение закрывает оба недостатка, поэтому для доработки типовых конфигураций сегодня выбирают его.
Что подготовить перед созданием расширения
Сначала решите, где будете разрабатывать. Рабочую базу для этого не трогают: выгрузите её копию через Администрирование → Выгрузить информационную базу в Конфигураторе и разверните отдельно. Расширение отлаживают на копии, а в рабочую базу переносят готовый файл .cfe.
Что понадобится:
- 🔑 пользователь с административными правами в базе — без них Конфигуратор не даст менять расширения;
- 🧩 платформа 8.3 актуальной версии; чем новее платформа, тем больше умеют расширения;
- 📄 понимание, какие объекты вы будете менять: форма документа, общий модуль, отчёт;
- 🗂 правило именования — префикс, который отличит ваши объекты от типовых.
Монопольный режим для создания расширения не нужен. Он может понадобиться, когда расширение добавляет новые объекты с данными и платформа обновляет структуру базы.
Если над доработками работают несколько человек, расширение можно подключить к хранилищу конфигурации так же, как основную конфигурацию. Это делается из меню расширения в Конфигураторе.
Создаём расширение конфигурации в Конфигураторе
Сам процесс занимает пару минут.
- Откройте базу в режиме Конфигуратора.
- Выберите
Конфигурация → Открыть конфигурацию, чтобы видеть дерево основной конфигурации. - Выберите
Конфигурация → Расширения конфигурации. Откроется окно со списком расширений. - Нажмите
Добавить. Платформа предложит имя, синоним, префикс и назначение. - Задайте имя латиницей или кириллицей без пробелов, например
ДоработкиПечати, и понятный синоним. - Нажмите
ОК. Расширение появится в списке, а рядом откроется его дерево объектов.
В дереве расширения изначально есть только корень и раздел «Общие». Основная конфигурация при этом не меняется и остаётся на поддержке: замок на её корне никуда не девается.
Расширение в списке ещё не применено к базе. Чтобы изменения заработали, нужно обновить конфигурацию базы данных, когда активно окно расширения (клавиша F7). Это отдельный шаг, о котором часто забывают.
Свойства и параметры расширения
Свойства задаются в двух местах: в палитре свойств корня расширения и в колонках окна со списком расширений.
| Свойство | Где задаётся | Что выбрать |
|---|---|---|
| Имя и синоним | корень расширения | понятное название задачи |
| Префикс | корень расширения | короткий и уникальный, по умолчанию Расш1_ |
| Назначение | корень расширения | Исправление, Адаптация или Дополнение |
| Режим совместимости | корень расширения | не выше, чем у основной конфигурации |
| Версия | корень расширения | номер для своего учёта изменений |
| Активно | список расширений | снимите флаг, чтобы временно отключить |
| Безопасный режим | список расширений | снимайте, только если коду нужен доступ к файлам и внешним ресурсам |
| Защита от опасных действий | список расширений | оставьте включённой |
Префикс
Префикс подставляется в имена новых объектов и процедур. Если оставить Расш1_ во всех расширениях, при переносе между базами имена начнут конфликтовать. Задайте свой: Печ_ для печатных форм, Скл_ для складских доработок.
Назначение
Назначение определяет порядок применения, когда расширений несколько. Сначала применяются расширения с назначением «Исправление», затем «Адаптация», последними — «Дополнение». Исправление ошибок типовой ставьте первым, отраслевую адаптацию вторым, мелкие удобства пользователя третьим.
Безопасный режим
В безопасном режиме код расширения не может работать с файловой системой, внешними компонентами и COM-объектами. Для большинства доработок форм и печати этого хватает. Снимайте флаг только для расширений из проверенного источника — расширение получает те же возможности, что и сама конфигурация.
Заимствование объектов и доработка форм
Менять можно только то, что заимствовано в расширение. Есть два способа заимствования.
- 🖱 В дереве основной конфигурации щёлкните объект правой кнопкой и выберите
Добавить в расширение. - 🌳 В дереве расширения откройте нужную ветку и добавьте объект оттуда же через контекстное меню.
Заимствованный объект в дереве расширения отмечен особым значком. Для каждого его свойства можно включить контроль: если после обновления типовой это свойство изменится, платформа не применит расширение и сообщит о расхождении. Это защищает от тихих поломок.
Новые объекты
Расширение умеет добавлять собственные объекты: справочники, документы, регистры, отчёты, обработки, общие модули, роли. В заимствованный справочник или документ в актуальных версиях платформы можно добавить новый реквизит или табличную часть. Такие изменения требуют обновления структуры базы.
Права на новые объекты
Частая ловушка: новый справочник или отчёт в расширении создан, а пользователи его не видят. Типовые роли ничего не знают о ваших объектах. Решений два:
- Создать в расширении собственную роль, выдать в ней права на новые объекты и назначить её пользователям или включить в профиль групп доступа.
- Заимствовать типовую роль и отметить в ней права на новые объекты. Права на типовые объекты в заимствованной роли менять нельзя — только добавлять на свои.
Первый вариант прозрачнее: роль с префиксом расширения сразу видно в списке, и её легко отозвать.
Формы
Чтобы доработать типовую форму, заимствуйте её отдельно: раскройте объект в дереве расширения, найдите форму и добавьте её. В редакторе формы можно:
- Добавить новые реквизиты формы и элементы — поля, кнопки, группы.
- Перенести элементы мышкой или скрыть ненужные свойством «Видимость».
- Назначить обработчик события формы или элемента.
При назначении обработчика в заимствованной форме платформа спрашивает тип вызова: перед типовым обработчиком, после него или вместо. Для формы документа это выглядит так:
&НаСервере
Процедура Печ_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
// Типовой ПриСозданииНаСервере уже выполнен
Элементы.Комментарий.Видимость = Ложь;
КонецПроцедуры
Выбирайте «после» или «перед», где это возможно. Вариант «вместо» полностью подменяет типовой обработчик, и при обновлении типовой вы не узнаете, что там поменялось.
Общие модули, модули объектов и внешние обработки
Код типовых модулей меняют через аннотации. Модуль сначала заимствуют, затем в модуле расширения пишут процедуру с аннотацией и именем типовой процедуры.
| Аннотация | Что делает |
|---|---|
&Перед("Имя") | ваш код выполняется до типового |
&После("Имя") | ваш код выполняется после типового |
&Вместо("Имя") | ваш код заменяет типовой; вызвать типовой можно через ПродолжитьВызов() |
&ИзменениеИКонтроль("Имя") | копия типовой процедуры с правками внутри; платформа следит, чтобы оригинал не изменился |
Пример замены функции общего модуля с сохранением типового результата:
&Вместо("СформироватьТекстНазначения")
Функция Печ_СформироватьТекстНазначения(Документ)
Результат = ПродолжитьВызов(Документ);
Возврат Результат + " (доп. соглашение)";
КонецФункции
Имя СформироватьТекстНазначения здесь условное: подставьте реальную функцию из заимствованного модуля, сигнатура должна совпадать с типовой.
Изменение и контроль
Аннотация &ИзменениеИКонтроль нужна, когда правку надо вставить в середину длинной процедуры. Платформа копирует текст типовой процедуры, вы отмечаете вставки директивами #Вставка … #КонецВставки и удаления #Удаление … #КонецУдаления. Если после обновления типовой текст оригинала изменится, расширение не применится. Вы увидите это сразу, а не по жалобе бухгалтера через месяц.
Расширение или внешняя обработка
Внешние обработки и отчёты никуда не делись. Выбор такой:
| Задача | Что подходит |
|---|---|
| Новая печатная форма документа | внешняя печатная форма или расширение |
| Разовая загрузка или исправление данных | внешняя обработка |
| Поле или кнопка на типовой форме | только расширение |
| Изменение логики проведения или проверки заполнения | только расширение |
| Новый справочник или регистр | только расширение |
Внешнюю обработку можно вызвать из кода расширения, но чаще проще перенести её в расширение как обычную обработку: она будет обновляться вместе с остальными доработками.
Отладка, перенос в рабочую базу и обновление расширения
Отладка
Запуск отладки по F5 из Конфигуратора поднимает клиент с применёнными расширениями. Точки останова в модулях расширения работают так же, как в основной конфигурации. Перед запуском обновите конфигурацию базы данных, иначе отладчик покажет старую версию.
Синтаксис проверяйте командой проверки модулей, когда активно окно расширения: ошибки компиляции поймаются до переноса.
Перенос в рабочую базу
- В окне со списком расширений выделите своё и выберите в меню
Конфигурациякоманду сохранения в файл. Получится файл.cfe. - В рабочей базе загрузите его одним из способов: в Конфигураторе через то же окно списка расширений или в пользовательском режиме.
- В типовых конфигурациях на БСП пользовательский путь такой:
Администрирование → Печатные формы, отчеты и обработки → Расширения. Там есть кнопка добавления из файла и флаги безопасного режима. - Если загружали через Конфигуратор, обновите конфигурацию базы данных.
Пользователи, которые уже работают в базе, получат расширение после перезапуска своего сеанса. Новые сеансы подхватят его сразу.
Обновление типовой конфигурации
После обновления типовой первое, что нужно сделать, — запустить базу
и убедиться, что расширение применилось. Если контролируемые свойства или процедуры изменились, платформа выдаст сообщение о том, что расширение не может быть применено, и перечислит причины. Дальше откройте расширение в Конфигураторе, поправьте заимствованные объекты под новый релиз, сохраните новую версию .cfe и загрузите её.
Типичные ошибки при работе с расширениями
И ещё несколько вещей, которые стоит знать до первой серьёзной доработки:
- 🗑 Если расширение добавило свои справочники или документы, его удаление удалит и данные этих объектов. Перед удалением сделайте резервную копию базы .
- 🐢 Аннотация
&Вместов часто вызываемых процедурах без вызоваПродолжитьВызов()отключает типовую логику целиком: после обновления типовой новые проверки просто не сработают. - 🧱 Одно огромное расширение на все задачи сложно обновлять. Разделяйте по смыслу: печать отдельно, обмены отдельно.