1C + jabber + python

09.10.14

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

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

Файлы

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

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

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Как уже было написано тут, 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С.

15500 руб.

02.09.2020    195782    1085    409    

1006

SALE! 15%

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

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

8400 7140 руб.

20.08.2024    32234    195    104    

187

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

Инструмент, позволяющий абсолютно по-новому взглянуть на процесс разработки печатных форм. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и "прозрачность" разработки, а также навести порядок в многообразии корпоративных печатных форм.

22200 руб.

06.10.2023    22721    62    19    

90

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

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

15000 руб.

10.11.2023    15482    65    33    

83

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

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

9360 руб.

17.05.2024    32890    112    48    

155

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

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

20000 руб.

07.10.2021    20104    8    32    

44

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

Инструмент для генерации OpenApi (Swagger) спецификаций на основании файлов конфигураций 1С. Это консольное и десктопное приложение на языке Rust с полноценным редактором кода, содержащим автозамену и подсвечивание ошибок для быстрого и безошибочного написания документирующего комментария.

18000 руб.

22.11.2024    1341    1    0    

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