Модифицирован для управления посредством создания управляющих файлов, то есть 1С в серверном режиме может полноценно взаимодействовать с клиентом без подключения внешних компонент.
Плюс добавлен пример простой конфигурации "Служба заявок", взаимодействие с которой осуществляется через jabber-чат.
Итак, задача:
Запустить на сервере 1С jabber-бота для корпоративного чата, управлять которым будет база 1С в серверном режиме.
Перерыв опубликованные решения, выяснил что получить стабильную работу на внешних компонентах в серверном режиме толком никому не удалось, кроме одного решения, которое, правда, может только отправлять сообщения (//infostart.ru/public/121078/), основанное на php-классе, работающем с протоколом XMPP (http://webi.ru/webi_files/xmpp_webi.html).
Было принято решение допилить класс, правда php я вижу в первый раз, но оказалось что это не особо то и сложно.
Что получилось в итоге: добавлена возможность отправлять сообщения из xml-файла, сохранять полученные сообщения, кроме id пользователя также получать с сервера его ник, посылать на сервер время от времени keep-alive пакеты, чтобы не вываливаться в оффлайн, сохранять в файл уведомления о появлении пользователей в онлайне, сохранять в файл ростер пользователей и далее по мелочи еще всякое.
Плюс была написана простенькая конфигурация, реализующая службу заявок в самом примитивном варианте.
Об установке:
клиент представляет из себя 4 файла:
config.ini.php — файл настроек: подключение к серверу, настройки логирования, статус и прочее
index.php — файл запуска клиента: осуществляет подключение, «прослушивание» сервера и чтение управляющих файлов.
xml.class.php — класс для разбора xml (jabber ими общается) — этот файл не модифицировался.
xmpp.class.php — класс для работы с протоколом XMPP, собственно обеспечивает всю работу клиента.
Для работы всего этого дела нужна PHP-машина — скачать ее можно тут: http://windows.php.net/download/#php-5.3
или во вложенных файлах (установка не требуется).
Запускаем так: либо связываем расширение php с php.exe и запускаем index.php, либо запускаем php.exe -f %путь к index.php%
После этого в чате должен появиться пользователь, в соответствии с настройками в config.ini.php
Разворачивание клиента на сервере:
(если планируется использование конфигурации, то лучше начать с нее — по тексту ниже):
Ставим/размещаем php-машину.
На сервере Windows 2008 делаем задачу в планировщике задач, в более ранних версиях пытаемся сделать службу — описано тут: http://araxgroup.ru/content/view/114/65/
У меня более ранней нет, так что я я сделал скрины с параметрами задания (системный администратор я так себе, так что возможно галочки я понатыкал не совсем верно, но месяц тестирования проблем не выявил)
После запуска задания пользователь сервера должен залогиниться в чат.
Развертывание конфигурации «Служба заявок»:
Конфигурация представляет собой электронный журнал заявок (в примере журнал отдела ИТ). Заявки принимаются через корпоративный чат через бота, представляющего отдел. При получении заявки через чат создается документ-заявка на исполнителей отдела (которые прописаны в табличной части подразделения) и рассылается им уведомление. Как пользователь так и исполнители могут управлять заявками , смотреть свои задачи и т.д. путем ввода команд боту. Список доступных команд можно получить отправив боту команду «!Помощь».
Про прописывание на сервере базы писать не буду, это к ЖКК.
После установки и запуска базы должно заработать регламентное задание, которое каждые 10 секунд должно мониторить папку с клиентом. За путь к папке клиента отвечает константа «Каталог клиента».
Конфигурация писалась для поддержки нескольких подразделений (и нескольких клиентов), но пока работает только с одним (для нескольких надо ее допилить/оттестировать), поэтому в папке клиента будет еще папка с названием пользователя подразделения, где и будут лежать файлы клиента пользователя этого подразделения.
Размещать, лазить в файлы php и править их необязательно — всё можно сделать из формы справочника «Настройки клиента подразделения»: файлы клиента есть в макете в конфигурации, файл настроек сгенерируется автоматически по нажатию кнопки.
Ставим/размещаем php-машину. После этого создаем задачу в планировщике/службу и запускаем ее.
Если всё правильно сделано, то теперь jabber-клиент связан с 1С, и должен присутствовать онлайн в чате. Можно ему отправить слово «!Помощь», чтобы проверить что он работает.
Также в конфигурации есть служебная обработка по управлению jabber-клиентом — с помощью ее можно запустить/остановить клиент, отправить/получить вручную сообщения, получить и загрузить в базу список всех пользователей сервера (ростер).
Итого:
Всё это дело тестировалось на связке Windows Server 2008 R2 + Openfire 3.6.4 (w/ntlm patch) + Pandion/QIP. Работает стабильно, в оффлайн не вываливается, при перезагрузке сервера автоматически поднимается.
Вероятно под другие сервера/клиенты придется класс работы с XMPP допилить напильником, потому как сам столкнулся например с тем что клиент QIP общается с сервером немного по другому чем Pandion, отчего некоторые методы не работали.
Всё опубликованное не претендует на роль конечного продукта и кто пожелает может допиливать клиент/ конфигурацию под свои нужды.
Upd (26.02.13): исправил ошибку с определением онлайн-статуса пользователей.
Upd (16.05.13): исправил найденные ошибки в клиенте и конфигурации, добавил чат-боту аватар
В описании клиента идет речь о четырех файлах, а в архиве только 3. Нет файла config.ini.php
да, ошибка. сейчас исправлю. спасибо!
Подскажите, если я на линуксовом сервере работаю, а клиенты — компьютеры с windows
Будет ли работать такая цепочка?
(3) Про Линукс я только знаю что есть такая ОС 🙂
Но в целом — Если 1С-сервер работает под линуксом и у него крутится служба, обслуживающая регламентные задания, то препятствий не вижу — никаких методов в 1С, относящихся только к Windows, не требуется, только чтение/запись xml-файлов. Openfire сервер это кроссплатформенное приложение, PHP тоже. Причём все эти компоненты могут крутиться на разных машинах.
На какой платформе клиенты — вообще по идее всё равно, но я тестировал только с Пандионом и QIP-ом, и они показали местами разное поведение, какие-то другие клиенты вреоятно могут работать так, что некоторые методы класса xmpp.class.php придется допилить для того чтобы они заработали с этим клиентом.
(4) Smallrat, хороший ответ, спасибо!
интересное решение..надо попробывать