Система взаимодействия 1С (Установка и настройка)
Сервер системы взаимодействия
Скачиваем дистрибутив (не забываем про версии!)
Внезапно… Запускаем установку J
Установка завершена. J
Установим JDK
•Its.ru
•Liberica 11 Full JDK
•11.0.15+10
•Liberica 11 Full JDK (64-bit) для Windows
Короче, ставим последнюю версию JDK
Запускаем установку. Попытка номер 2,3,4… J)
В итоге мы получаем… папку с дистрибутивом J
Инициализация
Теперь необходимо инициализировать инстансы сервер взаимодействия (cs), hazelcast и elasticsearch. Для этого запускаем командную строку и в ней поочередно выполняем
ring cs instance create --dir "C:\Program Files\1C\1CE\components\1c-cs1"
ring hazelcast instance create --dir "C:\Program Files\1C\1CE\components\1c-hc1"
ring elasticsearch instance create --dir "C:\Program Files\1C\1CE\components\1c-es1"
после чего у нас в папке C:\Program Files\1C\1CE\components появятся новые папки с конфигурационными файлами cs, hazelcast и elasticsearch
Запускаем службы
Теперь необходимо запустить службы cs, hazelcast и elasticsearch. Для этого в командной строке выполняем:
ring hazelcast --instance 1c-hc1 service create
ring elasticsearch --instance 1c-es1 service create
ring cs --instance 1c-cs1 service create
Устанавливаем PG SQL
Настраиваем PG SQL
•Запускаем pgAdmin
•Создаем пользователя cs_user с правами создания БД
•Создаем новую БД cs_db владельцем указываем cs_user
•CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
Пользователь
БД
Установка расширения
Регистрируем БД PG SQL на сервере взаимодействия
Здесь я воспользовался ISE
ring cs --instance <cs_instance> jdbc pools --name common set-params --url jdbc:postgresql://localhost:5432/cs_db?currentSchema=public
ring cs --instance <cs_instance> jdbc pools --name common set-params --username <db_user>
ring cs --instance <cs_instance> jdbc pools --name common set-params --password <db_user_pwd>
ring cs --instance <cs_instance> jdbc pools --name privileged set-params --url jdbc:postgresql://localhost:5432/cs_db?currentSchema=public
ring cs --instance <cs_instance> jdbc pools --name privileged set-params --username <db_user>
ring cs --instance <cs_instance> jdbc pools --name privileged set-params --password <db_user_pwd>
•<cs_instance> R09; название экземпляра сервера взаимодействия.
•`db_user- имя пользователя, от имени которого сервер взаимодействия подключается к СУБД.
•`db_user_pwd - пароль этого пользователя.
Настройка WebSocket
Здесь я воспользовался ISE
ring cs --instance <cs_instance> websocket set-params --hostname <cs_host>
ring cs --instance <cs_instance> websocket set-params --port <cs_port>
•<cs_host> - имя или IP-адрес компьютера, на котором установлен сервер взаимодействия и к которому будет подключаться клиентское приложение системы взаимодействия (система «1С:Предприятие»).
•<cs_port> - сетевой порт, который будет использован для подключения к серверу взаимодействия клиентского приложения системы взаимодействия (системы «1С:Предприятие»).
Создание структур для СВ
Выполняем curl запрос через командную строку для окончательной регистрации
curl -Sf -X POST -H "Content-Type: application/json" -d "{ \"url\" : \"jdbc:postgresql://localhost:5432/cs_db\", \"username\" : \«cs_user\", \"password\" : \"1256\", \"enabled\" : true }" -u user:1111 http://localhost:8087/admin/bucket_server
Все готово!!!
Все готово
Сервер настроен, можно регистрировать БД
Подключим S3 хранилище
Скачиваем minio и Nssm
После чего выполняем в командной строке:
nssm install MINIO
Поднимаем службу и настраиваем
•Поднимаем службу
•И далее устанавливаем переменные через командную строку
setx MINIO_ROOT_USER minio
setx MINIO_ROOT_PASSWORD ******
Подключаем СВ к minio
Необходимо выполнить curl запрос в Windows PowerShell
ВООБЩЕ СОВСЕМ ВСЕ ГОТОВО!!!
Ура, ура, ура!!!
1С-ная часть
•Регистрация приложения на сервере взаимодействия
•Совместное использование приложений (только для внеконтекстных обсуждений или если вы обмен настроили по ссылке)
•Программа «1С:Предприятие – оповещение о запуске» (только ручная установка) Ошибка 10234654
Регистрация на сервере взаимодействия
•Для этого необходимо скачать с сайта its.1c.ru обработку CollaborationSystemRegister.epf
Совместное использование приложений
•Открываем «Управление системой взаимодействия»
•Жмем «Совместное использование приложений»
•Отмечаем галочками нужные БД
•Выбираем, как сопоставлять пользователей
•Если нужно, отмечаем «Сопоставление предметных обсуждений» (синхронизация только по ссылке объекта – так что подойдет не каждому)
Столкнувшись с этой проблемой, я решил напилить обмен ws с использованием расширения
«1С:Предприятие – оповещение о запуске»
•Заходим в настройки
•Устанавливаем «1С:Предприятие – оповещения и запуск»
•Перезапускаемся и, вот уже при закрытой 1С, вы получаете оповещения о новом сообщении
•Проблема тут в том, что пакетно этот дистрибутив установить нельзя.
Система взаимодействия 1С (Использование для нужд проекта)
Общение внутри 1С
Первая поставленная задача - автозамена некоего прокси пользователя на конкретных людей
Есть бизнес-роли «Менеджер ВЭД» и «сотрудник ФУ». В каждом контракте это некий конкретный человек (люди)
Пользователь вводит сообщение и в качестве адресата указывает роль МенеджерВЭД (ManagerIM) или ФУ (FinancialDepartment), а сообщение направляется конкретным людям. Каким – вычислим по контракту.
Перехват сообщения
•В модуле приложения в ПриНачалеРаботыСистемы() подключаем обработчик
ПодключитьОбработчикПослеОтправкиСообщения()
•Эта единственная точка, где мы можем внедриться в процесс отправки сообщения.
Собираем структуру из отправленного сообщения
•Собираем в структуру всю информацию об отправленном сообщении
•Отдельным массивом складываем получателей
•Передаем управление на сервер
Определяем, что нужно сделать
•Ищем прокси пользователей и, в зависимости от того, что нашли, выполняем те или иные действия
•Проверяем, участвует ли этот вид объекта в обмене
•Если нашли прокси пользователя, то переотправляем сообщение
Переотправка сообщения
•Создаем новое сообщение в той же беседе и заполняем его полностью данными из структуры, за исключением получателей - они у нас теперь реальные
•Исходное сообщение мы при этом удаляем
Если нам не удалось выполнить задуманное
•Если что-то пошло не так, и нам не удалось переадресовать сообщение, то информируем об этом пользователя
Общение между двумя ИС на 1С
Выложу отдельной маленькой статьей. Нашел изящное решение, хоть и не универсальное.
Добавление не1С-системы. SOAP сервис
Менеджеры ВЭД работают в 1С. Сотрудники логистики в самописном приложении не на 1C. Хотят коммуницировать. Причем, в привязке к конкретным объектам (элементы конкретного справочника и конкретные документы). Возникла потребность в интеграции. У коллег была возможность интеграции только через SOAP
Пользователь 1С отправляет сообщение
•Используя структуру, собранную из нашего сообщения, заполняем параметры WS и отправляем сообщение
•Автор сообщения и объект контекста передаются, как ИД, о которых знают обе стороны
•Если сообщение не ушло по каким-то причинам, то информируем об этом пользователя
Пользователь не 1С отправляет сообщение
•Разбираем XDTO
•Получаем реальный объект
•По объекту получаем его обсуждение
•Пользователя в данном случае не конкретизируем - ставим прокси
•Если по какой-то причине не удалось создать сообщение - возвращаем ошибку
Добавление не1С-системы. REST сервис
Далее возникла потребность контекстной коммуникации с поставщиками (люди за пределами компании). У поставщиков есть доступ к нашему порталу. Придется с ним интегрироваться. Разработчики изъявили желание общаться по REST API.
Пользователь 1С отправляет сообщение
•Используя структуру, собранную из нашего сообщения, формируем JSON и вызываем REST API
•Автора сообщения передаем в виде почты, объекты контекста передаются, как ИД, о котором знают обе стороны
•Если сообщение не ушло по каким-то причинам, то информируем об этом пользователя
Пользователь не 1С отправляет сообщение
•Разбираем JSON
•Получаем реальный объект
•По объекту получаем его обсуждение
•Пользователя в данном случае ставим прокси, а в тексте сообщения конкретизируем, приводя его email
•Если по какой-то причине не удалось создать сообщение - возвращаем ошибку
Добавление возможности обмена файлами
•Выбор варианта реализации
•Реализация хранения «все в одном месте»
•Реализация на стороне 1С
•Реализация на стороне внешней системы
Выбор варианта реализации
•Каждый хранит файлы у себя и передаем файлы в виде двоичных данных. Жрем диски. L
•Каждый хранит файлы у себя и обмениваемся ссылками на место хранения. Хаос и бардак. L
Храним все в одном месте на стороне Сервера взаимодействия в S3 хранилище. Наш выбор.
Реализация хранения «все в одном месте». Отправка из 1С.
•Пользователь прикрепляет файл
•Файл средствами СВ сохраняется в S3, а информация фиксируется в PG SQL
•1С выполняет HTTP запрос к сайту, прикладывая ссылки на файлы в S3 хранилище
•Внешняя ИС фиксирует информацию у себя и, при необходимости, читает напрямую из S3
Реализация на стороне 1C
Запрос к PG SQL для получения имен прикреплений
Разбор запроса
•conversation_message – Обращаемся к таблице сообщений и находим наше по идентификатору беседы и сообщения
•Далее производим внутреннее соединение с таблицей attachment – прикрепления, для получения ID файлов и реальных имен файлов
•Далее производим внутреннее соединение с stored_file – описание файлов, для получения имени и каталога хранения прикреплений в S3 хранилище
Реализация на стороне ПП
Магия не на 1С.
•Определяем статус сообщения (прикрепления во временном хранилище или уже в s3)
•После чего переходим к скачиванию файла.
Магия не на 1С. ч.2.
•Сервисный слой обращения к клиенту minio для скачивания файла
Магия не на 1С. ч.3
•Обращение к клиенту minio для скачивания файла из файлового хранилища
Реализация хранения «все в одном месте». Отправка из «не1С-системы»
•Пользователь портала начинает прикреплять файл
•Портал делает HTTP запрос к Web серверу 1С и передает сообщение и имена и расширения файлов, которые планирует прикрепить пользователь.
•Сервер 1С создает новое сообщение в СВ и добавляет к нему пустые прикрепления. После чего прямым запросом считывает адреса пустых прикреплений и возвращает их с ответом на сайт
•Сайт производит прямую запись в S3 хранилище, замещая пустые файлы файлами пользователя
Реализация на стороне 1C
Создаем сообщение с прикреплениями-пустышками
Получаем их имена и месторасположение, как и в первом случае
Сообщение с прикреплениями-пустышками
Получение ссылок на файлы и помещение в ответ
Реализация на стороне ПП
Фрагмент 1
•Сохранение сообщения в БД VP
•Отправка сообщения в ИС 1С с получением имен пустых файлов
•Запись в файлы пустышки реальных файлов
•Удаление временных файлов
Фрагмент 2
•Перебор временных файлов сообщения и копирование их на место пустышек
•Изменение статуса сообщения на файлы отправлены
Фрагмент 3
•Перебор временных файлов и их удаление
Спасибо!