Границы расширений 1С 8.3: какие объекты доработать, не снимая базу с поддержки
Содержание
В расширение конфигурации 1С можно добавить почти любой новый объект: справочник, документ, регистр, отчёт, обработку, общий модуль, роль, подписку на событие, регламентное задание, HTTP-сервис. В объекты основной конфигурации можно добавлять свои реквизиты и табличные части, элементы форм, команды, макеты и код в обработчики. Нельзя удалить или переделать то, что уже есть в типовой: сменить длину реквизита, убрать объект, поменять структуру его таблиц.
Механизм работает с платформы 8.3.6 и только для управляемого приложения. Главный плюс — типовая остаётся на поддержке и обновляется без ручного сравнения-объединения. Дальше — по каждому виду доработок: что работает, где граница и когда хватит внешней обработки.
Как устроено расширение: свои и заимствованные объекты
В дереве расширения живут объекты двух видов.
- 🆕 Собственные — созданы в расширении с нуля. С ними можно делать всё то же, что в обычной конфигурации.
- 🔗 Заимствованные — копии-ссылки на объекты основной конфигурации. Их добавляют командой
Добавить в расширениеиз контекстного меню объекта в дереве основной конфигурации. Заимствованный объект нельзя переделать, но к нему можно «пристроить» своё.
У каждого расширения есть префикс имён (свойство расширения). Его добавляют к именам собственных объектов и процедур, например Расш1_СогласованиеЗаявок. Так новые объекты не столкнутся с объектами, которые фирма 1С добавит в следующих релизах.
Ещё три свойства влияют на то, что расширение сможет сделать:
| Свойство | На что влияет |
|---|---|
| Назначение (Исправление, Адаптация, Дополнение) | Порядок применения, если расширений несколько |
| Безопасный режим | Ограничивает доступ к файлам, COM, внешним компонентам |
| Защита от опасных действий | Предупреждает пользователя перед запуском потенциально опасного кода |
Расширение, загруженное пользователем в режиме «Предприятие», по умолчанию работает в безопасном режиме. Если код пишет файлы на диск или вызывает COM-объекты, безопасный режим придётся отключать осознанно — это решение администратора, а не программиста.
У заимствованного объекта есть контролируемые свойства. Расширение запоминает их значения на момент заимствования. Если после обновления типовой они изменились, расширение перестанет применяться, и платформа сообщит, какое свойство разошлось.
Новые реквизиты, табличные части и ресурсы
Самая частая задача — хранить данные, которых нет в типовой. Здесь два пути.
1. Свой реквизит в заимствованном объекте. Берёте в расширение справочник Контрагенты или документ РеализацияТоваровУслуг и добавляете ему реквизит Расш1_Куратор или табличную часть. Платформа создаёт под эти данные отдельные поля в базе, привязанные к объекту. Для пользователя это выглядит как обычное поле документа.
Что получается сделать:
- ✅ добавить реквизит любого типа, включая ссылку на собственный справочник расширения;
- ✅ добавить свою табличную часть;
- ✅ добавить реквизит в существующую табличную часть заимствованного объекта;
- ✅ участвовать новым реквизитом в отборах, отчётах на СКД и запросах.
2. Собственные объекты для данных. Если сведения не принадлежат одному документу, честнее завести свой регистр сведений
или накопления. Например, регистр сведений Расш1_ЛимитыЗакупок с измерением «Подразделение» и ресурсом «Сумма». У собственного регистра вы сами задаёте измерения, ресурсы и реквизиты.
Данные собственных реквизитов и объектов принадлежат расширению. Удалите расширение — удалятся и эти данные. Перед удалением или пересозданием расширения сделайте резервную копию базы.
Чего сделать нельзя: изменить существующий реквизит типовой. Увеличить длину наименования , число знаков у суммы или разрядность номера расширение не позволяет — это меняет структуру основной таблицы.
После добавления реквизитов расширение меняет структуру данных. В Конфигураторе загрузка .cfe и команда Обновить конфигурацию базы данных — два отдельных шага. Для обновления структуры нужен монопольный доступ к базе, поэтому такие расширения подключают вне рабочего времени.
Формы и интерфейс пользователя
Форму объекта основной конфигурации заимствуют отдельно: в дереве расширения раскройте заимствованный объект, найдите форму и добавьте её в расширение. Дальше открывается редактор, похожий на обычный.
В заимствованной форме можно:
- ➕ добавить новые элементы: поле нового реквизита, группу, кнопку, декорацию;
- ➕ добавить реквизиты формы и команды формы;
- ✏️ поменять свойства существующих элементов: заголовок, видимость, доступность, подсказку, порядок;
- 🧩 повесить свой обработчик на событие формы или элемента.
Удалить элемент типовой формы нельзя. Рабочий приём — поставить ему Видимость = Ложь в расширении. Поле пропадает с экрана, а при обновлении типовой ничего не ломается.
Кроме форм, через расширение меняют интерфейс целиком:
- новые подсистемы — разделы на панели разделов;
- общие команды и команды объектов — в командной панели и меню «Создать на основании»;
- общие формы, например свой рабочий стол или помощник;
- общие картинки для кнопок.
Если нужно только переставить поля или скрыть лишнее для себя, расширение не нужно. Пользователь делает это сам через настройку формы. Расширение оправдано, когда изменение нужно всем и должно пережить сброс настроек.
Обычные формы (режим обычного приложения) расширения не поддерживают. Если в базе остались старые обычные формы, доработать их расширением не выйдет.
Отчёты, обработки и печатные формы
Здесь расширение даёт больше всего свободы, потому что почти всё — собственные объекты.
Новые отчёты. Создаёте отчёт с основной схемой компоновки данных. В запросе схемы доступны таблицы основной конфигурации и расширения. Отчёт появится в разделе, если включить его в подсистему.
Новые обработки. Групповое заполнение реквизитов, загрузка из Excel , помощник по закрытию — всё это собственные обработки расширения.
Изменение типовых отчётов. Заимствуете отчёт и его схему компоновки. В схеме можно добавить поля, наборы данных и варианты. На практике чаще делают свой вариант отчёта, чтобы не зависеть от правок фирмы 1С в типовой схеме.
Печатные формы. Добавляете макет в заимствованный документ или общий макет. Подключение к кнопке «Печать» в типовых конфигурациях на БСП делают через переопределяемые процедуры модуля менеджера документа. Конкретная процедура зависит от версии БСП: найдите в модуле менеджера процедуру со словом «Печать» и комментарием о том, что её можно дополнять.
Код: подписки на события, модули, бизнес-процессы
Ключевой приём разработчика — аннотации методов. Заимствуете модуль объекта, менеджера, формы или общий модуль и пишете процедуру с аннотацией:
| Аннотация | Что делает | Когда применять |
|---|---|---|
&Перед("Имя") | Выполняется до типового метода | Проверки, подготовка данных |
&После("Имя") | Выполняется после типового метода | Дозаполнение, свои движения |
&Вместо("Имя") | Заменяет метод; типовой вызывается через ПродолжитьВызов() | Условная подмена логики |
&ИзменениеИКонтроль("Имя") | Копия метода с правками #Вставка / #Удаление | Точечная правка внутри метода |
Пример: запрет записи документа без комментария. Процедура в заимствованном модуле объекта документа:
&Перед("ПередЗаписью")
Процедура Расш1_ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Если Не ЗначениеЗаполнено(Комментарий) Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Заполните комментарий перед записью документа.";
Сообщение.Поле = "Комментарий";
Сообщение.УстановитьДанные(ЭтотОбъект);
Сообщение.Сообщить();
Отказ = Истина;
КонецЕсли;
КонецПроцедуры
&ИзменениеИКонтроль хорош тем, что при обновлении типовой платформа сверит текст метода. Если фирма 1С поменяла этот метод, расширение сообщит о расхождении, и правка не потеряется молча. У &Вместо такой проверки нет — после обновления вы рискуете заменить уже другой код.
Подписки на события. Создаются в расширении как собственные объекты. Источником можно выбрать заимствованные документы и справочники, обработчик — процедура собственного общего модуля. Удобно, когда одна и та же реакция нужна для десятка документов: не надо заимствовать модуль каждого.
Регламентные задания. Собственное задание с методом из своего общего модуля. Расписание задаётся в Конфигураторе или в режиме «Предприятие» через обработку регламентных заданий.
Бизнес-процессы и задачи. Свой бизнес-процесс со своей картой маршрута и своими задачами создаётся в расширении целиком. С типовыми процессами работают аккуратнее: через их модули и формы.
Роли. Права на собственные объекты расширения выдают в собственных ролях расширения. Затем роль добавляют в профиль групп доступа — в типовых на БСП это Администрирование → Пользователи и права → Профили групп доступа.
Где граница: ограничения расширений
Сводка того, что расширением не делается:
- 🚫 удалить объект, реквизит или табличную часть основной конфигурации;
- 🚫 изменить тип, длину, точность существующего реквизита типовой;
- 🚫 изменить свойства основной конфигурации в целом;
- 🚫 доработать обычные (неуправляемые) формы;
- 🚫 удалить элемент типовой формы — только скрыть;
- 🚫 работать без проверки после обновления: если контролируемые свойства или код метода с
&ИзменениеИКонтрольразошлись, расширение не применится.
Есть и ограничения не платформы, а здравого смысла:
| Ситуация | Почему расширение — плохая идея |
|---|---|
| Нужно переписать половину проведения документа | Каждое обновление будет ломать &Вместо |
| Нужна новая структура типового регистра | Измерения типового регистра расширением не меняют |
| Несколько расширений правят один метод | Порядок выполнения сложно контролировать |
| Код требует файлы и COM на сервере | Придётся снять безопасный режим, это риск |
Проверить применимость расширения после обновления можно в Конфигураторе: откройте Конфигурация → Расширения конфигурации, выберите расширение и запустите проверку возможности применения из меню действий списка. Если расширение не применяется, база всё равно запустится, но без его доработок — пользователь увидит предупреждение.
Расширение или внешняя обработка: что выбрать
Внешняя обработка (.epf) и внешний отчёт (.erf) — отдельный файл, который подключают в базу без изменения конфигурации. В типовых на БСП — через Администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки. Там же рядом раздел Расширения для файлов .cfe.
| Критерий | Расширение (.cfe) | Внешняя обработка (.epf) |
|---|---|---|
| Новые данные (реквизиты, регистры) | Да | Нет |
| Правка типового кода и форм | Да, через аннотации и заимствование | Нет |
| Печатная форма к документу | Да | Да, через БСП |
| Заполнение табличной части | Да | Да, через БСП |
| Свой отчёт | Да | Да |
| Подписки и регламентные задания | Да | Только как регламентная доп. обработка БСП |
| Обновление структуры базы | Нужно, если есть свои данные | Не нужно |
| Работает в конфигурации без БСП | Да | Только через «Файл → Открыть» |
Логика выбора простая. Если доработка только читает данные и что-то печатает или считает — хватит внешней обработки. Если нужно хранить новые сведения или вмешаться в поведение типового документа — нужно расширение.
Частые ошибки при разработке расширений
- ❌ Нет префикса у процедур. Процедура
ПередЗаписьюбез префикса в заимствованном модуле конфликтует с типовой. Называйте свои методы с префиксом расширения. - ❌ Всё через
&Вместо. Удобно сегодня, опасно после обновления: типовой метод мог измениться, а вы его полностью перекрываете без предупреждения. - ❌ Заимствовали «на всякий случай». Каждый заимствованный объект — лишняя точка проверки при обновлении. Берите только то, что правите.
- ❌ Удалили расширение, чтобы «переустановить». Данные собственных реквизитов пропадут. Обновляйте расширение загрузкой нового файла поверх старого.
- ❌ Забыли про роли. Пользователь не видит новый отчёт, потому что права на собственные объекты расширения не выданы.
- ❌ Проверили только под администратором. Под обычным пользователем срабатывает безопасный режим и ограничения прав — тестируйте под реальным профилем.