Удаление реквизитов, форм и заимствованных объектов в расширении конфигурации 1С 8.3

· 10 мин

Содержание

Чтобы удалить объект из расширения 1С, откройте Конфигуратор, выберите Конфигурация → Расширения конфигурации, откройте дерево нужного расширения, найдите объект, вызовите на нём «Поиск ссылок на объект», уберите найденные обращения и только потом нажмите Del. Изменения попадают в базу после команды «Обновить конфигурацию базы данных» (F7) при активном окне расширения.

Порядок одинаков для любой конфигурации на платформе 8.3: Бухгалтерии, ЗУП, УТ, ERP. Разница только в последствиях. Удалить заимствованный объект почти всегда безопасно. Удалить собственный справочник или реквизит с данными — значит потерять эти данные при применении расширения.

Какой объект вы удаляете: свой или заимствованный

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

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

  • 🟢 Собственные — созданы в расширении: новый справочник, документ, отчёт, обработка, общий модуль, реквизит или табличная часть, добавленные к типовому объекту.
  • 🔵 Заимствованные — взяты из основной конфигурации, чтобы что-то в них поменять: добавить реквизит , перехватить метод модуля, изменить форму. В дереве у них особая пиктограмма, а в свойствах указано, что объект принадлежит основной конфигурации.
Что удаляетеЧто произойдётРиск
Заимствованный объект целикомИз расширения уйдут и все его доработки: свои реквизиты, формы, обработчикиСредний — пропадает функциональность
Заимствованную формуИсчезнут изменения формы и её модуля, типовая форма снова работает как в поставкеНизкий
Собственный объект без данных (отчёт, обработка, общий модуль)Объект просто пропадёт из интерфейсаНизкий, если на него нет ссылок
Собственный справочник, документ, регистрТаблица в базе будет удалена вместе с записямиВысокий — данные не вернуть без копии
Собственный реквизит у заимствованного объектаКолонка с данными будет удалена у всех элементовВысокий

Перед удалением любого объекта, который хранит данные, сделайте выгрузку информационной базы (.dt) или резервную копию средствами СУБД. Отдельно сохраните и само расширение в файл .cfe.

Сохранить расширение в файл можно из окна его дерева: Конфигурация → Сохранить в файл при активном окне расширения. Этот файл пригодится, если удалённое придётся вернуть.

Анализ зависимостей: где используется объект расширения

Платформа не даст удалить объект, на который ссылаются другие объекты метаданных. Но код модулей она проверяет не так строго: обращение Справочники.МойСправочник внутри процедуры станет ошибкой только при проверке модулей или при выполнении. Поэтому зависимости ищите заранее и в двух местах.

Ссылки в метаданных

  1. В дереве расширения щёлкните по объекту правой кнопкой мыши.
  2. Выберите «Поиск ссылок на объект».
  3. Внизу откроется окно с результатами. В нём будут реквизиты с этим типом, определяемые типы, подсистемы, роли, формы, критерии отбора, состав планов обмена.

Каждую найденную ссылку нужно убрать: сменить тип реквизита, исключить объект из подсистемы и роли, удалить из состава определяемого типа.

Обращения в коде

Метаданные — только половина картины. Имя объекта может встречаться в модулях в виде строки или обращения через менеджер.

  • 🔍 Откройте Правка → Глобальный поиск (Ctrl+Shift+F).
  • В области поиска оставьте только нужное расширение, чтобы не утонуть в результатах по типовой.
  • Ищите по имени объекта без префикса менеджера: так найдутся и Справочники.ИмяОбъекта, и Метаданные.Справочники.ИмяОбъекта, и строковые варианты вида "Справочник.ИмяОбъекта".

Строковые обращения особенно коварны. Запрос "ВЫБРАТЬ ... ИЗ Справочник.ИмяОбъекта" компилятор не проверит. Ошибка всплывёт у пользователя, когда он откроет отчёт или нажмёт кнопку.

Ссылки со стороны основной конфигурации

Типовая конфигурация ничего не знает о собственных объектах расширения. Значит, со стороны типовой ссылок на них быть не может. Но если вы удаляете заимствованный объект, проверьте, не используют ли его ваши собственные объекты: например, свой документ с реквизитом типа «СправочникСсылка.Номенклатура» требует, чтобы справочник Номенклатура был заимствован.

