инициализация репозитория
|
@ -0,0 +1,3 @@
|
|||
/env
|
||||
/site
|
||||
/venv
|
|
@ -0,0 +1,15 @@
|
|||
# .readthedocs.yaml
|
||||
# Read the Docs configuration file
|
||||
# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
|
||||
|
||||
# Required
|
||||
version: 2
|
||||
|
||||
mkdocs:
|
||||
configuration: mkdocs.yml
|
||||
|
||||
# Optionally set the version of Python and requirements required to build your docs
|
||||
python:
|
||||
version: "3.8"
|
||||
install:
|
||||
- requirements: mkdocs/requirements.txt
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"cSpell.language": "en, ru"
|
||||
}
|
|
@ -0,0 +1,79 @@
|
|||
site_name: Руководство администратора приложения Lexema
|
||||
repo_url: http://gogs.lexema.ru/zpavel/sample-docs
|
||||
edit_uri: _edit/master/docs/
|
||||
nav:
|
||||
|
||||
markdown_extensions:
|
||||
- toc:
|
||||
separator: "_"
|
||||
permalink: "#"
|
||||
slugify: !!python/name:pymdownx.slugs.uslugify
|
||||
- attr_list
|
||||
- admonition
|
||||
- sane_lists
|
||||
- pymdownx.highlight
|
||||
- pymdownx.superfences
|
||||
- def_list
|
||||
|
||||
extra_css:
|
||||
- css/extra.css
|
||||
|
||||
extra_javascript:
|
||||
- javascripts/extra.js
|
||||
|
||||
plugins:
|
||||
- search:
|
||||
lang: ['ru', 'en']
|
||||
- section-index
|
||||
- include-markdown
|
||||
- literate-nav:
|
||||
nav_file: SUMMARY.md
|
||||
# Для пдфки видимо свой файл оглавления сделать не получится
|
||||
- with-pdf:
|
||||
author: Ксения Шабанова, Павел Зюзин, Ксения Имамутдинова, Альбина Янгирова, Тимур Мирзакаев, Марина Халиуллина, Регина Лапина
|
||||
copyright: ООО "Лексема"
|
||||
#
|
||||
#cover: false
|
||||
#back_cover: true
|
||||
#cover_title: TITLE TEXT
|
||||
cover_subtitle: Версия 20221018-15
|
||||
#custom_template_path: TEMPLATES PATH
|
||||
#
|
||||
toc_title: Оглавление
|
||||
#heading_shift: false
|
||||
# toc_level: 3
|
||||
#ordered_chapter_level: 2
|
||||
#excludes_children:
|
||||
# - 'release-notes/:upgrading'
|
||||
# - 'release-notes/:changelog'
|
||||
#
|
||||
#exclude_pages:
|
||||
# - 'bugs/'
|
||||
# - 'appendix/contribute/'
|
||||
#convert_iframe:
|
||||
# - src: IFRAME SRC
|
||||
# img: POSTER IMAGE URL
|
||||
# text: ALTERNATE TEXT
|
||||
# - src: ...
|
||||
#two_columns_level: 3
|
||||
#
|
||||
#render_js: true
|
||||
#headless_chrome_path: headless-chromium
|
||||
#
|
||||
output_path: pdf/admin-manual.pdf
|
||||
#enabled_if_env: ENABLE_PDF_EXPORT
|
||||
#
|
||||
#debug_html: true
|
||||
#show_anchors: true
|
||||
#verbose: true
|
||||
|
||||
theme:
|
||||
name: material
|
||||
features:
|
||||
- navigation.instant
|
||||
language: ru
|
||||
palette:
|
||||
primary: white
|
||||
|
||||
docs_dir: docs
|
||||
site_dir: site
|
|
@ -0,0 +1,11 @@
|
|||
{% extends "base.html" %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<div class="row-fluid">
|
||||
<div id="main-content" class="span12">
|
||||
<h1 id="404-page-not-found" style="text-align: center">404 - Страница не найдена</h1>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
|
@ -0,0 +1,49 @@
|
|||
site_name: Lexema-ECM
|
||||
#repo_url: http://gogs.lex.lan/yangirova_as/Dokumentooborot
|
||||
nav:
|
||||
|
||||
markdown_extensions:
|
||||
- toc:
|
||||
separator: "_"
|
||||
permalink: "#"
|
||||
slugify: !!python/name:pymdownx.slugs.uslugify
|
||||
- attr_list
|
||||
- admonition
|
||||
- sane_lists
|
||||
- pymdownx.highlight
|
||||
- pymdownx.superfences
|
||||
- def_list
|
||||
- pymdownx.details
|
||||
- pymdownx.tasklist:
|
||||
custom_checkbox: true
|
||||
|
||||
|
||||
extra_css:
|
||||
- css/extra.css
|
||||
|
||||
extra_javascript:
|
||||
- javascripts/extra.js
|
||||
|
||||
plugins:
|
||||
- search:
|
||||
lang: ['ru', 'en']
|
||||
- section-index
|
||||
- include-markdown
|
||||
- mkdocs-video
|
||||
- literate-nav:
|
||||
nav_file: SUMMARY.md
|
||||
theme:
|
||||
name: material
|
||||
features:
|
||||
- navigation.instant
|
||||
- navigation.top
|
||||
- navigation.tracking
|
||||
- toc.follow
|
||||
- toc.integrate
|
||||
language: ru
|
||||
palette:
|
||||
primary: green
|
||||
|
||||
docs_dir: docs
|
||||
site_dir: site
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
## Клиент
|
||||
|
||||
| Уровень | Требование |
|
||||
| ------- | ---------- |
|
||||
|Среда исполнения |браузер Chrome |
|
||||
|Платформа | - |
|
||||
|Инфраструктура | - |
|
|
@ -0,0 +1,20 @@
|
|||
# Сервер приложений для Docker
|
||||
|
||||
| Уровень | Требование |
|
||||
| ------- | ---------- |
|
||||
|Среда исполнения |Docker
|
||||
||Docker-compose |
|
||||
|Платформа | Linux (Ubuntu 2004) |
|
||||
|Инфраструктура | CPU: Архитектура x64, не менее 10 ядер, частота процессора не ниже 2,6 ГГц
|
||||
|| RAM: Не менее 16 Гб
|
||||
|| HDD: Не менее 100 Гб
|
||||
|| Net: Не менее 1 Гбит
|
||||
|
||||
|
||||
# Список необходимых лицензий
|
||||
|
||||
| Продукт | Прмечание |
|
||||
| ------- | ---------- |
|
||||
| Lexema 8 | лицензия на сервер |
|
||||
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
# Сервер MS SQL
|
||||
|
||||
| Уровень | Требование |
|
||||
| ------- | ---------- |
|
||||
|Среда исполнения |MS SQL 2014
|
||||
|Платформа | Windows Server |
|
||||
|Инфраструктура | CPU: Архитектура x64, не менее 16 ядер, частота процессора не ниже 2,6 ГГц
|
||||
|| RAM: Не менее 32 Гб
|
||||
|| HDD: Не менее 1024 Гб
|
||||
|| Net: Не менее 1 Гбит
|
||||
|
||||
|
||||
# Список необходимых лицензий
|
||||
|
||||
| Продукт | Прмечание |
|
||||
| ------- | ---------- |
|
||||
| MSSQL 2014 | лицензия на сервер + клиентские или |
|
||||
| | лицензия на ядра сервера |
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
# Сервер приложений для NPM
|
||||
|
||||
| Уровень | Требование |
|
||||
| ------- | ---------- |
|
||||
|Среда исполнения | NodeJS 10+ |
|
||||
|| Nginx 1.19+ |
|
||||
|| Redis 3.2.100 |
|
||||
|| Erlang OTP 23.3 |
|
||||
|| Rabbitmq 3.8.9 |
|
||||
|Платформа | Windows Server (2012 R2) |
|
||||
|Инфраструктура | CPU: Архитектура x64, не менее 16 ядер, частота процессора не ниже 2,6 ГГц
|
||||
|| RAM: Не менее 32 Гб
|
||||
|| HDD: Не менее 200 Гб
|
||||
|| Net: Не менее 1 Гбит
|
||||
|
||||
# Список необходимых лицензий
|
||||
|
||||
| Продукт | Прмечание |
|
||||
| ------- | ---------- |
|
||||
| Lexema 8 | лицензия на сервер |
|
|
@ -0,0 +1,10 @@
|
|||
# Сервер PostgreSQl
|
||||
|
||||
| Уровень | Требование |
|
||||
| ------- | ---------- |
|
||||
|Среда исполнения | PostgreSQl 13
|
||||
|Платформа | Linux (Ubuntu 2004)|
|
||||
|Инфраструктура | CPU: Архитектура x64, не менее 16 ядер, частота процессора не ниже 2,6 ГГц
|
||||
|| RAM: Не менее 32 Гб
|
||||
|| HDD: Не менее 500 Гб
|
||||
|| Net: Не менее 1 Гбит
|
|
@ -0,0 +1,5 @@
|
|||
* [Клиент](./Requirements_client.md)
|
||||
* [Docker образы](./Requirements_docker.md)
|
||||
* [NPM пакеты](./Requirements_npm.md)
|
||||
* [БД MSSQL](./Requirements_mssql.md)
|
||||
* [БД Postgree](./Requirements_postgre.md)
|
|
@ -0,0 +1,20 @@
|
|||
{%
|
||||
include-markdown "Requirements_client.md"
|
||||
heading-offset=1
|
||||
%}
|
||||
{%
|
||||
include-markdown "./Requirements_docker.md"
|
||||
heading-offset=1
|
||||
%}
|
||||
{%
|
||||
include-markdown "./Requirements_npm.md"
|
||||
heading-offset=1
|
||||
%}
|
||||
{%
|
||||
include-markdown "./Requirements_mssql.md"
|
||||
heading-offset=1
|
||||
%}
|
||||
{%
|
||||
include-markdown "./Requirements_postgre.md"
|
||||
heading-offset=1
|
||||
%}
|
|
@ -0,0 +1,4 @@
|
|||
* [Общее описание](./arch.md)
|
||||
* [Варианты поставки](./deploy_variant.md)
|
||||
* [Используемые сервисы](../service/)
|
||||
* [Требования к системе](./Requirements/index.md)
|
|
@ -0,0 +1,43 @@
|
|||
# Описание общей архитектуры приложения
|
||||
|
||||
Приложение построено по 3х звенной модели
|
||||
|
||||
**Клиент - Сервер приложений - Сервер БД**
|
||||
|
||||
Взаимодействие клиентской и серверной части приложения осуществляется на основе веб-протоколов (http(s), webSocket и др.). Каждый веб-сервис определяет свой набор публичных программных интерфейсов (API) в виде путей относительно адреса приложения, по которым клиент может обращаться к нему. Например, _/api/v1.0/service/_ - путь для обращения к веб-сервису service. Обращение к веб-сервисам чаще всего происходит с помощью http-запросов.
|
||||
|
||||
## Клиент
|
||||
Клиентская часть представляет собой браузерное html5-приложение на основе различных библиотек и пакетов, написанное на языке javascript.
|
||||
|
||||
## Сервер приложений.
|
||||
Сервер приложений имеет микросервисную архитектуру и может быть адаптирован для запуска в облаке
|
||||
|
||||
|
||||
![Серверная архитектура](./img/Server_arch.png)
|
||||
|
||||
На подробной схеме представлены веб-сервисы приложения **Lexema**. Веб-сервисы представляют собой самостоятельные приложения на базе экосистемы _Node.js_ и фреймворка [**Koa**](https://koajs.com/). Каждый веб-сервис реализует строго определённый функционал и не зависит от реализации других веб-сервисов. Исходя из выполняемой ими функции, веб-сервисы могут обращаться к другим веб-сервисам приложения **Lexema** и к различным используемым технологиям. Например, к хранилищу _Redis_ или к хранилищу данных.
|
||||
|
||||
В блоке каждого сервиса перечислены их API в виде типа запроса и адреса, по которому этот запрос прослушивается сервисом. Большими стрелками указано взаимодействие между сервисами с помощью сервисной шины.
|
||||
|
||||
__Обязательные веб-сервисы :__
|
||||
|
||||
* entrypoint - Точка входа для клиентов
|
||||
* config - Сервис конфигурации
|
||||
* logic - Сервис логики
|
||||
* gate - Сервис входа (аутентификации)
|
||||
* radio - Сервис взаимодействия реального времени
|
||||
* lock - Сервис пессимистического блокировщика
|
||||
* data - Сервис доступа к данным и процедурам хранимым в БД
|
||||
* RabbitMQ - Сервер RabbitMQ служит шиной обмена данными между веб-сервисами. Сервисы используют его механизмы (сообщения и очереди сообщений) для оповещения друг друга.
|
||||
* Redis -Для хранения различной системной информации используется высокоскоростное хранилище данных Redis
|
||||
|
||||
|
||||
__Опциональные веб-сервисы :__
|
||||
|
||||
* post - Сервис электронной почты и смс сообщений
|
||||
* jsreport - Сервис jsreport предназначен для работы с отчетами jsreport.
|
||||
* preview - Сервис превью предназначен для конвертации файлов в файлы в формате pdf, которые можно просматривать в контроле FilePreview.
|
||||
* lexema-dss - Сервис для работы с ОЭП выпускаемыми клиентом
|
||||
|
||||
## Сервер БД
|
||||
В качестве сервера баз данных используется MS SQL или PostgreSQL
|
|
@ -0,0 +1,30 @@
|
|||
|
||||
Данное приложение может поставлятся on-premise в 2х вариантах:
|
||||
|
||||
- облачное решение, поставляется в виде подготовленных Docker-образов
|
||||
- пакетное решение, поставляется в виде npm-пакетов
|
||||
|
||||
|
||||
Для администрирования каждого решения необходимы следующие компетенции
|
||||
|
||||
|
||||
| Компетенция | Поставка Docker | Поставка npm-пакетами |
|
||||
| ----------- | ---------- | ---------- |
|
||||
| Network | + | + |
|
||||
| Database | + | + |
|
||||
| Docker | + | |
|
||||
| Nginx | + | + |
|
||||
| NPM | | + |
|
||||
| PM2 | | + |
|
||||
| Redis | | + |
|
||||
| RabbitMQ | | + |
|
||||
|
||||
|
||||
|
||||
|
||||
!!! note
|
||||
Команды docker для сборки, выгрузки и загрузки можно посмотреть по ссылке https://docs.docker.com/engine/reference/commandline/cli/.
|
||||
Команды для запуска и управления сервисами через docker-compose можно посмотреть по ссылке https://docs.docker.com/compose/reference/overview/
|
||||
|
||||
Команды для запуска и управления сервисами через NPM https://docs.npmjs.com/ , https://pm2.io/docs/plus/overview/
|
||||
|
After Width: | Height: | Size: 101 KiB |
|
@ -0,0 +1,168 @@
|
|||
# FAQ Lexema-ECM
|
||||
|
||||
## Настройки сервера и ПО
|
||||
|
||||
!!! question
|
||||
Как изменить часовой пояс в системе (Postgre SQL)?
|
||||
Необходимо выполнение следующих команд в PgAdmin
|
||||
```sql
|
||||
select localtimestamp; /*возвращает текущую дату и время в часовом поясе из сеанса sql*/
|
||||
select current_timestamp; /*возвращает текущие дату и время из сеанса пользователя*/
|
||||
SELECT NOW(); --посмотреть серверное время
|
||||
SELECT * FROM pg_timezone_names; -- посмотреть типы часовых поясов
|
||||
ALTER SYSTEM SET timezone TO 'Europe/Moscow'; -- изменение часового пояса
|
||||
```
|
||||
Подробно о часовых поясах в Postge SQL можно узнать [здесь](https://it-blackcat.blogspot.com/2019/10/postgresql-and-timezone.html)
|
||||
|
||||
|
||||
## Электронные подписи
|
||||
!!! question
|
||||
Почему при выпуске УНЭП не появляются ссылки для скачивания заявки на выпуск ЭП и расписки в получении ЭП?
|
||||
Для выпуска сертификата УНЭП пользователь системы должен быть привязан к конкретному физическому лицу.
|
||||
Для этого нужно
|
||||
|
||||
1) пройти в раздел Меню - группа "Администрирование" - группа "Управление пользователями" - пункт "Управление пользователями".
|
||||
|
||||
2) в загрузившемся списке найти нужный логин и выделить галочкой
|
||||
|
||||
3) нажать "Данные пользователя" - выбрать физическое лицо в выпадающем списке - и нажать "Сохранить"
|
||||
|
||||
!!! question
|
||||
Как подписать документ квалифицированной подписью?
|
||||
Прежде чем использовать КЭП, необходимо настроить рабочее место пользователя соответствующим образом. Для настройки - см. статью [Как настроить работу с КЭП на токенах](../ЭП/Настройка для токенов КЭП/Настройка для токенов КЭП.md)
|
||||
|
||||
!!! question
|
||||
Возможно ли подтверждать операции подписания по SMS?
|
||||
Да, возможно. Для этого необходимо пройти Меню - группа "Администрирование" - группа "Система" - пункт "Глобальные настройки".
|
||||
Нажать кнопку "Настройка" и выключить флаг "Отключить подтверждение ЭЦП по СМС (новые сертификаты)"
|
||||
![Подтверждение через смс](./media/apprbysms.png)
|
||||
|
||||
## Работа с документами и маршрутами
|
||||
!!! question
|
||||
Как создать новый вид заявления?
|
||||
см. статью [Конструктор документов](../СЭД/Конструктор документов/Конструктор документов.md)
|
||||
|
||||
!!! question
|
||||
Как создать новый маршрут к заявлению?
|
||||
см. статью [ Шаблоны маршрутов](../СЭД/Настройка шаблонов маршрутов/Настройка шаблонов маршрутов.md)
|
||||
|
||||
!!! question
|
||||
Почему я не могу создать ЛНД?
|
||||
Создание ЛНД доступно только ответственным сотрудникам организации, поэтому этим пользователям необходимо дать в системе дополнительные права. Для этого нужно пройти в справочник "Подтипы документа" и указать в таблице "Пользователи с правом создания" этих пользователей. Подробнее см. статью [Подтипы документов](../СЭД/Справочники/Документооборот/Подтипы документов/Подтипы документов.md)
|
||||
|
||||
!!! question
|
||||
Почему я не вижу документ в реестре?
|
||||
По умолчанию во всех реестрах системы Lexema-ECM пользователь видит документы, если
|
||||
|
||||
а) он сам является автором этих документов
|
||||
|
||||
б) он участвовал в маршруте этих документов, даже если сам не является автором
|
||||
|
||||
в) он получил документ посредством списка рассылки
|
||||
|
||||
При необходимости можно дать так называемые горизонтальные права -то есть возможность видеть документы других подразделений при том, что в вышеописанные условия не попадает (кас. предоставления горизонтальных прав - см. статью [Настройка пользователей](../framework/User managment/Настройка пользователей/Настройка пользователей.md).
|
||||
Если пользователь не видит документ - вероятнее всего он не подходит ни под одно из вышеописанных условий.
|
||||
|
||||
## Пользователи
|
||||
!!! question
|
||||
Как создать нового пользователя?
|
||||
см. статью [Управление пользователями](http://127.0.0.1:8000/Admin%20manuals/framework/User%20managment/%D0%A3%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F%D0%BC%D0%B8/%D0%A3%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F%D0%BC%D0%B8/#%D1%81%D1%85%D0%B5%D0%BC%D0%B0_1_%D1%84%D0%B8%D0%B7_%D0%BB%D0%B8%D1%86%D0%BE__%D0%BB%D0%BE%D0%B3%D0%B8%D0%BD__%D1%81%D0%BE%D1%82%D1%80%D1%83%D0%B4%D0%BD%D0%B8%D0%BA)
|
||||
|
||||
## Настройка интеграции с Active Directory
|
||||
|
||||
Если возникает ошибка при обращении к домену, например по кнопке Импорт из AD
|
||||
|
||||
![Импорт из AD](./media/Импорт из AD.png){: .zoom}
|
||||
![Ошибка интеграции с доменом](./media/ошибка интеграции с доменом.png)
|
||||
|
||||
Необходимо проверить заполнение файла http://gogs.lex.lan/deploy/НАЗВАНИЕ САЙТА/src/master/config/production.js, где указан полный путь до юнита с пользователями ldap: { ..bindDN:
|
||||
|
||||
Например правильное заполнение будет иметь вид:
|
||||
'CN=service ldap lexema,OU=Technical Accounts,OU=ЦифроваяПомощь,OU=RU,DC=medholding,DC=corp',
|
||||
|
||||
Параметры полного пути до юнита с пользователями необходимо запрашивать у системных администраторов
|
||||
|
||||
посмотреть параметры можно в cmd командой whoami /fqdn
|
||||
|
||||
CN=service ldap lexema,OU=Technical Accounts,OU=ЦифроваяПомощь,OU=RU,DC=medholding,DC=corp
|
||||
|
||||
подробнее о настройке см. статью [Настройки сервиса входа](../../Admin manuals/service/gate/configuration.md).
|
||||
|
||||
## Управленческая структура и руководители
|
||||
|
||||
Для загрузки данных управленческой структуры необходимо настроить "Произвольные выборки"
|
||||
подробнее о настройке см. статью [Произвольные выборки](../../Admin manuals/СЭД/Настройка для интеграции с 1С/Настройка интеграции справочников и документов/Вкладка Произвольные выборки.md).
|
||||
|
||||
## Версии библиотек, установленные на проекте
|
||||
|
||||
!!! question
|
||||
Как посмотреть версии библиотек, установленные на проекте?
|
||||
|
||||
В служебном меню, открывающемся при нажатии на имя пользователя в правом верхнем углу страницы приложения нажмите кнопку "О системе"
|
||||
|
||||
![О системе](media/menuUser.png)
|
||||
|
||||
![Библиотеки](media/library.png)
|
||||
|
||||
## Список сертификатов КЭП пустой
|
||||
|
||||
!!! question
|
||||
Что делать если по кнопке Добавить сертификат - список сертификатов пустой?
|
||||
|
||||
см. статью [Привязка КЭП к пользователю Lexema-ECM](../../Admin manuals/ЭП/Настройка для токенов КЭП/Настройка для токенов КЭП.md#Шаг_3._Привязка_КЭП_к пользователю_Lexema-ECM).
|
||||
|
||||
Как добавить в личное хранилище импортированные сертификаты? </br>
|
||||
![csp1](media/csp1.PNG){: .zoom}</br>
|
||||
![csp2](media/csp2.PNG){: .zoom}</br>
|
||||
![csp3](media/csp3.PNG){: .zoom}</br>
|
||||
![csp4](media/csp4.PNG){: .zoom}</br>
|
||||
![csp5](media/csp5.PNG){: .zoom}</br>
|
||||
![сертификаты-личное](media/сертификаты-личное.PNG){: .zoom}</br>
|
||||
|
||||
## Использование Crontab для сервиса sheduler
|
||||
|
||||
!!! question
|
||||
Как правильно использовать Cron при создании расписания сервиса **sheduler**?
|
||||
|
||||
Чтобы правильно настроить расписание в данном формате, перейдите [по ссылке](https://crontab-generator.com/ru). Сервис использует серверное время, где развернут сервис.
|
||||
|
||||
Примеры использования crontab:
|
||||
|
||||
Описание | Вычисление
|
||||
---------|-----------
|
||||
каждые 30 минут каждый день | 30 ∗ ∗ ∗ ∗ |
|
||||
каждые 60 минут каждый день | 0 ∗ ∗ ∗ ∗ |
|
||||
каждый час с 9 до 18 по рабочим дням | 0 9-18 * * 1-5 |
|
||||
каждые два часа с 9 до 18 по рабочим дням | 0 */2 * * 1-5 |
|
||||
в 6:00 по рабочим дням | 0 6 * * 1-5 |
|
||||
в 12:00 в субботу | 0 12 * * 6 |
|
||||
|
||||
## Добавление этапа в полностью завершенный маршрут
|
||||
|
||||
В случае если в полностью завершенный маршрут необходимо добавить новый этап, то укажите:
|
||||
|
||||
```
|
||||
update r
|
||||
set routestatus = 2
|
||||
from route r where doccode = вкодедокумента
|
||||
|
||||
select VCode /*вкод маршрута нужен будет в шаге 3*/ from route r where doccode = вкодедокумента
|
||||
|
||||
declare @rs bigint, si bigint
|
||||
exec @rs = l8_sp_gencode 'RouteStage'
|
||||
exec @rs = l8_sp_gencode 'StageItem'
|
||||
|
||||
insert RouteStage(VCode, PCode, StageNumber, Status)
|
||||
select @rs, вкод_из_шага_2, 4, 2
|
||||
|
||||
insert StageItem(VCode, PCode, StageItemStatus, Stageuser, DaysForAction, DocumentAction,BeginDate)
|
||||
select @si, @rs, 2, логин_Шагизиганова, 2, 1, getdate()
|
||||
```
|
||||
|
||||
## Как проверить формат файла pdf/a-1
|
||||
|
||||
Удостовериться, что формат созданного файла действительно pdf/a-1 можно с помощью [онлайн сервиса](https://avepdf.com/ru/pdfa-validation)
|
||||
|
||||
## "Как мне или администратору отредактировать маршрут согласования?"
|
||||
|
||||
С помощью [формы корректировка маршрутов согласования](../СЭД/Форма корректировки маршрутов согласования/Форма корректировки маршрутов согласования.md)
|
After Width: | Height: | Size: 30 KiB |
After Width: | Height: | Size: 22 KiB |
After Width: | Height: | Size: 34 KiB |
After Width: | Height: | Size: 19 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 4.9 KiB |
After Width: | Height: | Size: 89 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 43 KiB |
After Width: | Height: | Size: 30 KiB |
After Width: | Height: | Size: 66 KiB |
|
@ -0,0 +1,2 @@
|
|||
- [Архитектура приложения](./Arch/)
|
||||
- [Lexema Framework](./framework/)
|
After Width: | Height: | Size: 50 KiB |
After Width: | Height: | Size: 82 KiB |
After Width: | Height: | Size: 50 KiB |
After Width: | Height: | Size: 33 KiB |
After Width: | Height: | Size: 14 KiB |
|
@ -0,0 +1,141 @@
|
|||
# Интеграция с почтовым клиентом
|
||||
|
||||
## Общая информация
|
||||
|
||||
Для подключения почтового клиента к 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/). В случае, если после выполнения приведенных рекомендаций отправка писем остается проваленной, можно обратиться в службу поддержки почтового сервиса.
|
|
@ -0,0 +1,4 @@
|
|||
* [Конфигурирование экземпляра приложения]( ./config_app.md)
|
||||
* [Конфигурирование сервисов Docker](./config_docker.md)
|
||||
* [Сборка образа Docker](./build_docker.md)
|
||||
* [Конфигурирование клиента Packet](./config_npm.md)
|
|
@ -0,0 +1,26 @@
|
|||
# Сборка 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 -->
|
|
@ -0,0 +1,27 @@
|
|||
# Конфигурирование экземпляра приложения
|
||||
Конфигурация приложения разделена на несколько файлов
|
||||
основой служит сервис конфигурации который считывает файл и отдает его содержимое по апи
|
||||
|
||||
!!! warning
|
||||
Необходимо помнить что файлы конфигурации содержат информацию для ограниченного доступа
|
||||
|
||||
Каталог с файлами сервиса конфигурации содержит следующие файлы:
|
||||
|
||||
| Имя | Описание |
|
||||
|-----|----------|
|
||||
| ./config/production.js | - конфигурация для сервисов приложения
|
||||
| ./nginx/default.conf | - настройки сервиса entrypoint (маршруты)
|
||||
| ./SQL/ | - настроечные скрипты для сервера БД (для ручного запуска)
|
||||
|
||||
Для каждого дополнительного сервиса может быть создан отдельный каталог с его настройками.
|
||||
Например, для сервиса работы с ОЭП(dss-service) в конфигурации может присутствовать каталог dss c файлами настроек.
|
||||
|
||||
Если каталог с дополнительными настройками сервиса не присутствует - то сервис запускается с настройками по умолчанию.
|
||||
|
||||
!!! note
|
||||
Для конфигурирования отдельных экземпляров приложения рекомендуется создавать отдельные каталоги для каждого экземпляра.
|
||||
|
||||
## Подготовка файлов конфигурации приложения
|
||||
|
||||
2. проверить настройки в файле ./config/production.js. Других файлов в каталоге ./config/ быть не должно.
|
||||
3. необходимо проверить маршруты описанные в /nginx/default.conf. Они должны отображаться на сервисы используемые в приложении.
|
|
@ -0,0 +1,4 @@
|
|||
# Настройки приложения при поставке Docker
|
||||
|
||||
Файл docker-compose.yml содержит список необходимых для работы приложения сервисов и параметры их запуска
|
||||
Файл .env содержит переменные окружения, которые автоматически применятся для текущего экземпляра приложения.
|
|
@ -0,0 +1,3 @@
|
|||
# Настройки приложения при поставке NPM
|
||||
|
||||
файл ecosystem.config.js содержит список необходимых для работы приложения сервисов и параметры их запуска
|
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 144 KiB |
After Width: | Height: | Size: 782 B |
After Width: | Height: | Size: 76 KiB |
|
@ -0,0 +1,75 @@
|
|||
# Настройка обозревателя аналитик
|
||||
|
||||
## Общее описание назначения документа
|
||||
|
||||
Настройка обозревателя аналитик (ОА) служит для выделения уникальных узлов в справочнике, открывающемся по кнопке <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 | Виды выбытия ОС
|
After Width: | Height: | Size: 50 KiB |
After Width: | Height: | Size: 29 KiB |
After Width: | Height: | Size: 64 KiB |
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 98 KiB |
After Width: | Height: | Size: 21 KiB |
After Width: | Height: | Size: 29 KiB |
After Width: | Height: | Size: 73 KiB |
After Width: | Height: | Size: 31 KiB |
After Width: | Height: | Size: 198 KiB |
After Width: | Height: | Size: 29 KiB |
After Width: | Height: | Size: 41 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 103 KiB |
After Width: | Height: | Size: 136 KiB |
After Width: | Height: | Size: 114 KiB |
|
@ -0,0 +1,159 @@
|
|||
# Настройка архива вложенных документов
|
||||
|
||||
## Общее описание
|
||||
|
||||
Настройка архива вложенных документов необходима для работы аналитической формы [Архив вложенных документов](./../../../../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}
|
|
@ -0,0 +1,21 @@
|
|||
# Самостоятельное развертывание системы
|
||||
|
||||
* [Описание]( ./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](../../service/sheduler/index.md)
|
|
@ -0,0 +1,2 @@
|
|||
* [Docker образы](./deploy_docker.md)
|
||||
* [NPM пакеты](./deploy_npm.md)
|
|
@ -0,0 +1,16 @@
|
|||
# Распространение приложения использованием образов Docker
|
||||
|
||||
Для развертывания сконфигурированного ранее приложения необходимо выполнить следующие шаги:
|
||||
|
||||
1. Cкопировать файлы развертывания приложения __docker-compose.yml__, __.env__ на сервер приложения. Эти файлы идут в составе поставки пакета сервиса конфигурации приложения. Если сборка образа конфигурации была на текущем сервере - тогда этот шаг можно пропустить.
|
||||
|
||||
2. Запустить приложение
|
||||
|
||||
```bash
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
!!!warning
|
||||
Обратите внимание что образ сервиса конфигурации с **файлами конфигурации** конкретного экземпляра приложения собирается отдельно от образов содержащих сервисы приложения, и содержит все необходимые настройки для экземпляра приложения. Такой подход позволяет переиспользовать образы сервисов приложения с разными **сервисами конфигурации**.
|
||||
|
||||
Файл docker-compose.yml содержит описание необходимых для запуска сервисов.
|
|
@ -0,0 +1,16 @@
|
|||
# Распространение приложения через npm-пакеты
|
||||
|
||||
|
||||
Необходимо:
|
||||
|
||||
1. Получить исходные коды сервисов приложения.
|
||||
Дистрибутив поставляется в виде zip архива
|
||||
(Выполнить команду установки зависимостей.)
|
||||
|
||||
2. Скопировать конфигурационные файлы в папку исходных кодов т.к. исходные коды приложения хранятся отдельно от конфигурационных файлов приложения.
|
||||
|
||||
|
||||
3. Запустить сервисы командой
|
||||
``` bash
|
||||
pm2 restart ecosystem.config.js
|
||||
```
|
|
@ -0,0 +1,23 @@
|
|||
# Создание БД
|
||||
|
||||
1. Необходимо развернуть из резервной копии заранее подготовленные базы данных
|
||||
|
||||
* << app >>
|
||||
* << app_history >>
|
||||
|
||||
2. Установить для учетной записи администратора следующие привилегии:
|
||||
|
||||
+ Включить администратора в роль DB_OWNER для следующих БД:
|
||||
|
||||
* << app >>
|
||||
* << app_history >>
|
||||
|
||||
+ Предоставить администратору разрешения на следующие операции:
|
||||
|
||||
* ALTER ANY CONNECTION
|
||||
* ALTER ANY LOGIN
|
||||
* ALTER TRACE
|
||||
|
||||
3. Создать план обслуживания БД включив в него шаг резервного копирования.
|
||||
|
||||
4. Настроить расписание для плана обслуживания
|
|
@ -0,0 +1,4 @@
|
|||
* [update](update.md)
|
||||
* [backup](backup.md)
|
||||
* [clearing](clearing.md)
|
||||
* [monitoring](monitoring.md)
|
|
@ -0,0 +1,7 @@
|
|||
# Backup & Restore
|
||||
|
||||
Резервное копирование баз данных и хранение копий в папке названной по версии приложения
|
||||
|
||||
для развертывания экземпляра из резервной копии необходимо
|
||||
- восстановить базы данных
|
||||
- запустить экземпляр сервера приложений нужной версии, с настройками на восстановленные базы данных
|
|
@ -0,0 +1,4 @@
|
|||
# Очиска системы от старых Docker образов приложения
|
||||
|
||||
Для удаления старых образов создается файл clearing.sh
|
||||
при выполнении он удаляет все предшествующие текущему образы.
|
|
@ -0,0 +1,26 @@
|
|||
# monitoring
|
||||
|
||||
## Базовый мониторинг приложения в Windows
|
||||
|
||||
При запуске сервисов в среде Windows наблюдение за ними происходит в консоли запушенного приложения
|
||||
|
||||
Логи сервисов выводятся в эту-же консоль.
|
||||
|
||||
## Базовый мониторинг контейнеров Docker
|
||||
наблюдение за сервисами приложения
|
||||
```bash
|
||||
docker-compose ps
|
||||
```
|
||||
|
||||
просмотр логов контейнеров
|
||||
```bash
|
||||
docker-compose logs
|
||||
```
|
||||
|
||||
!!! note
|
||||
Сервисы в контейнере app пишут логи в файлы расположенные на подключеном к контейнеру VOLUME
|
||||
эти логи можно посмотреть только подключившись к этому VOLUME
|
||||
|
||||
## Использование коллектора логов fluentd
|
||||
|
||||
В корпоративной среде лоя сбора логов контейнеров Docker можно использовать коллектор [fluentd](https://www.fluentd.org/)
|
|
@ -0,0 +1,9 @@
|
|||
# Update
|
||||
|
||||
Обновление версии приложения при поставке в виде Docker образов происходит следующим методом:
|
||||
|
||||
- на сервер приложения загружаются новые Docker образы
|
||||
- останавливается предыдущий экземпляр приложения
|
||||
- запускается новый экземпляр приложения
|
||||
- открывается страница применения миграций схемы БД и выполняются необходимые миграции
|
||||
|
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 176 KiB |
After Width: | Height: | Size: 36 KiB |
After Width: | Height: | Size: 46 KiB |
After Width: | Height: | Size: 34 KiB |
After Width: | Height: | Size: 33 KiB |
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 66 KiB |
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 69 KiB |
After Width: | Height: | Size: 123 KiB |
|
@ -0,0 +1,99 @@
|
|||
# Система логирования приложения
|
||||
|
||||
## Общее описание
|
||||
|
||||
Предназначено для просмотра сообщений (событий) (как правило, об ошибках) в системе. Просмотреть лог можно в формах "Логи приложения", "Управление пользователями", "Просмотр событий". Для работы с данными формами пользователь должен обладать правами Администратора.
|
||||
|
||||
## Форма "Логи приложения"
|
||||
|
||||
С помощью данной формы можно посмотреть историю событий приложения. Чтобы открыть форму "Логи приложения", необходимо в меню в папке "Администрирование", подпапке "Система" выбрать пункт "Логи приложения". Форма доступна пользователю с ролью **ECM_usersmanagement** либо **ECM_InformationSecurity**.
|
||||
|
||||
![Меню](./media/menu.png)
|
||||
|
||||
Откроется форма с пустой таблицей:
|
||||
|
||||
![Форма до загрузки строк в таблицу](./media/init.png){: .zoom}
|
||||
|
||||
Для того, чтобы заполнить таблицу, необходимо ввести в поле "TOP N" количество последних возникших в системе событий для отображения (количество строк в таблице), а затем нажать на кнопку "Загрузить". Записи будут загружены в порядке убывания по времени возникновения.
|
||||
|
||||
![Форма после загрузки строк в таблицу](./media/filled.png){: .zoom}
|
||||
|
||||
В столбце "Уровень" приводится тип сообщения о событии.
|
||||
|
||||
- error – сообщение об ошибке;
|
||||
- debug – отладочное сообщение;
|
||||
- info – информационное техническое сообщение;
|
||||
- MailInfo – информационное сообщение от компоненты БД DBMail;
|
||||
- MailError – сообщение об ошибке от компоненты БД DBMail.
|
||||
|
||||
В столбце "Дата" указываются дата и время возникновения сообщения.
|
||||
|
||||
В столбце "Пользователи" указывается пользователь, спровоцировавший возникновение события. В некоторых случаях пользователь не указывается, например если событие произошло в результате технического вмешательства.
|
||||
|
||||
В столбце "Сообщение" приводится краткая информация о событии. Если нажать на ссылку-текст сообщения, то откроется окно для более удобного просмотра длинного текста. То же происходит и при нажатии на ссылки в других столбцах.
|
||||
|
||||
![Пример сообщения](./media/viewFullField.png){: .zoom}
|
||||
|
||||
В столбце "Сообщение пользователю" содержится сообщение, возникшее в момент события на экране вызвавшего его пользователя под кнопкой "Инфо".
|
||||
|
||||
В столбце "Детально" приводится детальная информация о событии, содержит дополнительные технические данные об ошибке.
|
||||
|
||||
В столбце "Запрос" указывается запрос к базе данных, при выполнении которого возникло событие.
|
||||
|
||||
В столбце "Сервис" указывается один из веб-сервисов, при выполнении которых возникло событие:
|
||||
|
||||
* entrypoint – точка входа для клиентов;
|
||||
* config – сервис конфигурации;
|
||||
* logic – сервис логики;
|
||||
* gate – сервис входа (авторизации);
|
||||
* radio – сервис взаимодействия реального времени;
|
||||
* lock – сервис пессимистического блокировщика;
|
||||
* data – сервис доступа к данным и процедурам, хранимым в БД;
|
||||
* RabbitMQ – сервер RabbitMQ служит шиной обмена данными между веб-сервисами. Сервисы используют его механизмы (сообщения и очереди сообщений) для оповещения друг друга;
|
||||
* Redis – используется для хранения различной системной информации;
|
||||
* post – сервис электронной почты и смс-сообщений;
|
||||
* jsreport – предназначен для работы с отчетами jsreport;
|
||||
* lexema-dss – для работы с ОЭП выпускаемыми клиентом;
|
||||
* preview – предназначен для конвертации файлов в файлы в формате pdf, которые можно просматривать в элементе управления ```FilePreview```.
|
||||
|
||||
## Форма "Управление пользователями"
|
||||
|
||||
**Описание**
|
||||
|
||||
С помощью данной формы можно посмотреть журнал действий конкретного пользователя. Для этого нужно перейти в документ "Управление пользователями" в подраздел ["Журнал действий пользователей"](../../User managment/Управление пользователями/Управление пользователями.md#журнал_действий_пользователей). Выберите необходимого пользователя и нажмите кнопку **"Журнал действий пользователя"**
|
||||
|
||||
![Журнал действия](media/SelectJornal.png)
|
||||
|
||||
## Форма "Просмотр событий"
|
||||
|
||||
**Описание**
|
||||
|
||||
Для перехода в форму "Просмотр событий" в меню Пользователя выберите "Просмотр событий". Пользователь должен обладать правами Администратора.
|
||||
|
||||
![Просмотр событий](media/eventViewer.png)
|
||||
|
||||
![Реестр](media/reestr.png){: .zoom}
|
||||
|
||||
- Сессия – идентификатор сессии;
|
||||
- Пользователь - логин пользователя;
|
||||
- Событие – тип события;
|
||||
- Объект – идентификатор модели или запроса, к которому шло обращение;
|
||||
- Параметры – параметры, с которыми загружаются или изменяются данные;
|
||||
- Ключ маршрута – маршрут вкладки приложения, в которой была инициирована работа с данными;
|
||||
- Идентификатор формы – параметр-идентификатор в маршруте, по которому была открыта вкладка, например, идентификатор документа;
|
||||
- Класс формы – класс формы, которая открывается в данной вкладке;
|
||||
- Браузер – информация о браузере (название и версия), в которыом работал пользователь;
|
||||
- Запрос – идентификатор запросов на загрузку или изменение данных для отслеживания цепочки клиент-сервер;
|
||||
- Дата – время вызова события;
|
||||
- Идентификатор организации – идентификатор организации, в которой находился пользователь при вызове события.
|
||||
|
||||
Можно настроить загрузку данных, например по Пользователю, сессии, событию и т.д.
|
||||
|
||||
Для этого в панели инструментов нажмите кнопку "Загрузка данных".
|
||||
|
||||
![Загрузка](media/load.png)
|
||||
|
||||
В открывшемся окне выберите условия по которым необходимо отфильтровать реестре. Например укажем, что столбец "Пользователь" должен содержать значение "Director". После этого нажмите "Загрузить данные". После загрузки в реестре будут отображены лог действий пользователя "Director"
|
||||
|
||||
![Загрузка данных](media/loadData.png)
|
||||
![Отфильтрованные сессии](media/session.png){: .zoom}
|
|
@ -0,0 +1,571 @@
|
|||
# Сборка документов, участвующих в документообороте, в БД
|
||||
|
||||
## Общее описание
|
||||
|
||||
Для участия документов определенного типа и успешного запуска этих документов по маршруту необходимо:
|
||||
|
||||
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
|
||||
```
|
|
@ -0,0 +1,3 @@
|
|||
* [Docker образы]( ./prepare_serv_docker.md)
|
||||
* [NPM пакеты]( ./prepare_serv_npm.md)
|
||||
* [БД MSSQL]( ./prepare_mssql.md)
|
|
@ -0,0 +1,12 @@
|
|||
# Создание БД
|
||||
|
||||
1. Необходимо развернуть из резервной копии заранее подготовленные базы данных
|
||||
|
||||
* ptb
|
||||
* ptb_history
|
||||
|
||||
2. Создать учетную запись для приложения. Выдать права администратора для созданной учетной записи на следующие базы :
|
||||
|
||||
* ptb
|
||||
* ptb_history
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
# Использование ресурсов ООО "Лексема"
|
||||
## Настройка доступа к приватному репозиторию
|
||||
!!! 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"]
|
||||
```
|
|
@ -0,0 +1,18 @@
|
|||
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
|
|
@ -0,0 +1,45 @@
|
|||
# Подготовка сервера приложения для развертывания 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
|
||||
На этапе внедрения сервис обновлений ООО "Лексема" не используется.
|
||||
Для поставки пакетов с новым функционалом используется сетевой ресурс в сети заказчика. Обновления производятся заказчиком самостоятельно.
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
# Подготовка сервера приложения для развертывания 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
|
||||
На этапе внедрения сервис обновлений ООО "Лексема" не используется.
|
||||
Для поставки пакетов с новым функционалом используется сетевой ресурс в сети заказчика. Обновления производятся заказчиком самостоятельно.
|
|
@ -0,0 +1,5 @@
|
|||
- [Описание](Config/Развертывание системы.md)
|
||||
- [Подготовка серверов](./Prepare/)
|
||||
- [Настройка](./Config/)
|
||||
- [Развертывание](./Deploy/)
|
||||
- [Обслуживание](./Maintenance/)
|
|
@ -0,0 +1,4 @@
|
|||
* [Управление пользователями через единый интерфейс](./Управление пользователями/Управление пользователями.md)
|
||||
* [Создание пользователя](Управление пользователями/Управление пользователями/#создание_пользователя)
|
||||
* [Назначение прав](Настройка пользователей/Настройка пользователей/#документооборот)
|
||||
* [Заявки в техническую поддержку](Заявка в техническую поддержку/Заявки в техподдержку.md)
|