Миграция данных при изменении проекта
При обновлении приложения «1С:Шина» может осуществить миграцию данных приложения. Миграция данных может потребоваться в двух случаях:
- Если новый проект использует другие структуры данных — например, существующему справочнику был добавлен новый реквизит.
- Если после создания приложения был обновлен сервер и в новой версии сервера изменилась структура системных таблиц «1С:Шины».
Далее будет рассмотрено, какие изменения произойдут с данными во время миграции при тех или иных изменениях в проекте.
Добавлен новый реквизит
При добавлении реквизита (к существующему элементу проекта или в составе нового элемента проекта) ему будет присвоено значение по умолчанию. Если оно не задано явно, будет использоваться значение по умолчанию типа / состава типов реквизита, например:
- если тип реквизита —
Число
, значением по умолчанию будет 0; - если тип реквизита —
Строка
, значением по умолчанию будет пустая строка; - если в составе типов есть
Неопределено
, значением по умолчанию будетНеопределено
.
Если значение по умолчанию отсутствует, выдается ошибка и миграция не выполняется.
Если добавлен параметр ключа доступа, то при миграции данных таблица разрешений доступа очищается.
Изменен состав типов реквизита
Характер изменения состава типов | Изменения в данных при миграции |
---|---|
В состав типов добавлен новый тип | Значение реквизита не меняется |
Исключен тип |
Иначе:
|
Исключен тип |
Иначе:
|
Исключен тип |
Иначе:
|
Удален тип из состава типов Это также относится к ситуации,
когда тип реквизита полностью изменился,
или когда из состава типов были удалены все
присутствующие в нем типы и добавлены новые.
Например, был тип | Если значение реквизита имеет удаленный тип, то данное значение будет удалено, а вместо него будет установлено значение по умолчанию, кроме изменений типов дат (см. выше) |
При преобразовании из/в тип Момент
используется часовой пояс UTC.
Изменены строковые фасеты
Изменения в строковых фасетах | Изменения в данных при миграции |
---|---|
Уменьшено ограничение на максимальную длину строки | Значения реквизита, превышающие новую максимальную длину строки, будут обрезаны до максимальной длины строки |
Увеличено ограничение на максимальную дли ну строки | Значение реквизита не меняется |
Изменены числовые фасеты
Изменения в числовых фасетах | Изменения в данных при миграции |
---|---|
Уменьшено значение длины целой части числа | Если значение реквизита больше, чем максимально число, которое можно записать в реквизит в соответствии с новыми ограничениями, то значение устанавливается равным этому максимальному числу |
Увеличено значение длины целой части числа | Значение реквизита не меняется |
Уменьшено значение длины дробной части числа | Значение реквизита будет округлено до новой точности |
Увеличено значение длины дробной части числа | Значение реквизита не меняется |
Изменен тип элементов реквизита-коллекции
При удалении типа из состава элементов реквизита-коллекции (например, Массив<Строка|Число>
→ Массив<Строка>
) при миграции проверяется, что в таблице реквизита нет записей с указанным типом элементов. Если записи с удаленным типом элементов есть, выдается ошибка и миграция данных не выполняется.
Изменены перечисления
Следующие изменения перечислений приводят к изменению данных во всех реквизитах, которые имеют это перечисление в своем составе типов:
- Удаление значения перечисления — при наличии в данных приложения этого значения (в любом поле любой таблицы), при попытке обновления будет возращена ошибка.
- Изменение порядка элементов перечисления не ведет к изменению данных, но может привести к длительной миграции таблиц, которые содержат поля с таким перечислением.
Удален реквизит
При удалении реквизита также удаляется соответствующее ему поле таблицы базы данных, а содержащиеся в нем данные безвозвратно теряются.
Если удалено измерение регистра сведений, то перед выполнением миграции проверяется сохранение уникальности записей. При наличии дублей выдается ошибка и миграция отменяется.
Если удален параметр ключа доступа, то при миграции данных таблица разрешений доступа очищается.
Удален элемент проекта
Во время миграции данных для удаленного типа проверяется присутствие этого типа в таблицах как значения некоторого поля с типом Тип
. Если значения найдены, выдается ошибка и миграция не выполняется.