Отправка почты. Автоматическая подстановка получателя

1. gmn1791 02.03.15 18:04 Сейчас в теме
При выводе печатной формы, если отправить ее по почте, поле получатель не заполняется. Как это сделать?
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. x_under 13 03.03.15 09:57 Сейчас в теме
(1) gmn1791, только доработкой конфигурации. В стандартной версии нет
3. dikd 17 03.03.15 12:43 Сейчас в теме
Доработокой только....

В общий модуль УправлениеЭлектроннойПочтой
В процедуру НаписатьПисьмо()

Дописали вот такой код:

		СтрокаТЧ = Письмо.КомуТЧ.Добавить();
		Контакты = РегистрыСведений.КонтактнаяИнформация;
		ОтборКонтактов = Новый Структура("Объект");
		ОтборКонтактов.Объект = Письмо.СсылкаНаДокумент.ЮрЛицо.ОсновноеКонтактноеЛицо;
		ВыборкаКонтактов = Контакты.Выбрать(ОтборКонтактов,);
		Пока ВыборкаКонтактов.Следующий() цикл
			Если ВыборкаКонтактов.Тип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты тогда
				СтрокаТЧ.АдресЭлектроннойПочты = ВыборкаКонтактов.Представление;
				СтрокаТЧ.Представление         = ВыборкаКонтактов.Представление;
				Письмо.Кому =   СокрЛП(Письмо.СсылкаНаДокумент.ЮрЛицо.ОсновноеКонтактноеЛицо) + " <" + ВыборкаКонтактов.Представление + ">";
			КонецЕсли;
		КонецЦикла;
Показать


СсылкаНаДокумент так же передается в эту процедуру, это документ из которого сформирована печатная форма для отправки.
4. dikd 17 03.03.15 12:46 Сейчас в теме
Вот кусок стандартного кода + моя дописка (помечена):

	СтруктураНовогоПисьма.Свойство("Кому", Кому);
	Если ТипЗнч(Кому) = Тип("СписокЗначений") Тогда
		Для каждого ЭлементСписка Из Кому Цикл
			Если ПустаяСтрока(ЭлементСписка.Значение) Тогда
				Продолжить;
			КонецЕсли; 
			СтрокаТЧ = Письмо.КомуТЧ.Добавить();
			СтрокаТЧ.АдресЭлектроннойПочты = ЭлементСписка.Значение;
			СтрокаТЧ.Представление         = ЭлементСписка.Представление;
			Если НЕ ПустаяСтрока(Письмо.Кому) Тогда
				Письмо.Кому = Письмо.Кому + ", ";
			КонецЕсли;
			Если ПустаяСтрока(ЭлементСписка.Представление) Тогда
				Письмо.Кому = Письмо.Кому + ЭлементСписка.Значение;
			Иначе
				Письмо.Кому = Письмо.Кому + ЭлементСписка.Представление + " <" + ЭлементСписка.Значение + ">";
			КонецЕсли;
		КонецЦикла;
	Иначе
		//Kreml++
		СтрокаТЧ = Письмо.КомуТЧ.Добавить();
		Контакты = РегистрыСведений.КонтактнаяИнформация;
		ОтборКонтактов = Новый Структура("Объект");
		ОтборКонтактов.Объект = Письмо.СсылкаНаДокумент.ЮрЛицо.ОсновноеКонтактноеЛицо;
		ВыборкаКонтактов = Контакты.Выбрать(ОтборКонтактов,);
		Пока ВыборкаКонтактов.Следующий() цикл
			Если ВыборкаКонтактов.Тип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты тогда
				СтрокаТЧ.АдресЭлектроннойПочты = ВыборкаКонтактов.Представление;
				СтрокаТЧ.Представление         = ВыборкаКонтактов.Представление;
				Письмо.Кому =   СокрЛП(Письмо.СсылкаНаДокумент.ЮрЛицо.ОсновноеКонтактноеЛицо) + " <" + ВыборкаКонтактов.Представление + ">";
			КонецЕсли;
		КонецЦикла;
		//Kreml--
	КонецЕсли;
Показать
5. arshanskiyav 32 19.06.15 13:19 Сейчас в теме
(4) dikd, В УТ 10.3 (10.3.31.3) (1С:Предприятие 8.2 (8.2.19.116)) СсылкаНаДокумент в процедуру НаписатьПисьмо не передается.
Проверял на "Счет на оплату покупателю"
6. arshanskiyav 32 23.06.15 00:30 Сейчас в теме
В процедуре НаписатьПисьмо() есть Основание, но оно не содержит СсылкаНаДокумент.
При нажатии на кнопку "Отправить по электронной почте" вызывается общая процедура из модуля УправлениеОтчетами
ОтправитьДокументПоЭлектроннойПочте(Документ, ИмяФайлаВложения = "")

Эта процедура передает ИмяВложения,Отчет,Тему ОбщейФорме "НастройкиОтправкиОтчета"
Форма создает файл (txt,xls,mxl & etc)
И запускает форму "НовогоСообщения":
УправлениеЭлектроннойПочтой.НаписатьПисьмо(глЗначениеПеременной("глТекущийПользователь"), СтруктураНовогоПисьма,,,,,, Истина, Ложь);

СтруктураНовогоПисьма содержит ВидТекста,СписокФайловВложений,Тема

Ни на одном из шагов нет СсылкаНаДокумент.

