Переход на версионирование конфигураций 1С с использованием Git требует пересмотра привычных подходов к изменению структуры данных. В традиционном хранилище конфигурации удаление объекта выполняется мгновенно и централизованно, однако в распределенной системе контроля версий физическое удаление файлов метаданных затрагивает не только исходный код, но и данные в существующих информационных базах. Разберем по шагам, как устроен механизм выгрузки удаленных объектов в Git, с какими рисками можно столкнуться при слиянии веток и как правильно организовать жизненный цикл устаревших метаданных.
Проанализируем, что происходит на уровне файловой структуры исходников, когда разработчик удаляет объект метаданных из дерева конфигурации:
Configuration.xml (или проектном файле) платформа удаляет ссылку на объект из секции ChildObjects.Важно помнить об идентификаторах (UUID): Каждый объект метаданных в 1С однозначно идентифицируется внутренним уникальным идентификатором. Если вы удалите справочник или документ, а затем создадите его заново с точно таким же именем, платформа сгенерирует новый UUID. Для СУБД это будет совершенно новая таблица, а вся предыдущая информация и связи окажутся утерянными.
Рассмотрим классическую практику вывода метаданных из эксплуатации, применяемую в типовых конфигурациях и на масштабных проектах с непрерывной эксплуатацией баз данных. Прямое удаление таблиц из конфигурации приводит к безвозвратной потере данных при обновлении базы пользователя. Поэтому процесс разделяют на два последовательных релиза:
Объект не удаляется физически. К его имени добавляется префикс Удалить (например, УдалитьСтатусыЗаказов). Объект исключается из интерфейса, командного интерфейса подсистем и прав доступа пользователей. В процедурах обновления информационной базы (обработчиках обновления) пишется код, который переносит накопленные данные из устаревшей структуры в новую целевую структуру.
Физическое удаление объекта из конфигурации и репозитория Git выполняется только в следующем релизе. К этому моменту все рабочие базы гарантированно прошли миграцию данных на первом этапе, и удаление пустых таблиц из СУБД проходит без риска потери бизнес-информации.
Выясним, в каких случаях можно удалять объекты сразу без предварительного переименования:
Разберем основные сложности, возникающие в коллективной разработке при удалении объектов метаданных:
Configuration.xml: Если один разработчик удаляет один объект, а второй в параллельной ветке добавляет другой, строки в секции ChildObjects могут пересечься. Ручное разрешение таких конфликтов требует предельной аккуратности, чтобы не нарушить валидность XML-структуры, иначе платформа не сможет собрать конфигурацию из исходников.— составах подсистем и планов обмена;
— ролях и правах доступа;
— типах реквизитов других объектов, схемах компоновки данных (СКД) и динамических списках.
Для стабильной работы команды придерживайтесь следующих правил: