Процесс сравнения и объединения конфигураций в среде 1С:Предприятие — это стандартная, но крайне ответственная операция. Одной из наиболее болезненных проблем, с которыми сталкиваются разработчики, является частичная потеря свойств объектов, которые существуют только в основной конфигурации. Типичный пример: в вашей базе есть уникальный РегистрНакопления, которого нет в файле обновления. После объединения вы обнаруживаете, что список его регистраторов (документов, делающих движения) очистился или изменился, хотя сам регистр вы «трогать» не планировали. Рассмотрим подробнее, почему это происходит и как выстроить процесс объединения так, чтобы ничего не «затереть».
Для начала проанализируем ситуацию с точки зрения архитектуры метаданных 1С. Нужно понимать, что список регистраторов для регистра — это не самостоятельный объект, а свойство самого регистра. Когда система выполняет сравнение, она сопоставляет объекты по их внутренним идентификаторам (GUID). Если в файле конфигурации, с которым вы объединяетесь, отсутствует ваш уникальный регистр, 1С видит это различие.
Проблема заключается в том, что связи между объектами (документ — регистратор для регистра) двусторонние. Если вы обновляете документ, который является регистратором, или если в правилах объединения по ошибке установлена пометка на объекте «Регистры», система может попытаться привести состояние метаданных к тому виду, который зафиксирован в файле. Если в файле регистра нет, то и связей у документов с этим регистром там тоже нет. В результате при неосторожном нажатии кнопки «Выполнить» настройки в основной конфигурации сбрасываются.
Чтобы обезопасить объекты, которых нет в файле обновления, нам необходимо грамотно настроить визуальное представление окна сравнения. Посмотрим на алгоритм действий:
Проанализируем, что это дает: скрыв объекты, отсутствующие в файле, вы работаете только с тем «набором изменений», который пришел извне, не затрагивая локальные доработки.
Иногда возникают ситуации, когда объект присутствует в обеих конфигурациях (например, документ РеализацияТоваровУслуг), но в основной базе он расширен вашими уникальными свойствами. Чтобы не потерять их, разберем, как управлять режимами объединения:
Кликните правой кнопкой мыши на конкретном объекте в дереве сравнения. Вы увидите пункт «Установить режим для подчиненных объектов». Здесь можно выбрать приоритет:
Если вы хотите обновить только алгоритмы проведения (модули), но сохранить структуру (реквизиты и связи), используйте режим объединения с объединением модулей, но снимайте флажки с состава свойств объекта Регистраторы.
Рассмотрим еще один важный защитный механизм. В окне сравнения и объединения есть кнопка «Параметры». В ней находится флажок «Разрешить удаление объектов».
Если этот флаг снят, 1С гарантирует, что ни один объект в вашей основной конфигурации не будет удален, даже если его нет в файле обновления. Это отличная «страховка» для тех, кто боится потерять целые куски метаданных. Однако помните: это не защищает от изменения свойств (тех самых галочек регистраторов) внутри существующих объектов. Поэтому данный метод должен применяться совместно с фильтрацией.
Представим, что нам нужно обновить документ РеализацияТоваровУслуг, но при этом у нас есть самописный РегистрНакопления, который нельзя трогать. Выполним следующие действия:
РеализацияТоваровУслуг и ставим на него галочку.РеализацияТоваровУслуг и проверяем, чтобы в списке его свойств не было пометок на удаление связей с вашим уникальным регистром.Регистры, обязательно перейдите туда и снимите её.Если ваша конфигурация находится на поддержке поставщика, то при каждом обновлении система может пытаться вернуть стандартные настройки объединения. Чтобы не «играть галками» вручную каждый раз, мы рекомендуем один раз настроить правила объединения на копии базы и сохранить их в файл настроек (кнопка «Сохранить настройки» в окне объединения). При следующем обновлении вы просто нажмете «Загрузить настройки», и система сама выставит нужные флажки и фильтры, исключая ваши уникальные регистры из зоны риска.
В завершение отметим, что самым надежным способом проверки является предварительное выполнение объединения на копии базы с последующей проверкой метаданных. Если вы видите, что Регистраторы в РегистрСведений или РегистрНакопления все же пропали, значит, связь была разорвана на стороне объекта-регистратора. В таком случае поможет только ручное восстановление галочек или более тонкая настройка сопоставления объектов по именам, если GUID-ы объектов разошлись.