Как доработать 1С без снятия с поддержки: работа с расширениями

· 9 мин

Содержание

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

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

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

Главное отличие — типовой код остаётся нетронутым. Расширение накладывается поверх: платформа сама подмешивает ваши изменения при работе. Снять его можно одной галочкой.

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

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

Что можно делать расширением:

  • ➕ добавлять новые справочники, документы, регистры, отчёты и обработки;
  • ✏️ добавлять реквизиты и табличные части в существующие объекты;
  • 🔁 дописывать код до, после или вместо типовой процедуры;
  • 🖼️ менять формы: добавлять поля, кнопки, команды;
  • 🔐 добавлять роли и права к новым объектам.

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

Подготовка: что проверить до создания расширения

Работа идёт в Конфигураторе, поэтому нужны права администратора информационной базы и доступ к режиму Конфигуратора.

  1. Разработку ведите в копии рабочей базы, а не в самой рабочей. Загрузите свежую выгрузку в тестовую базу.
  2. Убедитесь, что тестовая база той же версии конфигурации и платформы, что и рабочая. Иначе потом не совпадёт заимствованный код.
  3. Определитесь с префиксом. Все новые объекты и процедуры называйте с единым префиксом, например Бух_. Тогда ваши имена не пересекутся с типовыми после обновления.
  4. Решите, сколько расширений нужно. Лучше несколько небольших по темам (печатные формы, обмены, проверки), чем одно на всё сразу: проще отключать и искать причину сбоя.

Перед первым подключением расширения к рабочей базе сделайте выгрузку базы в .dt. Расширение штатно отключается, но резервная копия страхует от ошибок в самом коде.

Создание файла расширения в Конфигураторе

Откройте тестовую базу в Конфигураторе и выполните шаги.

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

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

Заимствование типового объекта

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

Заимствованный объект — лёгкая «тень» типового. В ней хранится только то, что вы изменили. Остальное платформа берёт из основной конфигурации. Поэтому расширение не раздувается и не дублирует типовой код.

Безопасный режим и защита от опасных действий

Эти два свойства стоят в окне свойств расширения, и о них часто забывают.

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

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

Новые объекты и возможности в расширении

Объекты, которых нет в типовой, создаются как обычно: правая кнопка на ветке метаданных, «Добавить». Они принадлежат только расширению.

Примеры, что удобно добавлять:

  • 📄 справочник «Причины возврата» с формой списка и элемента;
  • 🧾 отчёт с запросом по типовым регистрам;
  • 🔘 команду в типовую форму документа, которая открывает вашу обработку;
  • ➕ реквизит «Номер заявки» в заимствованный документ.

Новый реквизит в заимствованном документе добавляйте в самом расширении. Поле на форму выводите через заимствованную форму: добавьте элемент и привяжите к реквизиту.

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

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

Изменение типового поведения: перехват процедур

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

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

Пример. Нужно запретить проведение, если не заполнен ваш реквизит:

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

Для &Вместо внутри своей процедуры типовую часть вызывают командой ПродолжитьВызов(), передавая параметры. Если её не вызвать, типовая логика не выполнится вовсе. Поэтому &Вместо используйте только когда действительно нужна полная замена.

Порядок выбора:

  1. Достаточно проверки или дополнения? Берите &Перед или &После.
  2. Нужно изменить результат работы процедуры? Смотрите &Вместо с ПродолжитьВызов().
  3. Надо поправить строку в середине? Только тогда &ИзменениеИКонтроль, и помнить, что он потребует ручной сверки при обновлении.

Чем уже перехват, тем меньше работы после выхода нового релиза.

Подключение расширения к рабочей базе и отладка

Сначала проверьте работу в тестовой базе. Запустите 1С:Предприятие и повторите сценарий, ради которого делалось расширение. Если расширение отключено, в списке расширений оно будет без пометки «активно», и изменений вы не увидите. Это самая частая причина вопроса «почему ничего не работает ».

Отладка

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

Что проверять при сбоях:

  • 🔍 открывается ли форма, в которую вносились изменения;
  • 🔍 не выдаёт ли платформа ошибки при старте сеанса;
  • 🔍 срабатывает ли аннотированная процедура: точка останова в её первой строке;
  • 🔍 синтаксический контроль расширения: Конфигурация → Проверка конфигурации.

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

  1. В окне расширений выберите ваше расширение и сохраните его в файл .cfe (команда сохранения конфигурации расширения в файл).
  2. В рабочей базе откройте тот же список расширений в Конфигураторе и загрузите файл.
  3. Обновите конфигурацию базы данных (F7). Без этого изменения структуры не применятся.
  4. Убедитесь, что расширение активно, и проверьте сценарий.

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

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

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

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

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

Порядок действий:

  1. Сначала обновите тестовую копию, не рабочую базу.
  2. После обновления откройте расширение в Конфигураторе. Заимствованные объекты, которые изменились в новом релизе, платформа покажет в окне расширения, их надо проверить и согласовать.
  3. Запустите проверку конфигурации и синтаксический контроль модулей.
  4. Пройдите по основным сценариям: проведение документов, печать, отчёты.
  5. Только после этого повторите обновление в рабочей базе.

Особое внимание — процедурам с &Вместо и &ИзменениеИКонтроль. Если типовая процедура в новом релизе изменилась, ваш код продолжает работать по-старому, а часть новых типовых проверок теряется. Для &Перед и &После такой проблемы почти нет.

Если расширение перестало работать после обновления и срочно нужен рабочий учёт, отключите его (снимите признак активности), обновите базу и разбирайтесь с кодом спокойно.

Ограничения и частые ошибки

Механизм удобный, но не всемогущий. Ограничения нужно знать заранее, чтобы не потратить день впустую.

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

Частые ошибки:

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

Ещё два совета из практики:

  1. Не складывайте в одно расширение несвязанные доработки. Падение одной не должно блокировать остальные.
  2. Ведите короткое описание: что делает каждое расширение и кому нужно. Через год это спасает.

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

Расширение конфигурации снимает 1С с поддержки?
Нет. Типовая конфигурация остаётся на поддержке, обновления приходят как обычно. Меняется только то, что вы описали в расширении.
Можно ли пользоваться расширением без Конфигуратора?
Использовать готовое можно в обычном режиме 1С:Предприятия: расширение живёт в базе. Для создания и правки код пишется в Конфигураторе.
Сколько расширений можно подключить к одной базе?
Платформа допускает несколько расширений. Для удобства сопровождения лучше делить их по темам и не превращать одно в свалку.
Как отключить расширение, если оно мешает?
В списке расширений снимите признак активности и обновите конфигурацию базы данных. Если нужно удалить насовсем, сначала сохраните его в .cfe.
Расширение работает в файловой и клиент-серверной базе одинаково?
Да, принцип один. Различие только в том, что обновление структуры требует монопольного доступа, поэтому планируйте работы вне рабочего дня.
Что будет с расширением при переходе на новый релиз платформы?
Файл расширения сохраняется, но модули нужно проверить синтаксическим контролем: платформа иногда меняет допустимые конструкции.