Почему после загрузки конфигурации из файла (.cf) исчезают документы?

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

Часто начинающие разработчики сталкиваются с неприятной ситуацией: после обновления нетиповой конфигурации путем загрузки файла .cf пропадают данные, связанные с доработанными объектами. Даже если имена объектов (например, документов) в старой и новой конфигурациях полностью совпадают, их данные бесследно исчезают. Разберем, почему это происходит и как выполнять обновление правильно, чтобы сохранить всю информацию.

Проанализируем типичный случай: вы переносите доработки из "Бухгалтерии 2.0" в "Бухгалтерию 3.0". В старой базе был создан нетиповой документ. В новой конфигурации вы также создали документ с точно таким же именем. После этого вы сохраняете новую конфигурацию в файл .cf и загружаете его в рабочую базу. В результате все экземпляры вашего нетипового документа пропадают. Выясним причину этого явления.

Главная причина — внутренние идентификаторы объектов метаданных (GUID)

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

  1. Имя — то, что мы видим в дереве конфигурации (например, "ДополнительныйАкт"). Это имя используется нами, разработчиками, и пользователями.
  2. Внутренний уникальный идентификатор (GUID или УИД) — уникальная строка из букв и цифр, которую платформа присваивает объекту в момент его создания. Этот идентификатор невидим для пользователя, но именно его система использует для связи объекта метаданных с его данными в таблицах SQL.

Когда вы создаете в новой конфигурации ("Бухгалтерия 3.0") документ с таким же именем, как в старой, платформа присваивает ему совершенно новый, уникальный GUID. Для системы это два абсолютно разных объекта, несмотря на совпадение имен.

Теперь рассмотрим, что происходит при выполнении команды Конфигурация -> Загрузить конфигурацию из файла:

Этот режим — не обновление, а полная замена. Платформа полностью удаляет текущую структуру метаданных базы и на ее место "накатывает" новую из вашего .cf файла. После этого система запускает процедуру реструктуризации базы данных, чтобы привести таблицы в соответствие с новой структурой метаданных.

В процессе реструктуризации происходит следующее:

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

Правильный способ обновления — "Сравнить, объединить"

Чтобы сохранить данные и корректно перенести изменения, необходимо использовать механизм сравнения и объединения. Этот процесс представляет собой "трехстороннее" сравнение:

  1. Старая конфигурация поставщика — исходная типовая версия, на основе которой сделаны ваши доработки.
  2. Ваша текущая рабочая конфигурация — та, что содержит ваши уникальные изменения (с их уникальными GUID).
  3. Новая конфигурация — версия, на которую вы хотите обновиться (из файла .cfu или .cf нового релиза).

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

Разберем по шагам правильный процесс обновления:

  1. Создайте резервную копию! Это самый важный шаг. Любые манипуляции с конфигурацией без свежего бэкапа — огромный риск.

  2. Откройте базу в режиме "Конфигуратор".

  3. Перейдите в меню Конфигурация -> Поддержка -> Обновить конфигурацию. Если конфигурация не на поддержке, используйте Конфигурация -> Сравнить, объединить с конфигурацией из файла....

  4. Выберите файл обновления (.cfu для обновлений поставщика или .cf для новой версии).

  5. Дождитесь, пока система выполнит сравнение. После этого откроется окно со структурой метаданных, где будут показаны все различия.

  6. Внимательно проанализируйте изменения. Особое внимание уделите объектам, которые были изменены и у поставщика, и у вас (так называемые "дважды измененные" объекты). В таких случаях часто требуется ручное объединение кода модулей, чтобы совместить новую логику поставщика с вашей.

  7. После настройки всех правил объединения нажмите "Выполнить". Платформа аккуратно обновит объекты конфигурации, сохранив ваши доработки и их внутренние идентификаторы. После принятия изменений и обновления базы данных все ваши нетиповые документы и их данные останутся на месте.

Что делать, если данные уже потеряны?

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

Вариант 1: Восстановление из резервной копии (рекомендуемый)

Это самый надежный и правильный способ. Просто восстановите базу из бэкапа, сделанного до неудачного обновления, и после этого проведите процедуру обновления корректно, через "Сравнить, объединить".

Вариант 2: Перенос данных без резервной копии

Если резервной копии нет, ситуация сложнее, но не безнадежна. Вам понадобится копия старой базы (возможно, она осталась на другом компьютере или в архивах) и ваша новая база с уже "потерянными" данными. Цель — перенести данные из старой базы в новую.

Современный подход: как избежать проблем в будущем с помощью расширений

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

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

Итог: запомните главное правило. Команда Загрузить конфигурацию из файла — это полная замена, а не обновление. Для сохранения данных и доработок при переходе на новые релизы всегда используйте механизм Сравнить, объединить.

← На главную