Можно попробовать выйти на Контрагента найдя счет на наименованию (имя вложения=имя документа), но это не универсальный вариант.
Попутал, у СнОП нет Наименования

Вопрос остается открытым.
7. arshanskiyav 32 23.06.15 14:20 Сейчас в теме
Кажется получилось.

1. ОбщиеФормы.ПечатьДокументов.КоманднаяПанельФормыОтправитьПоПочте(Кнопка):
УправлениеОтчетами.ОтправитьДокументПоЭлектроннойПочте(ЭлементыФормы.ПолеТабличногоДокумента, Заголовок, ОбъектПечати);

Передаем "ОбъектПечати" (существующий реквизит формы - ссылается на документ)

2. ОбщиеМодули.УправлениеОтчетами.ОтправитьДокументПоЭлектроннойПочте:
Процедура ОтправитьДокументПоЭлектроннойПочте(Документ, ИмяФайлаВложения = "", ОбъектПечати = Неопределено) Экспорт

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

КонецПроцедуры
Показать

Изменения выделены комментарием, добавлен входной параметр "ОбъектПечати = Неопределено".

3. ОбщиеФормы.НастройкаОтправкиОтчета.ОсновныеДействияФормыОК (кусок)
Если СписокФайловВложений.Количество() > 0 Тогда
		СтруктураНовогоПисьма.Вставить("СписокФайловВложений", СписокФайловВложений);
	КонецЕсли; 
	//Начало Модификации+
	Если НЕ СсылкаНаПолучателя.Пустая() Тогда
		АдресПолучателя=УправлениеЭлектроннойПочтой.ОпределитьАдресПолучателя(СсылкаНаПолучателя);
		ПредставлениеПолучателя=СсылкаНаПолучателя.Наименование;
		ИмяПолучателя=Новый СписокЗначений;
		ИмяПолучателя.Вставить(0,АдресПолучателя,ПредставлениеПолучателя);
		СтруктураНовогоПисьма.Вставить("Кому",ИмяПолучателя);
	КонецЕсли;
	//Конец Модификации
	СтруктураСозданногоПисьма = УправлениеЭлектроннойПочтой.НаписатьПисьмо(
	глЗначениеПеременной("глТекущийПользователь"), СтруктураНовогоПисьма,,,,,, Истина, Ложь);
Показать

Изменения выделены комментарием.
СсылкаНаПолучателя - реквизит Формы (новый), тип СправочникСсылка.Контрагент.

Изменения в ОбщиеМодули.УправлениеЭлектроннойПочтой не вносились.

Не работает для документа "Реализация товаров и услуг" - "ОбъектПечати" = Неопределенно
AndreySV; nubodinesnik; +2 Ответить
8. nubodinesnik 20.07.15 12:28 Сейчас в теме
arshanskiyav спасибо огромное, молодец.

Я сам долго думал, как передать ссылку документа в форму отправки, но до нового реквизита не дошел.
На УТП 1,2 работает и на РН-ках.
9. arshanskiyav 32 25.07.15 22:39 Сейчас в теме
(8) nubodinesnik,
Не за что, единственный неприятный момент, данная модификация рассчитана только на e-mail указанный в карточке контрагента, а о контактных лиц она ничего не знает.
А было бы интересно, если бы при открытии формы письма, при условии не пустой ТЧ "Контактные лица", выводилась бы форма выбора лица...

//передаем список значений
//если кол-во больше 1
//тогда открыть форму
//иначе вставить


Как-то так

ХХД, зачем придумывать велосипед, проверяем заполнена ли ТЧ и открываем стандартную форму выбора с отбором по контрагенту...
10. bmwcar 14.12.15 11:14 Сейчас в теме
Подскажите, пожалуйста, где поправить чтобы для Реализации тоже работало?
11. arshanskiyav 32 21.12.15 23:30 Сейчас в теме
(10) bmwcar,
Ответ могли бы найти сами, сравнив формирование и вывод ТабДокумент СнаОП и РТиУ.

Кнопка "Печать" - Выбор Макета - Формирование печатной формы - Открытие формы печати документов - Нажимаем кнопку отправить - Дальше описано выше в посте (7)
Выше я написал:
Не работает для документа "Реализация товаров и услуг" - "ОбъектПечати" = Неопределенно

Форма печати документа не относится к определенному документу, т.о. передача ссылки должна выполнятся перед открытием.
Вот в этом месте и проверяем почему не передается ссылка на документ.

Ответ из серии найди 10 отличий:
СнаОП (МодульОбъекта):
УниверсальныеМеханизмы.НапечататьДокумент(ТабДокумент, КоличествоЭкземпляров, НаПринтер, ОбщегоНазначения.СформироватьЗаголовокДокумента(ЭтотОбъект, ""), Ссылка);

РТиУ (МодульОбъекта):
УниверсальныеМеханизмы.НапечататьДокумент(ТабДокумент, КоличествоЭкземпляров, НаПринтер, ОбщегоНазначения.СформироватьЗаголовокДокумента(ЭтотОбъект));
12. bmwcar 22.12.15 10:10 Сейчас в теме
(11) arshanskiyav,
Спасибо и на этом.
Я не силен в программировании 1С, но думаю разберусь
13. arshanskiyav 32 22.12.15 23:01 Сейчас в теме
(12) bmwcar, Я тоже не силен.
Пожалуйста
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот