Разработка и Конфигурация · 10 мин
Как удалить форму в 1С, если на неё есть ссылка
Пошаговая инструкция: как найти ссылки на форму в 1С, удалить форму объекта в конфигураторе и устранить ошибки ссылочной целостности без потери данных.
1С блокирует удаление формы и выводит сообщение о наличии ссылок в двух разных случаях. Первый — при удалении формы объекта метаданных в конфигураторе платформа останавливает действие из-за контроля ссылочной целостности конфигурации: на форму ссылаются другие объекты. Второй — при удалении элемента справочника или документа система сообщает, что на объект есть ссылки из других данных базы. В обоих сценариях проблема решается, но инструменты для этого различаются.
Платформа 1С:Предприятие жёстко контролирует целостность: нельзя молча удалить то, на что что-то ссылается, иначе в базе появятся «битые ссылки» вида «Объект не найден». Поэтому перед удалением нужно найти все источники ссылок, разорвать их или заменить, и только потом повторять удаление.
Ниже разобраны оба сценария: удаление формы в конфигураторе при ошибках ссылочной целостности и удаление объекта данных, на который ссылаются другие записи. Порядок действий приведён для типовых конфигураций и самописных решений.
Определите, с каким случаем вы столкнулись
Прежде чем действовать, важно понять, что именно вы удаляете. Форма в 1С — это объект метаданных (экранная форма справочника, документа, отчёта), она существует только в конфигурации и удаляется в конфигураторе. Ссылки на форму могут быть в коде модулей (например, вызов ПолучитьФорму("Справочник.Номенклатура.Форма.ФормаЭлемента")), в свойствах команд интерфейса, в настройках основной формы объекта.
Совсем другая ситуация — когда пользователь в режиме «Предприятие» удаляет элемент справочника или документ, а программа пишет «Объект не может быть удален, так как на него есть ссылки». Здесь речь идёт о ссылках в данных: реквизитах документов, регистрах сведений, других справочниках. Методика разная, и путать их нельзя.
Как выбрать действие
Поиск ссылок на форму в конфигураторе
Если вы удаляете форму объекта метаданных, первый шаг — найти все места, где она упоминается. Откройте конфигуратор и выполните глобальный поиск: меню «Правка → Глобальный поиск» (или Ctrl+Shift+F). В строке поиска укажите имя формы вместе с типом объекта, например ФормаЭлемента для конкретного справочника, и включите поиск по всей конфигурации, включая модули и свойства.
Типичные места, где прячутся ссылки на форму: вызовы ПолучитьФорму() и ОткрытьФорму() в модулях, свойство «Основная форма» у объекта метаданных, команды интерфейса с указанием конкретной формы, подписки на события и общие команды. Если форма назначена основной у объекта — сначала снимите это назначение в палитре свойств объекта, выбрав другую форму или оставив поле пустым.
После устранения упоминаний запустите проверку конфигурации: «Конфигурация → Проверка конфигурации» с включённым флажком «Проверка ссылочной целостности». Если ошибок нет — форму можно удалять через контекстное меню объекта в дереве конфигурации.
- 1Сделайте резервную копию или выгрузку конфигурации (Конфигурация → Сохранить конфигурацию в файл)
- 2Глобальным поиском найдите все упоминания имени формы в модулях и свойствах
- 3Уберите вызовы ПолучитьФорму/ОткрытьФорму или замените их на другую форму
- 4Снимите назначение формы как основной в свойствах объекта метаданных
- 5Запустите проверку конфигурации с контролем ссылочной целостности
- 6Удалите форму и обновите конфигурацию базы данных
Удаление объекта данных, на который есть ссылки
В режиме «Предприятие» безопасный способ удаления — через пометку. Отметьте объект на удаление (кнопка «Пометить на удаление» или клавиша Del), затем откройте обработку «Удаление помеченных объектов»: в типовых конфигурациях она находится в разделе «Администрирование → Обслуживание» либо вызывается через «Все функции → Обработки».
Обработка покажет список помеченных объектов и для каждого — места использования: документы, где объект указан в реквизитах, записи регистров, другие элементы справочников. По каждой ссылке нужно принять решение: удалить и ссылающийся объект (если он тоже не нужен), заменить значение на другое или очистить реквизит. Только после того, как все ссылки устранены, объект удалится физически.
Для массовой замены ссылок удобна штатная обработка «Поиск и удаление дублей» («Администрирование → Обслуживание → Корректировка данных»): она заменяет все вхождения одного элемента на другой во всех объектах базы, после чего исходный элемент можно удалить без конфликтов.
Что делать, если ссылку найти не удаётся
Иногда обработка удаления показывает ссылку, но открыть объект-источник невозможно — например, ссылка находится в регистре сведений с неочевидным отбором или в движениях документа. В этом случае помогает универсальный отчёт «Поиск ссылок на объекты» (доступен через «Все функции» в конфигурациях на БСП) — он показывает все места использования выбранных объектов в виде таблицы с возможностью перехода к источнику.
Отдельная ловушка — «битые ссылки» в обратную сторону: вы уже удалили что-то нештатным способом, и теперь в базе встречаются значения «Объект не найден». Такие записи ищутся тестированием и исправлением базы (конфигуратор → «Администрирование → Тестирование и исправление») с проверкой ссылочной целостности, однако само исправление лишь обнуляет ссылки, а не восстанавливает данные.
Особенности управляемых и обычных форм
В управляемом приложении формы чаще всего вызываются по имени строкой, поэтому глобальный поиск по имени формы обязателен — визуально такие связи в дереве конфигурации не видны. Обратите внимание на вызовы ОткрытьФорму("Справочник.Контрагенты.Форма.МояФорма"): после удаления формы такой код вызовет ошибку времени выполнения, а не на этапе проверки, если строка собирается динамически.
В обычном приложении (старые конфигурации на 8.2/8.3 в режиме совместимости) формы дополнительно могут быть связаны через планировщики, печатные формы и внешние обработки. Внешние обработки и отчёты (.epf, .erf) конфигуратором не проверяются — если они вызывают удаляемую форму, ошибка проявится только у пользователя. Перед удалением уточните у владельцев таких доработок, не используется ли форма.
Проверка результата после удаления
После удаления формы обновите конфигурацию базы данных (F7 в конфигураторе) и повторно выполните проверку конфигурации — список ошибок должен быть пуст. Затем откройте в режиме «Предприятие» те объекты, которые раньше использовали удалённую форму: должна открываться автоматически сгенерированная платформой форма либо назначенная вами замена.
После удаления объектов данных проверьте, что в обработке «Удаление помеченных объектов» не осталось неудалённых элементов, а в журналах документов и отчётах не появилось записей «Объект не найден». Если такие записи есть — ссылки были разорваны не полностью, и нужно вернуться к поиску мест использования.
Как проверить результат
Ошибок ссылочной целостности нет
Сообщения о ненайденной форме в модулях или свойствах
Открывается рабочая форма без ошибок
Ошибка «Форма не найдена» или пустое окно
Список неудалённых объектов пуст
Объект снова в списке с указанием мест использования
Нет записей «Объект не найден»
Битые ссылки в реквизитах и табличных частях
Частые вопросы
Можно ли удалить объект, не разбирая ссылки, «в принудительном порядке»?
Штатного «принудительного» удаления в платформе нет — это осознанное ограничение целостности. Обходные пути (прямая работа с СУБД, нештатные обработки) создают битые ссылки и рискуют повредить базу. Правильный путь — найти и устранить ссылки или заменить их обработкой «Поиск и удаление дублей».
Чем пометка на удаление отличается от физического удаления?
Пометка лишь скрывает объект из большинства списков и запрещает его использование в новых документах, но данные остаются в базе. Физическое удаление выполняет обработка «Удаление помеченных объектов» — и только при отсутствии ссылок на объект.
Удалил форму, теперь при открытии объекта ошибка. Что делать?
Платформа не нашла ни одной подходящей формы. Откройте конфигуратор, в свойствах объекта проверьте назначение основных форм (элемента, списка, выбора) и либо создайте новую форму кнопкой с лупой в палитре свойств, либо очистите назначение — тогда платформа сгенерирует форму автоматически.
Как удалить сразу много элементов со ссылками?
Пометьте все элементы на удаление (можно групповой обработкой или через список с выделением), затем запустите «Удаление помеченных объектов» и разберите ссылки пакетно: обработка позволяет пометить на удаление и ссылающиеся объекты. Для замены значений перед удалением используйте «Поиск и удаление дублей».
Почему глобальный поиск не находит вызов формы, а ошибка всё равно есть?
Имя формы может собираться в коде динамически через конкатенацию строк, например "Форма" + Суффикс. Ищите по части имени и по вызовам ОткрытьФорму/ПолучитьФорму. Также проверьте внешние обработки и расширения конфигурации — глобальный поиск по основной конфигурации их не охватывает.
Что важно запомнить
Платформа блокирует удаление форм и объектов со ссылками ради целостности базы. Сначала найдите все ссылки (глобальный поиск в конфигураторе или поиск мест использования в режиме Предприятия), устраните или замените их, затем удаляйте через пометку и штатные обработки. Перед массовыми операциями всегда делайте резервную копию.