Обновление конфигураций на БСП, у которых в расширениях есть собственные объекты с данными
Показан способ обновления конфигураций, основанных на БСП, в тех случаях, когда в расширениях имеются собственные объекты данных (Справочники, Документы, Регистры сведений, Планы обмена).
- Описание
- Подробнее
Описание
Как все хорошо начиналось
Платформа версии 8.3.11 принесла программистам новую, доселе не виданную радость — возможность создавать в расширениях свои объекты, хранящие данные. Чем я и решил воспользоваться. Насоздавал в расширении справочников, регистров, и начал радоваться жизни… ровно до того момента, как решил накатить штатное обновление конфигурации.
Беда пришла откуда не ждали
При обновлении вдруг выползло страшное окошко, которое ничего хорошего не обещало:

Первая мысль — "WTF?", ведь до этого расширение работало и ни на что не жаловалось.
Вторая мысль — ок, я сделаю как ты просишь, только не бей. И вот тут облом! Сообщение любезно подсказывает, что можно сделать, но эти действия ни к чему не приводят!
За чашечкой кофе приходит третья мысль — хочешь записи в справочниках? Будут тебе записи в справочниках! Быстренько пишу обработку, которая эти записи туда вносит (ну не то чтобы быстренько… пришлось поковырять исходники), запускаю… И ничего! И не просто ничего, а ничего с приколом — мои с любовью внесенные записи оказались помечены на удаление. "WTF?" снова подумал я и сел курить исходники более вдумчиво.
Ларчик открывался достаточно просто
В модуле менеджера справочника ИдентификаторыОбъектовМетаданных есть функция СвойстваКоллекцийОбъектовМетаданных, а в ней вот такие строки:
// Роли
Строка = СвойстваКоллекцийОбъектовМетаданных.Добавить();
Строка.Идентификатор = Новый УникальныйИдентификатор("115c4f55-9c20-4e86-a6d0-d0167ec053a1");
Строка.Имя = "Роли";
Строка.Синоним = НСтр("ru = 'Роли'");
Строка.ИмяВЕдЧисле = "Роль";
Строка.СинонимВЕдЧисле = НСтр("ru = 'Роль'");
Строка.БезДанных = Истина;
Строка.БезКлючаОбъектаМетаданных = Истина;
Строка.ОбъектыРасширений = Истина;
// ПланыОбмена
Строка = СвойстваКоллекцийОбъектовМетаданных.Добавить();
Строка.Идентификатор = Новый УникальныйИдентификатор("269651e0-4b06-4f9d-aaab-a8d2b6bc6077");
Строка.Имя = "ПланыОбмена";
Строка.Синоним = НСтр("ru = 'Планы обмена'");
Строка.ИмяВЕдЧисле = "ПланОбмена";
Строка.СинонимВЕдЧисле = НСтр("ru = 'План обмена'");
// Справочники
Строка = СвойстваКоллекцийОбъектовМетаданных.Добавить();
Строка.Идентификатор = Новый УникальныйИдентификатор("ede89702-30f5-4a2a-8e81-c3a823b7e161");
Строка.Имя = "Справочники";
Строка.Синоним = НСтр("ru = 'Справочники'");
Строка.ИмяВЕдЧисле = "Справочник";
Строка.СинонимВЕдЧисле = НСтр("ru = 'Справочник'");
