Согласование задач из Outlook

06.09.19

Интеграция - Внешние источники данных

Согласование задач непосредственно из почтовой программы, в моем случае Outlook 2013 без каких-либо дополнительных настроек. Из почты отправляется GET запрос к HTTP-сервису 1С, который в свою очередь выполняет задачу.

Файлы

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

Наименование Скачано Купить файл
Согласование задач в Outlook
.cfe 19,47Kb
20 2 500 руб. Купить

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

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

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

Есть у меня такая недобрая система, но с таким добрым названием АИСТ - Автоматизированная информационная система табелирования. Одной из функций которой является, согласования времени отсутствия на рабочем месте с руководителем. Изначально руководителю приходило письмо в формате HTML с краткой информацией и ссылкой на задачу, но т.к. ссылка открывается из почты в браузере, а браузер с 1С бывает жутко тормозит, особенно если в нем уже открыто 100500 страничек, нужно было как то это порешать, так и возникла идея не открывать 1С.

Кратко опишу реализацию:

  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>
	|";

КонецПроцедуры	
  1. За основу 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=[ИмяМетода] - ОБЯЗАТЕЛЬНЫЙ ПАРАМЕТР

  1. Обработчик сервиса, обрабатывает параметры, находит задачу, выполняет и возвращает результат. За вызов функции и передачу параметров отвечает Шаблон 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=&quot;db4&quot;;Ref=&quot;skud&quot;;Usr=&quot;AcceptTask&quot;;Pwd=&quot;AcceptTask&quot;;"

Разработано на версии платформы 1С:Предприятие 8.3 (8.3.13.1809) на других почтовых программах не тестировалось, но повторюсь, я не вносил никаких изменений в Outlook, более того наделен правами обычного пользователя.  

В загрузках практически Шаблон http-сервиса для вашего проекта в виде расширения конфигурации. обработка сервиса в составе расширения, добавлена обработка GET - запросов

Вступайте в нашу телеграмм-группу Инфостарт

См. также

Внешние источники данных Программист Бизнес-аналитик Пользователь 1С:Предприятие 8 1C:Бухгалтерия Узбекистан Беларусь Кыргызстан Молдова Россия Казахстан Платные (руб)

Готовое решение для автоматической выгрузки данных из 1С 8.3 в базу данных ClickHouse, PostgreSQL или Microsoft SQL для работы с данными 1С в BI-системах. «Экстрактор данных 1С в BI» работает со всеми типовыми и нестандартными конфигурациями 1С 8.3 и упрощает работу бизнес-аналитиков. Благодаря этому решению, специалистам не требуется быть программистами, чтобы легко получать данные из 1С в вашей BI-системе.

28500 руб.

15.11.2022    30462    42    49    

46

Зарплата Внешние источники данных Бюджетный учет Перенос данных 1C Системный администратор Программист 1С:Предприятие 8 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактическим удержаниям, НДФЛ, вычетам, страховым взносам из базы Парус 8 учреждений (далее Парус) в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (далее 1С) и начать с ней работать с любого месяца года.

122000 руб.

19.08.2020    29132    27    3    

28

Розничная торговля Внешние источники данных Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 1С:Бухгалтерия 3.0 Фармацевтика, аптеки Россия Бухгалтерский учет Платные (руб)

Внешняя обработка загрузки данных из файла-выгрузки, сформированного в программе F3 TAIL версии 3.4 (и выше) или еФарма версии 2.1, в базу конфигурации 1С: Бухгалтерия предприятия 8, ред. 3.0 (Базовая, ПРОФ, КОРП, ФРЕШ (тонкий клиент)).

17080 руб.

19.12.2016    53483    120    107    

83

Внешние источники данных Кадровый учет Файловый обмен (TXT, XML, DBF), FTP Перенос данных 1C Программист 1С:Предприятие 8 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактическим удержаниям, НДФЛ, вычетам, страховым взносам из базы Парус 10 учреждений (далее Парус) в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (далее 1С) и начать с ней работать с любого месяца года.

84000 руб.

05.10.2022    13070    14    8    

16

