Доработка 1С без снятия с поддержки: как устроены расширения

· 9 мин

Содержание

Расширение конфигурации 1С — это отдельный набор доработок, который подключается к типовой конфигурации поверх неё и не меняет её код. Основная конфигурация остаётся на полной поддержке поставщика, поэтому обновляется штатно, а ваши изменения живут в отдельном файле .cfe и включаются или отключаются одной галочкой.

Механизм появился в платформе 8.3.6 и с каждой версией получал новые возможности. Сейчас через расширение добавляют печатные формы, реквизиты, отчёты, новые справочники и документы, меняют поведение типовых процедур. Это основной способ дорабатывать типовые решения: Бухгалтерию 3.0, ЗУП 3.1, УТ 11, ERP. Принцип одинаков для всех конфигураций, потому что это механизм платформы, а не конкретной программы.

Чем расширение отличается от правки основной конфигурации

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

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

  • 🧩 код хранится отдельно — в типовых модулях нет ни одной вашей строки;
  • 🔒 поддержка не снимается — обновление идёт как на чистой типовой базе;
  • 🔁 включение и отключение без конфигуратора — флагом «Активно» в списке расширений;
  • 🏷️ у всех объектов свой префикс — например, Расш1_, поэтому имена не пересекаются с типовыми;
  • 📦 перенос между базами одним файлом — расширение выгружается в .cfe и загружается в другую базу с той же конфигурацией.

Ключевое понятие — заимствование. Чтобы изменить типовой объект, его сначала добавляют в расширение. В дереве расширения появляется «копия-ссылка» на объект основной конфигурации. К ней можно добавить свои реквизиты, формы, макеты, обработчики событий. Сам типовой объект при этом не трогается.

Заимствованный объект — не копия данных. Это ссылка на тот же справочник или документ. Записи хранятся в тех же таблицах, а реквизиты, добавленные расширением, — в отдельных таблицах расширения.

Что умеет расширение 1С и где его границы

Возможности расширений растут с каждой версией платформы. Если нужная функция не работает , первым делом проверяют номер платформы и режим совместимости расширения.

Что можно сделать

  • 📄 добавить печатную форму к типовому документу или заменить её;
  • ➕ добавить реквизиты и табличные части к заимствованным справочникам и документам;
  • 🗂️ создать собственные справочники, документы, регистры, отчёты и обработки;
  • 🖼️ изменить форму: добавить поле, кнопку, команду, скрыть лишнее;
  • ⚙️ встроиться в процедуры и функции типовых модулей до, после или вместо исходного кода;
  • 👥 добавить роли и права на новые объекты;
  • 🔔 добавить обработчики событий объектов: перед записью, при проведении и других.

Перехват методов

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

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

Пример: перед записью типового документа проверяем заполненность своего реквизита.

&Перед("ПередЗаписью")
Процедура Расш1_ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
	Если Не ЗначениеЗаполнено(Расш1_Ответственный) Тогда
		Сообщить("Укажите ответственного");
		Отказ = Истина;
	КонецЕсли;
КонецПроцедуры

В методе с аннотацией &Вместо можно вызвать исходный код через ПродолжитьВызов(). Если его не вызвать, типовая логика не выполнится совсем. Отсюда частые ошибки после обновлений: поставщик исправил метод, а расширение продолжает его подменять старой версией.

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

Чего расширение не может

  • ❌ удалить объект основной конфигурации или его реквизит;
  • ❌ изменить тип типового реквизита или структуру его хранения;
  • ❌ переименовать типовые объекты;
  • ⚠️ работать на платформе с номером ниже, чем требуется для его режима совместимости.

Скрыть ненужное можно: поле убирают с формы, команду отключают. Но в метаданных объект остаётся.

Когда бизнесу нужно расширение: типовые сценарии

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

  1. Своя печатная форма. Счёт с логотипом и подписями, акт в формате заказчика, этикетка склада. Заимствуют документ, добавляют макет и команду печати.
  2. Дополнительный реквизит с логикой. Например, «Проект» в заказе покупателя с обязательным заполнением и отбором в отчётах.
  3. Свой контроль. Запрет провести реализацию без договора, запрет менять документы закрытого периода для отдельных ролей, проверка лимита скидки.
  4. Интеграция. Выгрузка документов в сайт, CRM или склад, загрузка заказов по HTTP-сервису.
  5. Исправление ошибки типового релиза. Поставщик исправит её через месяц, а работать нужно сейчас. Делают маленькое расширение с назначением «Исправление» и отключают его после обновления.
  6. Отраслевая специфика. Собственные справочники, документы, регистры для учёта, которого в типовой нет.

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

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

