1C + jabber + python

09.10.14

Разработка - Инструментарий разработчика

Отправка сообщений в jabber из 1С [Документооборота] при помощи python-скрипта.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
send_message.py
.py 1,69Kb
15
15 Скачать (1 SM) Купить за 1 850 руб.

Как уже было написано тут, 1С не умееет [пока?] работать с xmpp, внешние компоненты не приносят желаемого результата (и обычно доступны только для Windows).

У нас тоже сложилось так, что внутри используется jabber и не используется email (т.к. организация небольшая).

Собственно, поискав на инфостарте, ничего дельного кроме той статьи с работой ч\з php найти не получилось. Но душа больше лежит к питону, и к php нет особой приязни. Также, покопавшись в кишочках 1С:Документооборота, оказалось, что довольно легко внедрить отправку jabber-сообщений в имеющуюся систему уведомлений по email (с полной заменой отправки по email отправкой по xmpp). И не пришлось писать свой костыль для проверки новых задач и прочего, о чем хотелось бы получать уведомления.

Для начала нам потребуется собственно python 2й версии и библиотека pyxmpp.

В Linux установка делается в два счета:

# apt-get install python2.7 python-pyxmpp

В Windows все сложнее.

  1. Берем отсюда и устанавливаем питон (версия 2.7). В зависимости от выбранной разрядности (32 или 64-bit) берите далее подходящие пакеты. Добавляем каталог с установленным питоном в переменную окружения PATH (Панель управления - Система - Дополнительные параметры системы - Переменные среды - Системные переменные, ищем в списке Path и в конце её значений дописываем (в моем случае) ";D:\Python 2.7\").
  2. Ставим пакет dnspython. Брать здесь последний релиз для 2.х (Python 2.x Stable, берем zip-архив). Содержимое архива извлекаем в "[PythonDir]\Lib\site-packages\", заходим в появившуюся папку "dnspython-[version]", открываем окно консоли (кто не умеет - зажимаем Shift, щелкаем ПКМ, выбираем "Открыть окно команд"), выполняем команду setup.py install.
  3. Следующий пакет - M2Crypto. Брать здесь M2Crypto-[latest].win[32/amd64]-py2.7. Сейчас можно найти тут только для win32 (или посильнее погуглить). Запускаем исталлятор и кликаем по кнопкам "Далее".
  4. Следующий - libxml2. Брать здесь libxml2-python-[latest].win[32/amd64]-py2.7. Также запускаем и кликаем "Далее".
  5. И наконец сам pyxmpp. Брать здесь последний архив pyxmpp-[latest].tar.gz. С содержимым поступаем аналогично пункту 2, только выполняем последовательно следующие команды: configure.pysetup.py buildsetup.py install.

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

Нас будет интересовать Общий модуль РаботаСУведомлениями. Я создал новый общий модуль с такими же настройками (Сервер, Внешнее соединение, Вызов сервера, Повторное использование - не использовать) и назвал его РаботаСУведомлениямиХМПП. Скопировал в свой модуль несколько процедур и функций из оригинала, потребовавшиеся в процессе работы (СобытиеЖурналаРегистрации, ДобавитьЗначениеВМассив, ОбработатьОшибкуОтправкиУведомления, УдалитьУведомлениеИзОчередиУведомлений), и добавил свои:

Функция ФайлУведомлений()
	Возврат "\\db1c\AddIn\jabber\send_message.txt";
КонецФункции

Функция ОтправитьУведомления()
	ВозниклаОшибкаПриОтправке = Ложь;

	КодВозврата=Неопределено;
	путь="\\db1c\AddIn\jabber\";
	ЗапуститьПриложение("python "+путь+"send_message.py",путь,Истина,КодВозврата);
	
	Если КодВозврата=0 Тогда
		ЗаписьЖурналаРегистрации(
			СобытиеЖурналаРегистрации(),
			УровеньЖурналаРегистрации.Информация,,,
			НСтр("ru = 'Уведомления успешно отправлены.'"));
	Иначе
		ЗаписьЖурналаРегистрации(
			СобытиеЖурналаРегистрации(),
			УровеньЖурналаРегистрации.Предупреждение,,,
			СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
				НСтр("ru = 'Ошибка при отправке уведомления о новых событиях. Код возврата: %1.'"),
				КодВозврата));
		ВозниклаОшибкаПриОтправке = Истина;
	КонецЕсли;
	
	Возврат ВозниклаОшибкаПриОтправке;
