Имя: Пароль:
1C
1С v8
Вытащить вложение из эл. письма без создания доп. элементов в базе.
0 IBTM
 
28.03.14
11:33
с обратным действием (вложить в письмо файл и отправить) более менее понятно.
Подключаюсь к почте с помощью почтового клиента... в письме вложение
Если исползовать типовые средства то 1ска зоздаёт док "Эл письмо" и т.д и т.п.

Не хочется создавать дополнительные объекты в базе, это как то реализуемо, или нужно будет делать по аналогии типового алгоритма?
            Если ИнтернетПисьмо.Вложения.Количество() > 0 И НЕ ИсключениеТранзакции Тогда
                
                Для каждого Вложение Из ИнтернетПисьмо.Вложения Цикл
                    
                    Если Вложение.Данные = Неопределено Тогда
                        Продолжить;
                    КонецЕсли;
                    
                    НовоеВложение = Справочники.ВложенияЭлектронныхПисем.СоздатьЭлемент();
                    Если НЕ ПустаяСтрока(Вложение.Идентификатор) Тогда
                        Письмо.ВидТекстаПисьма = Перечисления.ВидыТекстовЭлектронныхПисем.HTMLСКартинками;
                    КонецЕсли;
                    НовоеВложение.ИДФайлаПочтовогоПисьма = Вложение.Идентификатор;
                    Если ТипЗнч(Вложение.Данные) = Тип("ИнтернетПочтовоеСообщение") Тогда
                        НовоеВложение.ИмяФайла = ?(ПустаяСтрока(Вложение.Имя), (ИнтернетПисьмо.ИдентификаторСообщения), Вложение.Имя) + ".msg";
                    Иначе
                        НовоеВложение.ИмяФайла = Вложение.Имя;
                    КонецЕсли;
                    НовоеВложение.Объект    = Письмо.Ссылка;
                    НовоеВложение.Хранилище = Новый ХранилищеЗначения(Вложение.Данные, Новый СжатиеДанных());
                    Если ТипЗнч(Письмо.ПредметКонтакта) = Тип("СправочникСсылка.ФизическиеЛица") Тогда
                        НовоеВложение.Предмет = Письмо.ПредметКонтакта;
                    Иначе
                        НовоеВложение.Предмет = Справочники.ФизическиеЛица.ПустаяСсылка();
                    КонецЕсли;
                    Попытка
                        НовоеВложение.Записать();
                    Исключение
                        ИсключениеТранзакции = Истина;
                        ОшибкаИсключенияТранзакции = ОписаниеОшибки();
                        Прервать;
                    КонецПопытки;
                    
                КонецЦикла;
                
                Если НЕ ИсключениеТранзакции Тогда
                    
                    ОчиститьПисьмо(ИнтернетПисьмо);
                    
                    Письмо.ПочтовоеСообщение = Новый ХранилищеЗначения(ИнтернетПисьмо, Новый СжатиеДанных());
                    
                    Попытка
                        Письмо.Записать();
                    Исключение
                        ИсключениеТранзакции = Истина;
                        ОшибкаИсключенияТранзакции = ОписаниеОшибки();
                        ОтменитьТранзакцию();
                        Прервать;
                    КонецПопытки;
                    
                Иначе
                    
                    ОтменитьТранзакцию();
                    Прервать;
                    
                КонецЕсли;
                
            КонецЕсли;
1 IBTM
 
28.03.14
11:52
НовоеВложение = Справочники.ВложенияЭлектронныхПисем.СоздатьЭлемент();
                    Если НЕ ПустаяСтрока(Вложение.Идентификатор) Тогда
                        Письмо.ВидТекстаПисьма = Перечисления.ВидыТекстовЭлектронныхПисем.HTMLСКартинками;
                    КонецЕсли;
                    НовоеВложение.ИДФайлаПочтовогоПисьма = Вложение.Идентификатор;
                    Если ТипЗнч(Вложение.Данные) = Тип("ИнтернетПочтовоеСообщение") Тогда
                        НовоеВложение.ИмяФайла = ?(ПустаяСтрока(Вложение.Имя), (ИнтернетПисьмо.ИдентификаторСообщения), Вложение.Имя) + ".msg";
                    Иначе
                        НовоеВложение.ИмяФайла = Вложение.Имя;
                    КонецЕсли;
                    НовоеВложение.Объект    = Письмо.Ссылка;
                    НовоеВложение.Хранилище = Новый ХранилищеЗначения(Вложение.Данные, Новый СжатиеДанных());
                    Если ТипЗнч(Письмо.ПредметКонтакта) = Тип("СправочникСсылка.ФизическиеЛица") Тогда
                        НовоеВложение.Предмет = Письмо.ПредметКонтакта;
                    Иначе
                        НовоеВложение.Предмет = Справочники.ФизическиеЛица.ПустаяСсылка();
                    КонецЕсли;
                    Попытка
                        НовоеВложение.Записать();
                    Исключение
                        ИсключениеТранзакции = Истина;
                        ОшибкаИсключенияТранзакции = ОписаниеОшибки();
                        Прервать;
                    КонецПопытки;

как то можно это обойти, незаметно для базы?
2 IBTM
 
28.03.14
12:09
кто как вообще вытаскивает вложения из писем через 1с?)
3 IBTM
 
28.03.14
12:42
ну и правильно, кому это надо...
4 Chubrik
 
28.03.14
13:01
Профиль = Новый ИнтернетПочтовыйПрофиль;
    Профиль.АдресСервераPOP3 = "mail.yandex.ru";
    Профиль.ПортPOP3 = 110;
    Профиль.Пользователь = "[email protected]";
    Профиль.Пароль = "12345";
    Почта = Новый ИнтернетПочта;
    Попытка
        Почта.Подключиться(Профиль);
    Исключение
        Предупреждение(ОписаниеОшибки());
        Возврат;
    КонецПопытки;
    
    Сообщения = Почта.Выбрать(ложь);
    Для каждого ТекСообщение из Сообщения Цикл
        Если ТекСообщение.Вложения.Количество() <> 0 Тогда
            Для каждого ТекВложение из ТекСообщение.Вложения Цикл
                НоваяСтрока = ПринятыеФайлы.Добавить();
                НоваяСтрока.Идентификатор = ТекСообщение.Идентификатор[0];
                Расширение = ВРег(Прав(ТекВложение.ИмяФайла, 4));
                Если Расширение <> ".XLS" и Расширение <> "XLSX" Тогда
                    НоваяСтрока.Ошибка = "Нет вложенного Excel-файла";
                    Продолжить;
                КонецЕсли;
                Попытка
                    ТекВложение.Данные.Записать(КаталогВременныхФайлов()+ТекВложение.ИмяФайла);
                Исключение
                    Сообщить(КаталогВременныхФайлов()+ТекВложение.ИмяФайла);
                    НоваяСтрока.Ошибка = "Ошибка записи файла";
                    Продолжить;
                КонецПопытки;
                Попытка
                    ТекстСообщения = ТекСообщение.Тексты[0].Текст;
                Исключение
                КонецПопытки;
            КонецЦикла;
        КонецЕсли;
    КонецЦикла;
    Почта.Отключиться();
5 IBTM
 
28.03.14
13:22
(4) отлично, спасибо

получается что мы файл из писма сначала пишем кудато на диск, потом с ним работаем, гениально.
Основная теорема систематики: Новые системы плодят новые проблемы.