Имя: Пароль:
1C
1С v8
v8: Как из Outlook как вытащить календарь?
0 RomaH
 
naïve
19.03.14
10:40
Задача - в аутлуке ведется календарь
надо продублировать его в 1С

как?
1 RomaH
 
naïve
19.03.14
13:54
нашел на инфостарте обработку - на первый взгляд все просто

olFolderCalendar = 9;

Попытка
   objOutlook = Новый COMОбъект("Outlook.Application");
Исключение
   Предупреждение("Не удалось создать объект Outlook.Application");
   Возврат;
КонецПопытки;

objNamespace = objOutlook.GetNamespace("MAPI");
objFolder = objNamespace.GetDefaultFolder(olFolderCalendar);

colAppointments = objFolder.Items;

Для Каждого objAppointment Из colAppointments Цикл


получает список событий, но ! только из календаря "по умолчанию"
а у меня календарей несколько

как из остальных получить?
2 RomaH
 
naïve
19.03.14
13:59
т.е. мне надо выцепить общий календарь
3 Jaap Vduul
 
19.03.14
14:09
4 Maxus43
 
19.03.14
14:11
>>только из календаря "по умолчанию"
это видимо из-за GetDefaultFolder(olFolderCalendar);
в MAPI команду анйти надо, чтоб взять не дефаулт, а нужный..
З.ы. сам не заморачивался, но скоро придётся
Ещё и чтоб дублировались в исходящих в аутлуке, отправленные из 1с
5 dk
 
19.03.14
14:23
надо найти коллекцию календарей и выбрать в ней нужный )
6 Kalambur
 
19.03.14
14:23
7 RomaH
 
naïve
19.03.14
14:28
(3)
objNamespace = objOutlook.GetNamespace("MAPI");

objDummy = objOutlook.CreateItem(0);
objRecip = objDummy.Recipients.Add("Телеконференции");

objRecip.Resolve();

//myRecipient = objNamespace.CreateRecipient("Телеконференции");
//myRecipient.Resolve();

//П = myRecipient.Resolved;

SharedFolder = objNamespace.GetSharedDefaultFolder(objRecip, olFolderCalendar);

пишет:

{Форма.Форма.Форма(25)}: Ошибка при вызове метода контекста (GetSharedDefaultFolder)
SharedFolder = objNamespace.GetSharedDefaultFolder(objRecip, olFolderCalendar);
по причине:
Произошла исключительная ситуация (Microsoft Outlook): Не распознано одно или несколько имен.

т.е. Resolved возвращается Ложь для созхданного объекта
8 RomaH
 
naïve
19.03.14
14:34
а, блин, надо писать не имя календаря - а имя владельца этого календаря
9 RomaH
 
naïve
19.03.14
14:38
GetSharedDefaultFolder - прошел
а что теперь делать с полученым объектом?
10 RomaH
 
naïve
19.03.14
14:48
olFolderCalendar = 9;

Попытка
   objOutlook = Новый COMОбъект("Outlook.Application");
Исключение
   Предупреждение("Не удалось создать объект Outlook.Application");
   Возврат;
КонецПопытки;

objNamespace = objOutlook.GetNamespace("MAPI");

//objDummy = objOutlook.CreateItem(0);
//myRecipient = objDummy.Recipients.Add("Телеконференции");

//myRecipient.Resolve();

myRecipient = objNamespace.CreateRecipient("Иванов Антон Геннадьевич");
myRecipient.Resolve();

//П = myRecipient.Resolved;

SharedFolder = objNamespace.GetSharedDefaultFolder(myRecipient, olFolderCalendar);

objFolder = objNamespace.GetDefaultFolder(olFolderCalendar);

colAppointments = SharedFolder.Items;

Для Каждого objAppointment Из colAppointments Цикл

КонецЦикла;

вот такой воит кол, но цикла по итемам нет - в колекции пусто
11 Maxus43
 
19.03.14
14:51
чото у тебя везде Create и т.д., тебе ж надо получить существующий, смотри в сторону

Outlook.MAPIFolder oContacts = olNs.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderContacts);
Outlook.Items oItems = oContacts.Items;

тока на календарь переделай, посомтри какие коллекции есть вобще
12 RomaH
 
naïve
19.03.14
14:57
(11)
GetSharedDefaultFolder
вообще-то гет
но у него ДВА параметра
13 RomaH
 
naïve
19.03.14
15:00
14 Maxus43
 
19.03.14
15:07
(12) у тебя криэйты с ивановым, ты создаёшь, и после этого гет - там поэтому и пусто видимо...
15 RomaH
 
naïve
19.03.14
15:15
нормально все
реципеента писал владельца, а надо именно текущего владельца, под которым и работаю в аутлуке
16 RomaH
 
naïve
19.03.14
15:16
а - нет, не то
17 RomaH
 
naïve
19.03.14
15:17
Если в реципеенте пишу себя - то получаю свой же календарь по умолчанию
а если исходного владельца общего календаря - то фигу в итемах
18 RomaH
 
naïve
19.03.14
15:19
myRecipient = objNamespace.CreateRecipient("Лобанов Роман Александрович");
myRecipient.Resolve();

//П = myRecipient.Resolved;


SharedFolder = objNamespace.GetSharedDefaultFolder(myRecipient, olFolderCalendar);

objFolder = objNamespace.GetDefaultFolder(olFolderCalendar);

colAppointments = SharedFolder.Items;

Для Каждого objAppointment Из colAppointments Цикл

КонецЦикла;

вот так получаю именно мой календарь
и там есть итемы (колекция не пустая)
19 Maxus43
 
19.03.14
15:22
(18) в итемах есть чего интересного?
20 Kalambur
 
19.03.14
15:23
Нормально все у тебя в коде, теперь настрой аутлук, чтобы читать чужой календарь, надо дать доступ к нему.
Или указать ExchangeUser как "Иванов Антон", вроде как-то так
21 RomaH
 
naïve
19.03.14
15:43
(20) и где это настраивать
в самом аутлуке я этот календарь вижу
в том же аутлуке выполняю этот макрос - рисует что доступа нет

http://listick.ru/share/wPPbo
22 Kalambur
 
19.03.14
15:49
"в самом аутлуке я этот календарь вижу
в том же аутлуке выполняю этот макрос - рисует что доступа нет"
ну вот это уже странно
23 RomaH
 
naïve
19.03.14
15:52
(22) ну получается. что я что-то не то все-таки получаю в коде
24 RomaH
 
naïve
19.03.14
15:54
у пользователя (отдающего) календарей два
первый показывается если я подключаю календарь (создаю) из адресной книги
а второй - мне прислали по почте ссылку (расшарили)
смотрел разрешения у юзера - я там имею права редактора (практически полные)
25 Kalambur
 
19.03.14
16:10
26 Jaap Vduul
 
19.03.14
18:11
Возможно, у тебя получатель резолвится некорректно (т.е. вместо пользователя на сервере берётся из локальных контактов).
Попробуй по smtp адресу вместо имени определять.
27 RomaH
 
naïve
20.03.14
07:52
(26) одинаково
28 RomaH
 
naïve
20.03.14
07:56
(26) на картинке в (21) ведь именно он?
29 RomaH
 
naïve
20.03.14
08:04
http://listick.ru/share/wIIak
как бы что-то все-таки получается, но не до конца
30 RomaH
 
naïve
20.03.14
08:20
(25) менеджер пустой возвращается
http://listick.ru/share/wddcp
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.