При выполнении обновления типовой или доработанной конфигурации 1С (например, перехода с релиза 2.0.44.13 на 2.0.66) разработчики нередко сталкиваются с критической ошибкой: «Дублирование имени объекта метаданных» или «Использование одинакового имени для перечисленных ниже объектов недопустимо». Чаще всего в списке конфликтующих элементов фигурируют макеты, ресурсы регистров или объекты с системным префиксом Удалить (например, РегистрСведений.УдалитьВерсииПодсистем, РегистрСведений.УдалитьПрисоединенныеФайлы).
Разберем подробнее внутренние механизмы платформы, которые приводят к этой ошибке, и пошагово рассмотрим способы ее устранения.
Платформа 1С идентифицирует элементы дерева метаданных не только по их строковому имени, но и по внутреннему уникальному идентификатору — UUID (GUID). Конфликт уникальности возникает по следующим причинам:
Удалить, а в следующих релизах полностью исключает их из конфигурации. Если обновить базу «рывком» через большой интервал версий, механизм обновления не может сопоставить старое имя с новым и пытается создать дублирующий объект.Сравнить, объединить с конфигурацией из файла вместо штатного механизма поддержки) или переносили объекты метаданных через буфер обмена, их UUID начинают отличаться от UUID в файле обновления поставщика. В результате платформа считает объект из обновления новым и пытается добавить его в дерево с уже существующим именем.Проанализируем ситуацию: если конфигурация типовая (или изменения минимальны), самым надежным и быстрым способом устранения рассинхронизации GUID является накатывание оригинального файла поставщика того же самого релиза, на котором сейчас находится информационная база.
Разберем по шагам данный алгоритм:
Администрирование — Выгрузить информационную базу.*.cf) ровно того релиза, который сейчас установлен в базе (в рассматриваемом случае — 2.0.44.13).Конфигурация — Загрузить конфигурацию из файла....cf текущего релиза и подтвердим полную замену конфигурации.F7).В результате этой операции платформа перезапишет метаданные оригинальными объектами с правильными системными идентификаторами и восстановит исходную конфигурацию поставщика. После этого штатное обновление на следующие релизы пройдет без коллизий.
Если обновление через большой шаг вызывает ошибки, перейдем к последовательной схеме обновления. В типовых конфигурациях нельзя пропускать так называемые «узловые» релизы, в которых меняется логика хранения данных и структура подсистем.
Выполним процедуру последовательного обновления:
UpdInfo.txt в каталоге шаблонов обновления).Конфигурация — Поддержка — Обновить конфигурацию.F7) обязательно запустим 1С в режиме «Предприятие» от имени администратора.Рассмотрим вариант, когда обновление выполняется через файл cf нового релиза с помощью меню Конфигурация — Сравнить, объединить с конфигурацией из файла. В этом случае появление задвоенных объектов с префиксом Удалить связано с тем, что в окне объединения отключено удаление устаревших элементов.
Настроим правила объединения следующим образом:
Действия — Отметить по подсистемам файла или снимем общие флаги.Удалить) и в файле новой конфигурации он отсутствует, платформа должна удалить старый объект, а не дублировать его.Перед повторным накатыванием обновлений полезно устранить логические и структурные повреждения таблиц метаданных:
Администрирование — Тестирование и исправление....Реиндексация таблиц информационной базы;Проверка логической целостности информационной базы;Проверка ссылочной целостности информационной базы;Пересчет итогов.Очищать ссылки.Выполнить и дождемся завершения служебного протокола. Также убедимся, что используется актуальная версия технологической платформы 1С:Предприятие.Если конфигурация сильно доработана, и полную загрузку cf использовать нельзя, проанализируем дерево метаданных через выгрузку исходных текстов:
Конфигурация — Выгрузить конфигурацию в файлы... в пустую директорию.КлассификацияДоходовБюджетов или УдалитьВерсииПодсистем.ConfigDumpInfo.xml и связанных XML-файлах метаданных найдем записи с одинаковыми именами и сопоставим их uuid._Дубль), сохраним конфигурацию базы данных, после чего удалим ненужный объект и повторим попытку обновления.Если база содержит критическое количество ошибок структуры метаданных, а разница между текущим и целевым релизом слишком велика, наиболее безопасным решением будет перенос данных:
2.0.66.х).ВыгрузкаЗагрузкаДанныхXML перенесем справочники, документы и регистры из старой базы в новую.