Массовое заимствование документов в расширение конфигурации

· 9 мин

Содержание

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

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

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

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

Перед началом проверьте:

  • 🗂 Резервная копия. Выгрузите базу в .dt или сделайте копию средствами СУБД. Заимствование само по себе данные не трогает, но следующее обновление структуры БД — трогает.
  • 🔒 Режим доступа. Для создания и правки расширения монопольный режим не нужен. Он понадобится, только если расширение добавляет новые объекты и меняет структуру данных.
  • 🧩 Существующие расширения. Откройте Конфигурация → Расширения конфигурации и посмотрите, что уже подключено. Два расширения, перехватывающие один и тот же метод с аннотацией &Вместо, конфликтуют.
  • 🏷 Префикс имён. В свойствах нового расширения задайте префикс, например Расш1_. Все собственные объекты и методы расширения будут начинаться с него — так проще отличать их от типовых.
  • 🎯 Назначение. Свойство «Назначение» выбирайте осознанно: «Исправление», «Адаптация» или «Дополнение». От него зависит порядок применения нескольких расширений.

Решите заранее, зачем вам «все документы». Если цель — одна проверка при записи или одно поле во всех документах, заимствовать 200 объектов может и не понадобиться. Об этом — в разделе про оптимизацию.

Способы добавить документы в расширение 1С

Способ 1. Конфигуратор: множественное выделение

  1. Откройте конфигуратор и основную конфигурацию (Конфигурация → Открыть конфигурацию).
  2. Зайдите в Конфигурация → Расширения конфигурации, выберите расширение и откройте его. Слева появятся два дерева: основная конфигурация и расширение.
  3. В дереве основной конфигурации раскройте ветку «Документы».
  4. Кликните по первому документу, зажмите Shift и кликните по последнему. Для выборочных документов используйте Ctrl.
  5. Правой кнопкой по выделению → «Добавить в расширение».
  6. Проверьте ветку «Документы» в дереве расширения: заимствованные объекты помечены отдельным значком.
  7. Сохраните расширение (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.Проведение",
		УровеньЖурналаРегистрации.Информация,
		Метаданные(),
		Ссылка,
		"Документ проведён");

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

Аннотации: &Перед, &После, &Вместо и &ИзменениеИКонтроль. Последняя позволяет вставлять и удалять строки внутри типового метода, но ломается при любом изменении этого метода в обновлении.

Документы расширения и правила обмена данными

Обмены — отдельная история. Заимствование документа не включает его новые реквизиты в выгрузку автоматически.

Если документ новый (создан в расширении)

  1. Заимствуйте план обмена, через который идёт синхронизация.
  2. В заимствованном плане обмена дополните состав: добавьте туда новый документ.
  3. Доработайте правила конвертации: для обмена через EnterpriseData — обработчики в модуле менеджера обмена, для правил КД 2 или КД 3 — новые правила для объекта.

Если документ типовой, но с новыми реквизитами

Типовые правила о ваших реквизитах ничего не знают. Варианты:

  • 🔁 добавить обработчик выгрузки или загрузки, который переносит значение реквизита;
  • 📦 передавать данные через дополнительные свойства (механизм БСП), если обе стороны их поддерживают;
  • ✋ не обменивать поле вовсе, если оно нужно только в одной базе.

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

Как не раздувать расширение: оптимизация

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

Подписка на события вместо перехвата в каждом документе

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

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

	Если РежимЗаписи <> РежимЗаписиДокумента.Проведение Тогда
		Возврат;
	КонецЕсли;

	Если ПустаяСтрока(Источник.Комментарий) Тогда
		ОбщегоНазначения.СообщитьПользователю("Заполните комментарий перед проведением.");
		Отказ = Истина;
	КонецЕсли;

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

ОбщегоНазначения.СообщитьПользователю — процедура БСП, она есть в типовых БП, ЗУП, УТ. В самописной конфигурации без БСП используйте Сообщить().

Общий реквизит вместо реквизита в каждом документе

Одно поле во всех документах проще сделать общим реквизитом расширения и указать в его составе нужные документы. Это одна сущность вместо сотни одинаковых реквизитов.

Заимствуйте по признаку, а не всё подряд

ЗадачаЧто заимствовать
Проверка при записи всех документовПодписка + документы-источники, без форм
Новое поле на формеДокумент, форма, новый реквизит
Изменение проведенияДокумент, модуль объекта, регистры
Новая печатная формаДокумент и модуль менеджера; часто достаточно внешней печатной формы

