Каталог решений - 1C + jabber

1C + jabber

1C + jabber

В наличии

Использование протокола xmpp для информационных сообщений из 1С без подключения внешних dll.

Категория:

Описание

Не так давно в компании в которой я работаю, внедрили 1С:Документооборот.

Система хорошая (после выпуска версии 1.2.2.6) и нужная, спору нет.

Исторически так сложилось, что в компании развернут и используется jabber сервер.

Документооборот хорош всем, в том числе умеет рассылать уведомления на e-mail о поступивших новых задачах.

Да вот беда, с протоколом xmpp 1C работать не умеет.

Не проблема, берем в руки напильник!

 

Первой мыслью было использовать внешнюю компоненту от товарища Душелова.

Сказано — сделано.

 

Грабли №1:

При работе на сервере в виде регламентного задания сервер вешается намертво (ни одна база не отвечает до перезагрузки)

Грабли №2:

При попытке отправить сообщения со стороны клиента первые 2-4 сообщения уходят, затем сессия вешается, как и в случае сервера, но хотя бы можно убить сессию.

Внешнюю компоненту, выдернутую из демобазы СЭД Аналитикс постигла та же участь.

 

В причинах разбираться, не было ни времени, ни желания.

Или в компонентах проблема, или в сервере, или на сервере jabbera.

 

Поиски в интернете натолкнули на мысль о php.

 

Итак, рецепт.

 

Берем библиотеки http://webi.ru/webi_files/xmpp_webi.html

 

В файле config.ini.php прописываем настройки сервера, аккаунт для отправки и пр.

 

Кладем файлы config.ini.php, xml.class.php, xmpp.class.php в отдельную папку на сервере, на котором крутится 1С.

Например «\\server\e$\AddIn\jabber\»

На сервере устанавливаем php (если не установлен), настраиваем ассоциации для открытия php файлов.

 

Теперь возьмемся за конфигуратор.

 

Создаем общий модуль с настройками сервер и вызов сервера.

 

Напишем в нем функцию.

&НаСервере
Процедура ОтправитьСообщениеСервером(ТЗ, ИмяФайла) Экспорт
    ТекТекст = Новый ТекстовыйДокумент;      
    ТекСтрока  = "; ТекТекст.ДобавитьСтроку(ТекСтрока);
    ТекСтрока  = "include_once("+Символ(34)+"xmpp.class.php"+Символ(34)+");"; ТекТекст.ДобавитьСтроку(ТекСтрока);
    ТекСтрока  = "$webi = new XMPP($webi_conf);"; ТекТекст.ДобавитьСтроку(ТекСтрока);
    ТекСтрока  = "$webi->connect();"; ТекТекст.ДобавитьСтроку(ТекСтрока);

    Для Каждого ТЗСтрока из ТЗ Цикл
        АдресатJabber = СокрЛП(ТЗСтрока.АдресатJabber);
        СообщениеJabber = СокрЛП(ТЗСтрока.СообщениеJabber);
        ТекСтрока = "$webi->sendMessage("+Символ(34)+АдресатJabber+Символ(34)+", "+Символ(34)+СообщениеJabber+Символ(34)+");";
        ТекТекст.ДобавитьСтроку(ТекСтрока);
    КонецЦикла;
 
    ТекСтрока  = "?>"; ТекТекст.ДобавитьСтроку(ТекСтрока);
    Попытка
        ТекТекст.Записать("\\server\e$\AddIn\jabber\"+ИмяФайла+".php","UTF-8");
        sender= "\\server\e$\AddIn\jabber\"+ИмяФайла+".php";
        ЗапуститьПриложение(sender);
    Исключение
        ЗаписьЖурналаРегистрации("Отправка в Jabber", УровеньЖурналаРегистрации.Ошибка, , "", "Отправка в jabber завершилась неудачей.");
    КонецПопытки;         
КонецПроцедуры

ТЗ это таблица значений с адресами в виде аккаунт@сервер и сообщениями.

ИмяФайла это имя файла который будет запущен php интерпретатором.

Вот и всё, регламентным заданием на сервере можно формировать таблицу с адресами и сообщениями и отправлять в jabber.

Решение может и не самое изящное, зато простое и работает.

has been added to your cart:
Оформление заказа