Сервер Отчетов (ies.service)
=========================

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

В разделе описывается типовая конфигурация **Сервера Отчетов** (Report Server).

Конфигурация и Параметры
************************

Сервер отчетов представляет собой службу .NET, конфигурация которой определяется файлами ``appsettings.json``, ``IES.Service.(exe|dll).config`` и сущностью правил маршрутизации процессов.

Настройка Компонентов
=====================

Для корректной работы сервера отчетов необходимо отключить ряд компонентов (:term:`Хандлеров <Хандлер>` и :ref:`Холдеров <holdersref>`), которые должны выполняться только на основном сервере. Данная настройка производится в файле конфигурации ``IES.Service.(exe|dll).config`` в секции ``VCLib.Server/StarterConfiguration/Holders``.

Ниже приведены списки компонентов, которые необходимо отключить.

Конфигурация Обработчиков (Handlers):

.. list-table::
   :header-rows: 1
   :widths: 40 50 10

   * - Полное имя (Full Name)
     - Описание
     - Системный
   * - **IES.ExpertiseOneSluchProcessHandler**
     - Обработчик процесса экспертизы одного случая
     - Нет
   * - **IES.ExpertisePolicyProcessHandler**
     - Обработчик процесса проверки полисов
     - Нет
   * - **IES.ExpertiseSchetAsFlkProcessHandler**
     - Обработчик процесса экспертизы счета как ФЛК
     - Нет
   * - **IES.ExpertiseSchetByGroupProcessHandler**
     - Обработчик процесса экспертизы счета по группе
     - Нет
   * - **IES.ExpertiseSchetProcessHandler**
     - Обработчик процесса экспертизы счета
     - Нет
   * - **IES.ExpertiseSluchProcessHandler**
     - Обработчик процесса экспертизы случая
     - Нет
   * - **IES.ProcessAttachmentProcessHandler**
     - Обработчик запросов о прикреплении
     - Нет
   * - **IES.TempFileRepairingHandler**
     - Хандлер восстановления временных файлов
     - Нет

Конфигурация Холдеров (Holders):

