Как устранить ошибку «Конфликт внутренних идентификаторов у объекта» при установке патча в 1С?

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

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

Причины возникновения коллизии идентификаторов

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

В результате возникают следующие конфликты:

  1. Дублирование внутренних GUID. Если в информационной базе активна предыдущая версия патча, а поверх нее устанавливается новая версия, содержащая объект с точно таким же внутренним идентификатором (GUID), платформа фиксирует коллизию: два независимых расширения претендуют на владение одинаковым внутренним объектом метаданных.
  2. Пересечение с релизом конфигурации. Ошибка проявляется, если конфигурацию обновили на новый официальный релиз, куда исправление уже встроено на уровне основной конфигурации, однако старый патч не был деактивирован или удален перед процедурой обновления.
  3. Кэширование метаданных сервером 1С. В клиент-серверном режиме работы структуры XDTO и метаданные расширений активно кэшируются рабочими процессами кластера серверов (rmngr, rphost). Даже после удаления файла патча сервер может продолжать удерживать устаревшую схему в оперативной памяти.

Способ 1. Удаление конфликтующего патча в пользовательском режиме

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

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

Способ 2. Диагностика и отключение через Конфигуратор

Если запуск пользовательского режима заблокирован из-за критической ошибки расширения, откроем информационную базу в режиме «Конфигуратор» монопольно. Разберем по шагам дальнейшие действия:

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

Способ 3. Пакетное удаление патча через командную строку

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

Для файловой информационной базы выполним команду:

DESIGNER /F "C:\Bases\MyBase" /DeleteCfg -Extension "EF_00_00687314_7"

Для клиент-серверной базы строка подключения принимает следующий вид:


DESIGNER /S "1c-server\MyBase" /N "Администратор" /P "Пароль" /DeleteCfg -Extension "EF_00_00687314_7"

Способ 4. Очистка клиентского и серверного кэша

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

  1. Завершим все активные пользовательские сеансы.
  2. Очистим локальный кэш пользователя на клиентских машинах (каталоги %LocalAppData%\1C\1cv8 и %AppData%\1C\1cv8).
  3. Для клиент-серверных баз выполним перезапуск службы кластера серверов (1C:Enterprise Server Agent). Это принудительно выгрузит зависшие структуры ПакетXDTO из памяти рабочих процессов кластера.
  4. После перезапуска службы выполним повторный монопольный вход и загрузим необходимый патч заново.

Рекомендации разработчикам при доработке расширений

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

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

← На главную