Идентификаторы объектов метаданных как обновить
Перейти к содержимому

Идентификаторы объектов метаданных как обновить

  • автор:

Общие правила обмена объектами метаданных между конфигурациями

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

  • Копирование объектов метаданных через буфер обмена
  • Объединение конфигурации с файлом
  • Загрузка конфигурации из файла
  • Хранилище конфигурации
  • Обновление конфигурации, находящейся на поддержке
  • Обновление конфигурации базы данных

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

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

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

Механизм Способ сопоставления Поведение идентификатора при перемещении объектаКопирование через буфер обмена Сопоставление не используется. Объект всегда вставляется как новый. ИзменяетсяОбъединение конфигураций Сопоставление по имени. При отсутствии соответствия по имени – сопоставление по внутреннему идентификатору. Возможна ручная установка соответствия. При копировании нового объекта изменяется. При объединении двух объектов, между которыми обнаружено соответствие, не изменяется.Сохранение в файл и загрузка конфигурации При загрузке выполняется полная замена на новую конфигурацию. Сопоставление не используется. Не изменяетсяХранилище конфигурации При подключении к хранилищу выполняется загрузка конфигурации. При последующих операциях — сопоставление по идентификаторам. Не изменяетсяОбновление конфигурации базы данных Сопоставление по идентификаторам. В случае нарушения соответствия, данные информационной базы будут потеряны. Не изменяетсяОбновление конфигурации находящейся на поддержке

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

При отключенной возможности изменений идентификатор не изменяется. При включенной возможности изменений возможны разные варианты. Однако сохранение соответствий при использовании данного механизма гарантируется.

Три уровня работы механизмов

Таким образом, механизмы переноса объектов можно разделить по трем уровням:

  1. Механизмы которые требуют и обеспечивают строгое соответствие идентификаторов. К ним относятся сохранение / загрузка конфигурации, работа с хранилищем конфигурации, обновление конфигурации базы данных и обновление конфигурации, находящейся на поддержке при отключенной возможности изменений.
  2. Механизмы, которые используют соответствие по идентификаторам, но не гарантируют их неизменность. К ним относится обновление конфигурации, находящейся на поддержке при включенной возможности изменений.
  3. Механизмы, которые не используют и не обеспечивают неизменность идентификаторов. К ним относятся копирование через буфер обмена и объединение конфигурации.

Можно определить следующее правило:

Для обеспечения корректного сопоставления объектов уровень механизмов нельзя понижать.

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

Примеры

Параллельное создание объектов

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

Восстановление автоматической поддержки конфигурации поставщика

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

Примеры анализа цепочки изменений конфигурации

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

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

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

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

Обновление справочника «Идентификаторы объектов метаданных» без привязки к конфе и релизу БСП

Обработка позволяет обновить справочник «Идентификаторы объектов метаданных» для любой конфигурации, в которой этот справочник используется. Ее работа не привязана к версии БСП. Работоспособность тестировал для: Тестировал для: Управление небольшой фирмой 1.6 (1.6.5.1) ЗУП 3.1 (3.1.4.167) Бухгалтерия предприятия, редакция 3.0 (3.0.57.17) Управление торговлей, редакция 11.2 (11.2.2.100) Управление торговлей, редакция 11.3 (11.3.4.93)

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

Начну с того, что после добавления новой роли в конфу(на первый взгляд безобидное действие), начала появляться ошибка

Ошибка при выполнении функции ОбщегоНазначения.ИдентификаторыОбъектаМетаданных()
Для Объекта метаданных < Имя_Объекта >не найден идентификатор в справочнике «Идентификаторы объектов метаданных»
Для разработчика: возможно требуется обновить вспомогательные данные, которые влияют на работу программы. Для выполнения обновления можно:
— воспользоваться внешней обработкой «Инструменты разработчика: Обновление вспомогательных данных»
— либо запустить программу с параметром командной строки 1С: Предприятия 8
«/С ЗапуститьОбновлениеИнформационнойБазы»
— либо увеличить номер версии конфигурации, чтобы при очередном запуске выполнились процедуры обновления данных информационной базы.

К слову сказать, появляется она не только при добавлении роли, а и при добавлении других объектов.

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

Ключевые слова: ИдентификаторыОбъектаМетаданных ЗапуститьОбновлениеИнформационнойБазы идентификаторы объектов объекта метаданных

Файлы для скачивания
50р

  • ОбновлениеИдентификаторовОбъектовБезПривязкиКВерсииБСП.epf (6Kb)
  • Обновление служебного справочника «Идентификаторы объектов метаданных»
  • дата загрузки: 06.02.2018 12:40:34

FAQ и советы по 1С

Если вам потребовалось обновить идентификаторы объектов метаданных в 1С, то сапое простое это запустить базу с ключом:

/c ЗапуститьОбновлениеИнформационнойБазы

Обратите внимание ключ «с» должен быть на латинице.

Количество показов: 128720

Картинка дня 😉

Когда запускаешь обработку а сам даже не тестил её

Подпишитесь:

Последние 10 подписчиков:

Всего подписчиков: 417

Сайт посвящен конфигурации 1C:Управление торговлей 11 и CMS Битрикс. Все статьи являются авторскими, копирование и распространение запрещено.

Новый элемент в справочнике «Идентификаторы объектов метаданных»

Здравствуйте.
1С:Предприятие 8.2 (8.2.15.310)
Управление торговлей, редакция 11.0 (11.0.9.14)
Я создал новую подсистему, хочу в панель действий добавить команду открытия дополнительный отчетов, как это сделано для типовых подсистем. Добавил. После нажатия на команду появляется сообщение:
Цитата
: Ошибка при выполнении функции ОбщегоНазначения.ИдентификаторОбъектаМетаданных().

Для объекта метаданных «Подсистема.Навигация»
не найден идентификатор
в справочнике «Идентификаторы объектов метаданных».

Если справочник не был обновлен при обновлении информационной базы,
следует выполнить обновление вручную:
«Все функции» -> «Справочник. Идентификаторы объектов метаданных» ->
команда формы списка «Обновить данные справочника».

Некоторые объекты метаданных могут быть добавлены в справочник только в виде
предопределенных элементов, например, подсистемы.

ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(

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

Цитата
: В справочнике Идентификаторы объектов метаданных
для предопределенного элемента
«Подсистема_Навигация»,
найден объект метаданных
«Подсистема.Навигация».

Но предопределенные элементы не используются для
объектов метаданных типа «Подсистема».

Следуется удалить предопределенный элемент.
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(

КРУГ ЗАМКНУЛСЯ.
(1) Некоторые объекты метаданных могут быть добавлены в справочник только в виде
предопределенных элементов, например, подсистемы.

(2)Но предопределенные элементы не используются для
объектов метаданных типа «Подсистема».

Как правильно добавить информацию о новой подсистеме в справочник, чтобы при следующем обновлении справочника (по кнопке «Обновить данные справочника»), не вылетала ошибка?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *