Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
13 апр 2024, 03:49

Как заставить Общий модуль УправлениеЭлектроннойПочтой вставлять электронный адрес Контрагента из документа?

Автор Vzonder, 26 янв 2017, 22:35

0 Пользователей и 1 гость просматривают эту тему.

Vzonder

1C 8.2 УТ 10.3

Если отправлять письмо из ФормыЭлемена Контрагента, то все отлично.
В Кому  вписывается адрес из представления Адрес электронной почты контрагента для обмена электронными документами.
Причем отлично работает как на встроенном клиенте, так и на внешнем (outlook)
Если нужно отправить письмо из документа, то тут проблема.
Пустое поля.
Прошарил инет: есть способ, который подходит для УП 10.3, но не подходит для нас, т.к у нас своя форма печати, в ней процедура:

Процедура ДействияФормыОтправитьПоEmail(Кнопка)
РасширениеФайла = "";
ТипПересылаемогоФайла = Неопределено;
Если Кнопка.Имя = "ОтправитьКакMXL" Тогда
ТипПересылаемогоФайла = ТипФайлаТабличногоДокумента.MXL;
РасширениеФайла = ".mxl";
ИначеЕсли Кнопка.Имя = "ОтправитьКакHTML" Тогда
ТипПересылаемогоФайла = ТипФайлаТабличногоДокумента.HTML;
РасширениеФайла = ".html";
ИначеЕсли Кнопка.Имя = "ОтправитьКакXLS" Тогда
ТипПересылаемогоФайла = ТипФайлаТабличногоДокумента.XLS97;
РасширениеФайла = ".xls";
ИначеЕсли Кнопка.Имя = "ОтправитьКакPDF" Тогда
ТипПересылаемогоФайла = ТипФайлаТабличногоДокумента.PDF;
РасширениеФайла = ".pdf";
Иначе
Возврат;
КонецЕсли;



НаименованиеПечатнойФормы = СтрЗаменить(ОбъектПредставление,".","_");
// сохраним ПФ во временный каталог
ИмяФайлаСообщения = КаталогВременныхФайлов() + НаименованиеПечатнойФормы + РасширениеФайла;
Если ТипЗнч(ТипПересылаемогоФайла) = Тип("ТипФайлаТабличногоДокумента") Тогда
ЭлементыФормы.ТабличныйДокумент.Записать(ИмяФайлаСообщения, ТипПересылаемогоФайла);
КонецЕсли;

Если НЕ Константы.ИспользованиеВстроенногоПочтовогоКлиента.Получить() Тогда
СтруктураПараметров = Новый Структура();
СтруктураПараметров.Вставить("Тема", НаименованиеПечатнойФормы);
УправлениеЭлектроннойПочтой.ОткрытьПисьмоПочтовогоКлиентаОперационнойСистемы(СтруктураПараметров);
Иначе
СтруктураНовогоПисьма = Новый Структура();
СтруктураНовогоПисьма.Вставить("Тема",НаименованиеПечатнойФормы);
СтруктураПисьма = УправлениеЭлектроннойПочтой.НаписатьПисьмо(глЗначениеПеременной("глТекущийПользователь"), СтруктураНовогоПисьма,,,,,,);
Если СтруктураПисьма = Неопределено Тогда
Возврат
КонецЕсли;
ВложенияПисьмаТЗ = СтруктураПисьма.Форма.ВложенияПисьмаТЗ.Добавить();
Файл = Новый Файл(ИмяФайлаСообщения);
ВложенияПисьмаТЗ.ИмяФайла = Файл.Имя;
ВложенияПисьмаТЗ.Наименование = ОбъектПредставление;
Попытка
ВложенияПисьмаТЗ.Данные = Новый ХранилищеЗначения(Новый ДвоичныеДанные(ИмяФайлаСообщения), Новый СжатиеДанных);
Исключение
ОбщегоНазначения.СообщитьОбОшибке(ОписаниеОшибки());
КонецПопытки;
УдалитьФайлы(ИмяФайлаСообщения);
КонецЕсли;
КонецПроцедуры // ДействияФормыОтправитьПоEmail()


Все великолепно работает, кроме вышеописанной проблемки.

Поковыряв, своими неопытными рученками нашел где формируется адрес:

Общий модуль УправлениеЭлектроннойПочтой:


// Функция определяет адрес электронной почты объекта
//
// Параметры
//  Объект - СправочникСсылка, для которого необходимо определить адрес электронной почты
//
Функция ОпределитьАдресПолучателя(Объект) Экспорт

Запрос = Новый Запрос;

Запрос.УстановитьПараметр("Объект", Объект);
Запрос.УстановитьПараметр("Тип"   , Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты);

Запрос.Текст = "
|ВЫБРАТЬ РАЗРЕШЕННЫЕ
| КонтактнаяИнформация.Представление,
| КонтактнаяИнформация.ЗначениеПоУмолчанию
|ИЗ
| РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
|ГДЕ
| КонтактнаяИнформация.Объект = &Объект
| И
| КонтактнаяИнформация.Тип = &Тип
|";

Адрес = "";
ТаблицаЗапроса = Запрос.Выполнить().Выгрузить();
ТаблицаЗапроса.Индексы.Добавить("ЗначениеПоУмолчанию");
Если ТаблицаЗапроса.Количество() > 0 Тогда
СтрокаПоУмолчанию = ТаблицаЗапроса.Найти(Истина, "ЗначениеПоУмолчанию");
Если СтрокаПоУмолчанию <> Неопределено Тогда
Адрес = СтрокаПоУмолчанию.Представление;
Иначе
Адрес = ТаблицаЗапроса[0].Представление;
КонецЕсли;
КонецЕсли;

Возврат Адрес;

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



Пожалуйста, помогите, изменить запрос так, чтобы вписывался адрес электронки текущего Контрагента из заказа покупателя.
И если возможно, и  из РеализацииТоваровУслуг.
А если возможно, то Ваще из любого документа имеющего Контрагента.




Dethmontt

СтруктураНовогоПисьма.Вставить("Тема",НаименованиеПечатнойФормы);

//туц
СтруктураНовогоПисьма.Вставить("Кому", Новый СписокЗначений);
СтруктураНовогоПисьма.Кому.Добавить("hello1C@mail.ru", "Пупкин 1С-ник"); //Ну или твои значения из документа
СтруктураНовогоПисьма.Кому.Добавить("1с@1с.ru", "Сеньор Нуралиев");
        СтруктураПисьма = УправлениеЭлектроннойПочтой.НаписатьПисьмо(глЗначениеПеременной("глТекущийПользователь"), СтруктураНовогоПисьма,,,,,,);
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск