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

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

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

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

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

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

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

Когда расширение подходит, а когда нет

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

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

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

Как выбрать действие

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

Подготовка: что нужно перед созданием расширения

Для работы потребуется конфигуратор 1С:Предприятия версии платформы не ниже 8.3.6 — именно с этого релиза появился механизм расширений, однако практически применимые возможности (изменение форм, модулей, ролей) появились в более поздних версиях. Чем новее платформа, тем шире список расширяемых объектов. Проверьте версию платформы на сервере и у клиентов: расширение, созданное на новой платформе, может не подключиться на старой.

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

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

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

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

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

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

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

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

Изменение модулей

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

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

Изменение форм

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

Добавление реквизитов

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

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

&После("ПриЗаписи")
Процедура Расш1_ПриЗаписи(Отказ)
	// Дополнительные действия после типовой записи
КонецПроцедуры

Подключение, безопасный режим и права

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

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

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

Обновление конфигурации и контроль совместимости

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

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

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

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

Расширение подключено к базе
Норма

Видно в списке расширений, статус активен, контроль применимости пройден

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

Расширение отключено или в журнале регистрации ошибки применимости

Доработанный функционал
Норма

Новые элементы, печатные формы и проверки работают под обычным пользователем

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

Функции доступны только администратору — не настроены роли

Поведение после обновления релиза
Норма

Контроль «&ИзменениеИКонтроль» не выявил расхождений, тесты пройдены

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

Сообщения об изменении типовых процедур, расширение отключено

Целостность данных
Норма

Документы проводятся, движения по регистрам корректны

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

Ошибки при проведении, дубли или пропуски движений

Типичные ошибки и ограничения механизма

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

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

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

Перенос расширения между базами

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

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

Итог

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

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

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

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

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

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

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

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

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

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

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

Можно ли отладить код расширения?

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

Что будет с данными добавленных реквизитов, если удалить расширение?

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