Как обновить один объект в конфигурации 1С, подключенной к хранилищу, без захвата корня?

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

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

Разница между штатным обновлением и сравнением-объединением

Для понимания поведения платформы проанализируем два различных механизма переноса изменений:

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

Пошаговый алгоритм точечного обновления объекта без захвата корня

Разберем по шагам, как безопасно обновить один объект в среде с несколькими разработчиками:

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

Контроль изменений перед помещением в хранилище

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

  1. Откроем пункт меню Конфигурация → Сравнить конфигурации.
  2. В качестве источника выберем Основная конфигурация, а в качестве приемника — Конфигурация базы данных.
  3. Снимем флаг «Искать соответствия по именам» и выполним сравнение.
  4. Убедимся, что в отчете о сравнении присутствуют изменения исключительно по захваченному объекту.
  5. Обновим конфигурацию базы данных (клавиша F5 или Ctrl + F7).
  6. Поместим захваченный объект в хранилище через контекстное меню (Поместить в хранилище...).

Почему платформа может потребовать захват корня при объединении?

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

  1. Изменение состава подсистем: если в файле обновления объект включен в новую подсистему или исключен из существующей, платформа потребует захвата этой подсистемы или корня. Чтобы избежать этого, в окне сравнения нужно отключить перенос состава подсистем.
  2. Связи с общими реквизитами и функциональными опциями: если в объекте поставщика изменился состав общих реквизитов или функциональных опций, потребуется захват этих метаданных.
  3. Появление новых зависимых объектов: если в модулях или типах реквизитов обновляемого объекта появились ссылки на новые справочники, перечисления или общие модули, создать их в конфигурации без захвата корня невозможно.
  4. Заблокированные правила поддержки: если подчиненный элемент (например, новая форма или реквизит) имеет статус «Не редактируется», объединение потребует изменения таблицы поддержки, хранящейся в корне.

Если захват корня конфигурации неизбежен, выполним его без рекурсии (сняв флаг «Захватывать рекурсивно»). В этом случае блокируется только сам корень и общие свойства, а остальные разработчики смогут продолжать захватывать и редактировать свои объекты метаданных.

Альтернативные способы внесения точечных правок

Если блокировка хранилища критична для команды, рассмотрим альтернативные варианты:

  1. Использование расширений конфигурации (.cfe): если в объекте требуется исправить ошибку или добавить логику, изменения можно реализовать через расширение с помощью заимствования формы, объекта и использования аннотаций в модулях (&Вместо, &После, &Перед). Это не требует захвата объектов в хранилище основной конфигурации.
  2. Обновление через промежуточную базу: файл поставки накатывается полностью в отдельной локальной информационной базе (без хранилища), после чего изменения кода или форм переносятся вручную через буфер обмена в захваченный объект рабочей конфигурации.
← На главную