Введение
В процессе разработки и обновления конфигураций 1С может возникнуть проблема, связанная с несоответствием внутренних идентификаторов метаданных. Эта проблема становится особенно критичной, если в разрабатываемой конфигурации и конфигурации базы данных, для которой применяются изменения (рабочей базе), идентификаторы отличаются. В результате, при обновлении конфигурации базы данных, таблицы с не совпавшими идентификаторами будут очищены, что приведет к потере данных.
Часто такие ситуации возникают, когда разработчик берет рабочую базу и подключает ее к хранилищу разработки, или загружает конфигурацию из файла .cf, сохраненного из базы разработки, а затем обновляет конфигурацию базы данных. Если идентификаторы метаданных в этих конфигурациях не совпадают, система считает, что метаданные изменились, и сбрасывает соответствующие таблицы. Потеря данных может повлечь за собой серьезные последствия для бизнеса, поэтому важно уметь корректировать идентификаторы метаданных и предотвращать такие ситуации.
Идентификаторы метаданных в 1С
Идентификаторы метаданных — это внутренние идентификаторы, которые присваиваются каждому объекту метаданных. Эти идентификаторы уникальны и назначаются автоматически при создании нового объекта метаданных, будь то справочник, документ, регистр или любой другой объект в конфигурации.
Идентификаторы метаданных играют ключевую роль в работе системы, так как с их помощью платформа 1С однозначно идентифицирует каждый объект в базе данных. При изменении конфигурации, в том числе при обновлении, система опирается на эти идентификаторы для сопоставления объектов метаданных с физическими таблицами в базе данных.
Как появляются проблемы с идентификаторами метаданных
Несоответствие идентификаторов может произойти в нескольких случаях:
- Если разработчик выполняет копирование метаданных из другой конфигурации, используя простое копирование и вставку (Ctrl+C, Ctrl+V), внутренние идентификаторы не переносятся. Вместо этого создаются новые идентификаторы для каждого объекта метаданных. Это часто происходит, когда разработчик ленится ждать и избегает выполнения длительных операций сохранения конфигурации в файл и последующего сравнения или объединения с целевой конфигурацией.
- Если метаданные переносятся с использованием функции сравнения и объединения конфигураций, и установлен флаг "Режим копирования", то внутренние идентификаторы метаданных также переносятся и остаются равными оригинальным.
Проблема усугубляется тем, что в конфигураторе 1С идентификаторы не отображаются, а метаданные визуально выглядят идентично — переносятся и структура, и типы, и тексты модулей. Это создает ложное впечатление, что все работает корректно. Однако несоответствие идентификаторов — это как мина замедленного действия, которая может в будущем вызвать серьезные проблемы, такие как потеря данных при обновлении конфигурации.
Также различия в идентификаторах можно увидеть, если запустить режим простого сравнения конфигураций (отдельный режим без возможности объединения) и снять галку "Устанавливать соответствия по именам...". Или выполнить сравнение с конфигурацией БД. Эти методы помогают выявить и исправить проблемы заранее.
Методы сравнения метаданных в зависимости от операции
Операция | Метод сравнения |
---|---|
Сравнение/объединение с файлом | Сначала по имени, затем по идентификатору |
Сравнение/объединение с конфигурацией хранилища | По идентификаторам |
Сравнение/объединение с конфигурацией БД | По идентификаторам |
Сравнение/объединение с конфигурацией поставщика | По идентификаторам, с учетом запомненных ранее соответствий |
Сравнение (без объединения - есть такая отдельная операция :-Ж ) | Любой режим по идентификаторам или по именам (см скрин ниже) |
Исправление идентификаторов метаданных
Итак, как исправить неверные идентификаторы в вашей конфигурации?
Допустим, у нас есть рабочая база с верными идентификаторами, и база разработки с неверными идентификаторами
- Выгружаем конфигурацию из базы с правильными идентификаторами (как правило, рабочая база) в файл правильный.cf
- Сохраняем конфигурацию разработки в файл неправильный.cf
- Загружаем полностью конфигурацию из файла правильный.cf через меню "конфигурация-загрузить конфигурацию из файла", тем самым полностью перетираем нашу конфигурацию разработки.
- Через операцию Сравнения/объединения с файлом возвращаем все наши доработки в текущую конфигурацию
Если конфигурация подключена к хранилищу разработки, то тут финт с полной загрузкой конфигурации не пройдет, эта опция заблокирована. И даже если вы сначала отключитесь от хранилища, то при подключении к нему заново конфигурация опять перетрется на неверную из хранилища.
В таком случае маневр кроется в том, что нам надо "затолкать" конфигурацию с верными идентификаторами в конфигурацию базы данных нашей базы разработки. Тут 2 путя:
или
- Отключаемся от хранилища разработки
- Загружаем полностью конфигурацию из файла правильный.cf через меню "конфигурация-загрузить конфигурацию из файла", тем самым полностью перетираем нашу конфигурацию разработки
- Обновляем конфигурацию БД (F7)
- Подключаемся заново к хранилищу разработки, но не обновляем конфигурацию БД
- Захватываем объекты с неверными идентификаторами, чтобы была возможность удалить и создать новые метаданные или их реквизиты/измерения итд (или все сразу, вместе с корнем, если вы можете себе это позволить :-Ж )
- Запускаем сравнение/объединение с конфигурацией БД: меню "Конфигурация-Конфигурация БД-Сравнить/объединить с конфигурацией БД"
- Включаем опцию "Разрешать удалять объекты" в настройках сравнения
- И сразу видим расхождения в одноименных метаданных.
(на месте замков должны быть чекбоксы, но мне лень делать другой скрин) - Верные объекты отмечаем для добавления, а неверные — для удаления.
- Выполняем операцию объединения
- Помещаем изменения в хранилище. При этом в истории хранилища вы увидите что одни объекты удалились, а другие создались.
или
- Заменяем базу разработки копией рабочей базы. Не забывая, естественно, поместит доработки в хранилище или в отдельный файл.
- Подключаемся заново к хранилищу разработки, но не обновляем конфигурацию БД
- Захватываем объекты с неверными идентификаторами, чтобы была возможность удалить и создать новые метаданные, или их реквизиты/измерения итд (или все сразу, вместе с корнем, если вы можете себе это позволить :-Ж )
- Запускаем сравнение/объединение с конфигурацией БД: меню "Конфигурация-Конфигурация БД-Сравнить/объединить с конфигурацией БД"
- Включаем опцию "Разрешать удалять объекты" в настройках сравнения.
- И сразу видим расхождения в одноименных метаданных.
(на месте замков должны быть чекбоксы, но мне лень делать другой скрин) - Верные объекты отмечаем для добавления, а неверные — для удаления.
- Выполняем операцию объединения
- Помещаем изменения в хранилище. При этом в истории хранилища вы увидите что одни объекты удалились, а другие создались.
Если конфигурация находится на поддержке, снимите режим поддержки для объектов, которые планируется удалить. Конфигурации на поддержке также могут страдать от проблемы несоответствия идентификаторов, так как настройка поддержки хранит соответствие идентификаторов поставщика и текущей базы данных, и сравнение идет с учетом этого соответствия, а не просто по идентификаторам.
Вместо итога
Совет: Перед применением изменений в рабочей базе выполняйте сравнение/объединение с конфигурацией базы данных. Этот шаг поможет выявить и исправить возможные расхождения в идентификаторах метаданных, что предотвратит потерю данных.
Всем бобра :-)