Перейти к основному содержимому

Миграция данных при изменении проекта

При обновлении приложения «1С:Шина» может осуществить миграцию данных приложения. Миграция данных может потребоваться в двух случаях:

  • Если новый проект использует другие структуры данных — например, существующему справочнику был добавлен новый реквизит.
  • Если после создания приложения был обновлен сервер и в новой версии сервера изменилась структура системных таблиц «1С:Шины».

Далее будет рассмотрено, какие изменения произойдут с данными во время миграции при тех или иных изменениях в проекте.

Добавлен новый реквизит

При добавлении реквизита (к существующему элементу проекта или в составе нового элемента проекта) ему будет присвоено значение по умолчанию. Если оно не задано явно, будет использоваться значение по умолчанию типа / состава типов реквизита, например:

  • если тип реквизита — Число, значением по умолчанию будет 0;
  • если тип реквизита — Строка, значением по умолчанию будет пустая строка;
  • если в составе типов есть Неопределено, значением по умолчанию будет Неопределено.

Если значение по умолчанию отсутствует, выдается ошибка и миграция не выполняется.

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

Изменен состав типов реквизита

Характер изменения состава типов

Изменения в данных при миграции

В состав типов добавлен новый тип

Значение реквизита не меняется

Исключен тип Дата

  • Если есть тип ДатаВремя — значения Дата преобразуются в тип ДатаВремя

Иначе:

  • Если есть тип Момент — значения Дата преобразуются в тип Момент

Исключен тип ДатаВремя

  • Если есть тип Момент — значения ДатаВремя преобразуются в тип Момент

Иначе:

  • Если есть тип Дата — значения ДатаВремя преобразуются в тип Дата

Исключен тип Момент

  • Если есть тип ДатаВремя — значения Момент преобразуются в тип ДатаВремя

Иначе:

  • Если есть тип Дата — значения Момент преобразуются в тип Дата

Удален тип из состава типов

Это также относится к ситуации, когда тип реквизита полностью изменился, или когда из состава типов были удалены все присутствующие в нем типы и добавлены новые. Например, был тип Строка, а стал — Число.

Если значение реквизита имеет удаленный тип, то данное значение будет удалено, а вместо него будет установлено значение по умолчанию, кроме изменений типов дат (см. выше)

примечание

При преобразовании из/в тип Момент используется часовой пояс UTC.

Изменены строковые фасеты

Изменения в строковых фасетахИзменения в данных при миграции
Уменьшено ограничение на максимальную длину строкиЗначения реквизита, превышающие новую максимальную длину строки, будут обрезаны до максимальной длины строки
Увеличено ограничение на максимальную длину строкиЗначение реквизита не меняется

Изменены числовые фасеты

Изменения в числовых фасетахИзменения в данных при миграции
Уменьшено значение длины целой части числаЕсли значение реквизита больше, чем максимально число, которое можно записать в реквизит в соответствии с новыми ограничениями, то значение устанавливается равным этому максимальному числу
Увеличено значение длины целой части числаЗначение реквизита не меняется
Уменьшено значение длины дробной части числаЗначение реквизита будет округлено до новой точности
Увеличено значение длины дробной части числаЗначение реквизита не меняется

Изменен тип элементов реквизита-коллекции

При удалении типа из состава элементов реквизита-коллекции (например, Массив<Строка|Число>Массив<Строка>) при миграции проверяется, что в таблице реквизита нет записей с указанным типом элементов. Если записи с удаленным типом элементов есть, выдается ошибка и миграция данных не выполняется.

Изменены перечисления

Следующие изменения перечислений приводят к изменению данных во всех реквизитах, которые имеют это перечисление в своем составе типов:

  • Удаление значения перечисления — при наличии в данных приложения этого значения (в любом поле любой таблицы), при попытке обновления будет возращена ошибка.
  • Изменение порядка элементов перечисления не ведет к изменению данных, но может привести к длительной миграции таблиц, которые содержат поля с таким перечислением.

Удален реквизит

При удалении реквизита также удаляется соответствующее ему поле таблицы базы данных, а содержащиеся в нем данные безвозвратно теряются.

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

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

Удален элемент проекта

Во время миграции данных для удаленного типа проверяется присутствие этого типа в таблицах как значения некоторого поля с типом Тип. Если значения найдены, выдается ошибка и миграция не выполняется.