При выполнении последовательного обновления конфигураций (особенно при обновлении пустых информационных баз или при накатывании цепочки файлов .cfu) разработчики и администраторы нередко сталкиваются с ошибкой реструктуризации базы данных:
Справочник.ВидыОтправляемыхДокументов: Имя предопределенного элемента не уникально: БухОтчетностьМП
Такая ситуация возникает даже на абсолютно чистых базах, развернутых из файла конфигурации .cf. Разберем детально механизм возникновения этой коллизии и рассмотрим все способы ее устранения.
Проанализируем, почему возникает конфликт имен предопределенных данных при обновлении конфигурации:
ИмяПредопределенныхДанных.8.3.6.2332, разработчики платформы встроили строгую проверку уникальности значения свойства ИмяПредопределенныхДанных на этапе реструктуризации таблиц. В более ранних версиях (например, в линейках 8.3.5 и ранних 8.3.6) платформа допускала пропуск дублей и продолжала применение изменений.Рассмотрим самый быстрый способ обхода ошибки, если вам необходимо накатить цепочку старых релизов. Поскольку жесткий контроль уникальности был активирован в более поздних билдах платформы, для прохождения проблемного релиза можно использовать более старую версию платформы (например, 8.3.6.1977 или 8.3.5).
8.3.6 или более раннюю.Разберем вариант, который позволяет обойти ошибку без смены версии платформы. Платформа 1С предоставляет специальный параметр командной строки, отключающий автоматическое обновление предопределенных данных при реструктуризации.
"C:\Program Files\1cv8\8.3.X.XXXX\bin\1cv8.exe" CONFIG /F "D:\Bases\MyBase" /SetPredefinedDataUpdate -DoNotUpdateAutomatically
"C:\Program Files\1cv8\8.3.X.XXXX\bin\1cv8.exe" CONFIG /F "D:\Bases\MyBase" /SetPredefinedDataUpdate -Auto
Посмотрим на пример программного управления механизмом предопределенных данных. Если в базу удается войти в режиме «1С:Предприятие», можно отключить автоматическое обновление с помощью встроенного языка:
// Отключаем автоматическое обновление предопределенных данных
УстановитьОбновлениеПредопределенныхДанныхИнформационнойБазы(ОбновлениеПредопределенныхДанных.НеОбновлятьАвтоматически);
После применения проблемного обновления конфигурации в Конфигураторе необходимо вернуть режим автоматического обновления обратно:
// Включаем автоматическое обновление предопределенных данных
УстановитьОбновлениеПредопределенныхДанныхИнформационнойБазы(ОбновлениеПредопределенныхДанных.Авто);
Если задвоенные элементы уже физически записаны в таблицу справочника, их можно отвязать от предопределенных имен программно. Разберем этот сценарий:
ИмяПредопределенныхДанных.
Выборка = Справочники.ВидыОтправляемыхДокументов.Выбрать();
Пока Выборка.Следующий() Цикл
Если Выборка.ИмяПредопределенныхДанных = "БухОтчетностьМП" Тогда
Объект = Выборка.ПолучитьОбъект();
// Включаем режим загрузки, чтобы обойти системные проверки
Объект.ОбменДанными.Загрузка = Истина;
Объект.ИмяПредопределенныхДанных = "";
Объект.Записать();
Прервать; // Очищаем только дублирующий элемент
КонецЕсли;
КонецЦикла;
Проанализируем правильную методику перехода между релизами:
.cfu подряд исключительно в Конфигураторе. Выполняйте запуск режима «1С:Предприятие» хотя бы на узловых (финальных в рамках промежуточной ветки) релизах. Это позволит механизмам БСП корректно выполнить служебные обработчики обновления и сопоставить ссылки предопределенных данных.3.0.22.223). Попробуйте изменить траекторию перехода, выбрав альтернативную цепочку релизов из доступных в матрице обновлений: например, обновиться на 3.0.22.219, а затем сразу на 3.0.22.230.1cv8.cf или шаблон .dt), минуя последовательное обновление старых промежуточных сборок.