Как доработать 1С без снятия с поддержки: работа с расширениями
Содержание
Расширение конфигурации
в 1С — это отдельный набор доработок, который лежит рядом с типовой конфигурацией и не меняет её. Создать его можно в Конфигураторе: Конфигурация → Расширения конфигурации → Добавить. Дальше вы заимствуете нужные типовые объекты, дописываете свой код и включаете расширение в рабочей базе.
Типичная ситуация: бухгалтерии нужна лишняя колонка в печатной форме или проверка при проведении документа. Раньше ради этого конфигурацию снимали с поддержки, и каждое обновление превращалось в многодневное сравнение. С расширением типовая конфигурация остаётся на поддержке, а ваши правки живут отдельно и переживают обновление релиза.
Чем расширение лучше правки типовой конфигурации
Главное отличие — типовой код остаётся нетронутым. Расширение накладывается поверх: платформа сама подмешивает ваши изменения при работе. Снять его можно одной галочкой.
| Подход | Что происходит с поддержкой | Обновление релиза | Откат доработки |
|---|---|---|---|
| Правка типовой конфигурации | Объекты снимаются с поддержки | Ручное сравнение и объединение | Трудно, нужен возврат из копии |
| Расширение конфигурации | Поддержка сохраняется полностью | Обычное, затем проверка расширения | Отключить или удалить расширение |
| Внешняя обработка или отчёт | Конфигурация не затрагивается | Не влияет | Просто убрать файл |
Внешние обработки хороши для разовых задач, но не умеют менять поведение типовых документов. Расширение умеет: добавляет реквизиты, команды, перехватывает процедуры, меняет формы.
Что можно делать расширением:
- ➕ добавлять новые справочники, документы, регистры, отчёты и обработки;
- ✏️ добавлять реквизиты и табличные части в существующие объекты;
- 🔁 дописывать код до, после или вместо типовой процедуры;
- 🖼️ менять формы: добавлять поля, кнопки, команды;
- 🔐 добавлять роли и права к новым объектам.
Чего нельзя: удалять типовые реквизиты и менять их типы. Расширение только добавляет и переопределяет поведение, но не ломает структуру основной конфигурации.
Подготовка: что проверить до создания расширения
Работа идёт в Конфигураторе, поэтому нужны права администратора информационной базы и доступ к режиму Конфигуратора.
- Разработку ведите в копии рабочей базы, а не в самой рабочей. Загрузите свежую выгрузку в тестовую базу.
- Убедитесь, что тестовая база той же версии конфигурации и платформы, что и рабочая. Иначе потом не совпадёт заимствованный код.
- Определитесь с префиксом. Все новые объекты и процедуры называйте с единым префиксом, например
Бух_. Тогда ваши имена не пересекутся с типовыми после обновления. - Решите, сколько расширений нужно. Лучше несколько небольших по темам (печатные формы, обмены, проверки), чем одно на всё сразу: проще отключать и искать причину сбоя.
Перед первым подключением расширения к рабочей базе сделайте выгрузку базы в .dt. Расширение штатно отключается, но резервная копия страхует от ошибок в самом коде.
Создание файла расширения в Конфигураторе
Откройте тестовую базу в Конфигураторе и выполните шаги.
- Выберите
Конфигурация → Расширения конфигурации. - Нажмите «Добавить». Откроется окно свойств нового расширения.
- Задайте имя, синоним и префикс имён. Имя — латиницей или кириллицей без пробелов, синоним — для людей.
- Укажите назначение расширения. Платформа различает исправление ошибок, адаптацию под отрасль и дополнение функциональности. На работу оно почти не влияет, зато подсказывает администраторам, зачем расширение появилось.
- Оставьте включёнными защиту от опасных действий и безопасный режим, если расширение не должно обращаться к внешним ресурсам. Отключайте их осознанно.
- Подтвердите создание.
Расширение сразу появится в списке. Дальше открывайте его конфигурацию: в списке выберите расширение и откройте его дерево метаданных. Оно выглядит как обычная конфигурация, но поначалу почти пустое.
Заимствование типового объекта
Чтобы изменить типовой документ или справочник, его надо заимствовать. В дереве основной конфигурации найдите нужный объект, вызовите контекстное меню и выберите добавление в расширение. Объект появится в дереве расширения со значком заимствования.
Заимствованный объект — лёгкая «тень» типового. В ней хранится только то, что вы изменили. Остальное платформа берёт из основной конфигурации. Поэтому расширение не раздувается и не дублирует типовой код.
Безопасный режим и защита от опасных действий
Эти два свойства стоят в окне свойств расширения, и о них часто забывают.
- 🛡️ Безопасный режим запрещает коду расширения обращаться к внешним ресурсам: файлам, COM-объектам, внешним компонентам. Для расширения с печатной формой или проверкой это правильный выбор.
- 🛡️ Защита от опасных действий выдаёт пользователю предупреждение, когда код пытается выполнить потенциально опасную операцию.
Если расширению нужен обмен файлами с внешней программой, безопасный режим придётся отключить. Делайте это только для расширений из доверенного источника и после просмотра кода: расширение с отключённой защитой получает широкие возможности.
Новые объекты и возможности в расширении
Объекты, которых нет в типовой, создаются как обычно: правая кнопка на ветке метаданных, «Добавить». Они принадлежат только расширению.
Примеры, что удобно добавлять:
- 📄 справочник «Причины возврата» с формой списка и элемента;
- 🧾 отчёт с запросом по типовым регистрам;
- 🔘 команду в типовую форму документа, которая открывает вашу обработку;
- ➕ реквизит «Номер заявки» в заимствованный документ.
Новый реквизит в заимствованном документе добавляйте в самом расширении. Поле на форму выводите через заимствованную форму: добавьте элемент и привяжите к реквизиту.
Все добавленные реквизиты называйте с префиксом. Если типовая конфигурация в новом релизе получит реквизит с таким же именем, коллизии не будет.
Роли для новых объектов тоже создавайте в расширении и сразу назначайте нужным группам пользователей. Иначе объект есть, а пользователи его не видят.
Изменение типового поведения: перехват процедур
Это главное умение при работе с расширениями. Типовой код не правится, а оборачивается вашим. В модуле заимствованного объекта или формы вы пишете процедуру с аннотацией, и платформа вызывает её в нужный момент.
| Аннотация | Когда срабатывает | Для чего |
|---|---|---|
&Перед("Имя") | до типовой процедуры | проверки, подготовка данных |
&После("Имя") | после типовой процедуры | дополнительные действия, заполнение |
&Вместо("Имя") | вместо типовой | полная замена логики |
&ИзменениеИКонтроль("Имя") | копирует тело и позволяет править его | точечная правка внутри процедуры |
Пример. Нужно запретить проведение, если не заполнен ваш реквизит:
&Перед("ОбработкаПроведения")
Процедура Бух_ОбработкаПроведения(Отказ, РежимПроведения)
Если Не ЗначениеЗаполнено(НомерЗаявки) Тогда
Сообщить("Укажите номер заявки.");
Отказ = Истина;
КонецЕсли;
КонецПроцедуры
Для &Вместо внутри своей процедуры типовую часть вызывают командой ПродолжитьВызов(), передавая параметры. Если её не вызвать, типовая логика не выполнится вовсе. Поэтому &Вместо используйте только когда действительно нужна полная замена.
Порядок выбора:
- Достаточно проверки или дополнения? Берите
&Передили&После. - Нужно изменить результат работы процедуры? Смотрите
&ВместосПродолжитьВызов(). - Надо поправить строку в середине? Только тогда
&ИзменениеИКонтроль, и помнить, что он потребует ручной сверки при обновлении.
Чем уже перехват, тем меньше работы после выхода нового релиза.
Подключение расширения к рабочей базе и отладка
Сначала проверьте работу в тестовой базе. Запустите 1С:Предприятие и повторите сценарий, ради которого делалось расширение. Если расширение отключено, в списке расширений оно будет без пометки «активно», и изменений вы не увидите. Это самая частая причина вопроса «почему ничего не работает ».
Отладка
Расширения отлаживаются так же, как основная конфигурация. Откройте нужный модуль расширения, поставьте точку останова и запустите отладку. Остановка произойдёт в процедуре с аннотацией.
Что проверять при сбоях:
- 🔍 открывается ли форма, в которую вносились изменения;
- 🔍 не выдаёт ли платформа ошибки при старте сеанса;
- 🔍 срабатывает ли аннотированная процедура: точка останова в её первой строке;
- 🔍 синтаксический контроль расширения:
Конфигурация → Проверка конфигурации.
Перенос в рабочую базу
- В окне расширений выберите ваше расширение и сохраните его в файл
.cfe(команда сохранения конфигурации расширения в файл). - В рабочей базе откройте тот же список расширений в Конфигураторе и загрузите файл.
- Обновите конфигурацию базы данных (
F7). Без этого изменения структуры не применятся. - Убедитесь, что расширение активно, и проверьте сценарий.
Обновление конфигурации базы данных перезапускает структуру данных, и для этого нужен монопольный доступ. Делайте это, когда пользователи вышли из базы, например вечером или в обеденный перерыв.
Пользователям ничего ставить не нужно: расширение живёт в базе. В клиент-серверной базе оно подхватится при следующем входе, в файловой — так же.
Обновление типовой конфигурации с установленными расширениями
Обновление релиза расширение не стирает, оно хранится отдельно. Но после обновления его нужно проверить.
Порядок действий:
- Сначала обновите тестовую копию, не рабочую базу.
- После обновления откройте расширение в Конфигураторе. Заимствованные объекты, которые изменились в новом релизе, платформа покажет в окне расширения, их надо проверить и согласовать.
- Запустите проверку конфигурации и синтаксический контроль модулей.
- Пройдите по основным сценариям: проведение документов, печать, отчёты.
- Только после этого повторите обновление в рабочей базе.
Особое внимание — процедурам с &Вместо и &ИзменениеИКонтроль. Если типовая процедура в новом релизе изменилась, ваш код продолжает работать по-старому, а часть новых типовых проверок теряется. Для &Перед и &После такой проблемы почти нет.
Если расширение перестало работать после обновления и срочно нужен рабочий учёт, отключите его (снимите признак активности), обновите базу и разбирайтесь с кодом спокойно.
Ограничения и частые ошибки
Механизм удобный, но не всемогущий. Ограничения нужно знать заранее, чтобы не потратить день впустую.
- 🚫 нельзя удалить или поменять тип типового реквизита, можно только добавить свои;
- 🚫 нельзя использовать расширение, чтобы обойти лицензионные ограничения платформы;
- 🚫 часть свойств заимствованных объектов расширение не переопределяет, и платформа об этом сообщит при попытке изменения;
- 🚫 несколько расширений, меняющих один и тот же метод, конфликтуют по порядку применения, поэтому порядок в списке расширений имеет значение.
Частые ошибки:
Ещё два совета из практики:
- Не складывайте в одно расширение несвязанные доработки. Падение одной не должно блокировать остальные.
- Ведите короткое описание: что делает каждое расширение и кому нужно. Через год это спасает.
Частые вопросы
Расширение конфигурации снимает 1С с поддержки?
Можно ли пользоваться расширением без Конфигуратора?
Сколько расширений можно подключить к одной базе?
Как отключить расширение, если оно мешает?
.cfe.