![](https://site-cloud-files.bitrix.info/resize_cache/595958/7acf4cadf975128573a8b1c2766af5d8/main/34f/34f19960c89bda130b1ad70854ae3557/d.jpg)
[spoiler]
Расширение настроек модуля
Автоматические миграции на данный момент работают только с модулем "Информационные блоки". Теперь в настройках модуля можно указать какие виды сущностей модуля “Инфоблоки” попадают под синхронизацию.
![1.png](https://site-cloud-files.bitrix.info/resize_cache/1167029/dc2b6d012e7c62e96afcf2287a99e02d/main/13a/13a56ddb69e96a870039cb63fc5e531e/1.png)
К примеру, можно переносить между копиями проекта только инфоблоки, не учитывая их свойства и разделы. Переносить только свойства или разделы без инфоблоков нельзя.
Защита версии копии проекта
При переносе проекта с одной машины на другую получаются идентичные копии проектов с точки зрения модуля миграций и поэтому необходимо менять версию платформы у нового разработчика, что не всегда делалось и приводило к ошибкам в работе модуля. Для устранения человеческого фактора добавлена проверка на уникальность версии проекта в модуле миграций. При переходе в раздел "Версии платформ" система автоматически подсветит красным информацию о версии платформы.
![2.png](https://site-cloud-files.bitrix.info/resize_cache/1167032/dc2b6d012e7c62e96afcf2287a99e02d/main/cfe/cfeb2aac1b7edb8ce9699c535f0c2599/2.png)
Также, если не сменить версию проекта, то при попытке выполнить манипуляции с сущностями, которые находятся под автоматическими миграциями (как пример, добавление инфоблока), возникнет исключение в коде.
Кроме этого, была добавлена подпись для идентификации владельца копии проекта, что удобно при просмотре лога миграций и других отладочных действиях.
Расширенная информация о миграциях
Работа миграций на первых порах напоминала черный ящик без возможности узнать, что и когда менялось на проекте. Для удобства использования и "разбора полетов" был добавлен учет миграций и идентификаторов данных на всех копиях проекта.
В журнале изменений можно посмотреть список примененных миграций. В списке доступна информация о дате применения миграции, откуда она пришла, кто делал применение.
![3.png](https://site-cloud-files.bitrix.info/resize_cache/1167035/dc2b6d012e7c62e96afcf2287a99e02d/main/fc9/fc9b6a1aaf72eb6f813f3ffba2f927ac/3.png)
Также доступна более подробная информация о миграции, позволяющая посмотреть, чтобы было изменено в базе данных.
В разделе "Версии данных" можно посмотреть какие идентификаторы используются для сущностей на всех копиях проекта.
![4.png](https://site-cloud-files.bitrix.info/resize_cache/1167036/dc2b6d012e7c62e96afcf2287a99e02d/main/7be/7be082492b7974a46780f9b3f85b0850/4.png)
Ручные скрипты миграций
В связи с тем, что покрыть автоматическими миграциями абсолютно все сущности "1С-Битрикс" сложно, а в некоторых случаях невозможно, был добавлен механизм "ручных" миграций, которые создаются программистом в строго отведенном интерфейсе.
Для создания "ручной" миграции необходимо создать новый сценарий.
![5.png](https://site-cloud-files.bitrix.info/resize_cache/1167039/dc2b6d012e7c62e96afcf2287a99e02d/main/eba/eba75e87650d379ff9eccfcbc0803a87/5.png)
После создания сценария модуль укажет путь, по которому находится файл-заготовка "ручной" миграции. В классе, описывающим миграцию, для модификации предназначены два метода:
- commit() - содержит алгоритм применения миграции
- rollback() - содержит алгоритм отката миграции, если это возможно
Начиная с нашего первого анонса модуля в прошлом году, мы начали его активно применять на наших проектах. Сначала это были небольшие проекты, потом их сложность росла и на данный момент модуль успешно применяется на проектах сложностью выше среднего.
Если у вас проект только начинает разрабатываться, то лучше всего использовать автоматические миграции, что позволит вам сохранить довольно много времени. Если же проект находится на поддержке и частое изменение структуры базы данных не планируется, тогда лучше использовать механизм “ручных” миграций, а автоматические отключить вовсе.
Более детальное описание модуля доступно на GitHub:
Ссылка на модуль в Marketplace:
Вопрос:
В рамках скрипта миграции делаем добавление разделов инфоблока, при этом включены автомиграции по разделам инфоблока. После применения в разделе "Диагностика" получаем iblockSection Reference by item "319" not exists. То есть после ручного добавления нужно ещё и референс вручную добавлять. Но тогда при применении на другом сервере мы получим второй, не связанный, набор референсов.
Получается как-то много телодвижений:
Как правильно это делать?
Спасибо за комменатрий!
Действительно, есть проблема при одновременном использовании обоих способов мигрирования.
Поработаем над этим вопросом.
Готовится большое обновление, включим решение этого вопроса в поставку. Обновление будет доступно во второй половине этого месяца.