Как удалить объект из расширения в Конфигураторе

Сам процесс удаления короткий. Вся работа — в подготовке выше.

Пошагово

  1. Запустите Конфигуратор под пользователем с полными правами.
  2. Откройте Конфигурация → Расширения конфигурации.
  3. Выделите расширение в списке и откройте его дерево (двойной щелчок или команда открытия конфигурации расширения).
  4. Найдите объект. Удобно набрать начало имени прямо в дереве — сработает быстрый поиск.
  5. Нажмите Del или выберите «Удалить» в контекстном меню.
  6. Если на объект остались ссылки, Конфигуратор покажет их список и не удалит объект. Вернитесь к анализу зависимостей.
  7. Если ссылок нет, подтвердите удаление.
  8. При активном окне расширения нажмите F7 — «Обновить конфигурацию базы данных».

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

Удаление части объекта

Часто нужно убрать не весь объект, а его фрагмент:

  • 📌 Реквизит или табличную часть — раскройте ветку объекта и удалите элемент так же через Del. Перед этим проверьте формы: реквизит может быть выведен на форму элементом, и после удаления элемент останется с пустым путём к данным.
  • 📌 Команду или форму — удаляйте вместе с упоминаниями в командном интерфейсе подсистем.
  • 📌 Метод в модуле — удаляется в самом модуле. Если у метода была аннотация &После, &Перед, &Вместо или &ИзменениеИКонтроль, вместе с ним пропадёт и перехват типового метода.

Удаление через пользовательский режим

Если нужно убрать не объект, а всё расширение, Конфигуратор не обязателен. В конфигурациях на БСП есть список расширений: Администрирование → Печатные формы, отчеты и обработки → Расширения. Там расширение можно отключить флагом или удалить целиком. Отдельный объект внутри расширения из пользовательского режима удалить нельзя.

Заимствованные объекты и объекты, исключённые из типовой

У заимствованных объектов есть своя специфика, которую не видно на собственных.

Удаление заимствования

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

Учтите каскад:

  • при заимствовании формы платформа автоматически заимствует и её объект-владелец;
  • при удалении объекта-владельца уйдут все его заимствованные формы и макеты;
  • если свой объект расширения ссылается на заимствованный, удаление заимствованного будет заблокировано.

Когда объект исключили из основной конфигурации

Обратная ситуация: объект пропал не из расширения, а из типовой. Разработчики убрали устаревший отчёт, переименовали реквизит или метод модуля. Расширение по-прежнему заимствует объект, которого больше нет.

Признаки такой ситуации:

  • при запуске в режиме 1С:Предприятие расширение не применяется, в списке расширений видно сообщение об ошибке;
  • в Конфигураторе при открытии дерева расширения объект помечен как не найденный в расширяемой конфигурации;
  • в окне сообщений ошибка указывает на конкретный метод с аннотацией перехвата, которого нет в типовом модуле.

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

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

Очистка кода модулей после удаления объекта

Удалённый объект оставляет за собой «хвосты» в коде. Их нужно найти и убрать, иначе расширение может не пройти проверку или упасть при выполнении.

Что проверять:

  • 🧩 Общие модули расширения — функции, которые работали с удалённым объектом, вызовы этих функций из других модулей.
  • 🧩 Модули форм — обработчики команд и событий элементов, которых больше нет на форме. Пустой обработчик без элемента не ломает работу, но засоряет модуль.
  • 🧩 Тексты запросов — строковые обращения к таблицам удалённого объекта.
  • 🧩 Модули менеджеров и объектов заимствованных объектов — перехваты, которые обращались к удалённому реквизиту.

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

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

&НаСервере
&После("ПриСозданииНаСервере")
Процедура Расш1_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	// Реквизит Расш1_Ответственный удалён из расширения,
	// поэтому эта строка вызовет ошибку при открытии формы
	Объект.Расш1_Ответственный = Пользователи.ТекущийПользователь();
КонецПроцедуры

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

Префикс у всех собственных объектов и методов расширения (здесь Расш1_) сильно упрощает такую чистку. Глобальный поиск по префиксу сразу показывает всё, что добавлено расширением.

