Часто при поддержке нетиповых конфигураций, например, 1С:Розница, мы сталкиваемся с ситуацией, когда предыдущий разработчик изменил имя типового общего модуля (добавив суффикс _old), а вместо него создал свой собственный с таким же именем (например, ОбменДаннымиXDTOСервер). Разберем ситуацию: при попытке обновить базу файлом .cfu изменения поставщика "цепляются" к старому модулю с суффиксом _old, игнорируя ваш новый кастомный модуль. Выясним причину такого поведения платформы и рассмотрим рабочие способы решения данной проблемы.
Проанализируем механику работы обновлений платформы 1С. При использовании файла обновления (формат .cfu) платформа жестко сопоставляет объекты метаданных исключительно по их внутренним идентификаторам (UUID), а не по именам. Внутренний идентификатор присваивается объекту при его создании и никогда не меняется, даже если вы переименуете объект в конфигураторе. Именно поэтому официальные стандарты разработки категорически запрещают переименовывать типовые объекты.
Поскольку ваш кастомный модуль был создан с нуля, он имеет новый UUID. А переименованный модуль _old сохранил оригинальный идентификатор поставщика. Поэтому обновление корректно находит старый объект по UUID и пытается записать новый код поставщика именно в него.
Рассмотрим наиболее правильный способ, который вернет конфигурацию к стандартам разработки 1С.
_old) его изначальное имя — ОбменДаннымиXDTOСервер.ОбменДаннымиXDTOСервер_Нетиповой..cfu. Важно: после завершения обновления конфигурации базы данных не запускайте базу в режиме 1С:Предприятие.ОбменДаннымиXDTOСервер_Нетиповой. Настоятельно рекомендуем выносить эти изменения в расширение конфигурации, чтобы в будущем избежать проблем с обновлениями.Разберем ситуацию, когда мы хотим принудительно указать платформе, какие объекты следует сопоставлять друг с другом. Файл .cfu не позволяет менять стратегию сравнения, поэтому нам потребуется полный файл конфигурации поставщика (.cf) требуемого релиза.
.cf файл.Посмотрим на более глубокий, но эффективный способ решения задачи. Если необходимо сохранить текущую структуру и "починить" связь с конфигурацией поставщика без ручного переноса кода, мы можем поменять UUID объектов местами в исходных файлах конфигурации.
ОбменДаннымиXDTOСервер и ОбменДаннымиXDTOСервер_old.uuid или Id).В результате этих действий ваш рабочий кастомный модуль получит типовой UUID от поставщика, а переименованный старый модуль получит пользовательский идентификатор. Теперь при обновлении из .cfu платформа подхватит именно нужный нам модуль.
Разберем по шагам радикальный метод на случай, если старый модуль (_old) больше не несет смысловой нагрузки, и вы хотите оставить все доработки в новом модуле, сделав его типовым и поддерживаемым.
_old..cf файлом типовой конфигурации нужного релиза. На вопрос системы о постановке на поддержку ответьте утвердительно.ОбменДаннымиXDTOСервер.Таким образом, информационная база заново встанет на поддержку, ваш рабочий модуль получит правильный внутренний идентификатор, а "мусорный" объект будет навсегда удален. После объединения обязательно проверьте итоговый код модуля: ваши ручные доработки останутся в тексте, но их нужно будет аккуратно сверить с новым кодом, который пришел от поставщика.