﻿# Обновить решение

> [HTML Version](update_solution.html)

Опция используется для импорта изменений в уже установленное решение. Если вы редактировали компоненты решения, обновить его можно двумя способами:

- установить полностью обновлённую версию, не сохраняя ваши настройки;

- выбрать опцию [мягкого обновления](#soft-update). Тогда компоненты, которые были изменены, не обновятся. Компоненты, настройки которых вы не меняли — обновятся.

В исходную или обновлённую версии решения могут входить новые компоненты — дополнительные разделы, приложения или модули. 

Для обеспечения целостности решения, мы не рекомендуем удалять из состава решения компоненты. Это может привести к неконсистентности разделов, опциональных зависимостей и связей в структурах внутри решения. Например, после обновления может произойти дублирование разделов. Нарушенная целостность повлияет на дальнейшие процессы экспорта, импорта и обновления решения, в которых могут возникнуть ошибки. 

Если вам необходимо удалить раздел или модуль из решения, обратите внимание на следующее:

1. Перед удалением проверьте в решении наличие внутренних ссылок на удаляемый раздел или модуль.

2. Учитывайте влияние удаления на созданные [опциональные зависимости](optional-dependencies.md) от других решений.

3. Если в решение необходимо повторно добавить раздел или модуль, рекомендуем не удалять эти компоненты, а [скрыть раздел из левого меню](360007799052.md) или [выключить модуль](connect-extention.md#turn-off-extention).

## Начать обновление решения

Чтобы выполнить обновление:

1. Перейдите к началу этого процесса одним из двух способов:

- если решение импортировано из ELMA365 Store, его можно обновить, [установив из каталога](import_solution.md) повторно. В карточке решения на вкладке **Версии** также можно ознакомиться со списком обновлений и скачать файл формата **.е365** с актуальной версией решения;

- [загрузите файл формата .e365](upload-solution-file.md) с локального компьютера или из файлов системы и нажмите **Далее**.

На этом шаге отобразится предупреждение, если:

	- вы используете поставку ELMA365 On-Premises в версии системы ниже, чем та, которая применялась для создания загружаемого решения. Обновление может не выполниться или решение может работать некорректно, если загруженные изменения будут несовместимы с вашей версией системы. Выберите, отменить или продолжить процесс обновления;

	- текущее состояние решения отличается от его [зафиксированной версии](configuration-versioning.md#fix-version). Для корректного обновления решения сохраните его текущее состояние, нажав **Зафиксировать версию**. Затем начните обновление.

2. Запустится проверка компонентов загружаемой версии решения из файла. Если будут обнаружены ошибки, например, найдены одинаковые страницы или в версию [добавлены зависимости от другого решения](export-solution-file.md#add-dependencies), вы не сможете закончить обновление.

Если в новой версии решения есть приложения, виджеты или бизнес-процессы, поля из которых ссылаются на приложения в составе [пакета лицензий](license-packages.md), вы увидите уведомление об этом. Вы можете продолжить обновление решения, однако для корректной работы потребуется активировать используемый пакет лицензий.

При успешной проверке решения нажмите кнопку **Далее**.

**(update-solution-3.png)**

3. Загруженная версия сравнивается с существующим в системе решением. Если проверка успешно проведена, решение обновится.

Если в системе активировано версионирование структур, после успешного обновления автоматически создаётся новая версия решения. Подробнее об этом читайте в статье [«Управление версиями конфигурации»](configuration-versioning.md).

## Сравнение существующей и загружаемой версий решения

На этапе сравнения выполняется проверка соответствия компонентов решения и их настроек.

### Проверка конфликтов в компонентах решения

Если вы вносили изменения в компоненты решения, например, меняли форму приложения или изменяли бизнес-процесс, отобразится список конфликтов. Выберите дальнейшее действие:

- подтвердите обновление решения. Тогда новая версия решения полностью заменит существующую. Ваши изменения не сохранятся;

- выполните [мягкое обновление](#soft-update);

- отмените обновление.

Обратите внимание, при проверке пользовательского приложения в составе [системного раздела](system-workspaces.md) учитывается код приложения, а также первая запись в [истории версий](elma365-structure-versioning.md#version-history). Если код приложения совпадёт, а запись в истории версий — нет, приложение из исходной компании добавится в системный раздел целевой компании с другим кодом. 

### Проверка соответствия настроек доступа

Если в текущей компании редактировались права доступа, выберите в открывшемся окне, какие настройки обновить до новой версии. Неотмеченные права останутся прежними. Вы также можете обновить все настройки доступа или отменить обновление.

**(update-solution-9.png)**

### Проверка соответствия настроек регистрации в приложениях типа «Документ»

Если в текущей и загружаемой версии решения не совпадают настройки регистрации, откроется список отличающихся дел из номенклатуры. Они выделены:

- зелёным цветом — дела, которые указаны в настройках регистрации в новой версии решения, но отсутствуют в текущей версии. Поставьте флажок напротив дела, чтобы добавить его в раздел **Номенклатура дел** и в настройки регистрации в текущей компании;

- красным цветом — дела, которые используются в настройках регистрации приложений в текущей компании, но отсутствуют в загружаемой версии. Отметьте флажком те дела, которые вы хотите оставить. Неотмеченные дела удалятся из настроек регистрации приложений, но останутся в разделе **Номенклатура дел**. Вы можете повторно добавить их в настройки регистрации.

**(update_solution-4.png)**

## Мягкое обновление решения

Вы можете использовать этот вариант обновления, если возникли конфликты между установленной и новой версией решения. Опция позволяет сохранить изменения, которые вы внесли в такие компоненты, как бизнес-процессы, приложения, их формы, страницы и виджеты, модули. В процессе мягкого обновления:

- компоненты с конфликтами не обновятся, ваши изменения сохранятся;

- другие составляющие решения обновятся, если их нет в списке конфликтов и они не содержат ссылки на компоненты с конфликтами;

- новые составляющие решения добавятся, если они не содержат ссылки на компоненты с конфликтами.

Рассмотрим примеры.

### Кейс 1. Конфликт в компоненте решения

Вы добавили свойство **А** в контекст приложения, которое входит в состав решения. В новой версии решения:

- в контекст этого приложения добавлено свойство **В**;

- на форму создания приложения вынесен виджет **С**.

Результат мягкого обновления:

1. Возникнет конфликт в приложении, оно не обновится. Свойство **В** не добавится в его контекст, свойство **А** сохранится.

2. Форма создания приложения обновится, в ней не будет конфликта. Виджет **С** добавится.

**(update-solution-5.png)**

### Кейс 2. Ссылка на компонент с конфликтом

Исходное решение содержит:

- приложение, в контекст которого вы добавили свойство **А**;

- бизнес-процесс, в котором есть переменная, которая ссылается на это приложение.

В новой версии решения в контекст приложения добавлено свойство **В**, а на схему процесса добавлена задача.

Результат мягкого обновления:

1. Возникнет конфликт в приложении, оно не обновится. Свойство **В** не добавится в его контекст, свойство **А** сохранится.

2. Бизнес-процесс не обновится, т. к. он ссылается на приложение, в котором возник конфликт.

**(update-solution-6.png)**

### Кейс 3. Новый компонент решения содержит ссылку на компонент с конфликтом

Вы добавили свойство **А** в контекст приложения, которое входит в состав решения.

В новой версии решения:

- в контекст приложения добавлено свойство **В**;

- добавлен новый процесс, который ссылается на это приложение.

Результат мягкого обновления:

1. Возникнет конфликт в приложении, оно не обновится. Свойство **В** не добавится в его контекст, свойство **А** сохранится.

2. Новый бизнес-процесс не добавится, т. к. он ссылается на приложение с конфликтом.

**(update-solution-7.png)**

### Мягкое обновление заблокированного раздела

Если решение содержит заблокированный раздел, мягкое обновление игнорирует зависимости между этим разделом и разблокированным разделом, в котором найдены конфликты. В этом случае компоненты заблокированного раздела (приложения, процессы, виджеты) обновятся.

Рассмотрим особенности такого обновления. Компоненты заблокированного раздела:

- обновятся, если они ссылаются на компоненты разблокированного раздела, в которых найдены конфликты;

- обновятся, если на них ссылаются компоненты разблокированного раздела, в которых найдены конфликты;

- НЕ обновятся, если в них самих обнаружены конфликты;

- НЕ обновятся, если есть зависимости между ними и компонентами другого заблокированного раздела, в которых найдены конфликты.

Разберём кейс на примере решения [КЭДО](basic-package.md), которое содержит заблокированный раздел **КЭДО** и доступный для внесения изменений раздел **Настройки КЭДО**:

1. В установленной версии решения на уровне раздела **Настройки КЭДО** добавим задачу в процесс, который ссылается на приложение заблокированного раздела **КЭДО**.

2. Предположим, что в новой версии решения:

- на уровне раздела **КЭДО** в контекст приложения, которое связано с изменённым процессом, добавлено свойство **А**;

- на уровне раздела **Настройки КЭДО** в контекст процесса, который мы изменили, добавлено свойство **В**.

3. Запустим обновление решения.

4. На этапе его проверки [отобразятся конфликты](#conflicts) в процессе, который изменён на уровне раздела **Настройки КЭДО**. В этом конфликте мы увидим зависимости с приложением в заблокированном разделе **КЭДО**.

5. Применим мягкое обновление решения и получим следующий результат:

- приложение на уровне заблокированного раздела **КЭДО** обновится, свойство **А** добавится в контекст приложения. Найденные в конфликте зависимости будут проигнорированы;

- процесс на уровне разблокированного раздела **Настройки КЭДО** не обновится. Задача в нём сохранится, свойство **В** не добавится в контекст процесса.

**(update-solution-8.png)**