КонецФункции

Процедура ПодготовитьФайлУведомлений(СформированныеУведомления)
	ПодготовленныеУведомления=Новый ТекстовыйДокумент;
	
	Для Каждого СформированноеУведомление Из СформированныеУведомления Цикл
		ПочтовыйАдресПолучателя = "";
		ВозниклаОшибкаПриОтправке = Ложь;
		АдресаЭлектроннойПочты = РаботаСУведомлениями.ПолучитьДанныеСпособаУведомления(
			Перечисления.СпособыУведомления.ПоПочте,
			СформированноеУведомление.Пользователь,
			Истина);
		
		Если АдресаЭлектроннойПочты.Количество() = 0 Тогда
			ЗаписьЖурналаРегистрации(
				СобытиеЖурналаРегистрации(),
				УровеньЖурналаРегистрации.Информация,,,
				СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
					НСтр("ru = 'Уведомление не отправлено, так как не указан почтовый адрес у пользователя %1.'"),
					Строка(СформированноеУведомление.Пользователь)));
			ОбработатьОшибкуОтправкиУведомления(СформированноеУведомление);
			Продолжить;
		КонецЕсли;
		
		Для Каждого ПочтовыйАдресПолучателя Из АдресаЭлектроннойПочты Цикл
			ПодготовленныеУведомления.ДобавитьСтроку("[BEGIN]");
			ПодготовленныеУведомления.ДобавитьСтроку(ПочтовыйАдресПолучателя);
			ПодготовленныеУведомления.ДобавитьСтроку(СформированноеУведомление.ТекстУведомления);
			ПодготовленныеУведомления.ДобавитьСтроку("[END]");
		КонецЦикла;
	КонецЦикла;
	
	ПодготовленныеУведомления.Записать(ФайлУведомлений(),"UTF-8");
КонецПроцедуры

Функция ОтправитьУведомленияПоХМПП(СформированныеУведомления) Экспорт
	ПодготовитьФайлУведомлений(СформированныеУведомления);
	
	ВозниклаОшибкаПриОтправке=ОтправитьУведомления();
	
	Если ВозниклаОшибкаПриОтправке Тогда
		Для Каждого СформированноеУведомление Из СформированныеУведомления Цикл
			ОбработатьОшибкуОтправкиУведомления(СформированноеУведомление);
		КонецЦикла;
	Иначе
		Для Каждого СформированноеУведомление Из СформированныеУведомления Цикл
			Для Каждого Уведомление Из СформированноеУведомление.Уведомления Цикл
				УдалитьУведомлениеИзОчередиУведомлений(Уведомление);
			КонецЦикла;
		КонецЦикла;
	КонецЕсли;
КонецФункции

И небольшое изменение в самом модуле РаботаСУведомлениями:

Функция ОтправитьУведомления()
	
....

		КонецЦикла;
			
		//Для Каждого СформированноеУведомление Из СформированныеУведомления Цикл
		//	ОтправитьУведомление(СформированноеУведомление);
		//КонецЦикла;
		
	КонецЦикла;
	
	РаботаСУведомлениямиХМПП.ОтправитьУведомленияПоХМПП(СформированныеУведомления);
	
КонецФункции

На сервере расшарена папка AddIn, к которой дан доступ только пользователю, от которого запущен сервер 1С. В этой папке лежит питоновский скрипт, который и осуществляет рассылку сообщений. Предварительно в 1С генерируется файл с этими сообщениями (один файл на всю текущую кучу уведомлений). Файл состоит из нескольких таких блоков, по одному на каждое уведомление:

[BEGIN]
адрес@получателя.сообщения
несколько
строчек
самого
сообщения
[END]

В самом скрипте задаются необходимые настройки для подключения и авторизации бота (естественно этот бот должен быть в контакт-листе пользователей):

