Как вернуть измененную конфигурацию 1С на типовую поддержку при несовпадении внутренних идентификаторов реквизитов

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

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

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

Почему возникает расхождение идентификаторов и потеря данных

Проанализируем архитектуру хранения метаданных платформы 1С:Предприятие. Для каждого объекта конфигурации, будь то документ, справочник, табличная часть или отдельный реквизит, платформа генерирует уникальный внутренний идентификатор — UUID (GUID). Пользовательское имя (например, Организация) является лишь внешним представлением для разработчика, тогда как физическая привязка к колонкам и таблицам в базе данных СУБД осуществляется строго по внутреннему UUID.

Если в процессе предыдущих доработок или некорректных обновлений реквизит был удален и создан заново вручную, скопирован через буфер обмена или перенесен из другой базы без механизма сравнения и объединения, платформа присваивает ему новый UUID. При выполнении операции Загрузить конфигурацию из файла платформа не выполняет интеллектуального сопоставления по именам — она полностью заменяет структуру метаданных на структуру из файла cf. Обнаружив, что реквизита со старым UUID больше нет, а появился новый с другим идентификатором, СУБД выполняет команду удаления старой колонки таблицы и добавления новой пустой колонки. В итоге реквизит Организация в документах СчетНаОплату и других объектах оказывается полностью пустым.

Способ 1. Корректное объединение и сопоставление по именам

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

Разберем этот процесс по шагам:

  1. Откроем информационную базу в режиме Конфигуратор и создадим полную резервную копию базы данных.
  2. Перейдем в главное меню: Конфигурация → Сравнить, объединить с конфигурацией из файла и выберем файл типовой конфигурации (.cf) в точности того же релиза, что и текущая база.
  3. В открывшемся окне сравнения проверим сопоставление объектов. Если имена совпадают, платформа сопоставит реквизиты между собой. Снимем флажки с тех доработок, которые не должны переноситься, или оставим полное замещение типовыми свойствами.
  4. Нажмем кнопку Выполнить. В появившемся окне настройки правил поддержки установим для всех типовых объектов режим Объект поставщика редактируется с сохранением поддержки или Объект поставщика не редактируется (на замке).
  5. Нажмем клавишу F7 для обновления конфигурации базы данных.
  6. Внимательно проанализируем окно Реорганизация информации. В списке изменений структуры данных не должно присутствовать операций удаления колонок и таблиц. Напротив реквизитов должна отображаться операция изменения или отсутствовать предупреждения об очистке данных.
  7. После успешного применения изменений объекты встанут на поддержку поставщика без потери реквизитов.

Способ 2. Выгрузка и загрузка данных через универсальную обработку

Если конфигурация сильно повреждена или содержит множество конфликтующих объектов, сопоставить которые через штатное объединение не удается, применим подход с переносом данных в чистую типовую базу.

Рассмотрим порядок действий для данного сценария:

  1. Развернем абсолютно чистую типовую базу из шаблона того же релиза.
  2. Если в исходной базе присутствовали уникальные нетиповые объекты, которые необходимо сохранить, включим возможность изменения в новой базе и перенесем их структуру через сравнение и объединение.
  3. Откроем исходную рабочую базу в режиме 1С:Предприятие и запустим внешнюю обработку ВыгрузкаЗагрузкаДанныхXML (или штатный универсальный обмен данными).
  4. Выгрузим все данные (справочники, документы, регистры сведений, регистры накопления) в файл формата XML. При выгрузке данные сериализуются по именам метаданных, а не по их внутренним UUID метаописания.
  5. Откроем подготовленную чистую базу и с помощью той же обработки выполним загрузку XML-файла.
  6. После завершения загрузки проверим заполнение всех реквизитов. Теперь структура базы полностью идентична типовой, а внутренние идентификаторы метаданных соответствуют конфигурации поставщика.

Способ 3. Двухэтапный перенос данных через временные реквизиты

Если перенос всей базы через XML не подходит из-за огромного объема данных, используем внутренний перенос через временные поля.

Разберем этот алгоритм:

  1. В рабочей конфигурации создадим для каждого проблемного поля временный реквизит (например, Организация_Временная) с тем же типом данных.
  2. Напишем и выполним программную обработку, которая перенесет значения из исходного реквизита во временный:
    
    Выборка = Документы.СчетНаОплатуПокупателю.Выбрать();
    Пока Выборка.Следующий() Цикл
        ДокОбъект = Выборка.ПолучитьОбъект();
        ДокОбъект.Организация_Временная = ДокОбъект.Организация;
        ДокОбъект.Записать(РежимЗаписиДокумента.Запись);
    КонецЦикла;
    
  3. Загрузим типовой файл .cf через меню Конфигурация → Загрузить конфигурацию из файла. Временный реквизит Организация_Временная останется в структуре, а типовой реквизит Организация пересоздастся с правильным типовым UUID.
  4. Обновим конфигурацию базы данных по F7.
  5. Запустим обратную обработку для заполнения нового типового реквизита из сохраненного временного:
    
    Выборка = Документы.СчетНаОплатуПокупателю.Выбрать();
    Пока Выборка.Следующий() Цикл
        ДокОбъект = Выборка.ПолучитьОбъект();
        ДокОбъект.Организация = ДокОбъект.Организация_Временная;
        ДокОбъект.Записать(РежимЗаписиДокумента.Запись);
    КонецЦикла;
    
  6. Удалим временный реквизит Организация_Временная из метаданных и повторно применим обновление базы данных.

Способ 4. Корректировка UUID через выгрузку конфигурации в файлы XML

В современных версиях платформы 1С:Предприятие 8.3 доступен инструмент групповой выгрузки конфигурации в исходные XML-файлы.

Посмотрим, как исправить UUID напрямую в файлах описания:

  1. Выполним выгрузку конфигурации рабочей базы в каталог: Конфигурация → Выгрузить конфигурацию в файлы.
  2. Аналогичным образом выгрузим типовую конфигурацию того же релиза в отдельную папку.
  3. Откроем XML-файл проблемного объекта (например, документа СчетНаОплату) и найдем узел реквизита Организация.
  4. Заменим значение атрибута uuid на идентификатор из типовой конфигурации.
  5. Загрузим отредактированные файлы обратно: Конфигурация → Загрузить конфигурацию из файлов и применим изменения по F7.

Важные предостережения при реорганизации

Проанализируем ключевые моменты, на которые необходимо обращать внимание при любых операциях с метаданными:

  1. Окно реорганизации информации — это главный защитный механизм. Если в окне реорганизации отображается знак предупреждения и операция удаления реквизита, подтверждать обновление нельзя ни в коем случае.
  2. Распределенные информационные базы (РИБ): изменение внутренних UUID метаданных в центральном узле приведет к нарушению целостности обмена с подчиненными узлами, что потребует повторного создания начальных образов.
  3. Внешние интеграции: если сайт или внешняя учетная система обращаются к базе 1С через протоколы OData или Web-сервисы, изменение UUID реквизитов может потребовать обновления сопоставлений на стороне внешнего сервиса.
← На главную