Внешние источники данных Программист Бизнес-аналитик 1С:Предприятие 8 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Обработка для выгрузки данных из подготовленных СКД в фоновом режиме в базу ClickHouseDB, PostgreSQL, MySQL, в шину данных с поддержкой REST API (CSV, JSON. SQL), в локальные файлы (CSV, JSON, XLS, XLSX) или в Google Sheets. Это дополнительная подключаемая обработка.

18000 руб.

21.08.2024    8275    21    4    

18

Внешние источники данных Пользователь 1С:Предприятие 8 1C:Бухгалтерия 1С:Розница 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление нашей фирмой 3.0 Платные (руб)

Быстро и легко. Выгрузка всех элементов и групп номенклатуры (с их иерархией), кроме помеченных на удаление. Без использования COM-объектов.

4880 руб.

16.08.2023    3736    7    8    

9
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. pavlov_dv 06.09.19 05:22 Сейчас в теме
Спасибо, отличная идея!
Положил в свой бэклог для реализации.
2. EliasShy 48 06.09.19 08:08 Сейчас в теме
Тоже с подобным сталкивались, пришлось отказаться, т.к. не тривиальная проверка по безопасности получается с проверкой ссылки - нужно вводить токены, лимиты времению
Silenser; +1 Ответить
3. blackhole321 1306 06.09.19 08:26 Сейчас в теме
(2)В случае использования AD и соответствующей настройки проверки подлинности все намного упрощается
4. EliasShy 48 06.09.19 10:01 Сейчас в теме
(3)
на словах это так, но на практике как "соответствующая" проверка подлинности выглядит?

Начиная с того, что апач не умеет AD пробрасывать - ограничиваемся IIS
Как решите проблему с "устаревшими" согласованиями?
5. blackhole321 1306 06.09.19 10:17 Сейчас в теме
(4)
на словах это так, но на практике как "соответствующая" проверка подлинности выглядит?

Windows-проверка подлинности в настройках IIS и информационной базы

Начиная с того, что апач не умеет AD пробрасывать - ограничиваемся IIS

Ну и в чем Вы видите проблему? Вроде как логично использовать "родные" средства.

Как решите проблему с "устаревшими" согласованиями?

Ну в запросе же передается id задачи, анализируйте на актуальность.
6. arsvlg 06.09.19 14:08 Сейчас в теме
Как идея - интересно.

Маленькая поправка:
По тексту публикации написано "но т.к. ссылка открывается из почты в браузере " - не обязательно в браузере.
Можно реализовать, чтобы по клике на ссылку из Outlook открывалась форма задачи, которую необходимо выполнить, в тонком клиенте.
8. duhh 242 06.09.19 14:38 Сейчас в теме
(6)Есть способ открывать ссылки в тонком клиенте (способ с настройками реестра видел)? Поделитесь, мне бы было очень интересно.
7. torch 129 06.09.19 14:19 Сейчас в теме
По-моему все это лучше организовывать через Telegramm:
- как через почтовик организовать документооборот, когда задачу утвердить/отклонить могут несколько человек?
- что делать, если у процесса согласованию должны быть "супервайзеры" - пользователи, которые сами ничего не утверждают, но следят за процессом?
9. duhh 242 06.09.19 14:43 Сейчас в теме
(7)Видимо мне должно быть стыдно, но я не пользуюсь телеграмом, вероятно лучше.
maxopik2; +1 Ответить
10. duhh 242 06.09.19 21:55 Сейчас в теме
(7)В контексте моего примера для нескольких согласующих можно в ссылку добавить адрес почты или(и) ИД пользователя (физлица). Шаблон легко с этим справится и передаст в обработчик сервиса эти параметры.
11. dock 45 10.09.19 09:04 Сейчас в теме
Хороший пример, одобряем.
Но бросим камушек в огород: в 1С Документооборот есть типовой функцинал: выполнение задач по почте. Где настраивается - смотрим вложение первую картинку.

Немного отличается подход/реализация.

1) На почту приходит письмо, внутри ссылки (здесь всё как и в статье)

2) При нажатии на ссылку, формируется письмо ответа, которое отправляется обратно в ДО. Смотрим вторую картинку
обратите внимание именно на тему письма - в ней и содержится ссылка на выполняемую задачу и результат "согласования"

