В практике сопровождения баз данных 1С нередко возникает задача полного возврата доработанной или снятой с поддержки конфигурации к типовому состоянию от поставщика. Однако при попытке применить команду Загрузить конфигурацию из файла администраторы и разработчики часто сталкиваются с критической проблемой: в окне реорганизации информации платформа сообщает об удалении существующих реквизитов и табличных частей и создании новых с точно такими же именами. В результате после обновления конфигурации базы данных вся накопленная информация в этих полях безвозвратно очищается.
Разберем природу возникновения этой ошибки, выясним внутреннюю механику платформы 1С и подробно рассмотрим несколько способов безопасного решения проблемы.
Проанализируем архитектуру хранения метаданных платформы 1С:Предприятие. Для каждого объекта конфигурации, будь то документ, справочник, табличная часть или отдельный реквизит, платформа генерирует уникальный внутренний идентификатор — UUID (GUID). Пользовательское имя (например, Организация) является лишь внешним представлением для разработчика, тогда как физическая привязка к колонкам и таблицам в базе данных СУБД осуществляется строго по внутреннему UUID.
Если в процессе предыдущих доработок или некорректных обновлений реквизит был удален и создан заново вручную, скопирован через буфер обмена или перенесен из другой базы без механизма сравнения и объединения, платформа присваивает ему новый UUID. При выполнении операции Загрузить конфигурацию из файла платформа не выполняет интеллектуального сопоставления по именам — она полностью заменяет структуру метаданных на структуру из файла cf. Обнаружив, что реквизита со старым UUID больше нет, а появился новый с другим идентификатором, СУБД выполняет команду удаления старой колонки таблицы и добавления новой пустой колонки. В итоге реквизит Организация в документах СчетНаОплату и других объектах оказывается полностью пустым.
Самый правильный и безопасный штатный метод — использовать механизм сравнения и объединения конфигураций. В отличие от жесткой загрузки, данный механизм умеет сопоставлять объекты метаданных по их именам и типам, сохраняя уже существующие в базе данных UUID физических таблиц.
Разберем этот процесс по шагам:
.cf) в точности того же релиза, что и текущая база.Если конфигурация сильно повреждена или содержит множество конфликтующих объектов, сопоставить которые через штатное объединение не удается, применим подход с переносом данных в чистую типовую базу.
Рассмотрим порядок действий для данного сценария:
ВыгрузкаЗагрузкаДанныхXML (или штатный универсальный обмен данными).UUID метаописания.Если перенос всей базы через XML не подходит из-за огромного объема данных, используем внутренний перенос через временные поля.
Разберем этот алгоритм:
Организация_Временная) с тем же типом данных.
Выборка = Документы.СчетНаОплатуПокупателю.Выбрать();
Пока Выборка.Следующий() Цикл
ДокОбъект = Выборка.ПолучитьОбъект();
ДокОбъект.Организация_Временная = ДокОбъект.Организация;
ДокОбъект.Записать(РежимЗаписиДокумента.Запись);
КонецЦикла;
.cf через меню Конфигурация → Загрузить конфигурацию из файла. Временный реквизит Организация_Временная останется в структуре, а типовой реквизит Организация пересоздастся с правильным типовым UUID.
Выборка = Документы.СчетНаОплатуПокупателю.Выбрать();
Пока Выборка.Следующий() Цикл
ДокОбъект = Выборка.ПолучитьОбъект();
ДокОбъект.Организация = ДокОбъект.Организация_Временная;
ДокОбъект.Записать(РежимЗаписиДокумента.Запись);
КонецЦикла;
Организация_Временная из метаданных и повторно применим обновление базы данных.В современных версиях платформы 1С:Предприятие 8.3 доступен инструмент групповой выгрузки конфигурации в исходные XML-файлы.
Посмотрим, как исправить UUID напрямую в файлах описания:
СчетНаОплату) и найдем узел реквизита Организация.uuid на идентификатор из типовой конфигурации.Проанализируем ключевые моменты, на которые необходимо обращать внимание при любых операциях с метаданными:
UUID метаданных в центральном узле приведет к нарушению целостности обмена с подчиненными узлами, что потребует повторного создания начальных образов.UUID реквизитов может потребовать обновления сопоставлений на стороне внешнего сервиса.