.. list-table::
   :header-rows: 1
   :widths: 40 50 10

   * - Полное имя (Full Name)
     - Описание
     - Системный
   * - **FNS.LoadSettingsHolder**
     - Холдер настроек загрузки ФНС
     - Нет
   * - **IES.CompanySettingsHolder**
     - Холдер настроек компании
     - Нет
   * - **IES.ComponentsDiagram**
     - Холдер диаграммы компонентов
     - Нет
   * - **IES.DiagramMonitoringHolder**
     - Холдер мониторинга диаграммы серверных процессов
     - Нет
   * - **IES.EmailLoadHolder**
     - Холдер загрузки из Email
     - Нет
   * - **IES.EmailNotifyHolder**
     - Холдер отправки оповещений по Email
     - Нет
   * - **IES.ExpertiseErrorsHolder**
     - Холдер ошибок экспертизы
     - Нет
   * - **IES.ExpertiseLogHolder**
     - Холдер логирования экспертизы
     - Нет
   * - **IES.ExportRecordServiceHolder**
     - Холдер сервисов выгрузки
     - Нет
   * - **IES.F006Holder**
     - Холдер F006
     - Нет
   * - **IES.F014DenyReasonHolder**
     - Холдер причин отказа F014
     - Нет
   * - **IES.FactCalcSettingHolder**
     - Холдер настроек расчета факта
     - Нет
   * - **IES.FlkSettingsHolder**
     - Холдер ФЛК схем
     - Нет
   * - **IES.FrzlMessagePackHolder**
     - Холдер пакетов ФРЗЛ
     - Нет
   * - **IES.GosznakMessageHolder**
     - Холдер приёмки ответов госзнака
     - Нет
   * - **IES.HolidayHolder**
     - Холдер выходных
     - Нет
   * - **IES.ImportRecordHolder**
     - Холдер процесса загрузки
     - Нет
   * - **IES.MedicalExpertiseFolderHolder**
     - Холдер папок экспертизы
     - Нет
   * - **IES.MesPriceHolder**
     - Холдер стоимостей стандартов
     - Нет
   * - **IES.MtrSchetOutCopyHolder**
     - Холдер копирования атрибутов при раскассировании
     - Нет
   * - **IES.PlanFactCalculationHolder**
     - Холдер расчета план-факта
     - Нет
   * - **IES.PlanSectionHolder**
     - Холдер классификаторов планирования
     - Нет
   * - **IES.PolicyPackSendHolder**
     - Холдер отправки пакетов полисов
     - Нет
   * - **IES.PostponedDeleteEntityHolder**
     - Холдер настроек отложенного удаления
     - Да
   * - **IES.RabbitMQHolder**
     - Холдер загрузки реестров из шины данных
     - Нет
   * - **IES.RabbitWatcherHolder**
     - Холдер предобработки счетов раббита
     - Нет
   * - **IES.RedirectImportDataHolder**
     - Холдер перенаправления импорта данных
     - Нет
   * - **IES.ReportNameHolder**
     - Холдер именования отчетов
     - Нет
   * - **IES.ResetProcessObjectHolder**
     - Холдер для перезапуска PROCESS_IMPORT_OBJECT
     - Нет
   * - **IES.RobotFolderHolder**
     - Холдер папок робота
     - Нет
   * - **IES.SchetOplataHolder**
     - Холдер оплаты
     - Нет
   * - **IES.SchetQueueHolder**
     - Холдер приоритетных очередей приемки счетов
     - Нет
   * - **IES.SchetZapIdentificationHolder**
     - Холдер идентификации
     - Нет
   * - **IES.SearchCriteriaHolder**
     - Холдер критериев поиска
     - Нет
   * - **IES.SMEV3ServiceHolder**
     - Холдер взаимодействия со :term:`СМЕВ3 <СМЭВ>`
     - Нет
   * - **IES.SPReplaceHolder**
     - Холдер замен хранимых процедур
     - Нет
   * - **IES.TariffAgreementHolder**
     - Холдер тарификации
     - Нет
   * - **IES.TariffValueGroupsHolder**
     - Холдер групп тарифных значений
     - Нет
   * - **IES.TfomsF001DictionaryHolder**
     - Холдер ТФОМС F001
     - Нет
   * - **VCLib.CascadeDeleteHolder**
     - Холдер каскадного удаления
     - Да
   * - **VCLib.DictionaryUpdateHolder**
     - Холдер обновляемых справочников
     - Да
   * - **VCLib.DictionaryUpdateInfoHolder**
     - Холдер информации об обновлении справочников
     - Да
   * - **VCLib.DtoModelHolder**
     - Холдер :doc:`DTO моделей <../../vcguides/administration/web-dto-update>`
     - Нет
   * - **VCLib.EntitiesWebAliasHolder**
     - Холдер веб-алиасов сущностей
     - Нет
   * - **VCLib.ExtraUICommandHolder**
     - Холдер доп. команд
     - Да
   * - **VCLib.FileContentHolder**
     - Холдер получения контента файлов
     - Да
   * - **VCLib.KKMProcessHolder**
     - Холдер процессов ККМ
     - Нет
   * - **VCLib.MongoDBIntegrationHolder**
     - Холдер интеграции с MongoDB
     - Да
   * - **VCLib.ObjectModificationActionHolder**
     - Холдер действий при модификации объектов
     - Да
   * - **VCLib.ObjectsHistoryManagerHolder**
     - Холдер управления историей объектов
     - Да
   * - **VCLib.StatisticsHolder**
     - Холдер статистики использования
     - Нет
   * - **VCLib.WebApiHolder**
     - Холдер Web API
     - Нет
   * - **VCLib.WebServiceHolder**
     - Холдер :ref:`веб-сервисов <webserv0>`
     - Нет

Пример секции ``VCLib.Server/StarterConfiguration/Holders``:

