# Общие положения

## Назначение раздела

Раздел описывает правила проектирования и разработки проектных расширений Global ERP.

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

Основная цель раздела — задать единые правила, по которым проектные команды добавляют новые сущности, атрибуты, выборки, печатные формы, JEXL-скрипты, серверную логику и настройки. Эти правила должны снижать риск конфликтов с типовой поставкой и будущими обновлениями Global ERP.

Раздел отвечает на практические вопросы проектного разработчика:

- когда задачу нужно решать настройкой через интерфейс;
- когда требуется разработка в коде;
- как именовать проектные классы, атрибуты, выборки, печатные формы и другие сущности;
- как отличать проектные объекты от типовых;
- как добавлять новые атрибуты так, чтобы они не конфликтовали с типовыми и будущими атрибутами системы;
- когда допустимо использовать проектное переопределение;
- какие изменения нельзя выполнять напрямую в типовой поставке.

## Область применения

Раздел применяется при разработке и сопровождении проектных расширений Global ERP.

Раздел обязателен для:

- проектных разработчиков;
- ведущих разработчиков и технических архитекторов проекта;
- специалистов, выполняющих ревью проектных доработок;
- специалистов, отвечающих за сборку и передачу проектных изменений между экземплярами системы.

Раздел рекомендуется для ознакомления:

- функциональным консультантам;
- аналитикам;
- администраторам системы;
- специалистам сопровождения.

Раздел не заменяет руководство разработчика Global ERP и документацию по отдельным механизмам платформы. Если в руководстве разработчика или в документации по конкретному механизму указаны более строгие правила, применяются более строгие правила.

## Связанные разделы документации

Настоящий раздел не дублирует общую документацию по разработке, именованию сущностей, Git, релизам, SQL и оптимизации кода.

При выполнении проектной разработки дополнительно используются следующие разделы документации:

- `Организация разработки` — структура проекта, `project.yaml`, работа с модулями, релизы, миграционные пакеты, Git и рабочее место разработчика;
- `Оптимизация работы системы` — ревью Scala-кода, оптимизация Scala-кода, работа с данными и кэшем, ревью SQL-запросов, оптимизация SQL-запросов;
- `JEXL-скрипты в Global ERP` — правила написания и применения JEXL-скриптов;
- справочные разделы по классам, выборкам, типам объектов, печатным формам и универсальному фильтру.

В регламенте проектной разработки фиксируются только правила выбора способа проектной доработки, проектного именования, безопасного расширения типовой функциональности, поставки и сопровождения проектных изменений.

## Основные термины

**Типовая поставка** — стандартные модули, классы, выборки, пакеты, настройки и другие объекты Global ERP, поставляемые в составе продукта.

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

**Модификация** — изменение типового компонента Global ERP. Модификация выполняется только по согласованному решению и должна попадать в поставку продукта или отдельный согласованный комплект обновления.

**Конфигурационное расширение** — изменение поведения системы через настройки, не требующее изменения программного кода. Например, настройка типа объекта, объектных характеристик, печатных форм, переходов состояний, JEXL-скриптов или правил проверки.

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

**Точка расширения** — поддерживаемое место в типовой логике, к которому можно подключить проектную обработку без изменения стандартного кода.

**Проектный префикс** — буквенный идентификатор проекта или заказчика, используемый в системных именах проектных модулей и объектов.

**Проектный атрибут** — атрибут, характеристика или поле, добавленное проектной командой и не входящее в типовую поставку Global ERP.

## Общие принципы проектной разработки

### Приоритет стандартной функциональности

Проектная разработка выполняется только после проверки, что требование невозможно или нецелесообразно реализовать стандартными средствами Global ERP.

Перед началом разработки необходимо проверить:

- есть ли стандартная настройка на типе объекта;
- можно ли использовать объектные или универсальные характеристики;
- можно ли подключить печатную форму через интерфейс;
- можно ли использовать JEXL-скрипт в поддерживаемом месте применения;
- есть ли точка расширения для нужного сценария;
- можно ли решить задачу созданием нового проектного объекта без изменения типового.

Если требование закрывается настройкой, разработка в коде не выполняется.

### Разделение типовой и проектной части

Проектные изменения должны быть отделены от типовой поставки.

Проектная команда не должна изменять типовые файлы, типовые ODM/ORM-разметки, типовые DataInstall-скрипты и типовые настройки напрямую, если для этого нет отдельного согласованного решения.

Для проектной разработки используются:

- проектные модули;
- проектные классы;
- проектные выборки и отображения;
- проектные пакеты, библиотеки, Api и Avi;
- проектные печатные формы;
- проектные JEXL-скрипты;
- объектные и универсальные характеристики;
- проектные настройки типов объектов;
- точки расширения;
- проектные переопределения.

### Сохраняемость при обновлениях

Проектные расширения должны сохраняться при обновлении версии Global ERP.

Даже если расширение выполнено по стандартным правилам, обновление типовой поставки может повлиять на проектную логику. Поэтому перед установкой обновления необходимо проверять:

- изменились ли типовые классы, от которых наследуется проектная логика;
- изменились ли методы, которые переопределяются проектным кодом;
- изменились ли типовые выборки, к которым привязаны проектные отображения;
- изменились ли типовые атрибуты, используемые в проектных отчетах, JEXL-скриптах и интеграциях;
- не появились ли в типовой поставке атрибуты или объекты с именами, похожими на проектные.

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