Порядок общий для любой типовой конфигурации на платформе 8.3.

Шаг 1. Создать пустое расширение

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

Шаг 2. Заимствовать нужные объекты

  1. Откройте дерево расширения и рядом дерево основной конфигурации.
  2. На типовом объекте вызовите контекстное меню и выберите добавление в расширение.
  3. Заимствуйте только то, что действительно меняете: форму, модуль, макет. Лишние заимствования — лишние точки поломки при обновлении.

Шаг 3. Внести изменения

Добавьте реквизиты, формы, макеты, команды. В модулях пишите процедуры с аннотациями из таблицы выше. Для новых объектов заведите роль в расширении и выдайте права, иначе пользователи получат отказ доступа к ним.

Шаг 4. Применить расширение к базе

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

Если расширение добавляет реквизиты или новые объекты, обновление меняет структуру таблиц. Перед этим сделайте резервную копию базы и выполняйте операцию вне рабочего времени.

Шаг 5. Выгрузить в файл

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

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

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

Если расширение прислал разработчик, конфигуратор не нужен. В Бухгалтерии 3.0, ЗУП 3.1, УТ 11 и других конфигурациях на БСП путь такой:

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

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

Удаление расширения, которое добавляло реквизиты или свои объекты, удаляет и данные в них. Сначала отключите флаг «Активно» и проверьте работу, а удаляйте после выгрузки нужных данных.

Расширение, внешняя обработка или снятие с поддержки: сравнение методов доработки

Расширение — не единственный инструмент. Выбор зависит от того, что нужно изменить.

МетодКогда подходитРиски и затраты
Расширениереквизиты, формы, печать, логика, новые объектывозможна несовместимость после обновления, проверка при каждом релизе
Внешняя обработка или печатная форма (.epf, .erf)отдельный отчёт, печатная форма, заполнение табличной частине меняет логику типовых объектов, нужна регистрация в справочнике дополнительных обработок
Дополнительные реквизиты и сведения (БСП)простое поле без логикинет программного контроля, хранение в общих таблицах
Изменение основной конфигурацииглубокая переделка, которую расширение не допускаетдорогое обновление вручную, иногда в разы дольше, чем у типовой

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

Какая доработка вам нужна?

Почему расширение перестаёт работать после обновления

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

  • ✅ ничего не заметно — изменения не задели ваши точки встраивания;
  • ⛔ расширение не применяется — платформа сообщает о несовместимости при запуске, доработки пропадают до исправления;
  • 🐞 расширение применяется, но работает неправильно — например, &Вместо подменяет метод, который поставщик исправил, и ошибка возвращается.

Частые причины проблем совместимости:

  • 🔤 переименован или удалён типовой реквизит, форма или метод, который заимствован;
  • 🧷 у заимствованного свойства включён контроль, и поставщик это свойство изменил;
  • 🧮 изменился текст метода под &ИзменениеИКонтроль;
  • 🧱 конфликт двух расширений — оба перехватывают один и тот же метод или меняют одну форму;
  • 🖥️ режим совместимости расширения требует платформу новее установленной.

Как снизить риски

  1. Обновляйте сначала копию базы и проверяйте на ней работу расширения.
  2. После обновления откройте расширение в конфигураторе: объекты, которые не прошли контроль, будут отмечены.
  3. Держите &Вместо для крайних случаев, предпочитайте &Перед и &После.
  4. Ведите версии .cfe и описание: что делает каждое расширение и какие объекты затрагивает.
  5. Не плодите десяток мелких расширений с пересечениями. Связанные доработки держите в одном.

Частые вопросы

Слетит ли расширение при обновлении конфигурации?
Нет, расширение сохраняется в базе. Но если поставщик изменил заимствованные объекты, оно может не примениться, и его придётся адаптировать.
Можно ли подключить расширение без доступа к конфигуратору?
Да. В конфигурациях на БСП это делают в разделе «Администрирование», нужны права администратора в базе.
Подойдёт ли расширение от одной базы к другой?
Подойдёт, если в другой базе та же конфигурация с близким релизом. Для другой конфигурации заимствованные объекты не найдутся.
Сколько расширений можно подключить к одной базе?
Жёсткого практического лимита нет, но каждое добавляет время запуска и риск конфликтов. Обычно хватает нескольких.
Снижает ли расширение скорость работы?
Само по себе почти нет. Тормоза дают тяжёлые запросы и код в частых событиях, например в обработчиках при изменении полей формы.