Практический пример: поле «Проект» в документах продаж

Задача: во всех документах отгрузки и оплаты от покупателя нужно поле «Проект» со ссылкой на справочник проектов.

  1. Создайте в расширении новый справочник Расш1_Проекты.
  2. Создайте общий реквизит Расш1_Проект с типом «СправочникСсылка.Расш1_Проекты».
  3. Заимствуйте нужные документы и укажите их в составе общего реквизита.
  4. Заимствуйте основные формы этих документов и разместите поле на каждой.
  5. Обновите конфигурацию базы данных и проверьте запись документа под обычным пользователем.

Итог: одно поле, один справочник, формы — только у тех документов, где поле видно пользователю.

Безопасность расширения и контроль версий

Расширение работает в чужой базе с типовым кодом, поэтому настройки защиты важны.

  • 🛡 Безопасный режим. По умолчанию расширение запускается в безопасном режиме: без доступа к файлам, COM, внешним компонентам и привилегированному режиму. Снимайте его, только если код действительно этого требует.
  • 🧱 Защита от опасных действий. При подключении расширения в режиме Предприятия пользователь видит предупреждение. Не отключайте его у всех ради удобства.
  • 🔍 Контроль свойств. У заимствованного объекта свойства могут быть отмечены как контролируемые. Если обновление типовой изменит такое свойство, расширение перестанет применяться — и вы узнаете об этом сразу, а не по кривым данным.
  • 🗄 Хранилище и Git. Расширение подключается к хранилищу отдельно от основной конфигурации. В EDT оно живёт как отдельный проект.
  • 🏷 Версия. Заполняйте свойство «Версия» в расширении при каждой выгрузке .cfe. Иначе через полгода не понять, какая сборка стоит у клиента.

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

Проверка и отладка расширения с документами

Проверка в конфигураторе

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

Проверка в режиме Предприятия

В типовых конфигурациях на БСП список расширений открывается в Администрирование → Печатные формы, отчеты и обработки → Расширения. В любой конфигурации доступна стандартная обработка Все функции → Стандартные → Управление расширениями конфигурации.

Убедитесь, что расширение:

  • ✅ активно для этой базы и не отключено для области данных;
  • ✅ не помечено как неприменимое;
  • ✅ работает под пользователем без полных прав — именно так оно будет жить у бухгалтеров.

Отладка

Отладчик видит модули расширения так же, как типовые. Ставьте точку останова в процедуре с аннотацией и проверяйте, вызывается ли она. Если не вызывается — проверьте имя метода в аннотации: оно должно точно совпадать с именем типовой процедуры.

Диагностика: выберите симптом

Ошибки при массовом добавлении документов

  • ❌ Заимствовали формы всех документов «про запас». Копия формы фиксируется на момент заимствования. После обновления типовой форма в расширении устаревает, и пользователь видит старую раскладку. Заимствуйте форму только того документа, который меняете.
  • ❌ Использовали &ИзменениеИКонтроль в десятках документов. Каждое обновление превращается в ручную сверку. Где можно, заменяйте на &Перед и &После.
  • ❌ Подключили расширение на рабочей базе без проверки обмена. Узлы с другой версией расширения начинают отклонять данные.
  • ❌ Забыли про права. Новые объекты расширения не попадают в типовые роли. Заимствуйте нужную роль и дайте права, иначе пользователь получит «Нарушение прав доступа».

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

Можно ли заимствовать сразу всю ветку «Документы» одним кликом?
Нет, сама ветка не заимствуется. Выделите объекты внутри неё через Shift или Ctrl и добавьте их в расширение одной командой.
Удалятся ли данные, если удалить заимствованный документ из расширения?
Данные типового документа останутся. Пропадут только значения реквизитов и табличных частей, которые добавило расширение, — их храните в резервной копии.
Сколько документов можно заимствовать в одно расширение?
Жёсткого лимита на практике нет. Ограничение другое: каждое заимствование усложняет обновление, поэтому держите в расширении только то, что меняете.
Можно ли разнести документы по нескольким расширениям?
Да. Часто удобнее одно расширение на одну задачу: печать, проверки, обмен. Так проще отключить одно, не трогая остальное.
Нужно ли заново заимствовать документы после обновления конфигурации?
Нет. Достаточно проверить применимость и поправить те объекты, по которым платформа нашла расхождения.