Как дорабатывать типовую 1С расширением и не снимать её с поддержки

· 9 мин

Содержание

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

Использовать расширения стоит почти всегда, когда нужно доработать типовую 1С:Бухгалтерию, ЗУП или УТ. Обновление типовой занимает минуты, а не дни сравнения и объединения. Расширение создают в Конфигураторе, сохраняют в файл .cfe и подключают к любой базе с той же конфигурацией.

Зачем нужны расширения и чем они спасают типовую

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

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

Типичные задачи, которые закрывают расширением:

  • 🖨️ своя печатная форма или изменённый макет типовой формы;
  • 📝 новый реквизит в справочнике или документе;
  • ⚙️ дополнительная проверка при записи или проведении документа;
  • 📊 собственный отчёт или обработка, встроенная в интерфейс;
  • 🔧 исправление ошибки типовой до выхода официального релиза;
  • 🔗 обмен с внешней системой: сайтом, складской программой, банком.

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

Как устроено расширение: заимствование и аннотации

Расширение — это мини-конфигурация со своим деревом метаданных. В неё можно добавить два вида объектов.

Собственные объекты. Новые справочники, документы, отчёты, обработки, общие модули, роли. Они существуют только в расширении. Платформа требует для их имён префикс, который задаётся в свойствах расширения, например Расш1_. Так новые объекты не пересекаются с объектами типовой.

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

Перехват процедур аннотациями

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

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

Пример: дополнительная проверка при записи документа. Процедура в расширении выполнится раньше типовой ПередЗаписью.

&Перед("ПередЗаписью")
Процедура Расш1_ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)

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

КонецПроцедуры

ОбщегоНазначения.СообщитьПользователю — процедура Библиотеки стандартных подсистем, она есть в типовых БП, ЗУП и УТ. Параметр Отказ она устанавливает сама, и запись не выполнится.

С &ИзменениеИКонтроль код типовой процедуры копируется в расширение целиком, а правки обрамляют инструкциями препроцессора:

&ИзменениеИКонтроль("ЗаполнитьПоОснованию")
Процедура Расш1_ЗаполнитьПоОснованию(Основание)
	// ...строки типовой без изменений...
	#Вставка
	Комментарий = "Создан на основании " + Строка(Основание);
	#КонецВставки
	#Удаление
	СтараяСтрокаТиповой();
	#КонецУдаления
	// ...строки типовой без изменений...
КонецПроцедуры

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

Не используйте &Вместо без вызова ПродолжитьВызов() для крупных процедур проведения: при обновлении типовой ваша копия логики устареет, а платформа этого не заметит.

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

Шаг 1. Подготовка

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

Шаг 2. Создание

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

Шаг 3. Доработка

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

Шаг 4. Сохранение в файл

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

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

Подключение готового файла .cfe

Готовое расширение от программиста или поставщика загружают двумя способами.

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

В пользовательском режиме. В типовых конфигурациях на Библиотеке стандартных подсистем есть список расширений: Администрирование → Печатные формы, отчеты и обработки → Расширения. Нажмите «Добавить из файла», выберите .cfe и подтвердите. Конфигуратор не нужен. Изменения вступят в силу после перезапуска программы.

В свойствах загруженного расширения есть флажки, которые стоит проверить:

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

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

Перед подключением чужого .cfe к рабочей базе
Выполнено: 0 / 5

Что расширение умеет, а где упирается в ограничения

Возможности расширений росли от версии к версии платформы. На актуальных версиях 8.3 картина такая.

Можно:

  • 🧩 добавлять собственные справочники, документы, регистры, перечисления, отчёты, обработки;
  • ➕ добавлять реквизиты и табличные части в заимствованные справочники и документы;
  • 🖼️ менять формы: добавлять поля, кнопки, команды, менять обработчики событий;
  • 📄 заменять макеты печатных форм;
  • 👤 добавлять роли и давать права на свои и заимствованные объекты;
  • 🧠 перехватывать процедуры модулей объектов, менеджеров, форм и общих модулей.

Нельзя или проблематично:

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

Отдельная тонкость — данные. Если расширение добавляет реквизиты или новые объекты, оно хранит данные в базе. Удалите такое расширение — пропадут и введённые в его реквизиты значения. Перед удалением выгрузите нужные сведения или перенесите их в типовые поля.

Платформа контролирует свойства заимствованных объектов. Если в типовой изменился тип реквизита, на который опирается ваш код, при проверке расширения появится сообщение о несоответствии. Это не сбой, а повод сверить доработку с новым релизом.

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

Расширение — не единственный способ доработки. Выбор зависит от задачи.

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

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

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

Отладка и сопровождение при обновлениях типовой

Отладка кода

Модули расширения отлаживаются так же, как модули основной конфигурации. Поставьте точку останова в процедуре расширения в Конфигураторе, запустите отладку (F5) и выполните действие в программе. Отладчик остановится в вашем коде, и через ПродолжитьВызов() можно шагнуть в типовую процедуру.

Если точка останова не срабатывает, проверьте три вещи:

  1. Расширение активно, и конфигурация базы данных обновлена после последних правок.
  2. Аннотация указывает точное имя процедуры типовой. Регистр букв в имени не важен, но опечатка не даст перехвату сработать.
  3. Код выполняется в том контексте, где стоит точка: на клиенте или на сервере.

Для командной разработки удобнее 1С:EDT: расширение там ведётся как отдельный проект, его легко хранить в Git и сравнивать версии.

Что делать после обновления типовой

Порядок, который избавляет от сюрпризов:

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

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

Хорошая практика — вести в комментарии к каждой процедуре расширения автора, дату и причину доработки. Через год по такому комментарию сразу видно, зачем нужна строка и можно ли её убрать, когда фирма 1С исправит ошибку в типовой.

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

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