Сегодня поговорим о работе с известной программой Microsoft Outlook из 1С. Сначала будет теория, а в конце несколько практических примеров. Я не буду описывать все существующие объекты, свойства и методы, так как во-первых, их очень много, а во-вторых, нет такой необходимости — все подробно описано на сайте MSDN (там правда на английском, но для понимания достаточно самого базового уровня или Google Translate-та).
Любая работа с Outlook из 1С начинается, естественно, с создания COM-объекта.
1 | Outlook = Новый COMОбъект("Outlook.Application"); |
Все задачи связанные с Outlook-ом разделяются на две категории. Первая — нам нужно что-то создать в Outlook (письмо, задачу, событие и тд.). Вторая — нам нужно что-то из Outlook получить (письма, контакты, события и тд.).
Создание объектов в Outlook из 1С
Какие либо объекты в Outlook создаются при помощи метода «CreateItem», параметром к которому служит тип создаваемого объекта:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | Попытка Outlook = Новый COMОбъект("Outlook.Application"); Исключение Возврат; КонецПопытки; Письмо = Outlook.CreateItem(0); Встреча = Outlook.CreateItem(1); Контакт = Outlook.CreateItem(2); Задача = Outlook.CreateItem(3); Дневник = Outlook.CreateItem(4); Заметка = Outlook.CreateItem(5); ЗаписьВПапке = Outlook.CreateItem(6); СписокРассылки = Outlook.CreateItem(7); |
Как уже говорилось выше, я не буду описывать свойства, методы и события этих объектов, взамен я приведу ссылки на подробные описания этих объектов (на английском, чтобы увидеть свойства, методы или события выбранного объекта, нужно ткнуть на соответствующий пункт в меню слева):
Ниже будет несколько примеров создания различных объектов Outlook из 1С.
Импорт данных из Outlook в 1С
Импорт данных из 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С
Плавно переходим к примерам, напомню, что в примерах, я пренебрег необходимыми проверками и обработками ошибок, оставив только суть.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | Процедура СоздатьПисьмо(Адрес, ПриложенныйФайл) Попытка Outlook = Новый COMОбъект("Outlook.Application"); Исключение КонецПопытки; Письмо = Outlook.CreateItem(0); Письмо.Subject = "Тема письма"; Письмо.Body = "Текст письма"; Письмо.Recipients.Add(Адрес); Письмо.Attachments.Add(ПриложенныйФайл); Письмо.Display(); //или, например, Письмо.Send(); КонецПроцедуры |
Создание события в Outlook из 1С
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | Процедура СоздатьСобытие(ДатаНачала, ДатаОкончания) Попытка 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С
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | Процедура СоздатьЗадачу(ДатаЗадачи) Попытка 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С
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | &НаКлиенте Процедура ИмпортироватьДанные() Попытка 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"; КонецЕсли; КонецЕсли; Возврат тЗначение; КонецФункции |
Код импорта данных из Outlook в 1С можно скачать в виде внешней обработки.
На этом все, надеюсь данная статья Вам помогла.
Если Вы нашли ошибку или неточность, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Можно узнать, как сделать запись календаря другому пользователю?
Сделал, тривиально и просто.
1. Создал регистр, куда записываю какие записи из календаря созданы в Otlookе пользователя и те которые загрузил.
2. При загрузке им 1С, происходит автоматическая создания новых событии из календаря пользователя из 1С, загружаются события которых нет.
Недостатки метода:
— если пользователь долгое время не заходит в 1С, соответственно проблема.
— не работает в веб интерфейсе.
3. Выводятся сообщения о новых событиях в 1С.
Не знаю так Вам надо или не, но вот вариант (запись идет в свой календарь и в календарь другого пользователя):
Событие = Outlook.CreateItem(1);
Событие.Subject = «Название события»;
Событие.Start = «15.08.2016 15:00:00»;
Событие.End = «15.08.2016 16:00:00»;
Событие.Body = «Описание события»;
Событие.Location = «Место события»;
Событие.Recipients.Add(«почта@mail.ru»); // отправляем событие другому пользователю
//Если нескольким пользователям, то:
массив = Новый Массив;
массив.Добавить(«почта1@mail.ru»);
массив.Добавить(«почта2@mail.ru»);
Для каждого Строка Из массив Цикл
Получатель = Событие.Recipients.Add(Строка);
Получатель.Type = 1;
КонецЦикла;
можно место Outlook использовать Thunderbird
•при импорте данных выскочит окно, запрашивающее разрешение на доступ к данным, доступ можно разрешить, но не более чем на 10 минут (т.е. через 10 минут окно появится снова), существуют программы, которые автоматически нажимают нужные кнопки в этом окне;
Подскажите о каких программах идет речь? как сделать что бы данное сообщение не выскакивало?
Подскажите, пожалуйста, необходимо сделать, чтобы пользователь мог принять или отклонить высылаемую задачу. Нужно сделать, как поручение.
Сейчас задача отправляется просто как вложенное письмо.
Не могу нигде найти CreateItem для создания поручения