Границы расширений 1С 8.3: какие объекты доработать, не снимая базу с поддержки

· 9 мин

Содержание

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

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

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

В дереве расширения живут объекты двух видов.

  • 🆕 Собственные — созданы в расширении с нуля. С ними можно делать всё то же, что в обычной конфигурации.
  • 🔗 Заимствованные — копии-ссылки на объекты основной конфигурации. Их добавляют командой Добавить в расширение из контекстного меню объекта в дереве основной конфигурации. Заимствованный объект нельзя переделать, но к нему можно «пристроить» своё.

У каждого расширения есть префикс имён (свойство расширения). Его добавляют к именам собственных объектов и процедур, например Расш1_СогласованиеЗаявок. Так новые объекты не столкнутся с объектами, которые фирма 1С добавит в следующих релизах.

Ещё три свойства влияют на то, что расширение сможет сделать:

СвойствоНа что влияет
Назначение (Исправление, Адаптация, Дополнение)Порядок применения, если расширений несколько
Безопасный режимОграничивает доступ к файлам, COM, внешним компонентам
Защита от опасных действийПредупреждает пользователя перед запуском потенциально опасного кода

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

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

Новые реквизиты, табличные части и ресурсы

Самая частая задача — хранить данные, которых нет в типовой. Здесь два пути.

1. Свой реквизит в заимствованном объекте. Берёте в расширение справочник Контрагенты или документ РеализацияТоваровУслуг и добавляете ему реквизит Расш1_Куратор или табличную часть. Платформа создаёт под эти данные отдельные поля в базе, привязанные к объекту. Для пользователя это выглядит как обычное поле документа.

Что получается сделать:

  • ✅ добавить реквизит любого типа, включая ссылку на собственный справочник расширения;
  • ✅ добавить свою табличную часть;
  • ✅ добавить реквизит в существующую табличную часть заимствованного объекта;
  • ✅ участвовать новым реквизитом в отборах, отчётах на СКД и запросах.

2. Собственные объекты для данных. Если сведения не принадлежат одному документу, честнее завести свой регистр сведений или накопления. Например, регистр сведений Расш1_ЛимитыЗакупок с измерением «Подразделение» и ресурсом «Сумма». У собственного регистра вы сами задаёте измерения, ресурсы и реквизиты.

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

Чего сделать нельзя: изменить существующий реквизит типовой. Увеличить длину наименования , число знаков у суммы или разрядность номера расширение не позволяет — это меняет структуру основной таблицы.

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

Формы и интерфейс пользователя

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

В заимствованной форме можно:

  • ➕ добавить новые элементы: поле нового реквизита, группу, кнопку, декорацию;
  • ➕ добавить реквизиты формы и команды формы;
  • ✏️ поменять свойства существующих элементов: заголовок, видимость, доступность, подсказку, порядок;
  • 🧩 повесить свой обработчик на событие формы или элемента.

Удалить элемент типовой формы нельзя. Рабочий приём — поставить ему Видимость = Ложь в расширении. Поле пропадает с экрана, а при обновлении типовой ничего не ломается.

Кроме форм, через расширение меняют интерфейс целиком:

  • новые подсистемы — разделы на панели разделов;
  • общие команды и команды объектов — в командной панели и меню «Создать на основании»;
  • общие формы, например свой рабочий стол или помощник;
  • общие картинки для кнопок.

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

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

Отчёты, обработки и печатные формы

Здесь расширение даёт больше всего свободы, потому что почти всё — собственные объекты.

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

Новые обработки. Групповое заполнение реквизитов, загрузка из Excel , помощник по закрытию — всё это собственные обработки расширения.

Изменение типовых отчётов. Заимствуете отчёт и его схему компоновки. В схеме можно добавить поля, наборы данных и варианты. На практике чаще делают свой вариант отчёта, чтобы не зависеть от правок фирмы 1С в типовой схеме.

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

Код: подписки на события, модули, бизнес-процессы

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

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

Пример: запрет записи документа без комментария. Процедура в заимствованном модуле объекта документа:

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

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

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

Регламентные задания. Собственное задание с методом из своего общего модуля. Расписание задаётся в Конфигураторе или в режиме «Предприятие» через обработку регламентных заданий.

Бизнес-процессы и задачи. Свой бизнес-процесс со своей картой маршрута и своими задачами создаётся в расширении целиком. С типовыми процессами работают аккуратнее: через их модули и формы.

Роли. Права на собственные объекты расширения выдают в собственных ролях расширения. Затем роль добавляют в профиль групп доступа — в типовых на БСП это Администрирование → Пользователи и права → Профили групп доступа.

Где граница: ограничения расширений

Сводка того, что расширением не делается:

  • 🚫 удалить объект, реквизит или табличную часть основной конфигурации;
  • 🚫 изменить тип, длину, точность существующего реквизита типовой;
  • 🚫 изменить свойства основной конфигурации в целом;
  • 🚫 доработать обычные (неуправляемые) формы;
  • 🚫 удалить элемент типовой формы — только скрыть;
  • 🚫 работать без проверки после обновления: если контролируемые свойства или код метода с &ИзменениеИКонтроль разошлись, расширение не применится.

Есть и ограничения не платформы, а здравого смысла:

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

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

Расширение или внешняя обработка: что выбрать

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

КритерийРасширение (.cfe)Внешняя обработка (.epf)
Новые данные (реквизиты, регистры)ДаНет
Правка типового кода и формДа, через аннотации и заимствованиеНет
Печатная форма к документуДаДа, через БСП
Заполнение табличной частиДаДа, через БСП
Свой отчётДаДа
Подписки и регламентные заданияДаТолько как регламентная доп. обработка БСП
Обновление структуры базыНужно, если есть свои данныеНе нужно
Работает в конфигурации без БСПДаТолько через «Файл → Открыть»

Логика выбора простая. Если доработка только читает данные и что-то печатает или считает — хватит внешней обработки. Если нужно хранить новые сведения или вмешаться в поведение типового документа — нужно расширение.

Какую доработку вы планируете?

Частые ошибки при разработке расширений

  • ❌ Нет префикса у процедур. Процедура ПередЗаписью без префикса в заимствованном модуле конфликтует с типовой. Называйте свои методы с префиксом расширения.
  • ❌ Всё через &Вместо. Удобно сегодня, опасно после обновления: типовой метод мог измениться, а вы его полностью перекрываете без предупреждения.
  • ❌ Заимствовали «на всякий случай». Каждый заимствованный объект — лишняя точка проверки при обновлении. Берите только то, что правите.
  • ❌ Удалили расширение, чтобы «переустановить». Данные собственных реквизитов пропадут. Обновляйте расширение загрузкой нового файла поверх старого.
  • ❌ Забыли про роли. Пользователь не видит новый отчёт, потому что права на собственные объекты расширения не выданы.
  • ❌ Проверили только под администратором. Под обычным пользователем срабатывает безопасный режим и ограничения прав — тестируйте под реальным профилем.

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

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