1
0
mirror of https://github.com/salexdv/1CHServer.git synced 2024-11-21 18:06:30 +02:00
Внешняя компонента, позволяющая реализовать выполнение кода в другом сеансе 1С Предприятия по запросу клиента
Go to file
2020-06-30 22:28:03 +03:00
1C first commit 2020-06-30 22:28:03 +03:00
AddInLib first commit 2020-06-30 22:28:03 +03:00
Properties first commit 2020-06-30 22:28:03 +03:00
reg first commit 2020-06-30 22:28:03 +03:00
.gitignore first commit 2020-06-30 22:28:03 +03:00
1CHServer.csproj first commit 2020-06-30 22:28:03 +03:00
1CHServer.csproj.user first commit 2020-06-30 22:28:03 +03:00
Data1C.cs first commit 2020-06-30 22:28:03 +03:00
README.md first commit 2020-06-30 22:28:03 +03:00
Server.cs first commit 2020-06-30 22:28:03 +03:00

1CHServer

Что это?

Внешняя компонента, позволяющая реализовать выполнение кода в другом сеансе 1С Предприятия по запросу клиента.

Для чего это нужно?

Применений может быть несколько, например вывод сообщений пользователю, закрытие сеанса ну или более сложные операции.

Понадобилось мне реализовать отображении информации об остатках из одной базы в другой в реальном времени. Держать у каждого пользователя в сеансе дополнительное COM-соединение не очень хотелось. Так и родилось данное решение.

Принцип работы:

  1. На компьютере (назовем его сервером) запускается обработка, где создается объект AddIn.1CHServer Этот сервер будет прослушивать определенный порт и ожидать входящий запрос от клиента.
  2. Клиент отправляет запрос серверу с помощью объекта HTTPСоединение
  3. AddIn.1CHServer получив запрос генерирует внешнее события для сеанса 1С Предприятия в котом данный объект создан
  4. На сервере выполняется запрошенный клиентом код и результат возвращается клиенту при помощи метода ВернутьРезультат(...)

Схема работы

Результат, возвращаемый клиенту может быть только тексовым т.к. запрос отправляется при помощи метода Получить() объекта HHTPСоединение

Теперь вместо того, чтобы держать 10-15 постоянных COM-соединений клиент лишь отправляет текст кода для выполнения в сеансе, где создан AddIn.1CHServer и получает ответ.

Работает, конечно, медленнее, чем при могло бы быть через "V8x.ComConnector", но есть и свои преимущества. Например, если надо срочно обновить базу данных, то не надо убивать все COM-сеансы, а достаточно просто остановить на время 1CHServer и обновить БД.

Не рекомендуется выполнять "тяжелый" код на сервере, т.к. это замедлит получение ответа другими клиентами.

ОПИСАНИЕ КОМНОНЕНТЫ

Методы:

  • Запустить(<Порт>) - запуск прослушивания указанного порта;
  • Остановить() - остановка сервера;
  • ВернутьРезультат(<ТекстовыйРезультат>) - возврат результата клиенту (метод обязательно должен вызываться, иначе сервер перестанет принимать входящие запросы от клиентов);

Свойства:

  • Порт - порт на котором работает сервер (только чтение);

В случае ошибки (при работе компоненты или при выполнении кода на сервере) возвращается результат вида: Error: <ОписаниеОшибки>

  • В коде, выполняемом на сервере, не должно быть комментариев.
  • Для работы компоненты потребуется установленный Microsoft .NET Framework 2.0 и выше

Регистрация компоненты в Windows - запустить /reg/reg.bat Удаление информации о компоненте - запустить /reg/unreg.bat

Прилагаются примеры обработок для сервера и для клиента (8.2)