Как исправить ошибку ссылок на удаляемый регистр при обновлении 1С?

Программист 1С v8.3 (Обычные формы) Налоговый учет IT и автоматизация бизнеса
← На главную

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

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

Причина возникновения ошибки контроля целостности

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

При обновлении типовой конфигурации поставщик удаляет устаревший объект (например, РегистрНакопления.НДСпоОСиНМА) и одновременно убирает его из состава движений всех документов-регистраторов, подсистем и планов обмена. Если же какой-либо документ был доработан и программист снял с него флаг обновления в окне сравнения и объединения, возникает конфликт:

  1. Поставщик удаляет регистр накопления из конфигурации.
  2. Документ не обновляется, так как с него снята галочка, и в его свойстве Движения остается ссылка на удаляемый регистр.
  3. Платформа обнаруживает висячую ссылку в структуре метаданных и прерывает процесс обновления.

Поиск объектов, удерживающих ссылку на регистр

Выясним, какие именно объекты конфигурации не дают удалить устаревший регистр. Для этого выполним следующие действия в режиме «Конфигуратор»:

  1. Откроем дерево метаданных и найдем удаляемый объект (например, РегистрыНакопления.НДСпоОСиНМА).
  2. Нажмем на него правой кнопкой мыши и выберем пункт «Поиск ссылок на объект».
  3. Проанализируем сформированный список зависимостей. В отчете будут показаны все метаданные, где задействован регистр:
    1. Составы подсистем (свойство Состав).
    2. Составы планов обмена (свойство Состав).
    3. Подписки на события (свойство Источник).
    4. Документы конфигурации (коллекция Движения).

Обратим внимание: штатный механизм поиска ссылок находит только структурные связи метаданных. Вызовы менеджеров регистров в программном коде модулей (например, РегистрыНакопления.НДСпоОСиНМА.СоздатьНаборЗаписей()) этот инструмент не отображает.

Ошибочный путь: почему нельзя просто отменять удаление регистра

Часто возникает соблазн решить проблему быстрым способом — снять флаг с самого удаляемого регистра в окне сравнения и объединения, оставив его в конфигурации. Разберем, к каким критическим последствиям это приводит:

  1. Накопление технического долга: в конфигурации остается «мертвый» объект метаданных, который больше не поддерживается типовым функционалом и не заполняется типовыми механизмами проведения.
  2. Отказ от обновлений: пропуская обновление документа ради сохранения пользовательских правок (например, добавленной формы), база лишается исправлений ошибок, новых реквизитов и логики проведения от поставщика.
  3. Проблемы при последующих релизах: через несколько обновлений количество расхождений между типовой конфигурацией и рабочей базой вырастет, что кратно усложнит дальнейшую поддержку.

Правильный порядок обновления: пошаговое объединение

Рассмотрим корректную методику разрешения конфликта, которая позволяет удалить устаревший регистр и сохранить все внесенные доработки.

  1. Анализ нетиповых объектов: если в базе созданы собственные самописные документы, формирующие движения по удаляемому регистру, откроем их свойства и вручную снимем флаг с данного регистра в ветке Движения.
  2. Поэлементное объединение типовых документов:
    1. В окне «Сравнение, объединение с конфигурацией поставщика» найдем измененный документ (например, РеализацияТоваровУслуг).
    2. Не снимаем флаг со всего документа целиком. Раскрываем дерево свойств документа.
    3. Устанавливаем режим объединения для свойства Движения — принять из конфигурации поставщика (чтобы удалить ссылку на регистр).
    4. Для доработанных элементов (пользовательские формы, макеты, модули) выбираем объединение с приоритетом конфигурации поставщика либо оставляем свои объекты, настраивая правила вручную.
  3. Восстановление привязок форм: если в документе создавалась отдельная форма, после применения обновлений проверяем свойство документа «Основная форма» и при необходимости повторно указываем требуемую форму.
  4. Выполнение объединения: нажимаем кнопку «Выполнить» и дожидаемся завершения процесса объединения метаданных.

Проверка логической целостности и программного кода

После завершения процедуры объединения и до применения изменений к базе данных обязательно выполним синтаксический контроль. Это необходимо, чтобы найти оставшиеся обращения к удаленному регистру в текстах модулей.

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

Соблюдение этого регламента гарантирует чистоту метаданных, целостность учетных механизмов и беспроблемную установку будущих обновлений.

← На главную