Как удалить реквизиты и объекты при сравнении и объединении конфигураций 1С?

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

В процессе разработки и поддержки систем на платформе 1С:Предприятие 8 программисты регулярно сталкиваются с необходимостью переноса изменений между различными базами. Стандартная операция «Сравнение и объединение конфигураций» по умолчанию настроена на «мягкое» слияние: она добавляет новые объекты и обновляет существующие, но игнорирует те элементы, которые присутствуют в основной конфигурации, но отсутствуют во внешнем файле (.cf или .cfe). В этой статье мы подробно разберем, как заставить систему удалять лишние реквизиты, разберемся в тонкостях идентификации объектов и выясним риски, связанные с этими операциями.

Почему реквизиты не удаляются автоматически?

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

Настройка режима удаления через окно сравнения

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

  1. Откроем окно сравнения и объединения (Меню «Конфигурация» — «Сравнить, объединить с конфигурацией из файла»).
  2. В появившемся дереве метаданных мы увидим, что напротив объектов, которые есть у нас, но нет в файле, просто не стоят галочки.
  3. Перейдем в верхнее меню окна сравнения: «Действия» — «Установить режим для всех объектов».
  4. В открывшемся диалоге нам нужно выбрать вариант, разрешающий удаление. Обычно это режим «Взять из конфигурации из файла». При этом крайне важно установить флаг «Разрешить удаление объектов основной конфигурации».
  5. После применения этих настроек система проанализирует дерево и пометит отсутствующие в файле объекты специальной пиктограммой (часто это серый крестик или пустая ячейка с пометкой на удаление).

Проанализируем ситуацию: теперь, если мы нажмем кнопку «Выполнить», система физически удалит метаданные выбранных реквизитов из конфигурации. Важно помнить: само по себе объединение не удаляет данные из таблиц SQL. Это произойдет только на следующем шаге — при обновлении конфигурации базы данных (клавиша F7).

Роль уникальных идентификаторов (UUID) и «потомков»

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

Рассмотрим два сценария:

  1. Конфигурации-потомки: Если база была создана путем копирования или через «Сохранить конфигурацию в файл», UUID объектов совпадают. В этом случае сравнение по именам проходит гладко.
  2. Разные базы: Если вы вручную создали справочник Склады в одной базе и справочник с таким же именем в другой, их UUID будут разными. Для системы 1С это абсолютно разные объекты.

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

Альтернативный метод: Загрузка конфигурации

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

Посмотрим на отличия этого метода:

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

Работа с фильтрами в окне сравнения

Когда конфигурация большая (например, ERP или УПП), искать один отсутствующий реквизит среди тысяч объектов очень сложно. Проанализируем возможности фильтрации:

В окне сравнения есть кнопка «Фильтр». Мы рекомендуем установить следующие настройки для поиска объектов на удаление:

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

Трехстороннее сравнение при обновлении типовых решений

Если мы выполняем обновление типовой конфигурации через «Поддержку», система включает режим трехстороннего сравнения. В нем участвуют:

  1. Старая конфигурация поставщика.
  2. Новая конфигурация поставщика.
  3. Ваша основная конфигурация.

В этом режиме 1С видит историю изменений. Если реквизит был удален поставщиком (он был в старой версии, но его нет в новой), система сама предложит его удалить, понимая, что это не ваша ошибка, а штатное изменение архитектуры. В этом случае флажки удаления часто выставляются автоматически, но их всегда стоит перепроверить.

Безопасность и риски удаления данных

Удаление реквизита в метаданных — это критическая операция. Разберем основные риски:

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


// 1. Сделайте архивную копию базы (.dt или средствами SQL)
// 2. Проверьте наличие данных в удаляемых полях через запрос
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 10 * ИЗ Справочник.Контрагенты ГДЕ УдаляемыйРеквизит ЕСТЬ НЕ NULL";

Подводя итог, можно сказать, что механизм удаления при объединении требует осознанного подхода. Используйте настройки «Действия» для массового управления объектами, не забывайте про ручное сопоставление по UUID и всегда проверяйте фильтром, что именно система собирается отправить «под нож».

← На главную