При работе с расширениями в системе 1С, особенно когда мы стремимся создать новое расширение на основе уже существующего или объединить несколько расширений, мы можем столкнуться с неприятной ошибкой: "Конфликт внутренних идентификаторов у объекта". Эта проблема возникает, когда в вашей информационной базе одновременно активны несколько расширений, или же расширение загружается таким образом, что его объекты метаданных имеют те же внутренние идентификаторы (GUID/UUID), что и объекты других активных расширений или даже самой основной конфигурации. Разберем подробнее, почему это происходит и как мы можем решить эту проблему.
Причины возникновения конфликта внутренних идентификаторов:
Конфликт внутренних идентификаторов — это распространенная проблема, которая может возникнуть по нескольким причинам:
Ctrl+C / Ctrl+V для целого расширения) внутренние идентификаторы обычно сохраняются, что приводит к дублированию.Ctrl+C / Ctrl+V, внутренние идентификаторы не изменяются. Если в целевой конфигурации уже существуют объекты с такими же идентификаторами, это вызовет конфликт.Помним, что перед любыми манипуляциями с расширениями и конфигурацией критически важно создать резервную копию информационной базы. Для автоматизации этого процесса можно использовать полноценный центр администрирования 1С. Это поможет избежать потери данных и позволит вернуться к работоспособному состоянию в случае непредвиденных проблем.
Этот метод является одним из наиболее надежных для устранения конфликта внутренних идентификаторов, поскольку он позволяет платформе 1С автоматически перегенерировать идентификаторы для объектов при их загрузке. Разберем шаги:
Конфигуратор. В дереве конфигурации найдем раздел Расширения конфигурации. Найдем то расширение, которое вызывает ошибку или которое мы хотим использовать в качестве основы для нового, и выгрузим его в файл формата .cfe (или .cfex для более новых версий платформы). Для этого щелкнем правой кнопкой мыши по расширению и выберем пункт Выгрузить расширение в файл.... Сохраним файл в надежном месте.Расширения конфигурации, выберем нужное расширение, щелкнем по нему правой кнопкой мыши и выберем Удалить.Расширения конфигурации щелкнем правой кнопкой мыши и выберем Добавить расширение конфигурации.... Присвоим ему уникальное имя и любые другие необходимые свойства.Сравнить, объединить с конфигурацией из файла.... В появившемся окне укажем путь к .cfe (или .cfex) файлу, который мы выгрузили на первом шаге.Сравнение, объединение. В этом окне очень важно зайти в Действия -> Параметры.Режим копирования объектов (не сохраняются внутренние идентификаторы объектов) является критически важной. Установим этот флажок. Он предписывает платформе при копировании объектов из файла-источника создавать для них новые внутренние идентификаторы вместо сохранения старых.ОК в параметрах, а затем Выполнить или Принять изменения в окне сравнения и объединения. Все объекты из выгруженного файла будут скопированы в наше новое расширение с новыми, уникальными внутренними идентификаторами.После выполнения этих шагов новое расширение должно быть успешно загружено без конфликтов идентификаторов.
Этот метод похож на первый, но менее детализирован и может быть применен, если нет необходимости в тонкой настройке слияния или если расширение относительно простое и не содержит данных.
.cfe (или .cfex)..cfe (или .cfex). В некоторых случаях этого достаточно, чтобы платформа автоматически перегенерировала идентификаторы при загрузке в "пустое" место. Однако метод 1 с использованием "Сравнить, объединить" и флагом "Режим копирования объектов" является более гарантированным.Мы должны понимать, что при удалении расширения, если оно содержало какие-либо данные (например, собственные справочники, документы или записи в регистрах, добавленные расширением), эти данные будут потеряны безвозвратно. Платформа 1С не предоставляет штатных средств для выгрузки данных, которые хранятся исключительно в объектах расширения, особенно если сама база находится в неработоспособном состоянии из-за конфликта.
Если расширение содержит данные, и мы не можем запустить предприятие для их выгрузки, задача усложняется. В таких случаях:
Помимо основных методов пересоздания расширений, рассмотрим и другие важные аспекты, которые помогут избежать и диагностировать проблему:
Перед запуском в пользовательском режиме мы можем диагностировать потенциальные ошибки еще в режиме Конфигуратор. Для этого в списке расширений выберите пункт Проверка возможности применения всех расширений. Эта функция проанализирует расширения и сообщит о возможных конфликтах до их проявления в пользовательском режиме.
Если конфликт возникает из-за объектов, добавленных *внутри* расширения (то есть это не заимствованные объекты основной конфигурации), мы можем попробовать следующий подход для отдельных объектов:
Этот метод не подходит для объектов, которые являются объектами основной конфигурации и были заимствованы в расширение — их нужно повторно заимствовать из основной конфигурации через механизм заимствования.
Некоторые пользователи пытаются решить проблему, выгружая расширение в файлы XML и вручную изменяя GUID/UUID в этих файлах, например, в Configuration.xml или ConfigDumpInfo.xml. Однако, как показывает практика и опыт (сообщение 6), это крайне сложный и часто неэффективный путь:
id элементов файла ConfigDumpInfo.xml. Необходимо не только изменить UUID в самих файлах объектов, но и синхронизировать эти изменения с ConfigDumpInfo.xml.Configuration.xml также содержится информация о версии конфигурации, и при изменении метаданных нужно соответствующим образом обновить версию и отметить изменения в ConfigDumpInfo.xml, чтобы платформа корректно восприняла изменения.Формат выгрузки в файлы XML достаточно сложен и не полностью документирован. Работа с ним требует глубоких знаний внутренней структуры 1С и высока вероятность ошибок. Поэтому мы настоятельно рекомендуем избегать ручного редактирования XML-файлов для решения данной проблемы, если у нас нет специализированных инструментов или очень глубокого понимания внутренних механизмов платформы.
В конфигурациях, поддерживающих Библиотеку стандартных подсистем (БСП), существует служебный справочник Идентификаторы объектов метаданных. Он используется для хранения информации об объектах метаданных конфигурации и обновляется автоматически в процедурах обновления БСП. Иногда при сбоях в процедурах обновления может нарушаться соответствие между содержимым справочника и структурой метаданных, что приводит к ошибкам. В таких случаях может потребоваться ручное обновление или перепроведение процедур обновления БСП.
Начиная с версии платформы 8.3.15.1489, для самого расширения было добавлено свойство
Поддерживать соответствие объектам расширяемой конфигурации по внутренним идентификаторам
Истина). Если это свойство установлено, то при переименовании объекта расширяемой конфигурации в конфигураторе, во всех открытых расширениях будут соответствующим образом переименованы заимствованные объекты расширения. Это свойство помогает поддерживать целостность, но не решает проблему конфликта уникальных идентификаторов при создании нового расширения из старого.
Как мы видим из обсуждения (сообщение 10), механизм расширений, несмотря на свою мощь, может быть источником нестабильности и сложных в диагностике ошибок. Пользователи часто сталкиваются с проблемами, когда расширения, казалось бы, работавшие годами, вдруг выходят из строя, что приводит к невозможности запуска предприятия и, как следствие, к риску потери данных. Важно помнить, что:
Конфликт внутренних идентификаторов у объекта в расширении 1С — это серьезная, но решаемая проблема. Наиболее эффективные методы сводятся к пересозданию расширения с использованием инструментов платформы, которые гарантируют генерацию новых уникальных идентификаторов. Всегда помним о важности резервного копирования и потенциальной потере данных, если расширение содержит собственные данные. Систематический подход и внимательность помогут нам успешно справиться с этой задачей и обеспечить стабильную работу наших систем 1С.