Уведомление на почту из 1С

в 13:24, , рубрики: , ит-инфраструктура, Песочница, почта, уведомления, метки: , ,
Зачем?

Решил написать эту статью, так как сам в своё время не нашёл информации по этому вопросу.
Пришлось самому искать решение. На всякий случай публикую его на Хабре – вдруг кому пригодится.

Я работаю программистом 1С на крупном производстве. В силу его особенностей работодатели часто ставят задачи организации бизнес-процессов с различными системами согласований.
И зачастую одним из ключевых требований в подобных техзаданиях является возможность оповещения человека о создании какого-то действия в системе или просто о том, что от него требуется какая-то резолюция. Таких случаев бывает достаточно много: согласование нового приказа, новой номенклатуры, бывает, служба безопасности хочет знать, каких пользователей и с какими правами добавили в систему, или организуется какая-то своя система ITIL, и начальник хочет уведомлять своих рабочих о новых заданиях. И так далее.

Чаще всего приходится оповещать начальников. Но они зачастую не сидят на одном месте, сильно не хотят всегда держать открытой 1С и просят оповещать их другими способами.

И одним из самых простых решений таких задач, как мне видится, является создание почтовых уведомлений, то есть пересылка оповещений на почтовый ящик адресата, ведь почтовыми сервисами пользуются все, плюс к тому, почти всегда у пользователя есть программы-сборщики, которые уведомляют его о новом письме. Тем более что послать сообщение на почту – это достаточно лёгкая задача для 1С.

ПочтовоеСообщение = Новый ИнтернетПочтовоеСообщение;
ПочтовыйПрофиль = Новый ИнтернетПочтовыйПрофиль;
ПочтовыйПрофиль.АдресСервераSMTP = "dmz-server17"; //указываете адрес вашего SMTPсервера
ПочтовыйПрофиль.ПортSMTP = 25; //и его порт
Почта = Новый ИнтернетПочта();
Попытка
     Почта.Подключиться(ПочтовыйПрофиль);
Исключение
     Сообщить("Ошибка подключения к почтовому серверу, сообщение не будет отослано!", СтатусСообщения.ОченьВажное);
     Возврат;
КонецПопытки;
ПочтовоеСообщение.Тема = «Тема»;
ПочтовоеСообщение.Тексты.Добавить(«Текст»);
ПочтовоеСообщение.Получатели.Добавить(«Адрес»);//Адресатов может быть несколько. Каждый указывает отдельной строчкой или в цикле
ПочтовоеСообщение.ИмяОтправителя = «Отправитель»;
Почта.Послать(ПочтовоеСообщение);

Данный код можно поместить как перед записью документа, так и в «обработчик» кнопки.

Управляемые формы и веб-клиент

Всё это вроде хорошо работает, и нужным людям приходят «письма счастья», но и тут есть одна загвоздка. Если это не только уведомительные письма, но и подразумевается какое-то ответное действие (или нужно отразить больше подробностей), пользователь всё равно должен зайти в программу 1С, открыть список документов нужного типа и найти нужный документ. Конечно, мы облегчим ему работу и в письме можем указать дату и номер письма, но всё равно это сводится к запуску пользователем 1С, а мы ведь пытаемся этого избежать!

Тут-то нам приходит на помощь 1С платформы 8.2 с их управляемыми формами и веб-клиентом. Не вдаваясь в подробности, суть процесса в следующем: поднимается веб-сервер, туда публикуется ваша конфигурация — и вот работать в 1С можно через практически любой браузер.
И если раньше документ идентифицировался двумя параметрами: «Дата» и «Номер» — то теперь для нас ещё стала доступна так называемая «навигационная ссылка». Её прелесть в том, что после перехода пользователя по ней 1С сразу открывает документ, на который она ссылается, и освобождает пользователя от его поиска.

Правда, и здесь есть одно НО: навигационные ссылки работают ТОЛЬКО с управляемыми формами. Да, переписывать основной функционал типовых конфигураций (где это не сделали сами специалисты 1С) на управляемые формы достаточно долго, однако, если речь идёт о каких-то «внутреорганизационных» модулях согласования и оповещения, то особого труда это не составит.

Отсюда вытекает следующее решение: необходимо в уведомительное письмо включать эту ссылку, чтобы пользователь мог сразу, нажав на ссылку, перейти в нужный документ (на веб-клиенте) и сделать необходимые вещи. Решается это всего лишь в пару строк:

…
НавСсылка = "http://адрес_где_опубликовали/#"+ ПолучитьНавигационнуюСсылку(Источник.Ссылка);
НавСсылка = СтрЗаменить(НавСсылка,"""","%22");
ПочтовоеСообщение.Тексты.Добавить("<a href =" + """" + НавСсылка + """" + "> Документ № "+Строка(Источник.Номер) + " от " + Строка(Источник.Дата) + "</a>" ,ТипТекстаПочтовогоСообщения.HTML);
…

В коде в процедуру передаётся параметр «Источник», который является «Объектом» (ссылкой), который, в свою очередь, вызвал эту процедуру.

Работая с навигационными ссылками, следует учитывать один нюанс. Эта ссылка создаётся и присваивается объекту, только в момент записи его в базу данных. То есть, если это новый документ, то до записи он НЕ имеет этой навигационной ссылки. Этот нюанс следует всегда помнить, и есть два решения данной проблемы: либо самим устанавливать документу ссылку, либо, что мне больше нравится, отправлять письма в обработчике «ПослеЗаписиНаСервере».

1С 8.3.2

Совсем недавно фирма 1С анонсировала выход версии платформы 8.3.2, где одной из «фич» является возможность «компилировать» конфигурации в приложения для установки под систему Android и iOS. Мне кажется, эта возможность достаточно интересна, правда пока она ещё «сырая». Но если всё пойдёт хорошо, в ближайшем будущем станет возможным посылать подобные уведомления не то что на почту, а прямо на телефон начальникам — чтобы они могли согласовывать различные процессы, где бы не находились, без отвлечения от своих важных дел.

Автор: vdovin_ds

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js