Outlook

Источник: https://1c-programmer-blog.ru/programmirovanie/rabota-s-outlook-v-1s.html

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

  • любой элемент Outlook имеет уникальный EntryID (48 символов);

  • любой элемент Outlook имеет поле MessageClass (строка, возможные варианты: «IPM.Note», «IPM.Task»,»IPM.Contact», «IPM.Activity», «IPM.Appointment»);

  • любой элемент Outlook имеет коллекции ItemProperties и UserProperties — стандартные и пользовательские свойства (нумерация с нуля и единицы соответственно);

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

    • при импорте данных пустая дата выглядит так «45010101», если попытаться записать такую дату в базу — произойдет ошибка, это нужно учитывать и заменять дату на «00010101».

Все возможные методы, свойства и события NameSpace Object (главный элемент иерархии каталогов Outlook, см. пример) подробно описаны на сайте MSDN (на английском).

Создание письма в Outlook из 1С

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

Процедура СоздатьПисьмо(Адрес, ПриложенныйФайл)

Попытка

Outlook = Новый COMОбъект("Outlook.Application");

Исключение

КонецПопытки;

Письмо = Outlook.CreateItem(0);

Письмо.Subject = "Тема письма";

Письмо.Body = "Текст письма";

Письмо.Recipients.Add(Адрес);

Письмо.Attachments.Add(ПриложенныйФайл);

Письмо.Display(); //или, например, Письмо.Send();

КонецПроцедуры

Создание события в Outlook из 1С

Процедура СоздатьСобытие(ДатаНачала, ДатаОкончания)

Попытка

Outlook = Новый COMОбъект("Outlook.Application");

Исключение

КонецПопытки;

Событие = Outlook.CreateItem(1);

Событие.Subject = "Название события";

Событие.Start = Формат(ДатаНачала, "ДЛФ=DT"); //в формате 01.01.0001 00:00:00

Событие.End = Формат(ДатаОкончания, "ДЛФ=DT"); //в формате 01.01.0001 00:00:00

Событие.Body = "Описание события";

Событие.Location = "Место события";

Событие.ReminderMinutesBeforeStart = 15;

Событие.BusyStatus = 0;

Событие.MeetingStatus = 0;

Событие.Sensitivity = 2;

Событие.Save();

КонецПроцедуры

Создание задачи в Outlook из 1С

Процедура СоздатьЗадачу(ДатаЗадачи)

Попытка

Outlook = Новый COMОбъект("Outlook.Application");

Исключение

КонецПопытки;

Задача = Outlook.CreateItem(3);

Задача.Subject = "Название задачи";

Задача.StartDate = Формат(ДатаЗадачи, "ДЛФ=DT"); //в формате 01.01.0001 00:00:00

Задача.Body = "Описание задачи";

Задача.Status = 0;

Задача.Display();

Задача.Importance = 2;

Задача.ReminderSet = 1;

Задача.ReminderTime = Формат(ДатаЗадачи-60*5, "ДЛФ=DT"); //в формате 01.01.0001 00:00:00

Задача.Save();

КонецПроцедуры

Импорт данных из Outlook в 1С

&НаКлиенте

Процедура ИмпортироватьДанные()

Попытка

Outlook = Новый COMОбъект("Outlook.Application");

ПространствоИмен = Outlook.GetNamespace("MAPI");

Исключение

КонецПопытки;

ПоказатьПапки(ПространствоИмен, 1);

КонецПроцедуры

&НаКлиенте

Процедура ПоказатьПапки(Родитель, Уровень)

Для Счетчик = 1 По Родитель.Folders.Count() Цикл

Папка=Родитель.Folders.Item(Счетчик);

Сообщить("Название: "+Папка.Name+"; Тип: "+Папка.DefaultMessageClass+"; Уровень: "+Уровень);

ЗагрузитьЭлементыПапки(Папка);

ПоказатьПапки(Папка, Уровень+1);

КонецЦикла;

КонецПроцедуры

&НаКлиенте

Процедура ЗагрузитьЭлементыПапки(Папка)

Для Счетчик = 1 По Папка.Items.Count() Цикл

ЗагрузитьЭлемент(Папка.Items.Item(Счетчик));

КонецЦикла;

КонецПроцедуры

&НаКлиенте

Процедура ЗагрузитьЭлемент(Элемент)

Для Счетчик = 0 По Элемент.ItemProperties.Count()-1 Цикл

Свойство=Элемент.ItemProperties.Item(Счетчик);

Если Свойство.Type = 0 Тогда

Продолжить;

КонецЕсли;

Сообщить(Свойство.Name+": "+ОбработатьЗначенияOutlook(Свойство.Value));

КонецЦикла;

Для Счетчик = 1 По Элемент.UserProperties.Count() Цикл

Свойство=Элемент.UserProperties.Item(Счетчик);

Если Свойство.Type = 0 Тогда

Продолжить;

КонецЕсли;

Сообщить(Свойство.Name+": "+ОбработатьЗначенияOutlook(Свойство.Value));

КонецЦикла;

КонецПроцедуры

&НаКлиенте

Функция ОбработатьСтроку(тСтрока)

тВозврат = тСтрока;

Пока Истина Цикл

тСимвол = НайтиНедопустимыеСимволыXML(тВозврат);

Если тСимвол = 0 Тогда

Прервать;

КонецЕсли;

тВозврат=Сред(тВозврат, 1, тСимвол-1) + Сред(тВозврат, тСимвол+1);

КонецЦикла;

тВозврат = СтрЗаменить(тВозврат, Символ(13)+Символ(10), Символы.ПС);

тВозврат = СтрЗаменить(тВозврат, Символ(182), Символы.ПС);

Возврат тВозврат;

КонецФункции

&НаКлиенте

Функция ОбработатьЗначенияOutlook(тЗначение)

Если ТипЗнч(тЗначение) = Тип("Строка") Тогда

Возврат ОбработатьСтроку(тЗначение);

КонецЕсли;

Если ТипЗнч(тЗначение) = Тип("Дата") Тогда

Если тЗначение="45010101" Тогда

Возврат "00010101";

КонецЕсли;

КонецЕсли;

Возврат тЗначение;

КонецФункции