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";
КонецЕсли;
КонецЕсли;
Возврат тЗначение;
КонецФункции