Массовое заимствование документов в расширение конфигурации
Содержание
Все документы добавляются в расширение 1С за один заход: откройте расширение в конфигураторе, в дереве основной конфигурации раскройте ветку «Документы», выделите нужные объекты (Shift или Ctrl) и выберите в контекстном меню «Добавить в расширение». Платформа заимствует их пачкой.
Частое заблуждение — что после этого расширение «видит» документы целиком, со всеми реквизитами, формами и модулями. Нет. Заимствуется только сам объект. Формы, реквизиты, табличные части и модули нужно заимствовать отдельно — и лишь то, что вы реально будете менять.
Подготовка базы и расширения перед заимствованием
Расширения появились в платформе 8.3.6, но массовая работа с документами комфортна на актуальных версиях 8.3.2x. Режим совместимости расширения не должен быть выше, чем у основной конфигурации.
Перед началом проверьте:
- 🗂 Резервная копия. Выгрузите базу в
.dtили сделайте копию средствами СУБД. Заимствование само по себе данные не трогает, но следующее обновление структуры БД — трогает. - 🔒 Режим доступа. Для создания и правки расширения монопольный режим не нужен. Он понадобится, только если расширение добавляет новые объекты и меняет структуру данных.
- 🧩 Существующие расширения. Откройте
Конфигурация → Расширения конфигурациии посмотрите, что уже подключено. Два расширения, перехватывающие один и тот же метод с аннотацией&Вместо, конфликтуют. - 🏷 Префикс имён. В свойствах нового расширения задайте префикс, например
Расш1_. Все собственные объекты и методы расширения будут начинаться с него — так проще отличать их от типовых. - 🎯 Назначение. Свойство «Назначение» выбирайте осознанно: «Исправление», «Адаптация» или «Дополнение». От него зависит порядок применения нескольких расширений.
Решите заранее, зачем вам «все документы». Если цель — одна проверка при записи или одно поле во всех документах, заимствовать 200 объектов может и не понадобиться. Об этом — в разделе про оптимизацию.
Способы добавить документы в расширение 1С
Способ 1. Конфигуратор: множественное выделение
- Откройте конфигуратор и основную конфигурацию (
Конфигурация → Открыть конфигурацию). - Зайдите в
Конфигурация → Расширения конфигурации, выберите расширение и откройте его. Слева появятся два дерева: основная конфигурация и расширение. - В дереве основной конфигурации раскройте ветку «Документы».
- Кликните по первому документу, зажмите Shift и кликните по последнему. Для выборочных документов используйте Ctrl.
- Правой кнопкой по выделению → «Добавить в расширение».
- Проверьте ветку «Документы» в дереве расширения: заимствованные объекты помечены отдельным значком.
- Сохраните расширение (F7 обновляет конфигурацию базы данных, включая расширения).
Если пункт в контекстном меню недоступен, значит, основная конфигурация не открыта или выбран не тот узел (сама ветка «Документы», а не объекты внутри неё).
Способ 2. 1C:EDT
В EDT логика та же. В навигаторе проекта основной конфигурации выделите документы, вызовите контекстное меню и выберите добавление в расширение, затем укажите проект расширения. EDT удобнее, если расширение живёт в Git: каждое заимствование видно в истории как отдельный набор файлов.
Способ 3. Готовый файл .cfe и пакетный режим
Если расширение уже собрано на тестовой базе, его не нужно заимствовать заново на рабочей. Выгрузите .cfe и загрузите в нужную базу. Загрузка и обновление структуры — два отдельных шага:
"C:\Program Files\1cv8\8.3.24.1586\bin\1cv8.exe" DESIGNER /F "D:\Bases\Buh" /N "Администратор" /P "" ^
/LoadCfg "D:\Ext\Doc_ext.cfe" -Extension Расш1 /Out "D:\Ext\load.log"
"C:\Program Files\1cv8\8.3.24.1586\bin\1cv8.exe" DESIGNER /F "D:\Bases\Buh" /N "Администратор" /P "" ^
/UpdateDBCfg -Extension Расш1 /Out "D:\Ext\update.log"
Номер платформы в пути замените на свой.
| Способ | Когда подходит | Риски |
|---|---|---|
| Конфигуратор, Shift/Ctrl | Разовая доработка, одна база | Легко заимствовать лишнее |
| EDT | Командная разработка, Git | Нужна выгрузка проекта в EDT |
Файл .cfe | Перенос на рабочую базу, несколько баз | Расхождение версий основной конфигурации |
Что заимствуется вместе с документом, а что нет
После массового добавления в расширении лежат «пустые оболочки». Чтобы что-то изменить, придётся добрать нужные части.
- 📄 Формы. Раскройте документ в основной конфигурации, правой кнопкой по форме → «Добавить в расширение». В расширение попадает копия формы на момент заимствования.
- 🧾 Модули. Модуль объекта или менеджера в заимствованном документе открывается пустым. Туда пишутся только перехватчики с аннотациями.
- 🔣 Реквизиты. Существующие реквизиты заимствуются по одному, если к ним нужно обратиться в форме расширения. Свои новые реквизиты можно добавить прямо в заимствованный документ — они хранятся в данных расширения.
- 📊 Движения. Регистры, по которым документ делает движения, тоже придётся заимствовать, если вы меняете проведение.
Перехват метода в модуле объекта выглядит так:
&После("ОбработкаПроведения")
Процедура Расш1_ОбработкаПроведения(Отказ, РежимПроведения)
Если Отказ Тогда
Возврат;
КонецЕсли;
// Дополнительная логика после типового проведения
ЗаписьЖурналаРегистрации("Расш1.Проведение",
УровеньЖурналаРегистрации.Информация,
Метаданные(),
Ссылка,
"Документ проведён");
КонецПроцедуры
Аннотации: &Перед, &После, &Вместо и &ИзменениеИКонтроль. Последняя позволяет вставлять и удалять строки внутри типового метода, но ломается при любом изменении этого метода в обновлении.
Документы расширения и правила обмена данными
Обмены — отдельная история. Заимствование документа не включает его новые реквизиты в выгрузку автоматически.
Если документ новый (создан в расширении)
- Заимствуйте план обмена, через который идёт синхронизация.
- В заимствованном плане обмена дополните состав: добавьте туда новый документ.
- Доработайте правила конвертации: для обмена через EnterpriseData — обработчики в модуле менеджера обмена, для правил КД 2 или КД 3 — новые правила для объекта.
Если документ типовой, но с новыми реквизитами
Типовые правила о ваших реквизитах ничего не знают. Варианты:
- 🔁 добавить обработчик выгрузки или загрузки, который переносит значение реквизита;
- 📦 передавать данные через дополнительные свойства (механизм БСП), если обе стороны их поддерживают;
- ✋ не обменивать поле вовсе, если оно нужно только в одной базе.
Обе базы обмена должны иметь одинаковое расширение. Если на приёмнике его нет, новые данные просто не загрузятся, а ошибка всплывёт только в протоколе синхронизации.
Как не раздувать расширение: оптимизация
«Все документы» в расширении — это сотни заимствованных объектов. Каждый из них — точка отказа при обновлении типовой конфигурации. Чем меньше заимствований, тем спокойнее обновление.
Подписка на события вместо перехвата в каждом документе
Если нужно одно действие при записи любого документа, создайте в расширении подписку на событие «ПередЗаписью» и общий модуль с обработчиком. Если список источников подписки в расширении не показывает нужный документ, его сначала заимствуют — но модуль объекта при этом остаётся нетронутым.
Процедура Расш1_ПроверитьКомментарийПередЗаписью(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт
Если РежимЗаписи <> РежимЗаписиДокумента.Проведение Тогда
Возврат;
КонецЕсли;
Если ПустаяСтрока(Источник.Комментарий) Тогда
ОбщегоНазначения.СообщитьПользователю("Заполните комментарий перед проведением.");
Отказ = Истина;
КонецЕсли;
КонецПроцедуры
ОбщегоНазначения.СообщитьПользователю — процедура БСП, она есть в типовых БП, ЗУП, УТ. В самописной конфигурации без БСП используйте Сообщить().
Общий реквизит вместо реквизита в каждом документе
Одно поле во всех документах проще сделать общим реквизитом расширения и указать в его составе нужные документы. Это одна сущность вместо сотни одинаковых реквизитов.
Заимствуйте по признаку, а не всё подряд
| Задача | Что заимствовать |
|---|---|
| Проверка при записи всех документов | Подписка + документы-источники, без форм |
| Новое поле на форме | Документ, форма, новый реквизит |
| Изменение проведения | Документ, модуль объекта, регистры |
| Новая печатная форма | Документ и модуль менеджера; часто достаточно внешней печатной формы |
Практический пример: поле «Проект» в документах продаж
Задача: во всех документах отгрузки и оплаты от покупателя нужно поле «Проект» со ссылкой на справочник проектов.
- Создайте в расширении новый справочник
Расш1_Проекты. - Создайте общий реквизит
Расш1_Проектс типом «СправочникСсылка.Расш1_Проекты». - Заимствуйте нужные документы и укажите их в составе общего реквизита.
- Заимствуйте основные формы этих документов и разместите поле на каждой.
- Обновите конфигурацию базы данных и проверьте запись документа под обычным пользователем.
Итог: одно поле, один справочник, формы — только у тех документов, где поле видно пользователю.
Безопасность расширения и контроль версий
Расширение работает в чужой базе с типовым кодом, поэтому настройки защиты важны.
- 🛡 Безопасный режим. По умолчанию расширение запускается в безопасном режиме: без доступа к файлам, COM, внешним компонентам и привилегированному режиму. Снимайте его, только если код действительно этого требует.
- 🧱 Защита от опасных действий. При подключении расширения в режиме Предприятия пользователь видит предупреждение. Не отключайте его у всех ради удобства.
- 🔍 Контроль свойств. У заимствованного объекта свойства могут быть отмечены как контролируемые. Если обновление типовой изменит такое свойство, расширение перестанет применяться — и вы узнаете об этом сразу, а не по кривым данным.
- 🗄 Хранилище и Git. Расширение подключается к хранилищу отдельно от основной конфигурации. В EDT оно живёт как отдельный проект.
- 🏷 Версия. Заполняйте свойство «Версия» в расширении при каждой выгрузке
.cfe. Иначе через полгода не понять, какая сборка стоит у клиента.
Тестируйте расширение на копии базы после каждого обновления типовой конфигурации и только потом подключайте к рабочей.
Проверка и отладка расширения с документами
Проверка в конфигураторе
- В окне расширения выполните синтаксический контроль модулей.
- Запустите проверку применимости расширения к основной конфигурации — команда есть в меню расширения. Она покажет, какие заимствованные объекты разошлись с типовыми.
- Обновите конфигурацию базы данных (F7).
Проверка в режиме Предприятия
В типовых конфигурациях на БСП список расширений открывается в Администрирование → Печатные формы, отчеты и обработки → Расширения. В любой конфигурации доступна стандартная обработка Все функции → Стандартные → Управление расширениями конфигурации.
Убедитесь, что расширение:
- ✅ активно для этой базы и не отключено для области данных;
- ✅ не помечено как неприменимое;
- ✅ работает под пользователем без полных прав — именно так оно будет жить у бухгалтеров.
Отладка
Отладчик видит модули расширения так же, как типовые. Ставьте точку останова в процедуре с аннотацией и проверяйте, вызывается ли она. Если не вызывается — проверьте имя метода в аннотации: оно должно точно совпадать с именем типовой процедуры.
Ошибки при массовом добавлении документов
- ❌ Заимствовали формы всех документов «про запас». Копия формы фиксируется на момент заимствования. После обновления типовой форма в расширении устаревает, и пользователь видит старую раскладку. Заимствуйте форму только того документа, который меняете.
- ❌ Использовали
&ИзменениеИКонтрольв десятках документов. Каждое обновление превращается в ручную сверку. Где можно, заменяйте на&Переди&После. - ❌ Подключили расширение на рабочей базе без проверки обмена. Узлы с другой версией расширения начинают отклонять данные.
- ❌ Забыли про права. Новые объекты расширения не попадают в типовые роли. Заимствуйте нужную роль и дайте права, иначе пользователь получит «Нарушение прав доступа».