Есть у меня такая недобрая система, но с таким добрым названием АИСТ - Автоматизированная информационная система табелирования. Одной из функций которой является, согласования времени отсутствия на рабочем месте с руководителем. Изначально руководителю приходило письмо в формате HTML с краткой информацией и ссылкой на задачу, но т.к. ссылка открывается из почты в браузере, а браузер с 1С бывает жутко тормозит, особенно если в нем уже открыто 100500 страничек, нужно было как то это порешать, так и возникла идея не открывать 1С.
Кратко опишу реализацию:
- В письмо были добавлены ссылки - типа кнопки.
Процедура ДобавитьКнопкиСогласования(ТекстСообщения, Источник) Экспорт
СсылкаСКУД = СформироватьСсылкаСКУД("HTTP");
ИДЗадачи = XMLСтрока(Источник);
ПараметрыЗапроса = "?method=AcceptTask&ID=" +ИДЗадачи;
СсылкаСогласовать = СсылкаСКУД + ПараметрыЗапроса + "&Accept=true";
СсылкаОтклонить = СсылкаСКУД + ПараметрыЗапроса + "&Accept=false";
ТекстСообщения = ТекстСообщения +"
|<p>
|<a href=""" + СсылкаСогласовать + """ style=""width:150px;white-space:normal;word-break:break-all;background:#4da211;text-shadow: 0 -1px 0 #4da211;border-color:#4da211;margin-bottom:5px;margin-right:5px;font-size:14px;font-family:Arial,Helvetica,sans-serif;line-height:20px;color:#ffffff;-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;border: 8px solid #4da211;text-decoration:none;box-sizing:border-box;cursor:pointer;display:inline-block;font-weight:bold;text-align:center;"">СОГЛАСОВАТЬ</a>
|<a href=""" + СсылкаОтклонить + """ style=""width:150px;white-space:normal;word-break:break-all;background:#fd5e53;text-shadow: 0 -1px 0 #fd5e53;border-color:#fd5e53;margin-bottom:5px;margin-right:5px;font-size:14px;font-family:Arial,Helvetica,sans-serif;line-height:20px;color:#ffffff;-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;border: 8px solid #fd5e53;text-decoration:none;box-sizing:border-box;cursor:pointer;display:inline-block;font-weight:bold;text-align:center;"">ОТКЛОНИТЬ</a>
|</p>
|";
КонецПроцедуры
- За основу HTTP-сервиса взял Шаблон http-сервиса для вашего проекта. Добавил в HTTP-сервис метод GET. Обработчик метода пришлось переделать, постарался сохранить универсальность, чтобы можно было передавать произвольные параметры.
Функция ОбработатьЗапросGet(Запрос) ОбработкиМенеджер = Обработки.Обработчик_HTTP_Запросов; СтруктураЗапроса = Новый Структура; //Для Каждого ТекПараметр Из Запрос.ПараметрыURL Цикл //КонецЦикла; Для Каждого ТекПараметр Из Запрос.ПараметрыЗапроса Цикл Если ТекПараметр.Ключ = "method" Тогда СтруктураЗапроса.Вставить(ТекПараметр.Ключ,ТекПараметр.Значение); КонецЕсли; КонецЦикла; СтруктураЗапроса.Вставить("params",Запрос.ПараметрыЗапроса); ТелоЗапросаСтрокой = HTTPServ_ОбщийМодуль.ПолучитьЗапросJSON(СтруктураЗапроса); РезультатОбработки = ОбработкиМенеджер.ОбработатьЗапрос(ТелоЗапросаСтрокой); Заголовки = РезультатОбработки.Заголовки; ТекстОтвета = РезультатОбработки.ТекстОтвета; Статус = РезультатОбработки.Статус; Ответ = Новый HTTPСервисОтвет(Статус,, Заголовки); Если ТипЗнч(ТекстОтвета) = Тип("Строка") Тогда Ответ.УстановитьТелоИзСтроки(ТекстОтвета); ИначеЕсли ТипЗнч(ТекстОтвета) = Тип("ДвоичныеДанные") Тогда Ответ.УстановитьТелоИзДвоичныхДанных(ТекстОтвета); КонецЕсли; Возврат Ответ; КонецФункции
Пример запроса https://iis.mydomen.int/hrm_copy_hs/hs/cit/?method=AcceptTask;ID=b4232fed-cf1f-11e9-bb46-0cc47a283ff1;Accept=false
Параметры идут после ? и должны соответствовать формату method=[ИмяМетода];[ИмяПараметра1]=[Значение1];[ИмяПараметраN]=[ЗначениеN]
method=[ИмяМетода] - ОБЯЗАТЕЛЬНЫЙ ПАРАМЕТР
- Обработчик сервиса, обрабатывает параметры, находит задачу, выполняет и возвращает результат. За вызов функции и передачу параметров отвечает Шаблон http-сервиса для вашего проекта.
Функция AcceptTask(Параметры)
ОбязательныеПараметры = Новый Массив;
ОбязательныеПараметры.Добавить("ID");
ОбязательныеПараметры.Добавить("Accept");
ПроверитьПараметры(Параметры, ОбязательныеПараметры);
МассивЗадач = Новый Массив;
Если ТипЗнч(Параметры.ID) = Тип("Массив") Тогда
Для Каждого ИДЗадача Из Параметры.ID Цикл
Задача = Задачи.ЗадачаИсполнителя.ПолучитьСсылку(Новый УникальныйИдентификатор(ИДЗадача));
МассивЗадач.Добавить(Задача);
КонецЦикла;
ИначеЕсли ТипЗнч(Параметры.ID) = Тип("Строка") Тогда
Задача = Задачи.ЗадачаИсполнителя.ПолучитьСсылку(Новый УникальныйИдентификатор(Параметры.ID));
МассивЗадач.Добавить(Задача);
КонецЕсли;
СтрЗадачи = "";
Абзац = "";
Для Каждого Задача Из МассивЗадач Цикл
ЗадачаОбъект = Задача.ПолучитьОбъект();
Если ЗадачаОбъект = Неопределено Тогда
ТекстИсключения = "Задач согласования не найдена.";
ВызватьИсключение ТекстИсключения;
КонецЕсли;
ЗадачаОбъект.Выполнена = ИСТИНА;
ЗадачаОбъект.Решение = ?(Параметры.Accept = "true",ИСТИНА, ЛОЖЬ);
ЗадачаОбъект.Записать();
СтрЗадачи = СтрЗадачи + Абзац + Задача;
Абзац = "<p>";
КонецЦикла;
ТекстРезультат = "";
РешениеHTML = ?(Параметры.Accept = "true",
"<font color=""#008000"" size=""5""><strong><u></u>СОГЛАСОВАНО</strong></font>",
"<font color=""#ff0000"" size=""5""><strong><u></u>ОТКЛОНЕНО</strong></font>");
ТекстРезультат = "
|<html><head>
|<meta charset=""utf-8"">
|<title>АИСТ</title>
|<style>
| .okno {
| width: 400px;
| height: 90px;
| text-align: center;
| padding: 15px;
| border: 3px solid #0000cc;
| border-radius: 10px;
| color: #0000cc;
| }
| </style>
| </head>
| <body>
| <table>
| <tbody>
| <tr>
| <td><p align=""center""><font color=""#676767"">Автоматизированная Информационная Система Табелирования</font></p></td>
| </tr>
| <tr>
| <td><div class=""okno""><p align=""center"">" +СтрЗадачи+ "</p></div></td>
| </tr>
| <tr>
| <td><p align=""center""><font color=""#ff0000"" size=""5""><strong><u></u>" +РешениеHTML+ "</strong></font></p></td>
| </tr>
| </tbody>
| </table>
| </body></html>";
Возврат ТекстРезультат;
КонецФункции
Немного про публикацию на Вэб-сервере. У меня база была опубликована на сервере, и сначала я просто добавил в публикацию вэб-сервисы расширения (сервис у меня в рвсширении). Но тут начались проблемы, связанные с авторизацией, сервис не работает для пользователей с отключенной доменной авторизацией и пользователи у которых браузер по умолчанию Mozilla. Копать в этом направлении не стал, а создал вторую публикацию для HTTP-сервиса и настроил авторизацию в настройках сайта на Вэб-сервере. Это отдельная тема, в моем случае это IIS и я подправил файл default.vrd, в строку добавил текст
ib="Srvr="db4";Ref="skud";Usr="AcceptTask";Pwd="AcceptTask";"
Разработано на версии платформы 1С:Предприятие 8.3 (8.3.13.1809) на других почтовых программах не тестировалось, но повторюсь, я не вносил никаких изменений в Outlook, более того наделен правами обычного пользователя.
В загрузках практически Шаблон http-сервиса для вашего проекта в виде расширения конфигурации. обработка сервиса в составе расширения, добавлена обработка GET - запросов