====== Добавление обязательных полей для агента ======
При обновлении программы добавляются новые поля в таблицы базы данных.\\
Если эти поля используются а агенте, то после обновления агента возникают ошибки запуска агента на базах, где обновление еще не выполнено.\\
===== Задача =====
При запуске агента проверять наличие всех необходимых таблиц и полей в таблицах данных и, если таблица или поле отсутствует, то автоматически добавлять.\\
===== Настройки =====
1. Заполнение списка обязательных полей на форме [[:pc_FormDB_Fields|Обязательные поля для агента]]\\
===== Исполнение =====
При запуске Агента АХ выполняется две функции проверки наличия полей, которые различаются только источником данных:
- CheckDBData - хранит список полей непосредственно в коде программы, в связи с этим дополнение в список полей возможно только при обновлении версии агента.
- CheckDB_Fields - хранит данные в таблице DB_Tables_Fields в базе данных "Менеджера проектов", поэтому добавление поле не требует обновления агента, но требует доступа к Агенту PC.
==== Этапы работы CheckDB_Fields ====
1. Запрашивается список обязательных полей из таблицы DB_Tables_Fields. \\
Выполняется запрос к **Агенту "Менеджера проектов"** по команде **GetDB_Tables_Fields** \\
https://cl.agb.is/GetDB_Tables_Fields\\
2. Для каждой записи определяются поля\\
* **Наименование таблицы**\\
* **Наименование поля**\\
* **Тип поля**\\
* **Описание назначения поля**\\
* **SQL-запрос** - SQL запрос, который будет выполнен после создания поля. С помощью этого запроса выполняется первичное заполнение поля. Запрос может содержать несколько команд;\\
3. Добавление поля.
3.1. Если заданы значения **Наименование таблицы**, **Наименование поля**, **Тип поля**, то проверяется наличие поля и, при необходимости добавляется. Скрипт отправляется по репликации.\\
3.2. Если, дополнительно, задано значение **Описание назначения поля**, то после добавления поля добавляется и описание поля. Скрипт отправляется по репликации.\\
3.3. Если, дополнительно, задан **SQL-запрос**, то после добавления поля выполняется SQL запрос. Скрипт **не отправляется** по репликации.\\
* Если таблица отсутствует, то поле не добавляется.\\
* Пункты 3.2 и 3.3 выполняются только в случае добавления поля.\\
* Нет возможности добавить таблицу\\
* Нет возможности выполнить скрипт без добавления поля\\
После каждой операции результат сразу сохраняется в базе данных.\\
В случае критической ошибки сообщение об ошибке записывается в лог агента и остальной список полей игнорируется.\\
[[develop:/реализация_добавления_обязательных_полей_для_агента|Реализация добавления обязательных полей для агента]]\\
===== Дополнительная информация =====
[[:pc_FormDB_Fields|Обязательные поля для агента]]\\
[[:pc_FormDB_Field|Обязательное поле для агента]]\\
[[:db_tables_fields|DB_Tables_Fields]] \\