Как дорабатывать типовую 1С расширением и не снимать её с поддержки
Содержание
Расширение конфигурации 1С — это отдельный слой доработок, который платформа 8.3 накладывает поверх типовой конфигурации при запуске базы. Сама типовая остаётся на поддержке и обновляется как обычно, а ваши правки живут в расширении: новая печатная форма, лишний реквизит в документе, изменённая логика проведения. Механизм появился в платформе 8.3.6 и с каждой версией получает новые возможности.
Использовать расширения стоит почти всегда, когда нужно доработать типовую 1С:Бухгалтерию, ЗУП или УТ. Обновление типовой занимает минуты, а не дни сравнения и объединения. Расширение создают в Конфигураторе, сохраняют в файл .cfe и подключают к любой базе с той же конфигурацией.
Зачем нужны расширения и чем они спасают типовую
Классический путь доработки — включить в Конфигураторе возможность изменения и править модули типовой прямо по месту. Работает, но цена высокая: при каждом обновлении приходится сравнивать и объединять конфигурации, разбирать конфликты, проверять, что ничего не потерялось. На базе с сотней правок одно обновление может занять рабочий день программиста.
Расширение решает эту проблему разделением. Основная конфигурация обновляется штатно, расширение подключается сверху. Если в новом релизе изменились объекты, на которые опирается доработка, платформа скажет об этом при проверке, а не молча сломает учёт.
Типичные задачи, которые закрывают расширением:
- 🖨️ своя печатная форма или изменённый макет типовой формы;
- 📝 новый реквизит в справочнике или документе;
- ⚙️ дополнительная проверка при записи или проведении документа;
- 📊 собственный отчёт или обработка, встроенная в интерфейс;
- 🔧 исправление ошибки типовой до выхода официального релиза;
- 🔗 обмен с внешней системой: сайтом, складской программой, банком.
У расширения есть свойство «Назначение»: исправление, адаптация или дополнение. Оно влияет на порядок применения, когда к базе подключено несколько расширений. Исправления типовых ошибок обычно оформляют с назначением «Исправление», собственные доработки — «Адаптация» или «Дополнение».
Как устроено расширение: заимствование и аннотации
Расширение — это мини-конфигурация со своим деревом метаданных. В неё можно добавить два вида объектов.
Собственные объекты. Новые справочники, документы, отчёты, обработки, общие модули, роли. Они существуют только в расширении. Платформа требует для их имён префикс, который задаётся в свойствах расширения, например Расш1_. Так новые объекты не пересекаются с объектами типовой.
Заимствованные объекты. Копия-ссылка на объект основной конфигурации: документ, форма, общий модуль, макет. Заимствованный объект нужен, чтобы изменить поведение уже существующего. Чтобы заимствовать объект, в дереве основной конфигурации щёлкните по нему правой кнопкой и выберите Добавить в расширение.
Перехват процедур аннотациями
Код типовой в расширении не переписывают. Вместо этого в модуле заимствованного объекта создают свою процедуру и помечают её аннотацией: она указывает, к какой процедуре типовой привязаться и когда выполняться.
| Аннотация | Что делает | Когда применять |
|---|---|---|
&Перед("Имя") | выполняет ваш код до типовой процедуры | дополнительные проверки, заполнение значений |
&После("Имя") | выполняет ваш код после типовой | донастройка формы, дозаполнение движений |
&Вместо("Имя") | подменяет типовую процедуру | полная замена логики; типовую можно вызвать через ПродолжитьВызов() |
&ИзменениеИКонтроль("Имя") | копия типовой процедуры с точечными вставками и удалениями | правка нескольких строк в середине длинной процедуры |
Пример: дополнительная проверка при записи документа. Процедура в расширении выполнится раньше типовой ПередЗаписью.
&Перед("ПередЗаписью")
Процедура Расш1_ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Если РежимЗаписи = РежимЗаписиДокумента.Проведение
И Не ЗначениеЗаполнено(Комментарий) Тогда
ОбщегоНазначения.СообщитьПользователю(
"Перед проведением заполните комментарий.", , "Комментарий", "Объект", Отказ);
КонецЕсли;
КонецПроцедуры
ОбщегоНазначения.СообщитьПользователю — процедура Библиотеки стандартных подсистем, она есть в типовых БП, ЗУП и УТ. Параметр Отказ она устанавливает сама, и запись не выполнится.
С &ИзменениеИКонтроль код типовой процедуры копируется в расширение целиком, а правки обрамляют инструкциями препроцессора:
&ИзменениеИКонтроль("ЗаполнитьПоОснованию")
Процедура Расш1_ЗаполнитьПоОснованию(Основание)
// ...строки типовой без изменений...
#Вставка
Комментарий = "Создан на основании " + Строка(Основание);
#КонецВставки
#Удаление
СтараяСтрокаТиповой();
#КонецУдаления
// ...строки типовой без изменений...
КонецПроцедуры
Главная польза этой аннотации — контроль. Если в новом релизе типовая процедура изменилась, платформа увидит расхождение и не применит расширение, пока программист не сверит код. Ошибка всплывает сразу, а не через месяц в отчётности.
Не используйте &Вместо без вызова ПродолжитьВызов() для крупных процедур проведения: при обновлении типовой ваша копия логики устареет, а платформа этого не заметит.
Создание расширения в Конфигураторе по шагам
Шаг 1. Подготовка
- Сделайте резервную копию базы
:
Администрирование → Выгрузить информационную базув Конфигураторе. Расширение не трогает данные типовой, но первая отладка лучше проходит на копии. - Проверьте версию платформы. Для серьёзных доработок нужна платформа с номером не ниже 8.3.12: в ранних версиях часть возможностей расширений отсутствует.
- Убедитесь, что у пользователя есть права администратора.
Шаг 2. Создание
- Откройте базу в режиме Конфигуратор.
- Выберите
Конфигурация → Расширения конфигурации. - Нажмите «Добавить». Задайте имя (латиница или кириллица без пробелов), синоним и префикс, например
Расш1_. - Укажите назначение расширения.
- Откройте дерево расширения двойным щелчком.
Шаг 3. Доработка
- Заимствуйте нужные объекты через контекстное меню основной конфигурации:
Добавить в расширение. - Добавьте собственные объекты, реквизиты, формы, модули.
- Напишите код с аннотациями.
- Выполните
Обновить конфигурацию базы данных(клавишаF7) в окне расширения. Это отдельное действие: сохранение расширения в файл или изменение кода ещё не применяет его к базе. - Запустите 1С:Предприятие и проверьте работу.
Шаг 4. Сохранение в файл
В окне расширения выберите Конфигурация → Сохранить конфигурацию в файл. Получится файл .cfe. Его можно передать коллеге, загрузить в другую базу или положить в систему контроля версий.
Расширение рассчитано на определённую конфигурацию. Файл, собранный на 1С:Бухгалтерии, не подойдёт к ЗУП: заимствованные объекты не найдутся, и платформа откажется его применять.
Подключение готового файла .cfe
Готовое расширение от программиста или поставщика загружают двумя способами.
Через Конфигуратор. Конфигурация → Расширения конфигурации, затем в списке добавьте расширение и в его окне загрузите конфигурацию из файла .cfe. После этого обновите конфигурацию базы данных.
В пользовательском режиме. В типовых конфигурациях на Библиотеке стандартных подсистем есть список расширений: Администрирование → Печатные формы, отчеты и обработки → Расширения. Нажмите «Добавить из файла», выберите .cfe и подтвердите. Конфигуратор не нужен. Изменения вступят в силу после перезапуска программы.
В свойствах загруженного расширения есть флажки, которые стоит проверить:
- ✅ Активно — расширение применяется. Снятый флажок временно выключает доработку без удаления.
- 🛡️ Безопасный режим — расширение работает с ограничениями: без доступа к файлам, внешним компонентам и привилегированным операциям. Для расширения из непроверенного источника включайте его.
- 🔒 Защита от опасных действий — платформа предупредит пользователя, если код пытается сделать что-то потенциально опасное.
Без безопасного режима код расширения выполняется с полными правами, как код типовой. Загружайте файлы только от тех, кому доверяете, и перед подключением в рабочую базу проверяйте их на копии.
Что расширение умеет, а где упирается в ограничения
Возможности расширений росли от версии к версии платформы. На актуальных версиях 8.3 картина такая.
Можно:
- 🧩 добавлять собственные справочники, документы, регистры, перечисления, отчёты, обработки;
- ➕ добавлять реквизиты и табличные части в заимствованные справочники и документы;
- 🖼️ менять формы: добавлять поля, кнопки, команды, менять обработчики событий;
- 📄 заменять макеты печатных форм;
- 👤 добавлять роли и давать права на свои и заимствованные объекты;
- 🧠 перехватывать процедуры модулей объектов, менеджеров, форм и общих модулей.
Нельзя или проблематично:
- ❌ удалить объект или реквизит типовой конфигурации;
- ❌ поменять тип существующего реквизита типовой;
- ❌ переписать запросы внутри типовой процедуры без перехвата всей процедуры;
- ⚠️ рассчитывать, что доработка переживёт любое обновление: если типовая переименует или удалит заимствованный объект, расширение придётся править.
Отдельная тонкость — данные. Если расширение добавляет реквизиты или новые объекты, оно хранит данные в базе. Удалите такое расширение — пропадут и введённые в его реквизиты значения. Перед удалением выгрузите нужные сведения или перенесите их в типовые поля.
Платформа контролирует свойства заимствованных объектов. Если в типовой изменился тип реквизита, на который опирается ваш код, при проверке расширения появится сообщение о несоответствии. Это не сбой, а повод сверить доработку с новым релизом.
Расширение, снятие с поддержки или внешняя обработка
Расширение — не единственный способ доработки. Выбор зависит от задачи.
| Способ | Когда подходит | Цена при обновлении типовой | Риски |
|---|---|---|---|
| Расширение конфигурации | любые точечные изменения форм, логики, новые объекты | минимальная, обновление штатное | расширение может перестать применяться после крупного релиза |
Внешняя обработка или отчёт (.epf, .erf) | разовая обработка, отчёт, печатная форма, подключаемая через «Дополнительные отчеты и обработки» | нулевая | нет доступа к изменению форм и логики типовых объектов |
| Снятие с поддержки и правка типовой | глубокая переделка, которую расширение не тянет | высокая: сравнение и объединение при каждом релизе | ошибки объединения, потеря правок, долгое обновление |
| Собственная конфигурация на базе типовой | отраслевое решение, которое отходит от типовой полностью | обновления типовой фактически прекращаются | развитие полностью на вашей стороне |
Короткое правило: начинайте с внешней обработки, если задача не меняет поведение типовых объектов. Нужна правка формы или логики — расширение. Снимать с поддержки стоит, только когда расширение технически не справляется, и этот шаг лучше согласовать с тем, кто будет обновлять базу.
Отдельный плюс расширений для сервиса 1С:Фреш и аналогичных облаков: там доступ в Конфигуратор закрыт, и расширение остаётся основным способом доработки. Расширения в облаке обычно публикуют через каталог сервиса и проверку, так что заранее уточните правила у провайдера.
Отладка и сопровождение при обновлениях типовой
Отладка кода
Модули расширения отлаживаются так же, как модули основной конфигурации. Поставьте точку останова в процедуре расширения в Конфигураторе, запустите отладку (F5) и выполните действие в программе. Отладчик остановится в вашем коде, и через ПродолжитьВызов() можно шагнуть в типовую процедуру.
Если точка останова не срабатывает, проверьте три вещи:
- Расширение активно, и конфигурация базы данных обновлена после последних правок.
- Аннотация указывает точное имя процедуры типовой. Регистр букв в имени не важен, но опечатка не даст перехвату сработать.
- Код выполняется в том контексте, где стоит точка: на клиенте или на сервере.
Для командной разработки удобнее 1С:EDT: расширение там ведётся как отдельный проект, его легко хранить в Git и сравнивать версии.
Что делать после обновления типовой
Порядок, который избавляет от сюрпризов:
- Обновите типовую на копии базы.
- Запустите программу. Если расширение не применилось, платформа покажет сообщение о том, что оно не может быть применено, и перечислит причины: изменённые свойства заимствованных объектов или процедур с контролем.
- В Конфигураторе откройте расширение и выполните проверку. Сверьте свои процедуры
&ИзменениеИКонтрольс новым кодом типовой. Конфигуратор умеет показать отличия заимствованной процедуры от текущей версии. - Исправьте расхождения, обновите конфигурацию базы данных, проверьте работу.
- Повторите обновление на рабочей базе в нерабочее время.
Обновление конфигурации рабочей базы требует, чтобы в ней не было пользователей. Сеансы, открытые во время обновления, придётся завершить — заранее предупредите сотрудников.
Хорошая практика — вести в комментарии к каждой процедуре расширения автора, дату и причину доработки. Через год по такому комментарию сразу видно, зачем нужна строка и можно ли её убрать, когда фирма 1С исправит ошибку в типовой.
Частые вопросы
Можно ли подключить к одной базе несколько расширений?
&Вместо, поэтому такие пересечения лучше избегать.Слетит ли расширение при обновлении типовой?
Нужен ли Конфигуратор, чтобы установить готовое расширение?
.cfe в разделе Администрирование → Печатные формы, отчеты и обработки → Расширения.