Удаление объектов из расширения при обновлении типовой конфигурации

Обновление типовой — самый частый повод чистить расширение. Порядок, который сводит число сюрпризов к минимуму:

  1. Сделайте копию базы и сохраните расширение в .cfe.
  2. Обновите основную конфигурацию обычным способом.
  3. Откройте Конфигурация → Расширения конфигурации и откройте дерево каждого расширения.
  4. Пройдите по объектам, которые платформа пометила как отсутствующие или изменённые в основной конфигурации.
  5. Решите по каждому: удалить из расширения, потому что типовая теперь делает то же самое сама, или перенести доработку на новый объект.
  6. Проверьте модули и примените расширение через F7.

Отдельно посмотрите на объекты с контролем свойств. Если вы при заимствовании включали контроль какого-то свойства, а в новом релизе это свойство изменилось, расширение не применится. Тут обычно хватает снять контроль или обновить контролируемое значение, удалять объект не нужно.

Не спешите удалять заимствование только потому, что после обновления расширение выдало ошибку. Сначала выясните, что изменилось в типовой. Иногда исправления заслуживает одна аннотация, а не весь объект.

Хорошая практика — после каждого крупного обновления проводить ревизию расширения. Доработки, которые фирма 1С уже включила в типовую, лучше убрать: меньше заимствований — меньше конфликтов в следующих релизах.

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

Проверку делайте на копии базы, а не на рабочей. Для файловой базы достаточно скопировать каталог, для клиент-серверной — загрузить .dt в отдельную базу.

Проверка расширения после удаления объекта
Выполнено: 0 / 7

На что ещё смотреть:

  • 🔎 Журнал регистрации — Администрирование → Обслуживание → Журнал регистрации в пользовательском режиме. Отфильтруйте по уровню «Ошибка» за время тестирования.
  • 🔎 Обмены данными — если удалённый объект участвовал в плане обмена или правилах конвертации, прогоните один цикл обмена на тестовой базе.
  • 🔎 Регламентные задания — задание расширения, которое обращалось к удалённому объекту, будет падать молча. Проверьте их состояние в консоли регламентных и фоновых заданий.

Только после этого переносите расширение в рабочую базу: загрузите .cfe и примените изменения в удобное для пользователей время.

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

  • ❌ Удаление в рабочей базе без пробы на копии. Расширение применяется ко всем сеансам при следующем входе. Ошибка в нём затронет всех пользователей сразу.
  • ❌ Удаление собственного справочника с данными «на время». Если объект вернуть, таблица создастся заново пустой. Старые ссылки в документах останутся «битыми».
  • ❌ Работа сразу в нескольких копиях расширения. Один разработчик удалил объект в своей копии, другой загрузил старый .cfe поверх — удалённое вернулось. Договоритесь, где хранится актуальная версия.
  • ❌ Удаление перехвата без проверки, на что он влиял. Метод с &Вместо полностью заменял типовую логику. После удаления снова заработает типовой алгоритм, и пользователи увидят другие цифры или другое поведение формы.

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

Можно ли восстановить удалённый объект расширения?
Только из сохранённого файла .cfe или копии базы. Если объект хранил данные, после применения изменений сами данные можно вернуть лишь из резервной копии.
Нужен ли монопольный доступ, чтобы удалить объект из расширения?
Если расширение меняет структуру данных, при применении может потребоваться монопольный режим. Для расширений без своих данных изменения обычно применяются без выгона пользователей, но вступают в силу при новом входе.
Влияет ли удаление объекта из расширения на типовую конфигурацию?
Нет. Основная конфигурация остаётся на поддержке без изменений. Удаляются только доработки расширения.
С какой версии платформы есть расширения конфигурации?
Расширения появились в платформе 8.3.6. Набор того, что можно добавлять в расширение, расширялся в следующих версиях, поэтому для работы со своими объектами нужна современная платформа.
Почему в пользовательском режиме нельзя удалить отдельный объект расширения?
Список расширений в программе работает с расширением целиком: подключить, отключить, удалить, обновить из файла. Состав расширения меняют только в Конфигураторе или в 1С:EDT.