﻿# Управление версиями конфигурации

> [HTML Version](configuration-versioning.html)

В ELMA365 можно управлять версиями структур конфигурации: решения, раздела, приложения, виджета и т. д. Вы можете создавать, хранить и восстанавливать версии, сравнивать архивную с текущей. Это позволяет быстро восстановить предыдущую версию настроек, если возникла ошибка в работе.

Например, администратор системы создаёт новый раздел: добавляет приложения, процессы, виджеты, формы. На определённом этапе можно проверить работу компонентов раздела, зафиксировать его первую рабочую версию и продолжить разработку раздела. Через некоторое время снова можно зафиксировать версию, уже с новыми доработками. Если возникнет ошибка, обнаружение или исправление которой потребует много времени, можно быстро сделать текущей ту версию, в которой ошибка ещё не появилась.

В этой статье подробнее рассмотрим работу с версиями решения, раздела и модуля, которая выполняется по общим принципам.

Про особенности версионирования приложений, виджетов, бизнес-процессов и других структур читайте в статье [«Версионность структур в ELMA365»](elma365-structure-versioning.md).

## Состав версий решения, раздела и модуля

Версия решения, раздела или модуля — это набор версий структур, входящих в его состав, для которых поддерживается версионирование. 

| | |
|------|------|
| **Родительская структура** | **Дочерние структуры, версии которых составляют версию родительской структуры** |
| Решение | Разделы, модули, виджеты, процессы и страницы на уровне компании. Также версия решения хранит значения его параметров — названия, описания и признака платности. |
| Раздел | Приложения, виджеты, процессы и страницы на уровне раздела. |
| Модуль | Виджеты, процессы и методы API.<br>Для других структур в составе модуля и его настроек не поддерживается версионирование, поэтому они не входят в состав версии. При восстановлении архивной версии другие структуры и настройки не будут изменены или удалены. Подробнее читайте в статье [«Создание модуля»](create-extention.md#versions). |


## Правила создания версий решения, раздела и модуля

1. Версия решения, раздела или модуля создаётся **автоматически** — при её импорте или обновлении. Версия раздела также добавится при его копировании.

2. Версию решения, раздела или модуля можно [зафиксировать](#fix-version) **вручную** — в любой момент. Например, сохраните первый рабочий вариант нового раздела и затем продолжите его разработку.

3. Если фиксируется версия решения, раздела или модуля — **в ней сохраняются текущие версии дочерних структур**, а не создаются новые версии.

````
Начало примечание

````
**Примечание**

Особенности создания версий решения, раздела и модуля по сравнению с другими структурами:

- для решения, раздела и модуля можно вручную создавать версии, а версии других структур могут быть добавлены только автоматически;

- при импорте или обновлении решения версия раздела, модуля, а также метода API не создаётся, а версии других структур добавятся, если в их настройках есть изменения.

````
Конец примечание

## ````
Работа с версиями на странице «Инструменты разработчика»

Для работы с версиями структур конфигурации перейдите на страницу** Администрирование > Инструменты разработчика** и выберите пункт **Управление версиями конфигурации**.

Обратите внимание:

- версионирование структур доступно в системе, если включён фича-флаг `allowVersionsSnapshots`;

- страница **Управление версиями конфигурации** доступна начиная с версии системы 2026.3 и выше, если включён фича‑флаг `exp\_exchange\_enable\_packageVersions` и выполнена миграция сервиса **exchangeSrv**.

Подробнее об активации фича-флагов в поставке On-Premises читайте в статьях [«Изменение параметров ELMA365 Enterprise»](change-settings-enterprise.md#enable-feature-flag-enterpeise) и [«Изменение параметров ELMA365 Standard»](change-elma365standard-parameters.md#enable-feature-flag-standard). Если вы используете поставку SaaS, обратитесь к вашему менеджеру ELMA365.

На странице **Управление версиями конфигурации** размещено **Дерево конфигурации**. В нём отображаются все структуры, для которых поддерживается версионирование: системные и пользовательские решения, разделы, модули и страницы, добавленные на уровне компании, а также их дочерние структуры.

Содержимое структур можно развернуть. Каждый тип структуры обозначен в дереве определённым значком. Если навести курсор на значок, отобразится название типа структуры: решение, раздел, модуль, приложение, страница, виджет, процесс или метод API.

**(configuration-versioning-1.png)**

Справа от названия решения, раздела или модуля нажмите значок трёх точек, чтобы перейти к доступным действиям: 

- **Версии** — открыть [историю версий раздела](#version-history);

- **Зафиксировать версию** — создать версию раздела. 

Для других структур доступен только пункт **Версии**. Таким образом, вы можете перейти к истории версий любого элемента в дереве конфигурации. 

Особенности отображения структур в дереве конфигурации

Любая структура отобразится в дереве на уровне конфигурации или на уровне родительской структуры, в состав которой она включена.

Исключением является системный раздел, т. к. отдельное системное приложение можно добавить в несколько решений. В этом случае системный раздел отобразится на уровне конфигурации, а также на уровне решений, в которые добавлены отдельные системные приложения.

## Зафиксировать версию структуры

Вы можете вручную зафиксировать версию решения, раздела или модуля в любой момент:

- на этапе разработки или доработки структуры — до и после внесения изменений в её компонентах. Например, зафиксируйте версию раздела, затем добавьте приложение или скорректируйте процесс на уровне приложения и снова зафиксируете версию раздела;

- при экспорте или обновлении структуры.

Чтобы создать вручную версию решения, раздела или модуля, выполняется одинаковый порядок действий. Рассмотрим на примере раздела, как вручную создать его версию:

 На странице **Инструменты разработчика** **> Управление версиями конфигурации** в дереве конфигурации выберите раздел, наведите курсор на значок трёх точек и нажмите  **Зафиксировать версию**.

1. В открывшемся окне вы увидите название текущей версии, если она была зафиксирована ранее. Заполните поля:

**(configuration-versioning-2.png)**

- **Версия\*** — укажите название, которое отобразится в списке версий раздела. В дальнейшем при экспорте и импорте раздела в другую компанию это название позволит идентифицировать созданную версию, т. к. отобразится в окне запуска импорта, а также в списке версий импортированного раздела;

- **Комментарий** — укажите дополнительную информацию, которая отобразится в списке версий раздела.

2. Нажмите **Зафиксировать**.

## Просмотр истории и управление версиями структуры 

В дереве конфигурации можно перейти к списку версий любой структуры. Для этого справа от её названия наведите курсор на значок трёх точек и нажмите** Версии**. В открывшемся окне для каждой версии решения, раздела и модуля отобразятся следующие данные:

- порядковый номер и название версии, заданное при её создании или редактировании;

- время фиксации версии;

- пользователь, создавший версию;

- комментарий.

**(configuration-versioning-3.png)**

Справа от выбранной версии нажмите значок трёх точек, чтобы открыть меню доступных действий, доступных для версии решения, раздела или модуля:

- **Редактировать** — изменить название версии и комментарий к ней;

- **Показать состав** — отобразить в виде дерева состав дочерних структур;

- [Сравнить с текущей](#compare-versions) — сравнить выбранную и текущую версии структуры;

- [Восстановить версию](#restore-version) — сделать выбранную версию текущей.

### Отметка об изменении текущей версии структуры

В истории версий решения, раздела или модуля вы можете увидеть, соответствует текущая версия состоянию, в котором она была зафиксирована или нет. Текущая версия отмечается:

- значком галочки **(configuration-versioning-4.png)** — состав и версии дочерних структур не изменялись с момента фиксации версии;

- значком восклицательного знака **(configuration-versioning-5.png)** — появились изменения в составе структуры. Например, в составе раздела: 

	- создано приложение или страница;

	- изменена версия приложения или страницы;

	- опубликован виджет или процесс внутри раздела;

	- удалена структура в разделе.

Если на момент восстановления архивной версии, экспорта или обновления структуры её текущая версия изменена, вы увидите предупреждение. Для дальнейшей корректной работы с версиями структуры зафиксируйте его текущую версию и затем продолжите запущенный процесс.

**(configuration-versioning-6.png)**

### Сравнить версии структуры

Применив опцию **Сравнить с текущей**, вы увидите два дерева — выбранной и текущей версий структуры. Здесь доступны действия:

**(configuration-versioning-7.png)**

- развернуть дочернюю структуру, чтобы сопоставить состав двух версий;

- [сравнить версии любой дочерней структуры](elma365-structure-versioning.md#compare-with-current) — отобразить в отдельном окне содержимое выбранной структуры из каждой версии в формате JSON. Для этого справа от дочерней структуры нажмите значок трёх точек и затем — **Сравнить**.

## Восстановить версию структуры

Вы можете сделать текущей архивную версию решения, раздела или модуля и восстановить состояние дочерних версионируемых структур на момент, когда была зафиксирована архивная версия. Для этого:

1. В списке архивных версий выберите нужную, нажмите значок трёх точек и затем — **Восстановить версию**. Эта опция доступна также в окне [сравнения версий](#compare-versions).

2. В открывшемся окне подтвердите создание новой версии на основе выбранной.

3. Выполнится проверка на [наличие изменений в текущей версии](#version-change). Если изменения есть, вы увидите предупреждение. Для корректной работы с версиями структуры в дальнейшем нажмите **Зафиксировать версию**.

**(configuration-versioning-8.png)**

4. На следующем шаге выполнится восстановление выбранной версии структуры и версий её дочерних структур.

Информация о восстановленной версии будет указана в комментариях к созданной версии решения, раздела или модуля и новым версиям дочерних структур.

### Особенности восстановления версий решения

1. Нельзя восстановить версию решения, в которой есть дочерняя структура (раздел, модуль, страница или пользовательское приложение), используемая в другом решении на текущий момент. Предупреждение об этом отобразится при проверке восстанавливаемой версии решения.

Например, пользовательское приложение **Заказы** включено в восстанавливаемую версию **Решения 1** и на текущий момент оно входит в состав **Решения 2**. Невозможно восстановить версию **Решения 1**, т.к. пользовательское приложение может быть в составе только одного решения.

2. Если в текущей версии решения есть дочерняя структура (раздел, модуль, страница или отдельное системное приложение), которая отсутствует в восстанавливаемой версии, эта дочерняя структура не будет изменена или удалена и останется в составе решения после восстановления архивной версии.

Например, в текущей версии решения есть системное приложение **Внешние пользователи**, а в восстанавливаемой версии его нет. После восстановления версии этоприложение останется в составе решения.

### Особенности восстановления версий раздела

Если дочерняя структура  есть в текущей версии раздела, но отсутствует в восстанавливаемой, она мягко удаляется. Это позволяет в дальнейшем восстанавливать версии раздела, в состав которых структура входит. 

Например, приложение добавлено в раздел и зафиксировано в его текущей версии. При этом в архивной версии, которую вы хотите восстановить, этого приложения ещё не было. Когда архивная версия станет текущей, приложение будет мягко удалено и не отобразится в левом меню раздела. 

Вы можете вручную вернуть приложение в состав раздела. Для этого в левом меню раздела нажмите значок гаечного ключа, в открывшемся окне перейдите на вкладку **Корзина** и нажмите **Восстановить**.

**(configuration-versioning-9.png)**