Разработка и Конфигурация · 12 мин
1С: как добавить объект в расширение конфигурации
Пошаговая инструкция, как добавить объект в расширение 1С: заимствование справочников, документов, форм и ролей, изменение объектов, типичные ошибки и проверка результата.
Расширение конфигурации в 1С — это механизм, который позволяет дорабатывать типовую конфигурацию без снятия её с поддержки. Изменения хранятся отдельно от основной базы, поэтому обновления поставщика устанавливаются без снятия замков и ручного сравнения модулей. Чтобы доработка заработала, нужные объекты (справочники, документы, формы, роли, подсистемы) необходимо сначала добавить в расширение.
Добавить объект в расширение можно двумя способами: заимствовать существующий объект основной конфигурации для его изменения или создать новый собственный объект, который будет существовать только внутри расширения. Оба сценария выполняются в конфигураторе и занимают несколько минут, но у каждого есть ограничения и подводные камни.
Ниже разобраны оба сценария пошагово, условия выбора между ними, проверка результата и ошибки, которые чаще всего приводят к тому, что расширение не подключается или доработка «молча» не работает.
Что такое заимствование и когда оно нужно
Расширение не создаёт копию конфигурации: оно хранит только изменённые свойства и добавленные элементы. Чтобы платформа поняла, какой именно объект вы меняете, его нужно заимствовать — добавить ссылку на объект основной конфигурации в дерево расширения. До заимствования объект в расширении просто не виден, и доработать его нельзя.
Заимствовать можно не всё. Платформа поддерживает изменение форм, модулей, команд, макетов, ролей, подсистем, реквизитов (с ограничениями) и ряда других свойств. Некоторые свойства объектов — например, состав типов у измерений регистров или длина кода справочника — изменить через расширение нельзя: они недоступны в палитре свойств заимствованного объекта.
Подготовка: создаём или открываем расширение
Перед добавлением объектов нужно, чтобы расширение существовало и было открыто на изменение. Откройте конфигуратор, перейдите в меню Конфигурация → Расширения конфигурации. Если расширения ещё нет, нажмите «Создать», задайте имя (латиницей, без пробелов), синоним и префикс — префикс будет добавляться к именам новых объектов расширения.
Дважды щёлкните по расширению в списке — откроется отдельное окно с деревом конфигурации расширения. Изначально оно почти пустое: в нём появляются только заимствованные и собственные объекты. Именно в это дерево вы будете добавлять объекты.
Убедитесь, что основная конфигурация открыта и доступна для чтения: заимствование выполняется из дерева основной конфигурации, а не из дерева расширения. Если конфигурация закрыта, сначала откройте её через Конфигурация → Открыть конфигурацию.
Как заимствовать существующий объект основной конфигурации
Основной сценарий: нужно изменить типовой справочник, документ, форму или роль. Порядок действий одинаков для большинства видов объектов.
- 1Откройте дерево основной конфигурации и найдите нужный объект, например Справочники → Номенклатура.
- 2Щёлкните по объекту правой кнопкой мыши и выберите «Добавить в расширение». Если расширений несколько, укажите нужное.
- 3Объект появится в дереве расширения со значком заимствования. Откройте его свойства или форму и внесите изменения.
- 4Сохраните расширение (Ctrl+S) и обновите конфигурацию базы данных (F7).
- 5Запустите режим Предприятия и проверьте, что доработка работает.
Для заимствования формы есть более короткий путь: откройте форму объекта в основной конфигурации, затем в редакторе формы через контекстное меню выберите добавление формы в расширение. После этого в расширении можно менять элементы формы, добавлять реквизиты формы и переопределять обработчики событий.
Аналогично заимствуются модули: заимствуйте объект, откройте его модуль (модуль объекта, модуль менеджера, модуль формы) и добавьте свои процедуры с аннотациями &ИзменениеИКонтроль, &После, &Вместо или &Перед. Предпочтительный вариант — &ИзменениеИКонтроль или &После: они устойчивее к обновлениям, чем &Вместо, который полностью замещает типовой код.
Как добавить новый собственный объект в расширение
Если нужен объект, которого нет в типовой конфигурации — например, собственный справочник настроек или дополнительный регистр сведений, — его создают непосредственно в расширении. В дереве расширения щёлкните правой кнопкой по ветке нужного вида объектов («Справочники», «Регистры сведений» и т.д.) и выберите «Добавить». Имя нового объекта автоматически получит префикс расширения.
Собственные объекты расширения хранят данные в той же информационной базе, но в отдельных таблицах. Это важно учитывать: при отключении расширения доступ к данным этих объектов через типовые механизмы теряется, хотя физически таблицы могут оставаться в базе. Поэтому критичные учётные данные в собственных объектах расширений размещают с осторожностью.
Не все виды объектов можно создавать в расширениях. Набор допустимых видов зависит от версии платформы и режима совместимости: традиционно поддерживаются справочники, документы, регистры сведений, отчёты, обработки, общие модули и ряд других, но часть видов (например, планы обмена или критерии отбора) может быть недоступна. Если кнопка «Добавить» для нужного вида неактивна — платформа не позволяет создавать его в расширении.
Заимствование или новый объект
Подходит, когда нужно изменить поведение существующего объекта: добавить реквизит, доработать форму, переопределить обработчик. Ограничение: можно менять только разрешённые платформой свойства.
Подходит для отдельных доработок, не связанных с типовой логикой: собственные справочники, регистры, отчёты. Ограничение: данные зависят от подключённого расширения и недоступны при его отключении.
Ограничения и что нельзя добавить
Механизм расширений намеренно ограничен, чтобы не ломать логику типовой конфигурации. Через расширение нельзя изменять структуру типовых измерений и ресурсов регистров, состав планов счетов, характеристики типовых объектов, влияющие на физическую структуру таблиц, а также ряд системных свойств. В палитре свойств заимствованного объекта недоступные для изменения свойства отображаются серым.
Добавлять свои реквизиты в типовые объекты через расширение можно — это один из самых частых сценариев. Однако такие реквизиты не участвуют в типовых индексах и не попадают в типовые запросы автоматически: их нужно явно учитывать в доработанных запросах и отчётах.
Также учитывайте режим совместимости расширения: он не должен быть выше режима совместимости основной конфигурации. При несоответствии расширение откажется подключаться с соответствующим сообщением.
Проверка результата и типичные ошибки
После сохранения расширения и обновления конфигурации базы данных проверьте результат в режиме Предприятия. Заимствованный объект должен вести себя с учётом доработок: новые реквизиты видны на форме, переопределённые обработчики выполняются, новые объекты доступны в интерфейсе (при условии, что они добавлены в подсистемы).
Как проверить результат
Объект отображается со значком заимствования, свойства доступны для изменения
Объекта нет в дереве расширения — заимствование не выполнено
В списке расширений флажок «Используется» установлен, ошибок в колонке состояния нет
Расширение не подключается, в сообщении указаны несовпадающие объекты
Доработки видны и выполняются, журнал регистрации без ошибок расширения
Доработка не проявляется, в журнале регистрации ошибки вызова обработчиков
Если расширение подключено, но доработка «не видна», чаще всего причины такие: обработчик добавлен с ошибкой в имени расширяемой процедуры, новый объект не включён ни в одну подсистему и потому не отображается в интерфейсе, либо изменения сохранены в расширении, но не выполнено обновление конфигурации базы данных.
Отдельная ошибка — хранение в расширении логики, от которой зависят регламентные операции, без контроля подключения. Если расширение отключат (например, из-за ошибки после обновления), процессы, завязанные на его объекты, остановятся. Для критичных доработок предусмотрите мониторинг состояния расширения.
Удобно вести список заимствованных объектов и причин их заимствования в комментарии к расширению или отдельном документе. При обновлении типовой конфигурации этот список становится чек-листом: по нему быстро проверяют, что каждая доработка продолжает работать на новой версии.
Обновление типовой конфигурации с расширением
Главное преимущество расширений — типовая конфигурация остаётся на поддержке, и обновление проходит штатно. Однако после обновления заимствованные объекты могут измениться: переименованные или удалённые поставщиком объекты вызовут ошибки контроля расширения, и оно автоматически отключится.
Порядок безопасного обновления: сначала обновите конфигурацию на тестовой копии, затем откройте список расширений и проверьте колонку состояния. Если есть ошибки — откройте расширение в конфигураторе, платформа покажет несоответствия. Исправьте заимствования (удалите ссылки на исчезнувшие объекты, перенацельте изменённые), сохраните и снова проверьте.
Обработчики с аннотацией &ИзменениеИКонтроль требуют дополнительного внимания: платформа контролирует, что текст типовой процедуры не изменился с момента заимствования. После обновления такие обработчики нужно перепроверить и при необходимости заново сопоставить с актуальным типовым кодом.
Что важно запомнить
Объект добавляется в расширение двумя способами: заимствованием типового объекта через «Добавить в расширение» или созданием нового объекта в дереве расширения. После изменений сохраните расширение, обновите конфигурацию базы данных и проверьте работу в режиме Предприятия. Для обработчиков предпочтительны &После и &ИзменениеИКонтроль, перед структурными изменениями делайте резервную копию, а после обновления типовой конфигурации проверяйте состояние расширения.
Частые вопросы
Почему пункт «Добавить в расширение» неактивен в контекстном меню?
Чаще всего расширение не открыто на изменение или не создано вовсе. Откройте список расширений (Конфигурация → Расширения конфигурации), создайте расширение и откройте его двойным щелчком. Также пункт недоступен для видов объектов, которые платформа не разрешает заимствовать, и если дерево основной конфигурации не открыто.
Можно ли добавить в расширение объект из другого расширения?
Да, начиная с определённых версий платформы расширения могут заимствовать объекты друг друга, если это разрешено настройками расширения-источника. На практике такую связку используют осторожно: цепочка зависимостей усложняет обновление, и отключение «нижнего» расширения ломает «верхнее».
Что произойдёт с данными, если отключить расширение?
Типовые данные основной конфигурации не пострадают, включая значения добавленных расширением реквизитов — физически они остаются в таблицах, но становятся недоступны в интерфейсе и запросах. Данные собственных объектов расширения также перестают быть доступны штатными средствами. При удалении расширения с очисткой данных собственные таблицы могут быть удалены, поэтому перед удалением делайте копию.
Как добавить реквизит в типовой документ через расширение?
Заимствуйте документ в расширение, откройте его в дереве расширения, в ветке «Реквизиты» нажмите «Добавить» и заполните свойства реквизита. Затем заимствуйте форму документа и выведите реквизит на форму. После сохранения обновите конфигурацию базы данных — реквизит появится в базе у всех документов этого вида.
Почему после обновления конфигурации расширение отключилось?
Поставщик изменил или удалил объекты, которые были заимствованы, либо изменился текст типовых процедур, контролируемых через &ИзменениеИКонтроль. Откройте список расширений, посмотрите текст ошибки в колонке состояния, затем исправьте заимствования в конфигураторе и подключите расширение заново.
Можно ли через расширение изменить движения документа по регистрам?
Изменить состав типовых измерений и ресурсов регистра нельзя, но можно переопределить обработку проведения документа: заимствуйте документ и добавьте обработчик ОбработкаПроведения с аннотацией &После или &Вместо, где сформируйте дополнительные движения, в том числе по собственным регистрам расширения. Вариант &Вместо требует полного дублирования типовой логики проведения и усложняет обновления.