Что делать, если при обновлении 1С идентичные объекты метаданных не состыковываются и дублируются

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия IT и автоматизация бизнеса
← На главную

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

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

Выясняем причину: почему объекты-двойники не состыковываются

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

Рассмотрим подробнее механизм обновления. Когда фирма «1С» выпускает новый релиз, платформа сравнивает GUID объектов вашей базы с GUID объектов в файле обновления (.cfu или .cf). Если в новом релизе разработчик (в данном случае специалисты «1С») решил пересоздать объект с нуля вместо изменения существующего, GUID этого объекта изменится. В результате для платформы это будут два совершенно разных объекта, даже если их имена, структура и функции полностью совпадают.

Проблема часто проявляется в подсистемах, связанных с БСП (Библиотекой стандартных подсистем), таких как АдминистрированиеСервиса. В определенных версиях (например, при переходе с 3.0.103 на 3.0.105 в БП) производился рефакторинг, из-за которого внутренние идентификаторы некоторых элементов изменились. Если ваша конфигурация имеет отклонения от типовой (даже минимальные), автоматические правила сопоставления, зашитые в файл поставки, могут не сработать.

Шаг 1: Подготовка и работа с файловой копией

Прежде чем приступать к изменениям, проанализируем технические условия проведения обновления. Как показывает практика (сообщение №10), на серверных мощностях может не хватать оперативной памяти для обработки тяжелых конфигураций, таких как Бухгалтерия предприятия 3.0. В этом случае правильным шагом будет выгрузка базы в файловый вариант (.dt) и проведение обновления на более мощной локальной станции.

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

Шаг 2: Стратегия ручного сопоставления и переименования

Разберем алгоритм действий, если стандартное сопоставление в окне «Сравнение, объединение с конфигурацией поставщика» недоступно:

  1. Откройте окно настройки обновления. Если вы видите, что объект (например, РегистрСведений.ДанныеОбъектовДляРегистрацииВИнформационнойБазе) помечен как удаляемый в основной конфигурации и добавляемый в конфигурации поставщика, закройте окно обновления.
  2. В основной конфигурации переименуйте проблемный объект, добавив к нему префикс (например, Удалить_АдминистрированиеСервиса). Это позволит избежать конфликта имен при добавлении нового объекта из поставки.
  3. Запустите процесс обновления снова. Теперь платформа увидит ваш переименованный объект как «старый» (подлежащий удалению или снятию с поддержки) и беспрепятственно создаст новый объект из конфигурации поставщика с правильным GUID.
  4. Выполните обновление конфигурации базы данных (клавиша F7).

После выполнения этих действий у вас в системе будут сосуществовать два объекта: старый (переименованный) и новый (из обновления). Теперь ваша задача — перенести данные (если это регистр или справочник) и ссылки.

Шаг 3: Очистка артефактов и «фантомных» ссылок

Часто после обновления переименованные старые объекты не удаляются, даже если поиск ссылок показывает их полное отсутствие. Рассмотрим подробнее, где могут прятаться эти «невидимые» зависимости:

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

Альтернативный метод: Сравнение через CF-файл

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

1. Выгрузите конфигурацию поставщика нужного релиза в файл config.cf.

2. Используйте пункт меню Конфигурация — Сравнить, объединить с конфигурацией из файла.

3. В появившемся окне платформа часто дает больше свободы для ручного сопоставления. Если вы видите два одинаковых объекта, нажмите на один из них правой кнопкой мыши и выберите пункт «Установить соответствие», затем укажите на соответствующий объект в другой колонке.

Проблема кэша метаданных

Если после всех манипуляций и успешного удаления объектов система ведет себя странно (выдает ошибки о несуществующих модулях или объектах), необходимо выполнить очистку кэша. Платформа 1С сохраняет структуру метаданных локально для ускорения работы. При радикальных изменениях GUID кэш может стать неактуальным.

Для очистки кэша на стороне сервера 1С:Предприятие необходимо остановить службу 1C:Enterprise 8.3 Server Agent и очистить содержимое папки reg_1541 (за исключением файла 1CV8Reg.lst). На стороне клиента достаточно удалить базу из списка и добавить её заново — это создаст новую папку кэша с уникальным идентификатором.

Заключение

Ситуация, когда одинаковые объекты не состыковываются при обновлении, — это не всегда ошибка программиста. Чаще всего это результат эволюции типовых решений «1С», требующий ручного вмешательства. Использование стратегии «Переименование — Снятие с поддержки — Удаление» позволяет корректно пройти через такие «узкие места» без потери данных и нарушения целостности конфигурации. Главное — всегда выполнять такие операции на копии базы и тщательно проверять настройки поддержки для каждого проблемного объекта. При необходимости можно воспользоваться методикой выноса всех доработок в расширение и возврата конфигурации на полную поддержку.

← На главную