К статье
Практический материал

Разработка и Конфигурация · 12 мин

Как написать расширение в 1С: практическое руководство

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

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

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

Ниже разобран полный цикл работы: от создания пустого расширения до проверки совместимости после обновления конфигурации. Материал ориентирован на платформу 8.3 с управляемыми формами и режимом тонкого клиента.

Когда расширение подходит, а когда нужна доработка конфигурации

Прежде чем начинать, важно убедиться, что задача решается средствами расширения. Через расширение можно добавлять новые объекты метаданных (справочники, документы, отчёты, обработки, роли, подсистемы), заимствовать формы и модули типовых объектов и переопределять их обработчики, добавлять собственные реквизиты к заимствованным объектам.

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

Маршрут решения

Как выбрать подход

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

Подготовка: копия базы и создание пустого расширения

Любую разработку начинайте на копии рабочей базы. Даже безопасный механизм расширений при ошибке в коде может нарушить работу пользователей: например, обработчик «ПередЗаписью» с исключением заблокирует проведение документов. Копию создают через выгрузку в dt (Конфигуратор → Администрирование → Выгрузить информационную базу) или средствами СУБД.

Откройте конфигуратор, перейдите в меню «Конфигурация → Расширения конфигурации» и нажмите «Создать». Задайте имя (латиницей, без пробелов — оно станет префиксом объектов), синоним и префикс. В свойствах расширения обратите внимание на назначение: «Дополнение» — для добавления новых объектов, «Исправление» — для адаптации под конкретную версию, «Адаптация» — для исправления под конкретную базу. Для большинства задач выбирают «Дополнение».

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

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

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

Чтобы изменить поведение типового объекта, его нужно заимствовать: в дереве основной конфигурации найдите объект (например, документ «РеализацияТоваровУслуг»), откройте контекстное меню и выберите «Добавить в расширение». После этого объект появится в ветке расширения, и в нём можно заимствовать формы, модули, макеты или добавить собственные реквизиты.

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

Новые объекты (отчёты, обработки, справочники) создаются прямо в ветке расширения обычным образом — через «Добавить» в соответствующем разделе дерева. Они ничем не отличаются от объектов основной конфигурации, кроме того, что при отключении расширения становятся недоступны, а их данные (для объектов с хранением) остаются в базе, но скрываются.

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

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

Аннотация &Вместо полностью замещает типовой обработчик: типовой код не выполнится, если его не вызвать явно. Аннотация &ИзменениеИКонтроль позволяет встроить свой код внутрь типового обработчика через директивы #Вставка и #КонецВставки, сохраняя остальной текст под контролем платформы. Пример обработчика подписки на событие в модуле расширения:

&После("ПередЗаписью")

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

Если Отказ Тогда

Возврат;

КонецЕсли;

Если Не ЗначениеЗаполнено(Источник.Комментарий) Тогда

Источник.Комментарий = "Заполнено расширением";

КонецЕсли;

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

Обратите внимание на детали: имя процедуры должно быть уникальным (принято использовать префикс расширения), сигнатура параметров должна совпадать с типовым обработчиком, а проверка параметра «Отказ» в начале — обязательна, иначе ваш код выполнится даже тогда, когда типовая логика уже отменила операцию.

bsl
&ИзменениеИКонтроль("ОбработкаПроведения")
Процедура Расш1_ОбработкаПроведения(Отказ, Режим)
	#Вставка
	// собственный код до типового
	#КонецВставки
КонецПроцедуры

Добавление печатной формы и кнопки на форму

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

Если конфигурация использует Библиотеку стандартных подсистем (БСП), печатные формы правильнее регистрировать через механизм дополнительных отчётов и обработок — тогда они появятся в стандартном меню «Печать» без изменения форм. Расширение в этом случае содержит обработку с экспортной функцией СведенияОВнешнейОбработке().

При работе с заимствованной формой добавляйте элементы программно или в редакторе формы расширения, но не меняйте свойства типовых элементов без необходимости: каждое переопределённое свойство — точка возможного конфликта при обновлении.

Подключение, отладка и проверка применимости

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

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

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

Контрольные точки

Как проверить результат

Статус расширения в списке
Норма

Флажок установлен, в колонке применимости нет ошибок

Тревожный признак

Расширение отключено или помечено как неприменимое

Работа обработчиков
Норма

Код выполняется, точка останова срабатывает

Тревожный признак

Точка останова игнорируется — устарела версия в базе

Поведение после обновления типовой конфигурации
Норма

Проверка применимости проходит без сообщений

Тревожный признак

Конфликты контролируемых методов — требуется правка аннотаций

Права пользователей
Норма

Новые объекты доступны под нужными ролями

Тревожный признак

Объект не виден — не добавлены роли расширения

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

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

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

Типичные ошибки
01
Использование &Вместо там, где достаточно &Перед или &После — при обновлении типовой код не выполнится и логика нарушится
02
Заимствование формы ради одной кнопки без попытки добавить её программно — лишняя точка конфликта при обновлениях
03
Отсутствие проверки параметра Отказ в обработчиках записи и проведения — код срабатывает при уже отменённой операции
04
Разработка и тестирование сразу в рабочей базе — ошибка в обработчике блокирует работу пользователей
05
Добавление ролей расширения без назначения их пользователям — новые объекты недоступны в режиме предприятия

Безопасность и распространение расширения

В файловых и клиент-серверных базах расширения могут работать в безопасном режиме: тогда запрещены операции с файловой системой, COM-объектами и внешними компонентами. Если расширению нужны такие возможности, безопасный режим отключают в свойствах расширения, но делать это следует осознанно — расширение получает полный доступ к системе под правами сервера 1С.

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

Итог

Что важно запомнить

Расширение создаётся в конфигураторе, не снимает конфигурацию с поддержки и решает большинство задач доработки. Используйте минимальные аннотации (&Перед, &После вместо &Вместо), заимствуйте только нужные объекты, проверяйте применимость после каждого обновления и никогда не тестируйте в рабочей базе.

Частые вопросы о расширениях 1С

Можно ли через расширение изменить типовой отчёт?

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

Что происходит с данными при отключении расширения?

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

Можно ли подключить несколько расширений к одной базе?

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

Чем расширение отличается от внешней обработки?

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

Почему расширение не применяется после обновления конфигурации?

Чаще всего поставщик изменил контролируемый объект: переименовал процедуру, замещённую через &Вместо или &ИзменениеИКонтроль, или изменил состав параметров обработчика. Откройте проверку применимости, исправьте конфликтующие методы под новый типовой код и обновите конфигурацию базы данных.

Нужны ли отдельные роли для объектов расширения?

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