ред статей
Before Width: | Height: | Size: 50 KiB |
Before Width: | Height: | Size: 82 KiB |
Before Width: | Height: | Size: 50 KiB |
Before Width: | Height: | Size: 33 KiB |
Before Width: | Height: | Size: 14 KiB |
|
@ -1,141 +0,0 @@
|
|||
# Интеграция с почтовым клиентом
|
||||
|
||||
## Общая информация
|
||||
|
||||
Для подключения почтового клиента к dbmail следует пройти несколько шагов:
|
||||
|
||||
1. Настроить почту, с которой должна осуществляться рассылка.
|
||||
2. Настроить конфигурационный файл проекта.
|
||||
3. Настроить роли сервера.
|
||||
4. Создать учётную запись и профиль в SQL Server Management Studio (SSMS).
|
||||
5. Проверить работоспособность рассылки при помощи SQL-запроса.
|
||||
|
||||
## Настройка почты
|
||||
|
||||
Настройка почты, с которой должна осуществляться рассылка, хорошо описана [здесь](https://www.advantshop.net/help/pages/email-google-yandex). К рассмотрению рекомендуется раздел "Примеры настроек для различных почтовых сервисов" для "Почта Яндекс", включая такие подпункты как "Пароли приложения" и "Возможные ошибки при использовании @yandex.ru и SSL настройки".
|
||||
|
||||
## Настройка конфигурационного файла проекта
|
||||
|
||||
### Настройки сервиса электронной почты и смс сообщений
|
||||
|
||||
Чтобы отправка писем на почту работала, необходимо подключить почтовый ящик в разделе **applications.post.emails**.
|
||||
|
||||
!!! note
|
||||
Раздел applications { post { }} конфигурационного файла ./config/production.js
|
||||
|
||||
- _**protocol**_ – используемый веб-протокол (по умолчанию `'http'`).
|
||||
- _**host**_ – имя хоста (по умолчанию `'localhost'`).
|
||||
- _**port**_ – порт для запуска (по умолчанию – `3066`).
|
||||
- _**route**_ – используемый маршрут (по умолчанию `'/api/v2.0/post'`).
|
||||
- _**script**_ – путь к модулю, запускающему сервис (по умолчанию `'ecosoft-lexema8/post'`).
|
||||
- _**attachmentRequestTimeout**_ – максимальное время ожидания загрузки файла в миллисекундах (по умолчанию `1000`).
|
||||
- _**defaultEmailId**_ – идентификатор почтового ящика, который используется по умолчанию.
|
||||
- _**emails**_ – словарь с описанием используемых почтовых ящиков. Ключом является уникальный идентификатор почтового ящика, а значением – объект со свойствами:
|
||||
* *host* – имя хоста smtp-сервера.
|
||||
* *port* – порт smtp-сервера.
|
||||
* *secure* – включить/выключить доставку по электронной почте с использованием TLS/STARTTLS (по умолчанию `false`). Доступные значения: `true`, `false`. (Для 'smtp.yandex.ru' значение должно быть `true`)
|
||||
* *user* – логин.
|
||||
* *pass* – пароль.
|
||||
* *userName* – имя отображаемое при отправке почты.
|
||||
|
||||
### Пример
|
||||
|
||||
``` js
|
||||
applications: {
|
||||
// ...
|
||||
post: {
|
||||
defaultEmailId: 'default',
|
||||
emails: {
|
||||
default: {
|
||||
host: 'smtp.gmail.com',
|
||||
port: 587,
|
||||
secure: false,
|
||||
user: 'lexemaecm@gmail.com',
|
||||
pass: 'password',
|
||||
userName: 'Lexema'
|
||||
}
|
||||
},
|
||||
// ...
|
||||
}
|
||||
```
|
||||
|
||||
## Настройка ролей сервера
|
||||
|
||||
Для дальнейшей настройки в SSMS потребуется назначить текущем пользователю роль _sysadmin_ (или использовать пользователя с такой ролью). Для этого необходимо открыть "Обозреватель объектов". В нижней его части раскрыть папку "Безопасность" -> "Имена для входа (Logins)" -> кликнуть правой кнопкой мыши (ПКМ) по логину интересующего пользователя -> выбрать пункт "Свойства" и перейти в раздел "Роли сервера". Слева от роли sysadmin должна стоять галочка.
|
||||
|
||||
## Учётная запись и профиль в SSMS
|
||||
|
||||
Настройку dbmail в SSMS можно произвести двумя путями: с помощью SQL-запросов и с помощью интерфейса самой программы SSMS. Ниже приведена инструкция по настройке при помощи интерфейса. Требующиеся для аналогичной настройки на текущем и последующих шагах команды можно найти [здесь](https://habr.com/ru/post/179819/).
|
||||
|
||||
В SSMS необходимо открыть "Обозреватель объектов". В нижней его части раскрыть папку "Управление" и кликнуть ПКМ по пункту "Компонент Database Mail" и выбрать действие "Настроить компонент Database Mail".
|
||||
|
||||
![Рисунок 1 "Настроить компонент Database Mail"](component-step1.jpg)
|
||||
|
||||
Далее необходимо создать учётную запись и профиль. Обязательные поля выделены красными прямоугольниками.
|
||||
|
||||
![Рисунок 2.1 Учетная запись. Обязательные поля](component-step20.jpg)
|
||||
|
||||
Следующие изображения с вариантами заполнения полей служат в качестве примера.
|
||||
|
||||
![Рисунок 2.2 Учетная запись. Пример](component-step2.jpg)
|
||||
|
||||
![Рисунок 3.1 Профиль. Обязательные поля](component-step30.jpg)
|
||||
|
||||
В поле "Профиль по умолчанию" (Default Profile) можно выбрать "Да" (Yes), если на проекте используется только этот профиль.
|
||||
|
||||
![Рисунок 3.2 Профиль. Пример](component-step3.jpg)
|
||||
|
||||
## Проверка работоспособности рассылки при помощи SQL-запроса
|
||||
|
||||
Ниже приведен запрос для первой отправки сообщения от подключенной почты при помощи dbmail. Непосредственно отправка письма осуществляется при помощи выполнения команды ```exec msdb.dbo.sp_send_dbmail```, остальные служат для донастройки (при необходимости) и проверки статуса отправки письма (```msdb.dbo.sysmail_allitems```, ```msdb.dbo.sysmail_event_log```)
|
||||
|
||||
``` sql
|
||||
-- в настройках нужно указать созданный профиль:
|
||||
--update DocflowSettings set EMailProfile='bitedo'
|
||||
|
||||
-- Сначала включим Service broker – он необходим для создания очередей писем, используемых DBMail
|
||||
IF (SELECT is_broker_enabled FROM sys.databases WHERE [name] = 'msdb') = 0
|
||||
ALTER DATABASE msdb SET ENABLE_BROKER WITH ROLLBACK AFTER 10 SECONDS
|
||||
GO
|
||||
-- Включим непосредственно систему DBMail
|
||||
sp_configure 'show advanced options', 1; -- если стоит 0, то следующая настройка не сработает
|
||||
GO
|
||||
RECONFIGURE;
|
||||
GO
|
||||
sp_configure 'Database Mail XPs', 1
|
||||
GO
|
||||
RECONFIGURE
|
||||
GO
|
||||
|
||||
-- Далее нужно проверить, запущена ли служба DBMail:
|
||||
EXECUTE msdb.dbo.sysmail_help_status_sp
|
||||
-- И если она не запущена (ее статус не «STARTED»), то запустить ее запросом
|
||||
EXECUTE msdb.dbo.sysmail_start_sp
|
||||
-- ищем здесь свой @profile_name
|
||||
EXECUTE msdb.dbo.sysmail_help_principalprofile_sp --@principal_name = 'bitedo'
|
||||
|
||||
-- отправим тестовое сообщение
|
||||
exec msdb.dbo.sp_send_dbmail @profile_name = 'bitedo' -- отправитель
|
||||
, @recipients = 'user@lexema.ru' -- получатели, указывается через ;
|
||||
, @subject = 'theme' -- тема
|
||||
, @body = 'hello world' -- содержание
|
||||
, @body_format = 'html'
|
||||
|
||||
-- если статус sent – значит отправлено
|
||||
select * from msdb.dbo.sysmail_allitems
|
||||
--where sent_status not like 'failed'
|
||||
order by mailitem_id desc
|
||||
|
||||
-- если возникли ошибки, см. логи:
|
||||
select * from msdb.dbo.sysmail_event_log order by log_id desc
|
||||
```
|
||||
|
||||
## Преодоление СПАМ-фильтра
|
||||
|
||||
Письма с созданного почтового ящика могут быть не отправлены по причине сработавшего СПАМ-фильтра почтового провайдера. В логах такая ошибка описана следующим образом:
|
||||
|
||||
```
|
||||
The mail could not be sent to the recipients because of the mail server failure. (Sending Mail using Account 10 (2021-06-24T14:52:04). Exception Message: Cannot send mails to mail server. (Transaction failed. The server response was: 5.7.1 [2] Message rejected under suspicion of SPAM; https://ya.cc/1IrBc 1624528324-AOJQDun5U8-q32WauIb).)
|
||||
```
|
||||
|
||||
Существует несколько рекомендаций, описанных в статье на сайте [carrotquest](https://www.carrotquest.io/blog/kak-ne-popast-v-spam/). В случае, если после выполнения приведенных рекомендаций отправка писем остается проваленной, можно обратиться в службу поддержки почтового сервиса.
|
|
@ -1,4 +0,0 @@
|
|||
* [Конфигурирование экземпляра приложения]( ./config_app.md)
|
||||
* [Конфигурирование сервисов Docker](./config_docker.md)
|
||||
* [Сборка образа Docker](./build_docker.md)
|
||||
* [Конфигурирование клиента Packet](./config_npm.md)
|
|
@ -1,26 +0,0 @@
|
|||
# Сборка Docker образа сервиса конфигурации
|
||||
|
||||
Для сборки образа сервиса конфигурации необходимо перейти в каталог с файлами пакета конфигурации и выполнить команду сборки.
|
||||
|
||||
Сборка образа
|
||||
``` bash
|
||||
docker build -f configuration.dockerfile -t <имя создаваемого образа> <путь до каталога>
|
||||
```
|
||||
|
||||
Пример
|
||||
``` bash
|
||||
docker build -f configuration.dockerfile -t bitedo.configuration-service .
|
||||
```
|
||||
|
||||
|
||||
|
||||
После сборки готовый образ нужно скопировать на сервер приложений.
|
||||
|
||||
Образ содержит все настройки и готов к созданию контейнера в составе приложения.
|
||||
|
||||
|
||||
|
||||
!!! note
|
||||
Команды docker для сборки, выгрузки и загрузки можно посмотреть по ссылке https://docs.docker.com/engine/reference/commandline/cli/.
|
||||
|
||||
<!-- Можно использовать [шпаргалки](./mini_notes.md) для работы с docker -->
|
|
@ -1,27 +0,0 @@
|
|||
# Конфигурирование экземпляра приложения
|
||||
Конфигурация приложения разделена на несколько файлов
|
||||
основой служит сервис конфигурации который считывает файл и отдает его содержимое по апи
|
||||
|
||||
!!! warning
|
||||
Необходимо помнить что файлы конфигурации содержат информацию для ограниченного доступа
|
||||
|
||||
Каталог с файлами сервиса конфигурации содержит следующие файлы:
|
||||
|
||||
| Имя | Описание |
|
||||
|-----|----------|
|
||||
| ./config/production.js | - конфигурация для сервисов приложения
|
||||
| ./nginx/default.conf | - настройки сервиса entrypoint (маршруты)
|
||||
| ./SQL/ | - настроечные скрипты для сервера БД (для ручного запуска)
|
||||
|
||||
Для каждого дополнительного сервиса может быть создан отдельный каталог с его настройками.
|
||||
Например, для сервиса работы с ОЭП(dss-service) в конфигурации может присутствовать каталог dss c файлами настроек.
|
||||
|
||||
Если каталог с дополнительными настройками сервиса не присутствует - то сервис запускается с настройками по умолчанию.
|
||||
|
||||
!!! note
|
||||
Для конфигурирования отдельных экземпляров приложения рекомендуется создавать отдельные каталоги для каждого экземпляра.
|
||||
|
||||
## Подготовка файлов конфигурации приложения
|
||||
|
||||
2. проверить настройки в файле ./config/production.js. Других файлов в каталоге ./config/ быть не должно.
|
||||
3. необходимо проверить маршруты описанные в /nginx/default.conf. Они должны отображаться на сервисы используемые в приложении.
|
|
@ -1,4 +0,0 @@
|
|||
# Настройки приложения при поставке Docker
|
||||
|
||||
Файл docker-compose.yml содержит список необходимых для работы приложения сервисов и параметры их запуска
|
||||
Файл .env содержит переменные окружения, которые автоматически применятся для текущего экземпляра приложения.
|
|
@ -1,3 +0,0 @@
|
|||
# Настройки приложения при поставке NPM
|
||||
|
||||
файл ecosystem.config.js содержит список необходимых для работы приложения сервисов и параметры их запуска
|
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 144 KiB |
Before Width: | Height: | Size: 782 B |
Before Width: | Height: | Size: 76 KiB |
|
@ -1,75 +0,0 @@
|
|||
# Настройка обозревателя аналитик
|
||||
|
||||
## Общее описание назначения документа
|
||||
|
||||
Настройка обозревателя аналитик (ОА) служит для выделения уникальных узлов в справочнике, открывающемся по кнопке <img src="../media/uaButton.png" style="height:30px;border:0px">, нажатие на которую открывает всплывающее окно с формой обозревателя аналитик. Так, если существует настройка ОА для контрагентов, то по нажатию на кнопку рядом с соответствующим полем
|
||||
|
||||
![Пример лукапа с ОА](./media/lookupExample.png)
|
||||
|
||||
откроется всплывающее окна с ОА, содержащее в качестве верхнего узла "Контрагенты".
|
||||
|
||||
![Пример ОА для лукапа](./media/uaExample.png){: .zoom}
|
||||
|
||||
## Реестр
|
||||
|
||||
Чтобы открыть реестр настроек обозревателя аналитик, необходимо в меню в папке "Администрирование", подпапке "Обозреватель аналитик" выбрать пункт "Настройка обозревателя аналитик".
|
||||
|
||||
![Меню](./media/menu.png)
|
||||
|
||||
Откроется реестр документов.
|
||||
|
||||
![Реестр "Настройка обозревателя аналитик"](./media/registry.png){: .zoom}
|
||||
|
||||
Для создания нового документа необходимо нажать на кнопку "Создать" на верхней панели инструментов
|
||||
|
||||
![](./media/create.png)
|
||||
|
||||
## Документ
|
||||
|
||||
В поле "Наименование" необходимо заполнить одним из стандартных значений из [таблицы ниже](#таблица).
|
||||
|
||||
В поле "Код" содержатся все узлы ОА. Нужный узел можно выбрать при помощи самого ОА, нажав на кнопку <img src="../media/uaButton.png" style="height:30px;border:0px">.
|
||||
|
||||
![Пример настройки для контрагентов](./media/docExample.png)
|
||||
|
||||
## Таблица сочетаний наименований и кодов {#таблица}
|
||||
|
||||
Наименование | Код
|
||||
-------------|----
|
||||
Base.Projects | Проекты
|
||||
Woker | Кадры
|
||||
Contract | Договоры
|
||||
Department | Подразделения
|
||||
Contacts | Контактные лица
|
||||
Contractor | Контрагент
|
||||
Interest | Интересы
|
||||
Project | Проекты
|
||||
AdditionalContract | Дополнительные документы
|
||||
Currency | Валюта
|
||||
NotRezident | A-Z Иностранные организации (нерезиденты)
|
||||
Storage | Склады
|
||||
BasicMeans | Объекты учета
|
||||
ItemOfExpenses | Статьи затрат
|
||||
Bank | Банки
|
||||
PrimaryDocument | Первичные документы
|
||||
MaterialGroup | Номенклатура/материалы/услуги
|
||||
Investment | Капиталовложения
|
||||
VatRate | Ставки НДС
|
||||
ItemOfBdds | Статьи ДДС
|
||||
Measure | Единицы измерения
|
||||
SegmentValue | Отрасль
|
||||
ExpensesFuture | Расходы будущих периодов
|
||||
Bill | Вексель
|
||||
ArticleOfExpenses | Статьи доходов и расходов
|
||||
TaxablePeriod | Налоговые периоды
|
||||
RP_Person | Физические лица
|
||||
NotRezident_Interest | A-Z Иностранные организации (нерезиденты)
|
||||
TaxLiability | Виды активов и обязательств
|
||||
TaxGroup | Налоговые группы ОС
|
||||
TaxRateProps | Статьи налога на имущество
|
||||
EquipmentGroup | Оборудование
|
||||
MaterialGeneralizedName | Обобщенная номенклатура
|
||||
Zero | 0-9
|
||||
Origin | Корень
|
||||
Direction | Направления
|
||||
TypesOfFixed | Виды выбытия ОС
|
Before Width: | Height: | Size: 50 KiB |
Before Width: | Height: | Size: 29 KiB |
Before Width: | Height: | Size: 64 KiB |
Before Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 98 KiB |
Before Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 29 KiB |
Before Width: | Height: | Size: 73 KiB |
Before Width: | Height: | Size: 31 KiB |
Before Width: | Height: | Size: 198 KiB |
Before Width: | Height: | Size: 29 KiB |
Before Width: | Height: | Size: 41 KiB |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 103 KiB |
Before Width: | Height: | Size: 136 KiB |
Before Width: | Height: | Size: 114 KiB |
|
@ -1,159 +0,0 @@
|
|||
# Настройка архива вложенных документов
|
||||
|
||||
## Общее описание
|
||||
|
||||
Настройка архива вложенных документов необходима для работы аналитической формы [Архив вложенных документов](./../../../../User manuals/archivedoc.md#архив_вложенных_документов) и происходит в несколько этапов:
|
||||
|
||||
* В документ «Справочники поисковой системы» заносятся поля для фильтра, по которым будут собираться вложения.
|
||||
* В справочник «Итоговые выборки поисковой системы» добавить документ с выборкой из некоторой таблицы для документа или группы документов, если их сущности извлекаются одинаково.
|
||||
* В документе "Настройка документа" на вкладке "Контекстный поиск" заполнить несколько полей.
|
||||
* Обновить страницу (клавиша F5), чтобы изменения вступили в силу.
|
||||
|
||||
## Справочники поисковой системы
|
||||
|
||||
Чтобы открыть документ «Справочники поисковой системы», необходимо в меню в папке "Администрирование", подпапке "Документооборот", подпапке "Поисковая система" выбрать пункт «Справочники поисковой системы».
|
||||
|
||||
![Меню](./media/CustomFTSFiltersMenu.png)
|
||||
|
||||
Откроется документ "Справочники FTS". В нём необходимо заполнить таблицу "Фильтры".
|
||||
|
||||
![Справочники FTS](./media/CustomFTSFiltersForm.png){: .zoom}
|
||||
|
||||
Существует строго определённый набор значений поля "Id", приведённый в [таблице ниже](#таблица). Соответствующее им поле "Name" заполняется произвольно. В справочнике «Итоговые выборки поисковой системы» этим значениям будут поставлены в соответствие поля в таблицах, по которым будет осуществляться поиск и фильтрация документов с вложениями.
|
||||
|
||||
## Итоговые выборки поисковой системы
|
||||
|
||||
Чтобы открыть справочник «Итоговые выборки поисковой системы», необходимо в меню в папке "Администрирование", подпапке "Документооборот", подпапке "Поисковая система" выбрать пункт «Итоговые выборки поисковой системы».
|
||||
|
||||
![Меню](./media/ResultFTSMenu.png)
|
||||
|
||||
Откроется реестр "Итоги FTS".
|
||||
|
||||
![Итоги FTS](./media/ResultFTSRegistry.png){: .zoom}
|
||||
|
||||
Значения этого справочника будут предлагаться для выбора в документе "Настройка документа". Для создания нового документа необходимо нажать на кнопку "Создать" на верхней панели инструментов.
|
||||
|
||||
![Кнопка "Создать"](./media/create.png)
|
||||
|
||||
В поле "Выборка" необходимо ввести обозначение для документа или группы документов, если их сущности извлекаются одинаково, которое будет использоваться в качестве одного из значений в настройках документов. В поле "Примечание" можно внести пояснения, например, к каким именно документам относится выборка.
|
||||
|
||||
![Пример заполнения полей "Выборка" и "Примечание"](./media/ResultFTSHeader.png)
|
||||
|
||||
Под полем "Выборка" необходимо прописать результирующий селект, который в процессе расчета будет выполнять система. Структура селекта для всех выборок должна быть одинаковой, они будут объединяться с помощью оператора ```UNION```. Выборка состоит из следующих полей:
|
||||
|
||||
* ```DocCode``` - уникальный код документа, используемый в системе; как правило ```VCode```.
|
||||
* ```DocType``` - тип документа; как правило ```TypeName```.
|
||||
* ```DocDate``` - дата документа; свойство, которое указывается в *Настройке документа* и передаётся в качестве параметра; указывается ```:DateProperty```.
|
||||
* ```DocNumber``` - номер документа; свойство, которое указывается в *Настройке документа* и передаётся в качестве параметра; указывается ```:NumberProperty```.
|
||||
* ```ContractorId``` - уникальный код контрагента, используемый в системе.
|
||||
* ```ContractId``` - уникальный код договора, используемый в системе.
|
||||
* ```AddContractId``` - уникальный код дополнительного документа к договору, используемый в системе.
|
||||
* ```ProjectId``` - уникальный код проекта, используемый в системе.
|
||||
|
||||
В зависимости от подключаемых документов будут меняться таблица, стоящая после оператора ```FROM```, и присваиваемые значения установленных в селекте полей. Если для них есть соответствующие им поля в таблице, их необходимо присвоить. Например, полю ```ContractId``` должен соответствовать код договора, который есть в таблице ```dbo.DocflowDocument``` под названием ```Contract```. Если такого поля в таблице нет, необходимо присвоить значение ```null```. Например, в таблице ```dbo.DocflowDocument``` не указывается код дополнительного документа к договору, поэтому значению ```AddContractId``` присваивется ```null```.
|
||||
|
||||
В таблицу справа "Фильтры" необходимо занести значения из *Справочника поисковой системы*, по которым будет осуществляться фильтр, и SQL-скрипт – кусок кода, который будет подставлен в предложение WHERE результирующего селекта. Значение, сравниваемое с ```an.Value```, будет совпадать со значением в столбце ```ID``` таблицы "Фильтр". Значение, сравниваемое с ```an.Value```, будет совпадать с полем таблицы, которое присваивается одному из полей селекта.
|
||||
|
||||
![Пример документа "Итог FTS"](./media/ResultFTSForm.png){: .zoom}
|
||||
|
||||
Программа при такой настройке будет выполнять следующий код:
|
||||
|
||||
```sql
|
||||
select DocCode = t.VCode
|
||||
, DocType = t.TypeName
|
||||
, DocDate = :DateProperty
|
||||
, DocNumber = :NumberProperty
|
||||
, ContractorId = t.Contractor
|
||||
, ContractId = t.Contract
|
||||
, AddContractId = CONVERT(bigint, NULL)
|
||||
, ProjectId = t.Projects
|
||||
from dbo.[DocflowDocument] as t
|
||||
where t.COrg = @orgId
|
||||
and exists(
|
||||
select 1 from #anFilters as an where an.Id = 'Contractor' and an.Value = t.Contractor
|
||||
)
|
||||
and exists(
|
||||
select 1 from #anFilters as an where an.Id = 'Contract' and an.Value = t.Contract
|
||||
)
|
||||
and exists(
|
||||
select 1 from #anFilters as an where an.Id = 'Project' and an.Value = t.Projects
|
||||
)
|
||||
```
|
||||
|
||||
Временная таблица ```#anFilters``` создаётся внутри результирующей процедуры расчета и содержит указанные пользователем фильтры.
|
||||
|
||||
Для PostgreSQL-версии селект имеет следующий вид:
|
||||
|
||||
```sql
|
||||
SELECT t."VCode" AS "DocCode"
|
||||
, t."TypeName" AS "DocType"
|
||||
, :DateProperty AS "DocDate"
|
||||
, :NumberProperty AS "DocNumber"
|
||||
, t."Contractor" AS "ContractorId"
|
||||
, t."VCode" AS "ContractId"
|
||||
, NULL::bigint AS "AddContractId"
|
||||
, t."Projects" AS "ProjectId"
|
||||
FROM contract."Contract" as t
|
||||
WHERE t."COrg" = _orgidparam
|
||||
and exists(
|
||||
select 1 from "tmp_anFilters_for_attachmentArchive" as an where an."id" = 'Contractor' and an."value" = cast(t."Contractor" as character varying)
|
||||
)
|
||||
and exists(
|
||||
select 1 from "tmp_anFilters_for_attachmentArchive" as an where an."id" = 'Contract' and an."value" = cast(t."VCode" as character varying)
|
||||
)
|
||||
and exists(
|
||||
select 1 from "tmp_anFilters_for_attachmentArchive" as an where an."id" = 'Project' and an."value" = cast(t."Projects" as character varying)
|
||||
)
|
||||
```
|
||||
|
||||
## Настройка документов
|
||||
|
||||
После заполнения справочника «Итоговые выборки поисковой системы» необходимо перейти в реестр "Настройка документов". В документе необходимо заполнить поля ```typeNameProperty```, ```dateProperty``` и ```numberProperty``` соответствующими им наименованиями полей таблицы: типа документа, даты документа и номера документа. Также необходимо в поле "Итоги" выбрать одно из значений справочника «Итоговые выборки поисковой системы». После заполнения этих полей необходимо поставить галочку в поле **FTS2** и обновить страницу, чтобы изменения вступили в силу.
|
||||
|
||||
![Пример документа "Настройка документа"](./media/DocflowDocumentForm.png){: .zoom}
|
||||
|
||||
## Таблица сочетаний полей фильтра и примеры скриптов {#таблица}
|
||||
|
||||
ID | Пример Name | Пример SQLScript (на основе таблицы ```dbo.AdditionalContract```) | Пример SQLScript на языке PostgreSQL (на основе таблицы ```dbo.AdditionalContract```)
|
||||
---|-------------|-----------------|-----------------
|
||||
Contractor | Контрагент | ```and exists(select 1 from #anFilters as an where an.Id = 'Contractor' and an.Value = t.Contractor)``` | ```and exists( select 1 from "tmp_anFilters_for_attachmentArchive" as an where an."id" = 'Contractor' and an."value" = cast(t."Contractor" as character varying))```
|
||||
Contract | Договор | ```and exists(select 1 from #anFilters as an where an.Id = 'Contract' and an.Value = t.Contract)``` | ```and exists( select 1 from "tmp_anFilters_for_attachmentArchive" as an where an."id" = 'Contract' and an."value" = cast(t."Contract" as character varying) )```
|
||||
AdditionalContract | Доп. документ к договору | ```and exists(select 1 from #anFilters as an where an.Id = 'AdditionalContract' and an.Value = t.VCode)``` | ```and exists( select 1 from "tmp_anFilters_for_attachmentArchive" as an where an."id" = 'AdditionalContract' and an."value" = cast(t."VCode" as character varying) )```
|
||||
Project | Проект | ```and exists(select 1 from #anFilters as an where an.Id = 'Project' and an.Value = t.Projects)``` | ```and exists( select 1 from "tmp_anFilters_for_attachmentArchive" as an where an."id" = 'Project' and an."value" = cast(t."Projects" as character varying) )```
|
||||
|
||||
## Автоматическое формирование отчета заявления с ЭП
|
||||
|
||||
На проекте возможно настроить автоматическое формирование отчета заявления с электронными подписями по завершению маршрута. Для этого в документе "Настройка учетной политики предприятия" нужно настроить константу **Интеграция с 1С с помощью сервиса ODATA** со значением 1
|
||||
|
||||
![Константа](media/constant.png){: .zoom}
|
||||
|
||||
По завершению маршрута в окно вложений заявления добавится печатная форма с ЭП. Архив с ЭП можно будет скачать по кнопке "Скачать архив с ЭП".
|
||||
|
||||
![Вложения](media/attachments.png){: .zoom}
|
||||
|
||||
Скачать архив с ЭП можно только когда в маршруте пройдены все этапы с действием "Подписан ЭП" и текущий этап
|
||||
не требует подписания документа.
|
||||
|
||||
![Этапы](media/stages.png){: .zoom}
|
||||
|
||||
Архив скачается в папку "Загрузки" (Downloads).
|
||||
|
||||
![Загрузки](media/Downloads.png){: .zoom}
|
||||
|
||||
В архиве будут находиться: оригинал заявления, отчет по подписанию и файл с информацией о подписании данного документа по каждому сотруднику.
|
||||
|
||||
![Архив ЭП](media/arhiv.png){: .zoom}
|
||||
|
||||
## Настройка отчета без включения пропущенных этапов подписания
|
||||
|
||||
В проекте есть возможность не добавлять в отчет тех сотрудников, кто включен в маршрут через **ИЛИ** и **НЕ ПРОШЕЛ** этап подписания.
|
||||
|
||||
![Статус пропущен](media/skipped.png){: .zoom}
|
||||
|
||||
Для этого в документе "Настройка учетной политики предприятия" нужно настроить константу **Скрывать участников маршрута без действий** со значением 1.
|
||||
|
||||
![Константа2](media/constant2.png){: .zoom}
|
||||
|
||||
Результат сформированного отчета:
|
||||
|
||||
![Отчет маршрута](media/skippedPrint.png){: .zoom}
|
|
@ -1,21 +0,0 @@
|
|||
# Самостоятельное развертывание системы
|
||||
|
||||
* [Описание]( ./config_app.md)
|
||||
* [Конфигурирование сервисов Docker]( ./config_docker.md)
|
||||
* [Сборка образа Docker]( ./build_docker.md)
|
||||
* [Конфигурирование клиента Packet]( ./config_npm.md)
|
||||
* Настройки клиентской части
|
||||
* [Front](../../service/front/index.md)
|
||||
* Настройки серверной части
|
||||
* [Entrypoint](../../service/entrypoint/index.md)
|
||||
* [MSSQL](../Prepare/prepare_mssql.md)
|
||||
* [Redis](../../service/redis/redis.md)
|
||||
* [RabbitMQ](../../service/rabbitMQ/index.md)
|
||||
* [Gate](../../service/gate/index.md)
|
||||
* [Logic](../../service/logic/index.md)
|
||||
* [File](../../service/file/index.md)
|
||||
* [Post](../../service/post/index.md)
|
||||
* [Radio](../../service/radio/index.md)
|
||||
* [Jsreport](../../service/jsreport/index.md)
|
||||
* [Preview](../../service/preview/index.md)
|
||||
* [Scheduler](../../sheduler/index.md)
|
|
@ -1,2 +0,0 @@
|
|||
* [Docker образы](./deploy_docker.md)
|
||||
* [NPM пакеты](./deploy_npm.md)
|
|
@ -1,16 +0,0 @@
|
|||
# Распространение приложения использованием образов Docker
|
||||
|
||||
Для развертывания сконфигурированного ранее приложения необходимо выполнить следующие шаги:
|
||||
|
||||
1. Cкопировать файлы развертывания приложения __docker-compose.yml__, __.env__ на сервер приложения. Эти файлы идут в составе поставки пакета сервиса конфигурации приложения. Если сборка образа конфигурации была на текущем сервере - тогда этот шаг можно пропустить.
|
||||
|
||||
2. Запустить приложение
|
||||
|
||||
```bash
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
!!!warning
|
||||
Обратите внимание что образ сервиса конфигурации с **файлами конфигурации** конкретного экземпляра приложения собирается отдельно от образов содержащих сервисы приложения, и содержит все необходимые настройки для экземпляра приложения. Такой подход позволяет переиспользовать образы сервисов приложения с разными **сервисами конфигурации**.
|
||||
|
||||
Файл docker-compose.yml содержит описание необходимых для запуска сервисов.
|
|
@ -1,16 +0,0 @@
|
|||
# Распространение приложения через npm-пакеты
|
||||
|
||||
|
||||
Необходимо:
|
||||
|
||||
1. Получить исходные коды сервисов приложения.
|
||||
Дистрибутив поставляется в виде zip архива
|
||||
(Выполнить команду установки зависимостей.)
|
||||
|
||||
2. Скопировать конфигурационные файлы в папку исходных кодов т.к. исходные коды приложения хранятся отдельно от конфигурационных файлов приложения.
|
||||
|
||||
|
||||
3. Запустить сервисы командой
|
||||
``` bash
|
||||
pm2 restart ecosystem.config.js
|
||||
```
|
|
@ -1,23 +0,0 @@
|
|||
# Создание БД
|
||||
|
||||
1. Необходимо развернуть из резервной копии заранее подготовленные базы данных
|
||||
|
||||
* << app >>
|
||||
* << app_history >>
|
||||
|
||||
2. Установить для учетной записи администратора следующие привилегии:
|
||||
|
||||
+ Включить администратора в роль DB_OWNER для следующих БД:
|
||||
|
||||
* << app >>
|
||||
* << app_history >>
|
||||
|
||||
+ Предоставить администратору разрешения на следующие операции:
|
||||
|
||||
* ALTER ANY CONNECTION
|
||||
* ALTER ANY LOGIN
|
||||
* ALTER TRACE
|
||||
|
||||
3. Создать план обслуживания БД включив в него шаг резервного копирования.
|
||||
|
||||
4. Настроить расписание для плана обслуживания
|
|
@ -1,4 +0,0 @@
|
|||
* [update](update.md)
|
||||
* [backup](backup.md)
|
||||
* [clearing](clearing.md)
|
||||
* [monitoring](monitoring.md)
|
|
@ -1,7 +0,0 @@
|
|||
# Backup & Restore
|
||||
|
||||
Резервное копирование баз данных и хранение копий в папке названной по версии приложения
|
||||
|
||||
для развертывания экземпляра из резервной копии необходимо
|
||||
- восстановить базы данных
|
||||
- запустить экземпляр сервера приложений нужной версии, с настройками на восстановленные базы данных
|
|
@ -1,4 +0,0 @@
|
|||
# Очиска системы от старых Docker образов приложения
|
||||
|
||||
Для удаления старых образов создается файл clearing.sh
|
||||
при выполнении он удаляет все предшествующие текущему образы.
|
|
@ -1,26 +0,0 @@
|
|||
# monitoring
|
||||
|
||||
## Базовый мониторинг приложения в Windows
|
||||
|
||||
При запуске сервисов в среде Windows наблюдение за ними происходит в консоли запушенного приложения
|
||||
|
||||
Логи сервисов выводятся в эту-же консоль.
|
||||
|
||||
## Базовый мониторинг контейнеров Docker
|
||||
наблюдение за сервисами приложения
|
||||
```bash
|
||||
docker-compose ps
|
||||
```
|
||||
|
||||
просмотр логов контейнеров
|
||||
```bash
|
||||
docker-compose logs
|
||||
```
|
||||
|
||||
!!! note
|
||||
Сервисы в контейнере app пишут логи в файлы расположенные на подключеном к контейнеру VOLUME
|
||||
эти логи можно посмотреть только подключившись к этому VOLUME
|
||||
|
||||
## Использование коллектора логов fluentd
|
||||
|
||||
В корпоративной среде лоя сбора логов контейнеров Docker можно использовать коллектор [fluentd](https://www.fluentd.org/)
|
|
@ -1,9 +0,0 @@
|
|||
# Update
|
||||
|
||||
Обновление версии приложения при поставке в виде Docker образов происходит следующим методом:
|
||||
|
||||
- на сервер приложения загружаются новые Docker образы
|
||||
- останавливается предыдущий экземпляр приложения
|
||||
- запускается новый экземпляр приложения
|
||||
- открывается страница применения миграций схемы БД и выполняются необходимые миграции
|
||||
|
|
@ -1,571 +0,0 @@
|
|||
# Сборка документов, участвующих в документообороте, в БД
|
||||
|
||||
## Общее описание
|
||||
|
||||
Для участия документов определенного типа и успешного запуска этих документов по маршруту необходимо:
|
||||
|
||||
1. В БД прописать таблицу, на которой построен тип документа, в представлении ```DocflowExists```.
|
||||
2. Выполнить для типа документа "Настройку документа" (после чего обновить страницу).
|
||||
3. Создать для типа документа шаблон маршрута.
|
||||
|
||||
В данном разделе описывается первый шаг: настройка представления ```DocflowExists```. В ней содержатся данные обо всех документах, участвующих в документообороте. Не внесённые в неё типы документов не отображаются на панели "Документооборот" на главной форме и не отправляются по маршруту.
|
||||
|
||||
## Назначение полей
|
||||
|
||||
Представление ```DocflowExists``` содержит данные о разных типах документов, для каждого из которых можно сопоставить следующие поля:
|
||||
|
||||
- **VCode** – обязательное, целое число. Содержит уникальный код документа.
|
||||
- **TypeName** – обязательное. Содержит тип документа.
|
||||
- **Subject** – содержит тему документа.
|
||||
- **Text** – содержит основной текст документа.
|
||||
- **DateOfExecution** – содержит плановую дату исполнения.
|
||||
- **RealDateOfExecution** – содержит фактическую дату исполнения.
|
||||
- **DocDescription** – содержит описание документа.
|
||||
- **Description** – содержит описание содержимого документа.
|
||||
- **DateControl** – содержит дату проверки.
|
||||
- **COrg** – содержит код организации, в которой находился создавший документ пользователь на момент создания документа.
|
||||
- **DocumentDate** – содержит дату документа.
|
||||
- **DocumentNumber** – содержит номер документа, который может настраиваться с помощью [журнала регистрации](../../../СЭД/Журнал регистрации/Журнал регистрации.md).
|
||||
- **VirtualCUser** – содержит логин виртуального (замещаемого) пользователя.
|
||||
- **Projects** – содержит уникальный код проекта.
|
||||
- **SourceDocumentCode** – содержит уникальный код документа-источника, из которого был создан текущий.
|
||||
- **SourceDocumentType** – содержит тип документа-источника.
|
||||
- **GlobalId** – содержит глобальный уникальный идентификатор, .
|
||||
|
||||
Не все поля обязательны к заполнению. Если такие поля не участвуют в бизнес-процессе документа, им присваивается ```NULL```.
|
||||
|
||||
Для внесения в представление документов определённого типа необходимо подключать соответствующие им таблицы. Подключение новых таблиц происходит через ```union all```.
|
||||
|
||||
## Примеры
|
||||
|
||||
Ниже приведены примеры представления ```DocflowExists``` на двух разных проектах. В первом может быть интересна настройка карточек СЭД (```from dbo.DocflowDocument```), во втором содержится настройка большего количества типов документов.
|
||||
|
||||
### Пример 1
|
||||
|
||||
``` sql
|
||||
ALTER VIEW [dbo].[DocflowExists]
|
||||
AS
|
||||
select a.VCode, a.TypeName, a.[Subject], a.[Text], a.DateOfExecution, a.RealDateOfExecution, a.DocDescription, a.[Description], a.DateControl, a.COrg, a.DocumentDate, a.DocumentNumber, a.VirtualCUser,Projects =CONVERT(bigint, null ),
|
||||
a.GlobalID, a.DocumentSubtype, a.SourceDocumentCode,a.SourceDocumentType
|
||||
from (
|
||||
select VCode, TypeName, [Subject], [Text] = convert(varchar(max), NULL),
|
||||
DateOfExecution = case TypeName when 'Instruction' then DateOfExecution
|
||||
when 'IncomingDocument' then DateOfExecution
|
||||
else convert(datetimeoffset, NULL) end,
|
||||
RealDateOfExecution = case TypeName when 'Instruction' then RealDateOfExecution else convert(datetimeoffset, NULL) end,
|
||||
DocDescription = convert(varchar(max), NULL), [Description] = convert(varchar(max), NULL),
|
||||
DateControl = convert(datetimeoffset, NULL), COrg,
|
||||
DocumentDate = case when TypeName in ('IncomingDocument', 'OrganizationalDocument', 'OutgoingDocument')
|
||||
then convert(date,(coalesce([DateOfRegistration],[DocumentDate])))
|
||||
else convert(date,DocumentDate) end,
|
||||
DocumentNumber,
|
||||
VirtualCUser = coalesce(VirtualCUser, CUser),
|
||||
GlobalID,
|
||||
DocumentSubtype,
|
||||
SourceDocumentCode = convert(bigint,null),
|
||||
SourceDocumentType = convert(varchar(255),null)
|
||||
from dbo.DocflowDocument
|
||||
union all
|
||||
select VCode, TypeName, [Subject] = SubjectOfContract, [Text] = convert(varchar(max), NULL), DateOfExecution = convert(datetimeoffset, NULL),
|
||||
RealDateOfExecution = convert(datetimeoffset, NULL), DocDescription = convert(varchar(max), NULL), [Description] = convert(varchar(max), NULL),
|
||||
DateControl = convert(datetimeoffset, NULL), COrg,
|
||||
DocumentDate = DateContract,
|
||||
DocumentNumber = VhodNumber,
|
||||
VirtualCUser = coalesce(VirtualCUser, CUser),
|
||||
GlobalID = convert(uniqueidentifier, null),
|
||||
DocumentSubtype = convert(bigint,null),
|
||||
SourceDocumentCode = convert(bigint,null),
|
||||
SourceDocumentType = convert(varchar(255),null)
|
||||
from dbo.[Contract]
|
||||
union all
|
||||
select VCode, TypeName, [Subject] = SubjectOfContract, [Text] = convert(varchar(max), NULL), DateOfExecution = convert(datetimeoffset, NULL),
|
||||
RealDateOfExecution = convert(datetimeoffset, NULL), DocDescription = convert(varchar(max), NULL), [Description] = convert(varchar(max), NULL),
|
||||
DateControl = convert(datetimeoffset, NULL), COrg,
|
||||
DocumentDate = DateContract,
|
||||
DocumentNumber = Number,
|
||||
VirtualCUser = coalesce(VirtualCUser, CUser),
|
||||
GlobalID = convert(uniqueidentifier, null),
|
||||
DocumentSubtype = convert(bigint,null),
|
||||
SourceDocumentCode = convert(bigint,null),
|
||||
SourceDocumentType = convert(varchar(255),null)
|
||||
from dbo.[AdditionalContract]
|
||||
|
||||
union all
|
||||
select VCode, 'Test',null , [Text] = convert(varchar(max), NULL), DateOfExecution = convert(datetimeoffset, NULL),
|
||||
RealDateOfExecution = convert(datetimeoffset, NULL), DocDescription = convert(varchar(max), NULL), [Description] = convert(varchar(max), NULL),
|
||||
DateControl = convert(datetimeoffset, NULL), 1,
|
||||
DocumentDate = null,
|
||||
DocumentNumber = null,
|
||||
VirtualCUser = null,
|
||||
GlobalID = convert(uniqueidentifier, null),
|
||||
DocumentSubtype = convert(bigint,null),
|
||||
SourceDocumentCode = convert(bigint,null),
|
||||
SourceDocumentType = convert(varchar(255),null)
|
||||
from dbo.[Test]
|
||||
union all
|
||||
select VCode, TypeName, [Subject] = Text, [Text] = convert(varchar(max), Text), DateOfExecution = convert(datetimeoffset, NULL),
|
||||
RealDateOfExecution = convert(datetimeoffset, NULL), DocDescription = convert(varchar(max), NULL), [Description] = convert(varchar(max), NULL),
|
||||
DateControl = convert(datetimeoffset, NULL), COrg,
|
||||
DocumentDate ,
|
||||
DocumentNumber ,
|
||||
VirtualCUser = coalesce(VirtualCUser, CUser),
|
||||
GlobalID,
|
||||
DocumentSubtype ,
|
||||
SourceDocumentCode = convert(bigint,null),
|
||||
SourceDocumentType = convert(varchar(255),null)
|
||||
from dbo.[UniversalDocument]
|
||||
union all
|
||||
select VCode, TypeName, [Subject] = Subject, [Text] = convert(varchar(max), Text), DateOfExecution = convert(datetimeoffset, NULL),
|
||||
RealDateOfExecution = convert(datetimeoffset, NULL), DocDescription = convert(varchar(max), NULL), [Description] = convert(varchar(max), NULL),
|
||||
DateControl = convert(datetimeoffset, NULL), COrg,
|
||||
DocumentDate = DocDate ,
|
||||
DocumentNumber = null,
|
||||
VirtualCUser = coalesce(VirtualCUser, CUser),
|
||||
GlobalID ,
|
||||
DocumentSubtype = convert(bigint,null),
|
||||
SourceDocumentCode = convert(bigint,null),
|
||||
SourceDocumentType = convert(varchar(255),null)
|
||||
from dbo.[CancellationAct]
|
||||
|
||||
) as a
|
||||
```
|
||||
|
||||
### Пример 2
|
||||
|
||||
``` sql
|
||||
ALTER VIEW [dbo].[DocflowExists]
|
||||
AS
|
||||
-- Общее представление документов СЭД
|
||||
SELECT a."VCode"
|
||||
, a."TypeName"
|
||||
, a."Subject"
|
||||
, a."Text"
|
||||
, a."DateOfExecution"
|
||||
, a."RealDateOfExecution"
|
||||
, a."DocDescription"
|
||||
, a."Description"
|
||||
, a."DateControl"
|
||||
, a."COrg"
|
||||
, a."DocumentDate"
|
||||
, a."DocumentNumber"
|
||||
, a."VirtualCUser"
|
||||
, a."Projects"
|
||||
, a."SourceDocumentCode"
|
||||
, a."SourceDocumentType"
|
||||
, a."GlobalId"
|
||||
FROM(
|
||||
-- Заявки LexDesk
|
||||
SELECT t."VCode"
|
||||
, t."TypeName"
|
||||
, t."Name" AS "Subject"
|
||||
, t."Description" AS "Text"
|
||||
, CONVERT(datetimeoffset, t.Deadline) AS "DateOfExecution"
|
||||
, CONVERT(datetimeoffset, NULL) AS "RealDateOfExecution"
|
||||
, t."Name" AS "DocDescription"
|
||||
, ('"' + t."Name" + '" ' + t."Description") AS "Description"
|
||||
, CONVERT(datetimeoffset, NULL) AS "DateControl"
|
||||
, t."COrg"
|
||||
, CONVERT(date, t."CDate") AS "DocumentDate"
|
||||
, CONVERT(varchar(255), NULL) AS "DocumentNumber"
|
||||
, t."CUser" AS "VirtualCUser"
|
||||
, CONVERT(bigint, t.Project) AS "Projects"
|
||||
, CONVERT(bigint, NULL) AS "SourceDocumentCode"
|
||||
, CONVERT(varchar(255), NULL) AS "SourceDocumentType"
|
||||
, CONVERT(uniqueidentifier,null) as "GlobalId"
|
||||
FROM dbo."Ticket" AS t
|
||||
-- Карточки СЭД
|
||||
UNION ALL
|
||||
SELECT t."VCode"
|
||||
, t."TypeName"
|
||||
, t."Subject"
|
||||
, t."Text"
|
||||
, t."DateOfExecution"
|
||||
, t."RealDateOfExecution"
|
||||
, CONVERT(varchar(max), NULL) AS "DocDescription"
|
||||
, CONVERT(varchar(max), NULL) AS "Description"
|
||||
, CONVERT(datetimeoffset, NULL) AS "DateControl"
|
||||
, t."COrg"
|
||||
, t."PeriodDate" AS "DocumentDate"
|
||||
, t."DocumentNumber"
|
||||
, COALESCE(t."VirtualCUser", t."CUser") AS "VirtualCUser"
|
||||
, t."Projects"
|
||||
, t."SourceDocumentCode"
|
||||
, t."SourceDocumentType"
|
||||
, CONVERT(uniqueidentifier,null) as "GlobalId"
|
||||
FROM dbo."DocflowDocument" AS t
|
||||
-- Договора
|
||||
UNION ALL
|
||||
SELECT t."VCode"
|
||||
, t."TypeName"
|
||||
, t."SubjectOfContract" AS "Subject"
|
||||
, CONVERT(varchar(max), NULL) AS "Text"
|
||||
, CONVERT(datetimeoffset, NULL) AS "DateOfExecution"
|
||||
, CONVERT(datetimeoffset, NULL) AS "RealDateOfExecution"
|
||||
, CONVERT(varchar(max), NULL) AS "DocDescription"
|
||||
, CONVERT(varchar(max), NULL) AS "Description"
|
||||
, CONVERT(datetimeoffset, NULL) AS "DateControl"
|
||||
, t."COrg"
|
||||
, t."DateContract" AS "DocumentDate"
|
||||
, t."VhodNumber" AS "DocumentNumber"
|
||||
, COALESCE(t."VirtualCUser", t."CUser") AS "VirtualCUser"
|
||||
, t."Projects"
|
||||
, t."SourceDocumentCode"
|
||||
, t."SourceDocumentType"
|
||||
, CONVERT(uniqueidentifier,null) as "GlobalId"
|
||||
FROM dbo."Contract" AS t
|
||||
-- Приложения к договорам
|
||||
UNION ALL
|
||||
SELECT t."VCode"
|
||||
, t."TypeName"
|
||||
, t.SubjectOfContract AS "Subject"
|
||||
, CONVERT(varchar(max), NULL) AS "Text"
|
||||
, CONVERT(datetimeoffset, NULL) AS "DateOfExecution"
|
||||
, CONVERT(datetimeoffset, NULL) AS "RealDateOfExecution"
|
||||
, CONVERT(varchar(max), NULL) AS "DocDescription"
|
||||
, CONVERT(varchar(max), NULL) AS "Description"
|
||||
, CONVERT(datetimeoffset, NULL) AS "DateControl"
|
||||
, t."COrg"
|
||||
, t."DateContract" AS "DocumentDate"
|
||||
, t."Number" AS "DocumentNumber"
|
||||
, COALESCE(t."VirtualCUser", t."CUser") AS "VirtualCUser"
|
||||
, t."Projects"
|
||||
, t."SourceDocumentCode"
|
||||
, t."SourceDocumentType"
|
||||
, CONVERT(uniqueidentifier,null) as "GlobalId"
|
||||
FROM dbo."AdditionalContract" AS t
|
||||
-- Контрагенты, интересы
|
||||
UNION ALL
|
||||
SELECT t."VCode"
|
||||
, t."TypeName"
|
||||
, CONVERT(varchar(max), NULL) AS "Subject"
|
||||
, CONVERT(varchar(max), NULL) AS "Text"
|
||||
, CONVERT(datetimeoffset, NULL) AS "DateOfExecution"
|
||||
, CONVERT(datetimeoffset, NULL) AS "RealDateOfExecution"
|
||||
, CONVERT(varchar(max), NULL) AS "DocDescription"
|
||||
, CONVERT(varchar(max), NULL) AS "Description"
|
||||
, CONVERT(datetimeoffset, NULL) AS "DateControl"
|
||||
, t."COrg"
|
||||
, CONVERT(date, t."CDate") AS "DocumentDate"
|
||||
, CONVERT(varchar(255), NULL) AS "DocumentNumber"
|
||||
, t."CUser" AS "VirtualCUser"
|
||||
, CONVERT(bigint, NULL) AS "Projects"
|
||||
, CONVERT(bigint, NULL) AS "SourceDocumentCode"
|
||||
, CONVERT(varchar(255), NULL) AS "SourceDocumentType"
|
||||
, CONVERT(uniqueidentifier,null) as "GlobalId"
|
||||
FROM dbo."Contractor" AS t
|
||||
UNION ALL
|
||||
SELECT t."VCode"
|
||||
, 'ProjectsMakeDetail' AS "TypeName"
|
||||
, t."Comment" AS "Subject"
|
||||
, t."Comment" AS "Text"
|
||||
, CONVERT(datetimeoffset, NULL) AS "DateOfExecution"
|
||||
, CONVERT(datetimeoffset, NULL) AS "RealDateOfExecution"
|
||||
, CONVERT(varchar(max), t."Comment") + ' (' + CONVERT(varchar(max), t."ContractorName") + ')' AS "DocDescription"
|
||||
, CONVERT(varchar(max), t."Comment") + ' (' + CONVERT(varchar(max), t."ContractorName") + ') ' + COALESCE('Результат действия: ' + CONVERT(varchar(max), t."Result"), '') AS "Description"
|
||||
, CONVERT(datetimeoffset, NULL) AS "DateControl"
|
||||
, t."COrg"
|
||||
, CONVERT(date, t."CDate") AS "DocumentDate"
|
||||
, CONVERT(varchar(255), NULL) AS "DocumentNumber"
|
||||
, t."CUser" AS "VirtualCUser"
|
||||
, CONVERT(bigint, NULL) AS "Projects"
|
||||
, CONVERT(bigint, NULL) AS "SourceDocumentCode"
|
||||
, CONVERT(varchar(255), NULL) AS "SourceDocumentType"
|
||||
, CONVERT(uniqueidentifier,null) as "GlobalId"
|
||||
FROM dbo."V_crm_ProjectsMakeDetail" AS t
|
||||
-- Проекты
|
||||
UNION ALL
|
||||
SELECT t."VCode"
|
||||
, t."TypeName"
|
||||
, t."Goal" AS "Subject"
|
||||
, CONVERT(varchar(max), t."Goal") AS "Text"
|
||||
, CONVERT(datetimeoffset, NULL) AS "DateOfExecution"
|
||||
, CONVERT(datetimeoffset, NULL) AS "RealDateOfExecution"
|
||||
, CONVERT(varchar(max), NULL) AS "DocDescription"
|
||||
, CONVERT(varchar(max), t."Goal") AS "Description"
|
||||
, CONVERT(datetimeoffset, NULL) AS "DateControl"
|
||||
, t."COrg"
|
||||
, CONVERT(date, t."CDate") AS "DocumentDate"
|
||||
, CONVERT(varchar(255), NULL) AS "DocumentNumber"
|
||||
, t."CUser" AS "VirtualCUser"
|
||||
, t."VCode" AS "Projects"
|
||||
, CONVERT(bigint, NULL) AS "SourceDocumentCode"
|
||||
, CONVERT(varchar(255), NULL) AS "SourceDocumentType"
|
||||
, CONVERT(uniqueidentifier,null) as "GlobalId"
|
||||
FROM dbo."Projects" AS t
|
||||
UNION ALL
|
||||
SELECT t."VCode"
|
||||
, t."TypeName"
|
||||
, CONVERT(varchar(max), NULL) AS "Subject"
|
||||
, CONVERT(varchar(max), NULL) AS "Text"
|
||||
, CONVERT(datetimeoffset, NULL) AS "DateOfExecution"
|
||||
, CONVERT(datetimeoffset, NULL) AS "RealDateOfExecution"
|
||||
, CONVERT(varchar(max), NULL) AS "DocDescription"
|
||||
, CONVERT(varchar(max), NULL) AS "Description"
|
||||
, CONVERT(datetimeoffset, NULL) AS "DateControl"
|
||||
, t."COrg"
|
||||
, CONVERT(date, t."CDate") AS "DocumentDate"
|
||||
, CONVERT(varchar(255), NULL) AS "DocumentNumber"
|
||||
, t."CUser" AS "VirtualCUser"
|
||||
, CONVERT(bigint, NULL) AS "Projects"
|
||||
, CONVERT(bigint, NULL) AS "SourceDocumentCode"
|
||||
, CONVERT(varchar(255), NULL) AS "SourceDocumentType"
|
||||
, CONVERT(uniqueidentifier,null) as "GlobalId"
|
||||
FROM dbo."CommercialProposal" AS t
|
||||
UNION ALL
|
||||
SELECT t."VCode"
|
||||
, t."TypeName"
|
||||
, CONVERT(varchar(max), NULL) AS "Subject"
|
||||
, CONVERT(varchar(max), NULL) AS "Text"
|
||||
, CONVERT(datetimeoffset, NULL) AS "DateOfExecution"
|
||||
, CONVERT(datetimeoffset, NULL) AS "RealDateOfExecution"
|
||||
, CONVERT(varchar(max), NULL) AS "DocDescription"
|
||||
, CONVERT(varchar(max), NULL) AS "Description"
|
||||
, CONVERT(datetimeoffset, NULL) AS "DateControl"
|
||||
, t."COrg"
|
||||
, CONVERT(date, t."CDate") AS "DocumentDate"
|
||||
, CONVERT(varchar(255), NULL) AS "DocumentNumber"
|
||||
, t."CUser" AS "VirtualCUser"
|
||||
, CONVERT(bigint, NULL) AS "Projects"
|
||||
, CONVERT(bigint, NULL) AS "SourceDocumentCode"
|
||||
, CONVERT(varchar(255), NULL) AS "SourceDocumentType"
|
||||
, CONVERT(uniqueidentifier,null) as "GlobalId"
|
||||
FROM dbo."WriteOffExpensesFP" AS t
|
||||
UNION ALL
|
||||
SELECT t."VCode"
|
||||
, t."TypeName"
|
||||
, t."AnalyticsName" AS "Subject"
|
||||
, CONVERT(varchar(max), NULL) AS "Text"
|
||||
, CONVERT(datetimeoffset, NULL) AS "DateOfExecution"
|
||||
, CONVERT(datetimeoffset, NULL) AS "RealDateOfExecution"
|
||||
, CONVERT(varchar(max), NULL) AS "DocDescription"
|
||||
, CONVERT(varchar(max), NULL) AS "Description"
|
||||
, CONVERT(datetimeoffset, NULL) AS "DateControl"
|
||||
, t."COrg"
|
||||
, CONVERT(date, t."CDate") AS "DocumentDate"
|
||||
, CONVERT(varchar(255), NULL) AS "DocumentNumber"
|
||||
, t."CUser" AS "VirtualCUser"
|
||||
, CONVERT(bigint, NULL) AS "Projects"
|
||||
, CONVERT(bigint, NULL) AS "SourceDocumentCode"
|
||||
, CONVERT(varchar(255), NULL) AS "SourceDocumentType"
|
||||
, CONVERT(uniqueidentifier,null) as "GlobalId"
|
||||
FROM dbo."ExpensesFuture" AS t
|
||||
UNION ALL
|
||||
SELECT t."VCode"
|
||||
, t."TypeName"
|
||||
, t."AnalyticsName" AS "Subject"
|
||||
, CONVERT(varchar(max), NULL) AS "Text"
|
||||
, CONVERT(datetimeoffset, NULL) AS "DateOfExecution"
|
||||
, CONVERT(datetimeoffset, NULL) AS "RealDateOfExecution"
|
||||
, CONVERT(varchar(max), NULL) AS "DocDescription"
|
||||
, CONVERT(varchar(max), NULL) AS "Description"
|
||||
, CONVERT(datetimeoffset, NULL) AS "DateControl"
|
||||
, t."COrg"
|
||||
, CONVERT(date, t."CDate") AS "DocumentDate"
|
||||
, CONVERT(varchar(255), NULL) AS "DocumentNumber"
|
||||
, t."CUser" AS "VirtualCUser"
|
||||
, CONVERT(bigint, NULL) AS "Projects"
|
||||
, CONVERT(bigint, NULL) AS "SourceDocumentCode"
|
||||
, CONVERT(varchar(255), NULL) AS "SourceDocumentType"
|
||||
, CONVERT(uniqueidentifier,null) as "GlobalId"
|
||||
FROM dbo."ReceiptOfBill" AS t
|
||||
UNION ALL
|
||||
SELECT t."VCode"
|
||||
, t."TypeName"
|
||||
, t."AnalyticsName" AS "Subject"
|
||||
, CONVERT(varchar(max), NULL) AS "Text"
|
||||
, CONVERT(datetimeoffset, NULL) AS "DateOfExecution"
|
||||
, CONVERT(datetimeoffset, NULL) AS "RealDateOfExecution"
|
||||
, CONVERT(varchar(max), NULL) AS "DocDescription"
|
||||
, CONVERT(varchar(max), NULL) AS "Description"
|
||||
, CONVERT(datetimeoffset, NULL) AS "DateControl"
|
||||
, t."COrg"
|
||||
, CONVERT(date, t."CDate") AS "DocumentDate"
|
||||
, CONVERT(varchar(255), NULL) AS "DocumentNumber"
|
||||
, t."CUser" AS "VirtualCUser"
|
||||
, CONVERT(bigint, NULL) AS "Projects"
|
||||
, CONVERT(bigint, NULL) AS "SourceDocumentCode"
|
||||
, CONVERT(varchar(255), NULL) AS "SourceDocumentType"
|
||||
, CONVERT(uniqueidentifier,null) as "GlobalId"
|
||||
FROM dbo."ExpenseOfBill" AS t
|
||||
UNION ALL
|
||||
SELECT t."VCode"
|
||||
, t."TypeName"
|
||||
, CONVERT(varchar(max), t."TypeDocs") AS "Subject"
|
||||
, CONVERT(varchar(max), t."Note") AS "Text"
|
||||
, t."CDate" AS "DateOfExecution"
|
||||
, t."WDate" AS "RealDateOfExecution"
|
||||
, CONVERT(varchar(max), t."Note") AS "DocDescription"
|
||||
, CONVERT(varchar(max), t."Note") AS "Description"
|
||||
, CONVERT(datetimeoffset, NULL) AS "DateControl"
|
||||
, t."COrg"
|
||||
, CONVERT(date, t."CDate") AS "DocumentDate"
|
||||
, CONVERT(varchar(255), NULL) AS "DocumentNumber"
|
||||
, t."CUser" AS "VirtualCUser"
|
||||
, CONVERT(bigint, NULL) AS "Projects"
|
||||
, CONVERT(bigint, NULL) AS "SourceDocumentCode"
|
||||
, CONVERT(varchar(255), NULL) AS "SourceDocumentType"
|
||||
, CONVERT(uniqueidentifier,null) as "GlobalId"
|
||||
FROM dbo."VOtherDocuments" AS t
|
||||
-- Услуги
|
||||
UNION ALL
|
||||
SELECT t."VCode"
|
||||
, t."TypeName"
|
||||
, CONVERT(varchar(max), NULL) AS "Subject"
|
||||
, CONVERT(varchar(max), NULL) AS "Text"
|
||||
, CONVERT(datetimeoffset, NULL) AS "DateOfExecution"
|
||||
, CONVERT(datetimeoffset, NULL) AS "RealDateOfExecution"
|
||||
, CONVERT(varchar(max), NULL) AS "DocDescription"
|
||||
, CONVERT(varchar(max), NULL) AS "Description"
|
||||
, CONVERT(datetimeoffset, NULL) AS "DateControl"
|
||||
, t."COrg"
|
||||
, CONVERT(date, t."AccountingDate") AS "DocumentDate"
|
||||
, CONVERT(varchar(255), NULL) AS "DocumentNumber"
|
||||
, t."CUser" AS "VirtualCUser"
|
||||
, CONVERT(bigint, NULL) AS "Projects"
|
||||
, CONVERT(bigint, NULL) AS "SourceDocumentCode"
|
||||
, CONVERT(varchar(255), NULL) AS "SourceDocumentType"
|
||||
, CONVERT(uniqueidentifier,null) as "GlobalId"
|
||||
FROM dbo."ServiceReceipts" AS t
|
||||
-- Заявки на платеж
|
||||
UNION ALL
|
||||
SELECT t."VCode"
|
||||
, t."TypeName"
|
||||
, CONVERT(varchar(max), '') + CASE WHEN rc."VCode" IS NULL THEN '' ELSE 'Получатель: ' + rc."Name" END AS "Subject"
|
||||
, CONVERT(varchar(max), NULL) AS "Text"
|
||||
, CONVERT(datetimeoffset, NULL) AS "DateOfExecution"
|
||||
, CONVERT(datetimeoffset, NULL) AS "RealDateOfExecution"
|
||||
, CONVERT(varchar(max), NULL) AS "DocDescription"
|
||||
, t."PaymentDestination" AS "Description"
|
||||
, CONVERT(datetimeoffset, NULL) AS "DateControl"
|
||||
, t."COrg"
|
||||
, t."AccountingDate" AS "DocumentDate"
|
||||
, CONVERT(varchar(255), NULL) AS "DocumentNumber"
|
||||
, t."CUser" AS "VirtualCUser"
|
||||
, t."Projects"
|
||||
, CONVERT(bigint, NULL) AS "SourceDocumentCode"
|
||||
, CONVERT(varchar(255), NULL) AS "SourceDocumentType"
|
||||
, CONVERT(uniqueidentifier,null) as "GlobalId"
|
||||
FROM dbo."RequestForPayment" AS t
|
||||
LEFT JOIN dbo."UniAnalyt" AS rc ON rc."VCode" = t."Receiver"
|
||||
-- Банковские документы
|
||||
UNION ALL
|
||||
SELECT t."VCode"
|
||||
, t."TypeName"
|
||||
, CONVERT(varchar(max), NULL) AS "Subject"
|
||||
, CONVERT(varchar(max), NULL) AS "Text"
|
||||
, CONVERT(datetimeoffset, NULL) AS "DateOfExecution"
|
||||
, CONVERT(datetimeoffset, NULL) AS "RealDateOfExecution"
|
||||
, CONVERT(varchar(max), NULL) AS "DocDescription"
|
||||
, CONVERT(varchar(max), NULL) AS "Description"
|
||||
, CONVERT(datetimeoffset, NULL) AS "DateControl"
|
||||
, t."COrg"
|
||||
, CONVERT(date, t."AccountingDate") AS "DocumentDate"
|
||||
, CONVERT(varchar(255), NULL) AS "DocumentNumber"
|
||||
, t."CUser" AS "VirtualCUser"
|
||||
, CONVERT(bigint, NULL) AS "Projects"
|
||||
, CONVERT(bigint, NULL) AS "SourceDocumentCode"
|
||||
, CONVERT(varchar(255), NULL) AS "SourceDocumentType"
|
||||
, CONVERT(uniqueidentifier,null) as "GlobalId"
|
||||
FROM dbo."FinanceMoving" AS t
|
||||
-- TestECP
|
||||
UNION ALL
|
||||
SELECT t."VCode"
|
||||
, t."TypeName"
|
||||
, CONVERT(varchar(max), 'TestEcp') AS "Subject"
|
||||
, CONVERT(varchar(max), 'TestEcp') AS "Text"
|
||||
, CONVERT(datetimeoffset, NULL) AS "DateOfExecution"
|
||||
, CONVERT(datetimeoffset, NULL) AS "RealDateOfExecution"
|
||||
, CONVERT(varchar(max), NULL) AS "DocDescription"
|
||||
, CONVERT(varchar(max), NULL) AS "Description"
|
||||
, CONVERT(datetimeoffset, NULL) AS "DateControl"
|
||||
, CONVERT(bigint, NULL) AS "COrg"
|
||||
, CONVERT(date, NULL) AS "DocumentDate"
|
||||
, CONVERT(varchar(255), NULL) AS "DocumentNumber"
|
||||
, t."CUser" AS "VirtualCUser"
|
||||
, CONVERT(bigint, NULL) AS "Projects"
|
||||
, CONVERT(bigint, NULL) AS "SourceDocumentCode"
|
||||
, CONVERT(varchar(255), NULL) AS "SourceDocumentType"
|
||||
, CONVERT(uniqueidentifier,'EEDB3414-EFA5-4610-A7D5-2B3FD6FEA152') as "GlobalId"
|
||||
FROM dbo."TestEcp" AS t
|
||||
-- KarginTest
|
||||
UNION ALL
|
||||
SELECT t."VCode"
|
||||
, t."TypeName"
|
||||
, CONVERT(varchar(max), 'Документ') AS "Subject"
|
||||
, CONVERT(varchar(max), NULL) AS "Text"
|
||||
, CONVERT(datetimeoffset, NULL) AS "DateOfExecution"
|
||||
, CONVERT(datetimeoffset, NULL) AS "RealDateOfExecution"
|
||||
, CONVERT(varchar(max), NULL) AS "DocDescription"
|
||||
, CONVERT(varchar(max), NULL) AS "Description"
|
||||
, CONVERT(datetimeoffset, NULL) AS "DateControl"
|
||||
, t."COrg"
|
||||
, CONVERT(date, NULL) AS "DocumentDate"
|
||||
, CONVERT(varchar(255), NULL) AS "DocumentNumber"
|
||||
, t."CUser" AS "VirtualCUser"
|
||||
, CONVERT(bigint, NULL) AS "Projects"
|
||||
, CONVERT(bigint, NULL) AS "SourceDocumentCode"
|
||||
, CONVERT(varchar(255), NULL) AS "SourceDocumentType"
|
||||
, CONVERT(uniqueidentifier,null) as "GlobalId"
|
||||
FROM dbo."KarginTest" AS t
|
||||
-- Универсальный документ
|
||||
UNION ALL
|
||||
SELECT t."VCode"
|
||||
, t."TypeName"
|
||||
, COALESCE(t."Name",'Документ') AS "Subject"
|
||||
, CONVERT(varchar(max), NULL) AS "Text"
|
||||
, CONVERT(datetimeoffset, NULL) AS "DateOfExecution"
|
||||
, CONVERT(datetimeoffset, NULL) AS "RealDateOfExecution"
|
||||
, CONVERT(varchar(max), NULL) AS "DocDescription"
|
||||
, CONVERT(varchar(max), NULL) AS "Description"
|
||||
, CONVERT(datetimeoffset, NULL) AS "DateControl"
|
||||
, t."COrg"
|
||||
, t."DocumentDate"
|
||||
, t."DocumentNumber"
|
||||
, t."CUser" AS "VirtualCUser"
|
||||
, CONVERT(bigint, NULL) AS "Projects"
|
||||
, CONVERT(bigint, NULL) AS "SourceDocumentCode"
|
||||
, CONVERT(varchar(255), NULL) AS "SourceDocumentType"
|
||||
, CONVERT(uniqueidentifier,null) as "GlobalId"
|
||||
FROM dbo."UniversalDocument" AS t
|
||||
UNION ALL
|
||||
SELECT t."VCode"
|
||||
, t."TypeName"
|
||||
, CONVERT(varchar(max), NULL) AS "Subject"
|
||||
, CONVERT(varchar(max), NULL) AS "Text"
|
||||
, CONVERT(datetimeoffset, NULL) AS "DateOfExecution"
|
||||
, CONVERT(datetimeoffset, NULL) AS "RealDateOfExecution"
|
||||
, CONVERT(varchar(max), NULL) AS "DocDescription"
|
||||
, CONVERT(varchar(max), NULL) AS "Description"
|
||||
, CONVERT(datetimeoffset, NULL) AS "DateControl"
|
||||
, t."COrg"
|
||||
, t."DateDoc" AS "DocumentDate"
|
||||
, t."NumDoc" AS "DocumentNumber"
|
||||
, t."CUser" AS "VirtualCUser"
|
||||
, CONVERT(bigint, NULL) AS "Projects"
|
||||
, CONVERT(bigint, NULL) AS "SourceDocumentCode"
|
||||
, CONVERT(varchar(255), NULL) AS "SourceDocumentType"
|
||||
, CONVERT(uniqueidentifier,null) as "GlobalId"
|
||||
FROM dbo."RP_DocAbsence" AS t
|
||||
WHERE t."TypeName" = 'Base.RP_OrderVacation'
|
||||
UNION ALL
|
||||
SELECT t."VCode"
|
||||
, t."TypeName"
|
||||
, CONVERT(varchar(max), NULL) AS "Subject"
|
||||
, CONVERT(varchar(max), NULL) AS "Text"
|
||||
, CONVERT(datetimeoffset, NULL) AS "DateOfExecution"
|
||||
, CONVERT(datetimeoffset, NULL) AS "RealDateOfExecution"
|
||||
, CONVERT(varchar(max), NULL) AS "DocDescription"
|
||||
, CONVERT(varchar(max), NULL) AS "Description"
|
||||
, CONVERT(datetimeoffset, NULL) AS "DateControl"
|
||||
, t."COrg"
|
||||
, t."AccountingDate" AS "DocumentDate"
|
||||
, t."DocumentNumber" AS "DocumentNumber"
|
||||
, t."CUser" AS "VirtualCUser"
|
||||
, CONVERT(bigint, NULL) AS "Projects"
|
||||
, CONVERT(bigint, NULL) AS "SourceDocumentCode"
|
||||
, CONVERT(varchar(255), NULL) AS "SourceDocumentType"
|
||||
, CONVERT(uniqueidentifier,null) as "GlobalId"
|
||||
FROM dbo.ActOfReconciliation AS t
|
||||
WHERE t."TypeName" = 'Base.ActOfReconciliation'
|
||||
) AS a
|
||||
```
|
|
@ -1,3 +0,0 @@
|
|||
* [Docker образы]( ./prepare_serv_docker.md)
|
||||
* [NPM пакеты]( ./prepare_serv_npm.md)
|
||||
* [БД MSSQL]( ./prepare_mssql.md)
|
|
@ -1,12 +0,0 @@
|
|||
# Создание БД
|
||||
|
||||
1. Необходимо развернуть из резервной копии заранее подготовленные базы данных
|
||||
|
||||
* ptb
|
||||
* ptb_history
|
||||
|
||||
2. Создать учетную запись для приложения. Выдать права администратора для созданной учетной записи на следующие базы :
|
||||
|
||||
* ptb
|
||||
* ptb_history
|
||||
|
|
@ -1,20 +0,0 @@
|
|||
# Использование ресурсов ООО "Лексема"
|
||||
## Настройка доступа к приватному репозиторию
|
||||
!!! note
|
||||
На этапе внедрения используется репозиторий ООО "Лексема" http://dhub.lex.lan, доступ к нему организуется посредством VPN канала и настройки DNS-resolver.
|
||||
|
||||
При использовании приватных репозиториев заказчика настройки VPN и DNS-resolver делать не нужно, а в настройки Docker внести адрес репозитория заказчика.
|
||||
|
||||
|
||||
Для этого необходимо выполнить следующие шаги :
|
||||
|
||||
* Установить на сервер пакет OpenVPN.
|
||||
* для настройки VPN достаточно разместить полученый файл подключения в папку /etc/openvpn/ и запустить сервис
|
||||
* внести в файл /etc/hosts запись "192.168.5.247 dhub.lex.lan"
|
||||
|
||||
* удостоверится в том что приватный репозиторий с образами доступен - командой ping .
|
||||
* внести в файл /etc/docker/daemon.json строку с указанием приватного репозитория////
|
||||
|
||||
```
|
||||
"insecure-registries":["dhub.lex.lan:5000"]
|
||||
```
|
|
@ -1,18 +0,0 @@
|
|||
1. Установить сервер БД со следующими настройками
|
||||
|
||||
Настройка сервера СУБД (Microsoft SQL Server)
|
||||
|
||||
| № пп |Наименование параметра |Значение параметра|
|
||||
| ----- |-----------------------|------------------|
|
||||
|1 |Server Collation |SQL_Latin1_General_CP1251_CI_AS
|
||||
|2 |Default Language |English
|
||||
|3 |FileStream Access Level |Full access enabled
|
||||
|4 |Server Authentication |SQL Server and Windows Authentication Mode
|
||||
|5 |Broker Enabled (для БД Lexema_data) |True
|
||||
|6 |CLR Enabled |True
|
||||
|7 |TrustWorthy (Для БД Lexema_Data) |True
|
||||
|8 |Профиль DBMail |Адрес электронной почты, выделенный для рассылки
|
||||
|9 |Max degree of parallelism |2
|
||||
|10 |Cost threshold for parallelism |20
|
||||
|
||||
1. На сервере создать SQL пользователя с ролью sysadmin
|
|
@ -1,45 +0,0 @@
|
|||
# Подготовка сервера приложения для развертывания Docker образов
|
||||
|
||||
Сервер приложений - это хост для выполнения Docker контейнеров приложения.
|
||||
|
||||
## 1. Установить на сервер следующие пакеты:
|
||||
|
||||
* docker <https://docs.docker.com/engine/install/ubuntu/>,
|
||||
* docker-compose <https://docs.docker.com/compose/install/linux/>
|
||||
|
||||
## 2. Настройки Docker Network
|
||||
|
||||
Для межсервисного трафика при запуске приложения создается отдельная виртуальная сеть с именем проекта
|
||||
|
||||
Для взаимодействия с внешними сервисами необходимо создать виртуальную сеть с именем __proxy__.
|
||||
|
||||
Cоздание сети proxy следующей командой:
|
||||
```bash
|
||||
docker network create proxy
|
||||
```
|
||||
|
||||
## 3. Разместить образы, предоставленные компанией ООО "Лексема" на сервере приложения
|
||||
|
||||
Создать временную папку для загрузки образов
|
||||
```bash
|
||||
mkdir /tmp/lexema && cd /tmp/lexema
|
||||
```
|
||||
|
||||
Скопировать архивы образов в папку _/tmp/lexema_ на сервере.
|
||||
|
||||
Выполнить команду загрузки образов
|
||||
```bash
|
||||
docker load -i *.tar
|
||||
```
|
||||
|
||||
Удалить образы
|
||||
```bash
|
||||
rm -f *.tar
|
||||
```
|
||||
|
||||
## 4. Настроить сервер для доступа к сервису обновлений.
|
||||
|
||||
!!! note
|
||||
На этапе внедрения сервис обновлений ООО "Лексема" не используется.
|
||||
Для поставки пакетов с новым функционалом используется сетевой ресурс в сети заказчика. Обновления производятся заказчиком самостоятельно.
|
||||
|
|
@ -1,25 +0,0 @@
|
|||
# Подготовка сервера приложения для развертывания NPM пакетов
|
||||
Сервер приложений - это хост для запуска сервисов приложения распространяемых в виде пакетов NPM.
|
||||
|
||||
## 1. Установить на сервер следующие пакеты:
|
||||
|
||||
* nginx 1.23+ [link](https://community.chocolatey.org/packages/nginx)
|
||||
* Redis 3.2.100 [link](https://github.com/MicrosoftArchive/redis/releases/tag/win-3.2.100)
|
||||
* Erlang OTP 25.0.2 [link](https://www.erlang.org/downloads)
|
||||
* RabbitMQ 3.10.6 [link](https://www.rabbitmq.com/install-windows.html)
|
||||
* Nodejs 10.23 [link](https://nodejs.org/download/release/v10.23.0/)
|
||||
* PM2 [link](https://pm2.keymetrics.io/docs/usage/quick-start/)
|
||||
|
||||
!!! warning
|
||||
Учетная запись пользователя под которым производится установка должна иметь имя в английской раскладке
|
||||
|
||||
## 2. Настроить файрвол .
|
||||
|
||||
* Открыть порты 80, 443 для входящего трафика
|
||||
|
||||
## 3. Настроить сервер для доступа к сервису обновлений.
|
||||
|
||||
|
||||
!!! note
|
||||
На этапе внедрения сервис обновлений ООО "Лексема" не используется.
|
||||
Для поставки пакетов с новым функционалом используется сетевой ресурс в сети заказчика. Обновления производятся заказчиком самостоятельно.
|
Before Width: | Height: | Size: 89 KiB |
Before Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 30 KiB |
Before Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 93 KiB |
Before Width: | Height: | Size: 90 KiB |
|
@ -1,163 +0,0 @@
|
|||
# Настройка авторизации пользователей
|
||||
|
||||
## Общие сведения
|
||||
|
||||
Настройка авторизации пользователей производится с помощью конфигурационного файла *./config/local.js* в разделе **gate**. Следует отметить, что этот файл должен содержаться в списке исключений системы контроля версий (занесён в файл .gitignore). Также для этих целей можно использовать файл *./config/production.js*, однако следует учитывать, что настройки файла local.js более приоритетные, чем у production.js.
|
||||
|
||||
Использовать файл *./config/default.js* для настройки авторизации не рекомендуется по причине необходимости прописать в настройках конфиденциальные данные.
|
||||
|
||||
## Стандартная авторизация
|
||||
|
||||
Настройки веб-сервисов производятся в разделе **applications**, настройки авторизации пользователей - в подразделе **gate**. Более подробно про настройку раздела **gate** можно прочитать в [перечне настроек gate](./../../../../service/gate/configuration.md).
|
||||
|
||||
- **_sessionLifeTime_** - время жизни сессии в минутах (по умолчанию `10`).
|
||||
- **_ldap_** - раздел, содержащий настройки доменной авторизации (с проверкой логина/пароля на контроллере домена)
|
||||
* **_url_** - адрес контроллера домена. Пример: `ldap(s)://domain:port`.
|
||||
* **_bindDN_** - логин администратора домена. В случае пустой строки будет произведена попытка анонимного подключения.
|
||||
* **_bindCredentials_** - пароль администратора домена.
|
||||
* **_searchBase_** - описание базового имени откуда начинается поиск пользователей. Пример: `ou=users,dc=example,dc=org`
|
||||
* **_searchFilter_** - описание фильтра ldap для поиска пользователей.
|
||||
* **_searchAttributes_** - список атрибутов, возвращаемых контроллером домена при удачном поиске.
|
||||
- **_validation_** - настройки валидации пароля и логина пользователя.
|
||||
* **_passwordRegularExpression_** - регулярное выражение для проверки пароля (по умолчанию `/^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])[a-zA-Z0-9]{8,}$/`).
|
||||
|
||||
Пример:
|
||||
|
||||
```js
|
||||
applications: {
|
||||
gate: {
|
||||
sessionLifeTime: 1800,
|
||||
ldap: {
|
||||
url: 'ldap://domain.local:port',
|
||||
bindDN: 'CN=User,CN=Users,DC=domain,DC=local',
|
||||
bindCredentials: 'password',
|
||||
searchBase: 'OU=Users,OU=Organization,DC=domain,DC=local',
|
||||
searchFilter: '(&(objectclass=person)(sAMAccountName={{username}}))',
|
||||
searchAttributes: ['displayName', 'sAMAccountName']
|
||||
},
|
||||
validation: {
|
||||
passwordRegularExpression: /^[a-zA-Z0-9]{3,}$/
|
||||
},
|
||||
// ...
|
||||
},
|
||||
// ...
|
||||
}
|
||||
```
|
||||
|
||||
## Двухфакторная авторизация
|
||||
|
||||
- **_twoFactorProvider_** - провайдер двухфакторной аутентификации. Доступные значения: *none*, *email*, *phone* (по умолчанию `'none'`). В случае установки значения none считается выключенной.
|
||||
- **_userTokenLifeTime_** - устанавливает время действия токена восстановления пароля или кода входа при двухфакторной аутентификации в часах (по умолчанию 1). Можно задавать дробные числа, чтобы указать минуты и/или секунды.
|
||||
- **_attemptsLimitForConfirmCode_** - количество попыток ввода токена восстановления пароля или кода входа при двухфакторной аутентификации (по умолчанию 0). Если значение равно 0, то количество попыток не ограничено.
|
||||
- **_timeLimitForResendingConfirmCode_** - лимит времени (в секундах) для возможности повторной отправки токена восстановления пароля или кода входа при двухфакторной аутентификации (по умолчанию 0 - без ограничений по времени). Настройка влияет на доступность кнопки отправки кода. На сервере проверка не осуществляется.
|
||||
|
||||
Чтобы отправка писем на почту работала, необходимо подключить почтовый ящик в разделе **applications.post.emails**. Чтобы работала отправка СМС, необходимо произвести настройки в разделе **applications.post.sms**.
|
||||
|
||||
Пример:
|
||||
|
||||
``` js
|
||||
applications: {
|
||||
gate: {
|
||||
sessionLifeTime: 1800,
|
||||
ldap: {
|
||||
// ...
|
||||
},
|
||||
validation: {
|
||||
// ...
|
||||
},
|
||||
|
||||
twoFactorProvider: 'phone',
|
||||
userTokenLifeTime: 0.1,
|
||||
attemptsLimitForConfirmCode: 3,
|
||||
timeLimitForResendingConfirmCode: 30
|
||||
},
|
||||
// ...
|
||||
post: {
|
||||
defaultEmailId: 'default',
|
||||
emails: {
|
||||
default: {
|
||||
host: 'smtp.gmail.com',
|
||||
port: 587,
|
||||
secure: false,
|
||||
user: 'lexemaecm@gmail.com',
|
||||
pass: 'password',
|
||||
userName: 'Lexema'
|
||||
}
|
||||
},
|
||||
sms:{
|
||||
provider: 'mts',
|
||||
token: 'abc01234-012a-0abc-0895-abc012345678',
|
||||
sender:'LEXEMAECM'
|
||||
},
|
||||
// ...
|
||||
}
|
||||
```
|
||||
|
||||
## Доменная авторизация
|
||||
|
||||
Обновление данных происходит после каждой авторизации пользователя в системе. для обновления необходимо настроить следующие разделы конфигурации:
|
||||
|
||||
- **_applications.gate.ldap.searchAttributes_** - параметр, отвечающий за возвращаемые наборы данных пользователей при авторизации.
|
||||
- **_applications.gate.ldapSchemeDictionary_** - словарь сопоставления атрибутов пользователя системы и пользователя домена.
|
||||
|
||||
**_ldapSchemeDictionary_** - словарь сопоставления атрибутов, возвращаемых после поиска пользователя в контроллере домена, и полей, доступных для обновления в таблице пользователей. Ключ словаря - параметр пользователя системы, значение ключа - параметр пользователя домена. Значения должны быть описаны в параметре ldap.searchAttributes. Доступные значения для обновления в таблице: *firstName*, *lastName*, *middleName*, *email*, *phoneNumber*.
|
||||
|
||||
Пример:
|
||||
|
||||
```js
|
||||
applications: {
|
||||
gate: {
|
||||
sessionLifeTime: 1800,
|
||||
ldap: {
|
||||
url: 'ldap://domain:port',
|
||||
bindDN: 'CN=User,CN=Users,DC=domain',
|
||||
bindCredentials: 'password',
|
||||
searchBase: 'OU=Users,OU=Organization,DC=domain',
|
||||
searchFilter: '(&(objectclass=person)(sAMAccountName={{username}}))',
|
||||
searchAttributes: ['sn', 'givenName', 'mobile', 'middleName', 'mail', 'sAMAccountName']
|
||||
},
|
||||
ldapSchemeDictionary: {
|
||||
firstName: 'givenName',
|
||||
lastName: 'sn',
|
||||
middleName: 'middleName',
|
||||
email: 'mail',
|
||||
phoneNumber: 'mobile'
|
||||
}
|
||||
},
|
||||
// ...
|
||||
}
|
||||
```
|
||||
|
||||
## Смена пароля при первом входе в систему
|
||||
|
||||
- Чтобы новым пользователям в системе предлагалось сменить пароль при первом входе, необходимо включить настройку **_enableChangePasswordOnFirstLogin_**.
|
||||
- **_userTokenProvider_** - имя провайдера восстановления пароля (по умолчанию 'Email'). Доступные значения: *Email*, *Phone*. От этой настройки зависит, придёт код для смены пароля на почту или в СМС.
|
||||
|
||||
Чтобы отправка писем на почту работала, необходимо подключить почтовый ящик в разделе **applications.post.emails**. Чтобы работала отправка СМС, необходимо произвести настройки в разделе **applications.post.sms**.
|
||||
|
||||
Пример:
|
||||
|
||||
```js
|
||||
applications: {
|
||||
gate: {
|
||||
sessionLifeTime: 1800,
|
||||
ldap: {
|
||||
// ...
|
||||
},
|
||||
validation: {
|
||||
// ...
|
||||
},
|
||||
|
||||
enableChangePasswordOnFirstLogin : true,
|
||||
userTokenProvider: 'Email'
|
||||
},
|
||||
// ...
|
||||
}
|
||||
```
|
||||
|
||||
## Ограничение срока действия паролей пользователей
|
||||
|
||||
- Настройка **_passwordExpiration_** задает срок действия пароля пользователя в днях, значение 0 отключает проверку (по умолчанию значение 0). По истечении срока действия пароля, при попытке входа в систему пользователю будем предложено сменить пароль. Письмо с одноразовым кодом для смены пароля придёт на почту пользователя.
|
||||
- **_userTokenProvider_** - имя провайдера восстановления пароля (по умолчанию 'Email'). Доступные значения: *Email*, *Phone*. От этой настройки зависит, придёт код для смены пароля на почту или в СМС.
|
||||
|
||||
Чтобы отправка писем на почту работала, необходимо подключить почтовый ящик в разделе **applications.post.emails**. Чтобы работала отправка СМС, необходимо произвести настройки в разделе **applications.post.sms**.
|