При работе с конфигурациями 1С:Предприятия мы часто сталкиваемся с необходимостью сравнения и объединения изменений. Однако иногда возникает ситуация, когда, казалось бы, одинаковые объекты метаданных (например, справочники или документы с идентичными наименованиями) не сопоставляются автоматически. Вместо этого система предлагает их как новые, требуя ручного сопоставления или игнорируя их различия. Это вызывает закономерный вопрос: почему 1С не объединяет объекты по их названиям и как мы можем управлять этим процессом, чтобы достичь желаемого результата?
Давайте подробно разберем, почему возникает такая ситуация, какие механизмы сопоставления использует платформа 1С, и как мы можем настроить или скорректировать процесс сравнения и объединения, чтобы объекты сопоставлялись так, как нам нужно, используя их имена в качестве основного критерия, а не внутренние идентификаторы GUID.
Прежде всего, давайте проясним терминологию, которая часто вызывает путаницу. Когда мы говорим об "идентификаторе" объекта в контексте 1С:Предприятия, мы можем подразумевать несколько вещей:
Документ.ПриходнаяНакладная или Справочник.Номенклатура. Это человекочитаемое название, которое мы видим в дереве конфигурации.a4b5c6d7-e8f9-0123-4567-89abcdef0123). Он является ключевым для платформы, поскольку гарантирует уникальность объекта в любой конфигурации и позволяет отслеживать его, даже если мы меняем его полное имя.В диалоге "Сравнение и объединение" под "идентификатором" платформа 1С в первую очередь подразумевает именно внутренний GUID объекта. Это критически важно для понимания логики сопоставления.
Механизм сравнения и объединения конфигураций в 1С:Предприятии работает по определенным правилам. Мы выясним, как платформа определяет, являются ли два объекта из разных конфигураций одним и тем же объектом:
Если конфигурации считаются родственными (например, при обновлении типовой конфигурации поставщика или при сравнении конфигурации базы данных с конфигурацией из файла, которая ранее была получена из этой же базы), 1С в первую очередь ориентируется на внутренние GUIDы объектов. Имена объектов в этом случае играют второстепенную роль. Это сделано для того, чтобы мы могли свободно переименовывать объекты метаданных (например, для пометки на удаление или для изменения семантики) без потери их связи с предыдущими версиями. Если GUIDы совпадают, объекты считаются идентичными, даже если их имена изменились.
Когда конфигурации не являются родственными (например, при сравнении двух произвольных файлов конфигураций .cf, которые были разработаны независимо друг от друга, или когда конфигурация полностью снята с поддержки), 1С в первую очередь пытается сопоставить объекты по их полным именам. Если имена совпадают, система предполагает, что это один и тот же объект. Однако, если даже при одинаковых именах у объектов различаются GUIDы, платформа будет считать их разными. Именно эта ситуация часто приводит к необходимости ручного сопоставления.
Основная причина, по которой объекты с одинаковыми именами могут не сопоставляться автоматически, заключается в том, что у них разные внутренние GUIDы. Это может произойти, если объекты были:
Теперь, когда мы понимаем механизм, давайте рассмотрим, какие шаги мы можем предпринять, чтобы заставить 1С сопоставлять объекты по их именам или, по крайней мере, значительно упростить этот процесс.
Это один из наиболее прямых способов повлиять на логику сопоставления. Если вы сравниваете две конфигурации, которые, по вашему мнению, должны сопоставляться по именам, а не по GUIDам, мы можем явно указать это системе.
Действия:
Конфигурация -> Сравнить, объединить с конфигурацией из файла...).Установка этого флажка повышает приоритет сопоставления по именам объектов, поскольку теряется история и предположение о сохранении GUIDов. Это может значительно сократить количество несопоставленных объектов при сравнении конфигураций, разработанных независимо друг от друга.
Если автоматическое сопоставление все еще не дает желаемого результата, или если количество несопоставленных объектов не слишком велико, 1С предоставляет мощный инструмент для интерактивного (ручного) сопоставления в окне сравнения.
Действия:
Ctrl для множественного выбора или выбирая по одному).Этот метод позволяет нам точно указать системе, какие объекты должны считаться идентичными, несмотря на различия в GUIDах или даже незначительные расхождения в именах (если мы вручную подтверждаем соответствие). Хотя это может быть трудоемко для большого числа объектов, для критически важных или уникальных объектов это надежный способ.
Рекомендация выгрузить конфигурации в файлы .cf и затем сравнивать их является стандартной и часто полезной практикой. Это позволяет работать с двумя независимыми файлами конфигураций.
Действия:
Конфигурация -> Сохранить конфигурацию в файл... выгрузите ее в файл, например, МояКонфигурация.cf.КонфигурацияДляСравнения.cf.Конфигурация -> Сравнить, объединить с конфигурацией из файла... и укажите один из сохраненных .cf файлов. Затем, возможно, потребуется снова воспользоваться той же опцией для второго файла.При сравнении двух файлов .cf, которые не имеют общей истории поддержки, система автоматически будет рассматривать их как "неродственные", что, как мы уже выяснили, смещает приоритет сопоставления в сторону имен объектов.
Если мы сталкиваемся с проблемой сопоставления объектов, которые имеют признак "Заимствованные" (как было упомянуто в сообщении 7), это чаще всего означает, что мы работаем с механизмом расширений конфигурации.
Анализ ситуации:
Заимствованные объекты — это объекты основной конфигурации, которые были включены в расширение для доработки. При сравнении и объединении таких объектов действуют специфические правила, которые могут игнорировать признак контролируемости для пары "собственный - заимствованный" и объединять значения. Если расширение было создано или модифицировано таким образом, что заимствованный объект потерял свою связь с оригиналом (например, путем некорректного копирования вместо заимствования), то и здесь могут возникнуть проблемы с GUIDами.
В таких случаях, помимо общих рекомендаций, важно убедиться, что логика работы с расширениями была корректной и не привела к созданию дубликатов с новыми GUIDами вместо модификации существующих заимствованных объектов.
В некоторых случаях, когда конфигурация ранее была на поддержке, а затем с нее снималась или изменялись "вручную" без соблюдения правил обновления поставщика, сопоставление по GUID может быть нарушено. Даже при одинаковых именах объекты будут считаться разными.
Действия:
Конфигурация -> Поддержка -> Настройка поддержки... -> Снять с поддержки)..cf) она будет рассматриваться как неродственная, что повысит приоритет сопоставления по именам.Для продвинутых сценариев, когда проблема с GUIDами носит системный характер (например, после множественных некорректных копирований, слияний или преобразований конфигураций), мы можем провести более детальный анализ.
Действия:
Конфигурация -> Сохранить конфигурацию в файлы...). Укажите пустую папку, куда будут выгружены все метаданные.configDumpInfo (или похожим, в зависимости от версии платформы). Этот файл содержит GUIDы всех объектов метаданных, их полные имена и другую служебную информацию.Такой анализ поможет понять масштаб проблемы и спланировать более глубокие действия, возможно, даже с использованием инструментов для программного сопоставления или корректировки GUIDов (что является задачей повышенной сложности и риска).
Для разработчиков, активно использующих интегрированную среду разработки 1C:Enterprise Development Tools (EDT), предусмотрены более гибкие и явные настройки сравнения и объединения.
Настройка в EDT:
В EDT при выполнении операций сравнения и слияния проектов мы можем явно указать "Стратегию сопоставления". Обычно доступны следующие варианты:
Использование EDT предоставляет более точный и контролируемый процесс сопоставления, что особенно ценно в условиях командной разработки и работы с системами контроля версий.
В заключение, проблема сопоставления объектов при сравнении и объединении конфигураций в 1С часто сводится к недопониманию между тем, что мы считаем "идентификатором" (имя объекта), и тем, что является им для платформы (GUID). Понимание логики работы платформы, а также знание доступных инструментов и настроек, позволяют нам эффективно управлять этим процессом. Будь то изменение режима сравнения на "неродственные конфигурации", ручное сопоставление или применение более глубоких методов анализа GUIDов, у нас есть арсенал средств для решения данной задачи.
Важно помнить, что каждый случай уникален, и мы должны анализировать конкретную ситуацию, чтобы выбрать наиболее подходящий метод сопоставления. Правильное применение этих подходов поможет нам избежать ошибок, связанных с дублированием объектов или потерей изменений при обновлении и слиянии конфигураций.