Как выборочно обновить объекты конфигурации из хранилища 1С?

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

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

Ограничения механизма хранилища и зависимость от корня конфигурации

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

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

Выборочно обновить из хранилища через контекстное меню можно только те объекты, которые:

  1. Уже присутствуют в текущей информационной базе;
  2. Не захвачены текущим пользователем;
  3. Не имеют жестких зависимостей от новых общих модулей, реквизитов других объектов или измененного состава подсистем.

Почему нельзя копировать объекты через буфер обмена (Ctrl+C / Ctrl+V)

Рассмотрим распространенную ошибку, когда разработчики отключают базу от хранилища и копируют нужный объект метаданных через буфер обмена. Делать так категорически не рекомендуется.

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

  1. Объект в базе-приемнике получает идентификатор, отличный от идентификатора в хранилище;
  2. При последующем подключении к хранилищу или сравнении/объединении платформа воспримет этот объект как дубликат с совпадающим именем, а не как исходный элемент;
  3. Нарушается ссылочная целостность в базе данных, что приводит к критическим ошибкам при реструктуризации.

Способ 1. Выборочный перенос через сравнение и объединение конфигураций

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

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

Также платформа позволяет выполнить прямое сопоставление: через меню Конфигурация -> Хранилище конфигурации -> Сравнить, объединить конфигурацию с хранилищем... можно указать конкретную версию хранилища и вручную расставить флажки для необходимых элементов.

Способ 2. Ускорение обновления сильно устаревших копий баз

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

Чтобы не ждать пошагового применения сотен версий, примениaction следующий ускоренный порядок действий:

  1. Выгрузим актуальный файл конфигурации .cf из хранилища или из актуальной рабочей базы;
  2. В устаревшей копии базы откроем конфигуратор и выберем пункт меню Конфигурация -> Загрузить конфигурацию из файла...;
  3. Применим изменения в структуре базы данных (клавиша F5 или кнопка Обновить конфигурацию базы данных);
  4. Выполним подключение к хранилищу конфигурации через меню Конфигурация -> Хранилище конфигурации -> Подключиться к хранилищу.... Платформа сопоставит структуру данных и мгновенно привяжет базу к актуальной версии без долгого расчета промежуточных версий.

Рекомендации по организации разработки

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

  1. В основное хранилище, из которого обновляется продуктивная среда, помещаем только полностью протестированный и готовый к релизу код;
  2. Регулярно выполняем процедуру Оптимизация хранилища конфигурации в окне администрирования хранилища для сокращения служебных данных и ускорения сетевых операций;
  3. Для сложных проектов с необходимостью изолированных веток разработки и точечного переноса изменений (cherry-pick) переходим на распределенные системы контроля версий (Git) с использованием 1C:Enterprise Development Tools (EDT) или механизмов выгрузки конфигурации в исходные тексты.
← На главную