.. code-block:: xml

		<Holders>
			<!-- Хандлеры report сервера, которые должны быть только на main -->
			<Holder name="IES.ExpertiseSchetProcessHandler" startup="disabled" />
			<Holder name="IES.ExpertiseSchetByGroupProcessHandler" startup="disabled" />
			<Holder name="IES.ExpertiseSluchProcessHandler" startup="disabled" />
			<Holder name="IES.ExpertiseSchetAsFlkProcessHandler" startup="disabled" />
			<Holder name="IES.ProcessAttachmentProcessHandler" startup="disabled" />
			<Holder name="IES.ExpertisePolicyProcessHandler" startup="disabled" />
			<Holder name="IES.ExpertiseOneSluchProcessHandler" startup="disabled" />
			<Holder name="IES.TempFileRepairingHandler" startup="disabled" />

			<!-- Холдеры report сервера, которые должны быть только на main -->
			<Holder name="FNS.LoadSettingsHolder" startup="disabled" />
			<Holder name="IES.CompanySettingsHolder" startup="disabled" />
			<Holder name="IES.ComponentsDiagram" startup="disabled" />
			<Holder name="IES.EmailLoadHolder" startup="disabled" />
			<Holder name="IES.EmailNotifyHolder" startup="disabled" />
			<Holder name="IES.ExpertiseErrorsHolder" startup="disabled" />
			<Holder name="IES.ExpertiseLogHolder" startup="disabled" />
			<Holder name="IES.ExportRecordServiceHolder" startup="disabled" />
			<Holder name="IES.F006Holder" startup="disabled" />
			<Holder name="IES.F014DenyReasonHolder" startup="disabled" />
			<Holder name="IES.FactCalcSettingHolder" startup="disabled" />
			<Holder name="IES.FlkSettingsHolder" startup="disabled" />
			<Holder name="IES.FrzlMessagePackHolder" startup="disabled" />
			<Holder name="IES.GosznakMessageHolder" startup="disabled" />
			<Holder name="IES.HolidayHolder" startup="disabled" />
			<Holder name="IES.ImportRecordHolder" startup="disabled" />
			<Holder name="IES.MedicalExpertiseFolderHolder" startup="disabled" />
			<Holder name="IES.MesPriceHolder" startup="disabled" />
			<Holder name="IES.MtrSchetOutCopyHolder" startup="disabled" />
			<Holder name="IES.PlanFactCalculationHolder" startup="disabled" />
			<Holder name="IES.PlanSectionHolder" startup="disabled" />
			<Holder name="IES.PolicyPackSendHolder" startup="disabled" />
			<Holder name="IES.PostponedDeleteEntityHolder" startup="disabled" />
			<Holder name="IES.RabbitMQHolder" startup="disabled" />
			<Holder name="IES.RabbitWatcherHolder" startup="disabled" />
			<Holder name="IES.RedirectImportDataHolder" startup="disabled" />
			<Holder name="IES.ReportNameHolder" startup="disabled" />
			<Holder name="IES.ResetProcessObjectHolder" startup="disabled" />
			<Holder name="IES.RobotFolderHolder" startup="disabled" />
			<Holder name="IES.SchetOplataHolder" startup="disabled" />
			<Holder name="IES.SchetQueueHolder" startup="disabled" />
			<Holder name="IES.SchetZapIdentificationHolder" startup="disabled" />
			<Holder name="IES.SearchCriteriaHolder" startup="disabled" />
			<Holder name="IES.SMEV3ServiceHolder" startup="disabled" />
			<Holder name="IES.SPReplaceHolder" startup="disabled" />
			<Holder name="IES.TariffAgreementHolder" startup="disabled" />
			<Holder name="IES.TariffValueGroupsHolder" startup="disabled" />
			<Holder name="IES.TfomsF001DictionaryHolder" startup="disabled" />
			<Holder name="IES.DiagramMonitoringHolder" startup="disabled" />
			<Holder name="VCLib.CascadeDeleteHolder" startup="disabled" />
			<Holder name="VCLib.DictionaryUpdateHolder" startup="disabled" />
			<Holder name="VCLib.DictionaryUpdateInfoHolder" startup="disabled" />
			<Holder name="VCLib.DtoModelHolder" startup="disabled" />
			<Holder name="VCLib.EntitiesWebAliasHolder" startup="disabled" />
			<Holder name="VCLib.ExtraUICommandHolder" startup="disabled" />
			<Holder name="VCLib.FileContentHolder" startup="disabled" />
			<Holder name="VCLib.ObjectModificationActionHolder" startup="disabled" />
			<Holder name="VCLib.ObjectsHistoryManagerHolder" startup="disabled" />
			<Holder name="VCLib.StatisticsHolder" startup="disabled" />
			<Holder name="VCLib.WebApiHolder" startup="disabled" />
			<Holder name="VCLib.WebServiceHolder" startup="disabled" />
			<Holder name="VCLib.KKMProcessHolder" startup="disabled" />
			<Holder name="VCLib.MongoDBIntegrationHolder" startup="disabled" />
		</Holders>

