Расширение конфигурации 1С 8.3: доработка без снятия с поддержки

· 9 мин

Содержание

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

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

Что подготовить перед созданием расширения

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

Что понадобится:

  • 🔑 пользователь с административными правами в базе — без них Конфигуратор не даст менять расширения;
  • 🧩 платформа 8.3 актуальной версии; чем новее платформа, тем больше умеют расширения;
  • 📄 понимание, какие объекты вы будете менять: форма документа, общий модуль, отчёт;
  • 🗂 правило именования — префикс, который отличит ваши объекты от типовых.

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

Если над доработками работают несколько человек, расширение можно подключить к хранилищу конфигурации так же, как основную конфигурацию. Это делается из меню расширения в Конфигураторе.

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

Сам процесс занимает пару минут.

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

В дереве расширения изначально есть только корень и раздел «Общие». Основная конфигурация при этом не меняется и остаётся на поддержке: замок на её корне никуда не девается.

Расширение в списке ещё не применено к базе. Чтобы изменения заработали, нужно обновить конфигурацию базы данных, когда активно окно расширения (клавиша F7). Это отдельный шаг, о котором часто забывают.

Свойства и параметры расширения

Свойства задаются в двух местах: в палитре свойств корня расширения и в колонках окна со списком расширений.

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

Префикс

Префикс подставляется в имена новых объектов и процедур. Если оставить Расш1_ во всех расширениях, при переносе между базами имена начнут конфликтовать. Задайте свой: Печ_ для печатных форм, Скл_ для складских доработок.

Назначение

Назначение определяет порядок применения, когда расширений несколько. Сначала применяются расширения с назначением «Исправление», затем «Адаптация», последними — «Дополнение». Исправление ошибок типовой ставьте первым, отраслевую адаптацию вторым, мелкие удобства пользователя третьим.

Безопасный режим

В безопасном режиме код расширения не может работать с файловой системой, внешними компонентами и COM-объектами. Для большинства доработок форм и печати этого хватает. Снимайте флаг только для расширений из проверенного источника — расширение получает те же возможности, что и сама конфигурация.

Заимствование объектов и доработка форм

Менять можно только то, что заимствовано в расширение. Есть два способа заимствования.

  • 🖱 В дереве основной конфигурации щёлкните объект правой кнопкой и выберите Добавить в расширение.
  • 🌳 В дереве расширения откройте нужную ветку и добавьте объект оттуда же через контекстное меню.

Заимствованный объект в дереве расширения отмечен особым значком. Для каждого его свойства можно включить контроль: если после обновления типовой это свойство изменится, платформа не применит расширение и сообщит о расхождении. Это защищает от тихих поломок.

Новые объекты

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

Права на новые объекты

Частая ловушка: новый справочник или отчёт в расширении создан, а пользователи его не видят. Типовые роли ничего не знают о ваших объектах. Решений два:

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

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

Формы

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

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

При назначении обработчика в заимствованной форме платформа спрашивает тип вызова: перед типовым обработчиком, после него или вместо. Для формы документа это выглядит так:

&НаСервере
Процедура Печ_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
	// Типовой ПриСозданииНаСервере уже выполнен
	Элементы.Комментарий.Видимость = Ложь;
КонецПроцедуры

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

Общие модули, модули объектов и внешние обработки

Код типовых модулей меняют через аннотации. Модуль сначала заимствуют, затем в модуле расширения пишут процедуру с аннотацией и именем типовой процедуры.

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

Пример замены функции общего модуля с сохранением типового результата:

&Вместо("СформироватьТекстНазначения")
Функция Печ_СформироватьТекстНазначения(Документ)
	Результат = ПродолжитьВызов(Документ);
	Возврат Результат + " (доп. соглашение)";
КонецФункции

Имя СформироватьТекстНазначения здесь условное: подставьте реальную функцию из заимствованного модуля, сигнатура должна совпадать с типовой.

Изменение и контроль

Аннотация &ИзменениеИКонтроль нужна, когда правку надо вставить в середину длинной процедуры. Платформа копирует текст типовой процедуры, вы отмечаете вставки директивами #Вставка … #КонецВставки и удаления #Удаление … #КонецУдаления. Если после обновления типовой текст оригинала изменится, расширение не применится. Вы увидите это сразу, а не по жалобе бухгалтера через месяц.

Расширение или внешняя обработка

Внешние обработки и отчёты никуда не делись. Выбор такой:

ЗадачаЧто подходит
Новая печатная форма документавнешняя печатная форма или расширение
Разовая загрузка или исправление данныхвнешняя обработка
Поле или кнопка на типовой форметолько расширение
Изменение логики проведения или проверки заполнениятолько расширение
Новый справочник или регистртолько расширение

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

Отладка, перенос в рабочую базу и обновление расширения

Отладка

Запуск отладки по F5 из Конфигуратора поднимает клиент с применёнными расширениями. Точки останова в модулях расширения работают так же, как в основной конфигурации. Перед запуском обновите конфигурацию базы данных, иначе отладчик покажет старую версию.

Синтаксис проверяйте командой проверки модулей, когда активно окно расширения: ошибки компиляции поймаются до переноса.

Перенос в рабочую базу

  1. В окне со списком расширений выделите своё и выберите в меню Конфигурация команду сохранения в файл. Получится файл .cfe.
  2. В рабочей базе загрузите его одним из способов: в Конфигураторе через то же окно списка расширений или в пользовательском режиме.
  3. В типовых конфигурациях на БСП пользовательский путь такой: Администрирование → Печатные формы, отчеты и обработки → Расширения. Там есть кнопка добавления из файла и флаги безопасного режима.
  4. Если загружали через Конфигуратор, обновите конфигурацию базы данных.

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

Обновление типовой конфигурации

После обновления типовой первое, что нужно сделать, — запустить базу и убедиться, что расширение применилось. Если контролируемые свойства или процедуры изменились, платформа выдаст сообщение о том, что расширение не может быть применено, и перечислит причины. Дальше откройте расширение в Конфигураторе, поправьте заимствованные объекты под новый релиз, сохраните новую версию .cfe и загрузите её.

Перед загрузкой расширения в рабочую базу
Выполнено: 0 / 6

Типичные ошибки при работе с расширениями

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

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

  • 🗑 Если расширение добавило свои справочники или документы, его удаление удалит и данные этих объектов. Перед удалением сделайте резервную копию базы .
  • 🐢 Аннотация &Вместо в часто вызываемых процедурах без вызова ПродолжитьВызов() отключает типовую логику целиком: после обновления типовой новые проверки просто не сработают.
  • 🧱 Одно огромное расширение на все задачи сложно обновлять. Разделяйте по смыслу: печать отдельно, обмены отдельно.

Вопросы о расширениях 1С

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