SERVER = '10.10.0.200' # явно указанный ip-адрес jabber-сервера, если есть проблема с резолвингом имени. если все ок, можно вместо адреса оставить значение None
#SERVER = None
PORT = None # 5222 по умолчанию, если порт другой - указать его здесь явно
FROM_JID = 'bot@apk-mir.office-on-the.net/docflow' # аккаунт бота, от которого будет идти рассылка, с указанием ресурса (можно написать любое)
PASSWORD = 'randompassword' # и пароль от этого аккаунта

Возможно потребуется изменить настройки шифрования при подключении к jabber-серверу. У нас шифрование включено, поэтому в процедуре xmpp_do прописано:

c=Client(jid,password,server=server,port=port,auth_methods=['sasl:PLAIN'],tls_settings=streamtls.TLSSettings(require=True, verify_peer=False))

Если шифрование не используется, можно совсем убрать параметр tls_settings и в auth_methods убрать sasl: (тут я не уверен, надо проверять).

1Ска формирует файл сообщений в кодировке UTF-8 with BOM, можете предварительно создать тестовый файл, проверить работу скрипта.

Адреса (jid) пользователей в Документообороте вписаны в поле E-mail.

 

Вроде все описано. Пишите в комментарии, если что забыл, добавлю.

jabber xmpp python документооборот

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

12000 руб.

02.09.2020    172052    964    403    

924

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Программист Руководитель проекта Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку сразу нескольких баз данных и выполнять их автоматически без непосредственного участия пользователя. Решение в Реестре отечественного ПО

8400 руб.

20.08.2024    14534    109    46    

108

Инструментарий разработчика Программист Платформа 1С v8.3 1C:Бухгалтерия Платные (руб)

Инструмент для написания и отладки кода в режиме «1С:Предприятие». Представляет собой консоль кода с возможностью пошаговой отладки, просмотра значений переменных любых типов, использования процедур и функций, просмотра стека вызовов, вычисления произвольных выражений на встроенном языке в контексте точки останова, синтаксического контроля и остановки по ошибке. В консоли используется удобный редактор кода с подсветкой, контекстной подсказкой, возможностью вызова конструкторов запроса и форматной строки.

9360 руб.

17.05.2024    27362    96    48    

138

Инструменты администратора БД Инструментарий разработчика Роли и права Программист Платформа 1С v8.3 1C:Бухгалтерия Россия Платные (руб)

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

15000 руб.

10.11.2023    11954    45    33    

67

SALE! %

Инструментарий разработчика Инструменты администратора БД Системный администратор Программист Платформа 1С v8.3 Управляемые формы 1C:Бухгалтерия Россия Платные (руб)

Универсальный инструмент программиста для администрирования конфигураций. Сборник наиболее часто используемых обработок под единым интерфейсом.

4800 3840 руб.

14.01.2013    191339    1153    0    

920

Инструментарий разработчика Программист 8.3.14 Россия Платные (руб)

Расширение для конфигурации “Конвертация данных 3”. Добавляет подсветку синтаксиса, детальную контекстную подсказку, глобальный поиск по коду.

20000 руб.

07.10.2021    18112    7    32    

42

Инструментарий разработчика Платформа 1С v8.3 1C:Бухгалтерия 1С:ERP Управление предприятием 2 Платные (руб)

Разработка Конструктор автоматизированных рабочих мест "Конструктор АРМ" реализована в виде расширения и является универсальным инструментом для создания АРМ любой сложности в пользовательском режиме.

3600 руб.

27.12.2024    1152    2    0    

5

Инструментарий разработчика Программист Платформа 1С v8.3 1C:Бухгалтерия Россия Платные (руб)

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    104134    244    100    

307
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Mogidin 131 06.03.14 18:47 Сейчас в теме
авторизация и отправка сообщений проходят практически моментально, без таких больших задержек, как в случае с php.
обработка ошибок при отправке практически никакая. если возникла какая то ошибка при отправке одного сообщения из списка - неотправленными считается весь список. хотя и ошибке тут возникнуть вроде бы и негде. только если сеть упала, или jabber не работает.
Оставьте свое сообщение