Почему при обновлении 1С задваиваются имена метаданных и как это исправить?

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

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

Разберем подробно, почему это происходит и какими способами можно восстановить правильную связь между объектами, чтобы избежать «удаления-добавления» и потери данных.

Выясним причины расхождения идентификаторов

Проанализируем ситуацию: почему раньше объекты «узнавали» друг друга, а теперь перестали? Основная причина — нарушение цепочки поддержки или независимое создание объектов. Рассмотрим типичные сценарии:

  1. Разрыв связи с поставщиком: Если конфигурация была загружена через команду «Загрузить конфигурацию из файла» вместо «Сравнить и объединить» на этапе, когда базы уже начали развиваться независимо, все внутренние UUID текущей базы заменяются идентификаторами из файла.
  2. Ручное создание одноименных объектов: Если в двух разных базах (например, в рабочей и в копии, которая не была обновлена) вручную создать справочник Склады, они получат разные уникальные номера, даже если их структура полностью совпадает.
  3. Некорректная работа с хранилищем: В редких случаях, когда разные пользователи добавляют объекты с одинаковыми именами до выполнения захвата или принудительного обновления из хранилища, могут возникнуть конфликты идентификации.
  4. Сбои кэша метаданных: Иногда после обновления платформы или аварийного завершения работы конфигуратор может некорректно сопоставлять описания объектов из-за устаревших временных файлов.

Способ 1. Ручное сопоставление в окне сравнения и объединения

Это самый простой и безопасный метод, который позволяет «подсказать» платформе, что два объекта с разными UUID на самом деле являются одним и тем же. Рассмотрим порядок действий:

  1. Откроем окно «Сравнение, объединение с конфигурацией из файла».
  2. Найдем в дереве основную конфигурацию и объект, который задваивается.
  3. Нажмем правой кнопкой мыши на объект в левой колонке (ваша конфигурация).
  4. Выберем пункт меню «Сопоставить с объектом из файла».
  5. В открывшемся окне выберем соответствующий объект из правой колонки (конфигурация из файла).

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

Способ 2. Изменение UUID через выгрузку в XML-файлы

Если объектов много или ручное сопоставление по каким-то причинам не помогает, воспользуемся низкоуровневым методом. Платформа 8.3 позволяет работать с конфигурацией как с набором текстовых файлов. Проанализируем этот процесс:

  1. Выполним команду «Конфигурация» — «Выгрузить конфигурацию в файлы».
  2. В каталоге выгрузки найдем XML файл, описывающий нужный объект метаданных (например, для справочника это будет файл в папке Catalogs).
  3. Откроем файл любым текстовым редактором и найдем тег UUID. Он выглядит примерно так:
    
    <Properties>
        <Name>ИмяРеквизита</Name>
        <Synonym/>
        <Comment/>
        <Type>
            <v8:Type>xs:string</v8:Type>
        </Type>
        <PasswordMode>false</PasswordMode>
        <Format/>
        <EditFormat/>
        <ToolTip/>
    </Properties>
    <Uuid>550e8400-e29b-41d4-a716-446655440000</Uuid>
    
  4. Заменим значение внутри тега <Uuid> на тот идентификатор, который используется в эталонной конфигурации.
  5. Сохраним изменения и выполним обратную операцию: «Конфигурация» — «Загрузить конфигурацию из файлов».

Важно: Этот метод требует крайней осторожности. Перед началом работы обязательно создайте резервную копию базы данных (dt-файл).

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

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

  1. Запустим конфигуратор с параметром /ClearCache. Это принудительно очистит локальные временные файлы, которые могут содержать старые описания метаданных.
  2. Воспользуемся встроенным инструментом: «Администрирование» — «Тестирование и исправление».
  3. Установим флажок «Проверка логической целостности конфигурации». Это поможет выявить скрытые дубли в таблицах описания объектов, которые не видны в обычном дереве метаданных, но мешают при объединении.

Как избежать потери данных при задвоении

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

  1. Никогда не завершайте обновление (кнопка F7), если в окне сравнения вы видите операцию «Удалить» для объекта, который должен остаться.
  2. Сначала добейтесь правильного сопоставления (Способ 1 или 2).
  3. Если объекты уже «разъехались» в работающей базе и данные есть в обоих дублях, вам придется написать обработку по переносу данных из одного реквизита/таблицы в другой, и только после этого удалять лишний объект метаданных.

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

← На главную