Доработка типовой 1С без снятия с поддержки: работа с расширениями конфигурации

· 9 мин

Содержание

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

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

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

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

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

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

  • 🧩 добавить реквизит в справочник или документ и вывести его на форму;
  • 🖨️ подключить свою печатную форму к типовому документу;
  • 📊 добавить отчёт или обработку и разместить их в нужном разделе;
  • ✅ встроить проверку перед записью или проведением;
  • 🔔 повесить подписку на событие, например на запись любого документа;
  • 🗂️ создать свой справочник, документ или регистр сведений .

Чего расширение не умеет: удалить объект основной конфигурации, переименовать его или поменять структуру типового регистра (измерения, ресурсы). Если задача требует именно этого, остаётся классическая доработка.

СпособКогда подходитЧто с обновлениями
Внешняя обработка или печатная форма (.epf, .erf)Одна печатная форма, один отчёт, заполнение табличной частиНе мешает обновлению
Расширение (.cfe)Формы, проверки, новые реквизиты, подписки, свои объектыОбычно переживает обновление, иногда требует правки
Правка основной конфигурацииИзменение структуры типовых объектовКаждое обновление — ручное объединение

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

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

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

Из пользовательского режима

Это самый простой путь, программист не нужен. Работает в типовых конфигурациях на БСП: Бухгалтерии 3.0, ЗУП 3.1, УТ 11 и других.

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

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

Подключайте расширения только из надёжного источника. Расширение без безопасного режима выполняет любой код с правами сеанса. Сначала проверьте его на копии базы.

Через Конфигуратор

Этот путь нужен разработчику и администратору, а также базам без БСП.

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

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

Из командной строки

Удобно, когда одно расширение надо раскатать на десяток баз. Команды пакетного режима Конфигуратора принимают ключ -Extension:

"C:\Program Files\1cv8\<версия>\bin\1cv8.exe" DESIGNER /F "D:\Bases\Buh" /N "Администратор" /P "" /LoadCfg "D:\ext\Dorabotka.cfe" -Extension Доработка /Out "D:\ext\load.log"

"C:\Program Files\1cv8\<версия>\bin\1cv8.exe" DESIGNER /F "D:\Bases\Buh" /N "Администратор" /P "" /UpdateDBCfg -Extension Доработка /Out "D:\ext\update.log"

Для серверной базы вместо /F указывают /S "сервер\имя_базы". Ход выполнения смотрите в файле, заданном ключом /Out.

Создаём своё расширение и меняем форму документа

Своё расширение создают в Конфигураторе: Конфигурация → Расширения конфигурации → Добавить. Сразу заполните три свойства.

  • 🏷️ Имя и префикс. Префикс автоматически ставится перед именами новых объектов и процедур, например рсш_. По нему потом видно, где код расширения, а где типовой.
  • 🎯 Назначение. Варианты: исправление, адаптация, дополнение. От назначения зависит порядок применения нескольких расширений к одной базе.
  • 🔧 Режим совместимости. Не выше, чем у основной конфигурации. Иначе расширение не применится.

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

Расширение не может изменить объект, пока не «позаимствует» его. В дереве основной конфигурации щёлкните правой кнопкой по документу, например РеализацияТоваровУслуг, и выберите добавление в расширение. Объект появится в дереве расширения с пометкой заимствованного.

Так же заимствуют форму документа. После этого её можно открыть в редакторе форм расширения и:

  1. Добавить новый реквизит в сам документ (в заимствованном объекте).
  2. Перетащить его на форму в нужную группу.
  3. Скрыть или переставить типовые элементы.
  4. Назначить свой обработчик события формы и выбрать порядок вызова: перед типовым, после него или вместо.

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

Перехват кода: аннотации

Код типового модуля меняют через процедуры расширения с аннотациями:

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

Пример проверки в модуле объекта заимствованного документа реализации в Бухгалтерии 3.0: проведение без договора запрещено.

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

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

Для точечных правок внутри длинной типовой процедуры берите &ИзменениеИКонтроль. Свои строки оборачивают в #Вставка … #КонецВставки, ненужные — в #Удаление … #КонецУдаления. Если после обновления фирма 1С поменяет эту процедуру, платформа сообщит, что расширение надо пересмотреть. С &Вместо такая проблема пройдёт незаметно.

