Как обеспечить сопоставление объектов метаданных по именам, а не по GUID, при сравнении и объединении конфигураций 1С?

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

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

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

Понимание различий: "Идентификатор" против GUID в 1С

Прежде всего, давайте проясним терминологию, которая часто вызывает путаницу. Когда мы говорим об "идентификаторе" объекта в контексте 1С:Предприятия, мы можем подразумевать несколько вещей:

  1. Полное имя объекта метаданных: Это то, что чаще всего имеет в виду пользователь, когда говорит "идентификатор". Например, Документ.ПриходнаяНакладная или Справочник.Номенклатура. Это человекочитаемое название, которое мы видим в дереве конфигурации.
  2. Внутренний GUID (Global Unique Identifier): Это уникальный, глобальный идентификатор, который платформа 1С автоматически присваивает каждому объекту метаданных при его создании. GUID представляет собой длинную строку букв и цифр (например, a4b5c6d7-e8f9-0123-4567-89abcdef0123). Он является ключевым для платформы, поскольку гарантирует уникальность объекта в любой конфигурации и позволяет отслеживать его, даже если мы меняем его полное имя.

В диалоге "Сравнение и объединение" под "идентификатором" платформа 1С в первую очередь подразумевает именно внутренний GUID объекта. Это критически важно для понимания логики сопоставления.

Как 1С сопоставляет объекты метаданных при сравнении

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

  1. Сопоставление родственных конфигураций:

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

  2. Сопоставление неродственных конфигураций (или при отсутствии поддержки):

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

Основная причина, по которой объекты с одинаковыми именами могут не сопоставляться автоматически, заключается в том, что у них разные внутренние GUIDы. Это может произойти, если объекты были:

Практические подходы к сопоставлению объектов по именам

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

  1. Использование режима "Неродственные конфигурации"

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

    Действия:

    1. Откройте окно "Сравнение, объединение конфигураций" (например, через меню Конфигурация -> Сравнить, объединить с конфигурацией из файла...).
    2. В открывшемся диалоге сравнения найдите кнопку "Настройка".
    3. В окне настроек установите флажок "Конфигурации не родственны".
    4. Также убедитесь, что флажок "Устанавливать соответствия по именам объектов" включен, если он присутствует (в некоторых версиях или режимах он может быть неактивен, если конфигурации уже неродственные по определению).
    5. Примените изменения и выполните сравнение.

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

  2. Ручное сопоставление объектов

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

    Действия:

    1. В окне "Сравнение, объединение конфигураций" мы видим два дерева конфигурации (текущая и сравниваемая).
    2. Найдите в одной колонке объект, который не сопоставился, и в другой колонке — соответствующий ему объект, который также не сопоставился.
    3. Выберите оба этих объекта (удерживая клавишу Ctrl для множественного выбора или выбирая по одному).
    4. Щелкните правой кнопкой мыши по одному из выбранных объектов, чтобы открыть контекстное меню.
    5. Выберите пункт "Установить соответствие объектов".
    6. После этого 1С свяжет эти два объекта, и они будут рассматриваться как один и тот же объект при последующем объединении.

    Этот метод позволяет нам точно указать системе, какие объекты должны считаться идентичными, несмотря на различия в GUIDах или даже незначительные расхождения в именах (если мы вручную подтверждаем соответствие). Хотя это может быть трудоемко для большого числа объектов, для критически важных или уникальных объектов это надежный способ.

  3. Использование выгрузки в файлы (.cf)

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

    Действия:

    1. Откройте конфигурацию, которую хотите сравнить, в конфигураторе.
    2. Через меню Конфигурация -> Сохранить конфигурацию в файл... выгрузите ее в файл, например, МояКонфигурация.cf.
    3. Повторите процесс для второй конфигурации, которую нужно сравнить, выгрузив ее в другой файл, например, КонфигурацияДляСравнения.cf.
    4. Теперь, используя одну из конфигураций в конфигураторе (или создав пустую), выберите меню Конфигурация -> Сравнить, объединить с конфигурацией из файла... и укажите один из сохраненных .cf файлов. Затем, возможно, потребуется снова воспользоваться той же опцией для второго файла.

    При сравнении двух файлов .cf, которые не имеют общей истории поддержки, система автоматически будет рассматривать их как "неродственные", что, как мы уже выяснили, смещает приоритет сопоставления в сторону имен объектов.

  4. Особенности "заимствованных" объектов

    Если мы сталкиваемся с проблемой сопоставления объектов, которые имеют признак "Заимствованные" (как было упомянуто в сообщении 7), это чаще всего означает, что мы работаем с механизмом расширений конфигурации.

    Анализ ситуации:

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

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

  5. Снятие с поддержки (если она была)

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

    Действия:

    1. Если ваша конфигурация находится на поддержке, и вы столкнулись с подобной проблемой, мы можем рассмотреть вариант полного снятия конфигурации с поддержки (Конфигурация -> Поддержка -> Настройка поддержки... -> Снять с поддержки).
    2. После снятия с поддержки конфигурация станет полностью самостоятельной, и при сравнении с другой конфигурацией (особенно через файл .cf) она будет рассматриваться как неродственная, что повысит приоритет сопоставления по именам.
    3. Важно: Снятие с поддержки — это серьезный шаг, который может затруднить получение будущих обновлений от поставщика. Прибегать к нему следует только в крайних случаях и с полным пониманием последствий.
  6. Углубленный анализ GUID с помощью XML-выгрузки

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

    Действия:

    1. Выгрузите конфигурацию в файлы XML (Конфигурация -> Сохранить конфигурацию в файлы...). Укажите пустую папку, куда будут выгружены все метаданные.
    2. В корне полученной структуры будет находиться файл с именем configDumpInfo (или похожим, в зависимости от версии платформы). Этот файл содержит GUIDы всех объектов метаданных, их полные имена и другую служебную информацию.
    3. Мы можем проанализировать этот XML-файл (например, с помощью текстового редактора или специализированных инструментов), чтобы выявить, какие GUIDы были изменены, продублированы или какие объекты имеют несоответствующие GUIDы при одинаковых именах.

    Такой анализ поможет понять масштаб проблемы и спланировать более глубокие действия, возможно, даже с использованием инструментов для программного сопоставления или корректировки GUIDов (что является задачей повышенной сложности и риска).

  7. Возможности 1C:Enterprise Development Tools (EDT)

    Для разработчиков, активно использующих интегрированную среду разработки 1C:Enterprise Development Tools (EDT), предусмотрены более гибкие и явные настройки сравнения и объединения.

    Настройка в EDT:

    В EDT при выполнении операций сравнения и слияния проектов мы можем явно указать "Стратегию сопоставления". Обычно доступны следующие варианты:

    • "По UUID": Сопоставление только по внутренним GUIDам.
    • "По имени": Сопоставление только по полным именам объектов.
    • "По UUID, затем по имени": Стандартная стратегия, при которой сначала выполняется попытка сопоставления по GUID, а затем, если GUIDы отличаются, по именам.

    Использование EDT предоставляет более точный и контролируемый процесс сопоставления, что особенно ценно в условиях командной разработки и работы с системами контроля версий.

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

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

← На главную