3) профит - задача выполнена.

В чем "бонус" данного подхода ? как раз решается вопрос безопасности :)
Прикрепленные файлы:
12. duhh 242 10.09.19 09:48 Сейчас в теме
(11) В общих чертах )мне был известен подход в документообороте, но за картинки спасибо. А что за вопрос безопасности? В обоих случаях нажатие ссылки, с передачей Идентификатора задачи только разными способами. Видимо если бы у меня был документооборот, и статьи бы не было.
13. dock 45 11.09.19 09:57 Сейчас в теме
(12)
Опубликованный web-сервис - это прямой доступ к базе.

1) проверка подлинности при подключении к web-сервису весьма не тривиальная задача: судя по комментариям, с этим многие столкнулись.
2) работа с "внешними" пользователями: требуется публикация база в интернете, если вдруг пользователю захочется согласовать документ "из любого места".

Web-сервисы классная штука, но имеет и свои недостатки.
14. duhh 242 11.09.19 10:19 Сейчас в теме
(13) А чем опасен HTTP-сервис (база не опубликована), который может делать только согласование задач? То же самое можно сказать и про почтовое сообщение, отправленное на определенный адрес с определенным содержанием. Вероятно документооборот проверяет и отправителя, но его тоже вроде можно подменить.
15. dock 45 11.09.19 11:46 Сейчас в теме
(14) В саму первую очередь - "криворукостью" программиста. Любим мы замудрить что-нибудь эдакое, универсальное, удобное...
например:
Пара универсальных веб-функций для получения данных из 1С

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

Во вторую очередь, ошибками самой платформы: "дыры" есть везде, просто мы их еще не обнаружили.
Но говорить о безопасности самого протокола HTTP я не готов - всё-таки я не вебер и не сетевик, а 1С-ник.

В подходе из ДО: в письме есть только внутренний идентификатор задачи - меньше информации, выше безопасность.
И этот подход проще "продвинуть" через свой отдел безопасности: публикация требует дополнительных "действий", а почта в 99% случаев уже есть.

З.Ы. Про безопасность есть замечательное утверждение:
Всегда есть два человека: один имеет доступ к данным, а второй хочет получить эти данные. Остается только ратовать, что бы эти два человека не познакомились и не договорились.
16. duhh 242 11.09.19 13:23 Сейчас в теме
(15)Предлагаю вопрос про безопасность закрыть, пусть его обсуждают специалисты в темах про безопасность HTTP протокола и дырах платформы. На мой взгляд документооборот (обмен почтовыми сообщениями) хорош тем, что там можно передать текст или вложить файл.

Поговорим лучше про "криворукость". Я в разработке придерживаюсь универсальности, придумываю что нибудь эдакое и удобное. Ничего не вижу "криворукого" в приведенном вами примере, хороший подход в определенных условиях. Так можно и разработчиков БСП назвать "криворукими", зачем они разрабатывают универсальные вещи. Вероятно я преувеличиваю, но для себе считаю некорректным приводить в пример "криворукость" других авторов.
17. dock 45 11.09.19 15:43 Сейчас в теме
(16)
1) По безопасности - полностью согласен.

2) "криворукость" - специально взял в кавычки, потому что каждый отдельный случай нужно рассматривать применительно к задаче. Применительно к одной задаче - это красивое и правильное решение, а применительно к другой - баг. :)

Но хотелось бы пояснить по приведенному примеру: универсальный веб-сервис, который выполняет запрос из полученного параметра - это всё-таки хорошая такая "дыра". И такой веб-сервис публиковать "наружу" уж точно не стоит.
Хотя именно такой веб-сервис, обросший целым модулем по формированию входящих параметров и возвращаемому результату, используется на текущей работе. Много времени экономит :)

3.Ы. В публикации предложен один подход, в ДО используется немного другой. Оба подхода работоспособны, имеют свои преимущества и недостаки. И какой использовать - уже решать конечному исполнителю.

За публикацию плюс однозначный!
Для отправки сообщения требуется регистрация/авторизация