В практике администратора и разработчика 1С часто возникает соблазн упростить процесс обновления доработанной конфигурации. Казалось бы, если подрядчик прислал готовый файл .cf, который содержит все необходимые изменения, почему бы просто не воспользоваться функцией «Загрузить конфигурацию из файла»? Ведь это гораздо быстрее, чем вручную перебирать объекты через «Сравнение-объединение». Однако за этой кажущейся простотой скрываются серьезные риски — от потери данных в справочниках и регистрах до полного разрушения логической целостности базы данных.
В данной статье мы подробно разберем, как устроены внутренние механизмы платформы «1С:Предприятие 8.3», выясним причину «пропажи» таблиц при загрузке и составим правильный алгоритм обновления нетиповых решений.
Для платформы 1С имя объекта (например, справочник Сотрудники или реквизит Оклад) является лишь внешней оболочкой. Внутри системы каждый объект метаданных обладает уникальным 128-битным идентификатором — UUID (Universally Unique Identifier).
Рассмотрим ситуацию: у вас есть справочник Контрагенты. В вашей базе его UUID — a1b2c3.... Подрядчик в своей базе создал (а не скопировал из вашей) аналогичный справочник с тем же именем, но платформа присвоила ему UUID x9y8z7.... Если вы воспользуетесь функцией «Загрузить конфигурацию», произойдет следующее:
F7) платформа видит: старый объект с UUID a1b2c3... удален, а новый с UUID x9y8z7... — создан.DROP TABLE) старой таблицы с данными и создание новой пустой таблицы.В результате визуально конфигурация выглядит правильной, но все накопленные данные в справочнике Контрагенты будут безвозвратно утеряны. Проанализируем этот момент: при «Сравнении-объединении» вы сопоставляете объекты по именам, и платформа «подтягивает» новый код или новые реквизиты к уже существующим UUID вашей базы, сохраняя данные.
Еще одна критическая зона риска — предопределенные элементы. В таких конфигурациях, как «Зарплата и Управление Персоналом» (ЗУП), на предопределенных видах расчетов или статьях затрат завязана вся бизнес-логика. Рассмотрим, что произойдет при загрузке «чужого» .cf-файла:
Даже если основные объекты метаданных совпали, UUID самих предопределенных элементов (например, элемент ОсновнаяОплата в плане видов расчета) могут отличаться. При обновлении конфигурации базы данных система создаст дубликаты этих элементов. В режиме «1С:Предприятие» вы увидите две одинаковые записи, но документы будут ссылаться на «старые», которые теперь перестали быть предопределенными. Это приведет к тому, что запросы в программном коде, использующие конструкцию ЗНАЧЕНИЕ(ПланВидовРасчета.Начисления.ОсновнаяОплата), начнут возвращать пустые значения или вызывать ошибки.
Функция «Загрузить конфигурацию» полностью перезаписывает состояние поддержки. Если ваша база находится на поддержке 1С (замочки на объектах), а вы загружаете файл, где эта поддержка была снята или изменена некорректно, вы потеряете связь с типовым обновлением.
После такой операции вы больше не сможете использовать файлы обновления .cfu. Вам придется каждый раз просить у подрядчика полный .cf или заниматься мучительным восстановлением поддержки через процедуру «Настройка поддержки» — «Изменить». Использование «Сравнения-объединения», напротив, позволяет точечно управлять каждым объектом: что-то оставить на поддержке поставщика, а что-то разрешить изменять.
Разберем по шагам технологию, которую часто предлагают опытные специалисты (и которую упоминал автор темы). Этот метод позволяет сохранить и ваши доработки, и данные, и связь с типовым релизом.
Прежде чем внедрять доработки подрядчика, необходимо обновить вашу базу до того типового релиза, на котором подрядчик строил свою сборку. Используем стандартный файл обновления .cfu через «Конфигурация — Поддержка — Обновить конфигурацию».
Важно: на этом этапе мы обновляем только типовую часть. Если платформа предлагает объединить объекты, которые вы ранее дорабатывали, выбираем приоритет вашей конфигурации. После загрузки .cfu сохраняем конфигурацию, но реструктуризацию (F7) можно не делать, если вы планируете сразу переходить к следующему шагу.
Теперь, когда ваша база «понимает», что она находится на нужном релизе, выполняем «Конфигурация — Сравнить, объединить с конфигурацией из файла», выбирая файл от подрядчика.
В появившемся окне мы увидим изменения. На этом этапе объекты, стоящие на строгой поддержке («с замочком»), могут не обновиться. Это нормально. Мы помечаем все нужные изменения и нажимаем «Выполнить».
Если часть объектов не изменилась из-за ограничений поддержки, необходимо:
Только после того, как все объекты сопоставлены и обновлены через механизм сравнения, мы нажимаем F7. Платформа выполнит реструктуризацию. Если вы все сделали правильно, в окне реструктуризации вы не увидите предупреждений об удалении таблиц (кроме тех случаев, когда объекты действительно удалялись специально).
Рассмотрим исключительные случаи, когда загрузка безопасна и оправдана:
.cf из рабочей базы, доработали его в копии (не создавая объекты «с нуля» через ctrl+c / ctrl+v из других баз) и загружаете обратно. В этом случае UUID гарантированно совпадают..cf от этой же самой базы.Резюме: Никогда не используйте «Загрузить конфигурацию», если .cf-файл пришел к вам «извне» (от подрядчика, из другой организации, из интернета). Потратьте время на «Сравнение-объединение» — это единственный способ гарантировать сохранность данных ваших пользователей и стабильную работу системы в будущем.