Настройка Маршрутизации Процессов
=================================

Для корректной работы распределенной системы с репликацией важно правильно настроить :term:`маршрутизацию <Маршрутизация>` процессов.

Принцип маршрутизации:

*   **На Основной Сервер (Main):** Должны перенаправляться все процессы, выполняющие модификацию данных (INSERT, UPDATE, DELETE). Поскольку сервер отчетов работает с доступной только для чтения репликой, любые попытки записи локально приведут к ошибкам.
*   **На Сервер Отчетов (Report):** Должны перенаправляться ресурсоемкие процессы чтения, формирования отчетов и выгрузки данных, чтобы разгрузить основной сервер.

Ниже приведена таблица рекомендуемых правил маршрутизации.

.. list-table::
   :header-rows: 1
   :widths: 35 45 10 10

   * - Имя Процесса
     - Описание
     - Источник (Source)
     - Назначение (Target)
   * - **KERNEL_INSERT**
     - Выполнение инструкции по созданию записи в БД
     - Report
     - Main
   * - **KERNEL_UPDATE**
     - Выполнение инструкции по изменению записи в БД
     - Report
     - Main
   * - **KERNEL_DELETE**
     - Выполнение инструкции по удалению записи из БД
     - Report
     - Main
   * - **KERNEL_SAVE**
     - Генерация инструкций и запуск процессов создания или изменения записи в БД
     - Report
     - Main
   * - **Save**
     - Серверный процесс сохранения. Сбор и запуск низкоуровневых процессов изменения БД по объекту
     - Report
     - Main
   * - **INTERACTIVE_SAVE**
     - Подготовка и запуск серверных процессов сохранения
     - Report
     - Main
   * - **ExecStoredProcedureProcess**
     - Процесс выполнения хранимой процедуры
     - Report
     - Main
   * - **CountStatisticsValues**
     - Сбор и сохранение статистики выполнения отчётов
     - Report
     - Main
   * - **RefreshCompanySettingsHolder**
     - Обновление холдера :ref:`настроек организации <orgsetup>`
     - Report
     - Main
   * - **GetCompanySettingsParameterValue**
     - Получение значений параметров из холдера настроек организации
     - Report
     - Main
   * - **GetCompanySettingsParameter**
     - Получение параметров из холдера настроек организации
     - Report
     - Main
   * - **REPORT_CREATE**
     - Процесс формирования :doc:`списочного отчёта <../../vcguides/reports/list_report>`
     - Main
     - Report
   * - **ReportUnloadProcess**
     - Серверный процесс инструмента выгрузки отчётов
     - Main
     - Report
   * - **MENU_REPORT_CREATE**
     - Процесс запуска любого отчёта через меню Отчёты в интерфейсе
     - Main
     - Report
   * - **CreateGenericReport**
     - Процесс формирования генераторного отчёта
     - Main
     - Report
   * - **ViewGenericReportProcess**
     - Процесс формирования preview генераторного отчёта
     - Main
     - Report
   * - **CheckGenericReportProgressProvided**
     - Проверка работоспособности генераторного отчёта
     - Main
     - Report
   * - **CreateXMLReportProcess**
     - Процесс формирования XML отчёта
     - Main
     - Report
   * - **ExportDataProcess**
     - Процесс формирования отчёта типа Выгрузка
     - Main
     - Report
   * - **GENERATE_TEMPLATE**
     - Процесс генерации шаблона для списочного отчёта
     - Main
     - Report
   * - **CHECK_TEMPLATE**
     - Процесс проверки работоспособности шаблона списочного отчёта
     - Main
     - Report