Права на новые объекты

Частая причина «поле есть, а пользователь его не видит» — права. Новый справочник, отчёт или реквизит расширения недоступен никому, пока на него не выданы права.

  • 🔑 Для своих объектов создайте в расширении роль и включите её в нужные группы доступа или профили пользователей.
  • 🔑 Для полного доступа администратора позаимствуйте типовую роль полных прав и отметьте в ней новые объекты.
  • 🔑 После изменения ролей перезапустите сеанс пользователя: права перечитываются при входе.

Свои отчёты и печатные формы в расширении

Новый отчёт создаётся в расширении так же, как в обычной конфигурации: схема компоновки данных, варианты, форма. Чтобы он появился в меню, позаимствуйте нужную подсистему, например «Продажи», и включите отчёт в её состав. Пользователи увидят его в разделе рядом с типовыми.

С печатными формами в типовых конфигурациях на БСП есть три пути, от простого к сложному.

  1. Поправить макет типовой формы. Если нужно сменить шапку, шрифт или добавить подпись, расширение не требуется. Откройте Администрирование → Печатные формы, отчеты и обработки → Макеты печатных форм, найдите макет и отредактируйте его. Изменённый макет хранится в базе и переживает обновление.
  2. Внешняя печатная форма. Файл .epf подключается через Дополнительные отчеты и обработки в том же разделе.
  3. Печатная форма в расширении. Позаимствуйте модуль менеджера документа. В процедуре добавления команд печати (в БСП это ДобавитьКомандыПечати) допишите свою команду через &После, а в процедуре Печать сформируйте табличный документ по своему макету. Макет храните в самом расширении.

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

Подписки на события и автоматизация процессов

Подписка на событие позволяет выполнить код при записи, проведении или удалении объектов сразу многих типов. Например, записывать в регистр сведений, кто и когда изменил любой документ продажи, или запрещать изменение документов закрытого периода по своему правилу.

Как сделать в расширении:

  1. Добавьте в расширение новый объект «Подписка на событие».
  2. В свойстве «Источник» отметьте нужные документы или справочники.
  3. Выберите событие: ПередЗаписью, ПриЗаписи, ОбработкаПроведения или другое.
  4. Укажите обработчик — экспортную процедуру общего модуля расширения.

Общий модуль должен исполняться на сервере. Параметры процедуры-обработчика зависят от события: для ПередЗаписью документа это Источник, Отказ, РежимЗаписи, РежимПроведения.

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

Код подписки срабатывает при каждой записи указанных объектов, в том числе при групповом перепроведении за месяц. Тяжёлый запрос внутри обработчика заметно замедлит закрытие периода. Проверяйте скорость на копии с реальным объёмом данных.

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

Основное преимущество расширений проявляется при обновлении. Но «переживает» оно его не автоматически. Проблемы возникают, когда в новом релизе:

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

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

Перед обновлением базы с расширениями
Выполнено: 0 / 6

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

Несколько правил сопровождения, которые снижают риск поломки при каждом релизе:

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

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

Можно ли подключить несколько расширений к одной базе?
Да. Они применяются по очереди, порядок зависит от назначения: сначала исправления, затем адаптация, затем дополнения. Если два расширения меняют одну процедуру, проверьте, что их правки не конфликтуют.
Пропадут ли данные, если отключить расширение?
Данные новых реквизитов и объектов расширения остаются в базе, пока расширение не удалено. Временное отключение флагом «Активно» их не стирает. Удаление расширения с данными приводит к их потере, поэтому перед удалением сделайте копию.
Нужно ли снимать типовую конфигурацию с поддержки?
Нет, это и есть смысл механизма. Основная конфигурация остаётся на поддержке и обновляется штатным способом.
Работают ли расширения в облачной 1С и при подключении по веб-клиенту?
В веб-клиенте и тонком клиенте расширение работает, так как применяется на стороне базы. В облачных сервисах загрузка своих расширений может быть ограничена правилами провайдера: обычно требуется безопасный режим и проверка расширения.
Чем расширение отличается от внешней обработки?
Внешняя обработка — отдельный инструмент, который пользователь запускает сам. Расширение встраивается в работу типовых объектов: меняет формы, добавляет реквизиты, перехватывает события записи и проведения.