РаботаСоСделками.ОтправитьСчетНаПочту(ЭтотОбъект.Ссылка);
Процедура ОтправитьСчетНаПочту(Сделка) Экспорт
МассивПечати = Новый Массив;
//1 ищем по документу-основанию
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЗаказКлиента.Ссылка
|ИЗ
| Документ.ЗаказКлиента КАК ЗаказКлиента
|ГДЕ
| ЗаказКлиента.Сделка = &ДокументОснование
| И ЗаказКлиента.Проведен
| И ЗаказКлиента.ЭтоСчет";
Запрос.УстановитьПараметр("ДокументОснование", Сделка);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
МассивПечати.Добавить(ВыборкаДетальныеЗаписи.Ссылка);
КонецЦикла;
//2. Ищем по структуре подчиненности (т.к. в ЗаказКлиента.Сделка может біть упрзаказ клиента а не заказ с сайта
Если МассивПечати.Количество()=0 Тогда
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СвязанныеДокументы.Ссылка
|ИЗ
| КритерийОтбора.СвязанныеДокументы(&ДокументОснование) КАК СвязанныеДокументы
|ГДЕ
| СвязанныеДокументы.Ссылка.Проведен
| И СвязанныеДокументы.Ссылка.ЭтоСчет";
Запрос.УстановитьПараметр("ДокументОснование", Сделка);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
МассивПечати.Добавить(ВыборкаДетальныеЗаписи.Ссылка);
КонецЦикла;
КонецЕсли;
//3. Отправка на Емаил
Если МассивПечати.Количество()>0 Тогда
СтруктураТипов = Новый Соответствие;
СтруктураТипов.Вставить("Документ.ЗаказКлиента", МассивПечати);
ПараметрыПечати = УправлениеПечатью.ПодготовитьСтруктуруПараметровВывода();
ОбъектыПечати = Новый СписокЗначений;
ПараметрыВывода = УправлениеПечатью.ПодготовитьСтруктуруПараметровВывода();
ТабДокумент = Обработки.ПечатьСчетовНаОплату.СформироватьПечатнуюФормуСчетНаОплату(СтруктураТипов, ОбъектыПечати, ПараметрыПечати, ПараметрыВывода);
ИмяФайла = КаталогВременныхФайлов() + "bill.pdf";
ТабДокумент.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.PDF);
Данные = Новый ДвоичныеДанные(ИмяФайла);
Результат = ОтправитьТабличныйДокументЭлектроннойПочтойКакPDF(РегистрыСведений.РегистрКонстант.ПолучитьЗначениеКонстанты("Учетная запись для отправки письма"),
Сделка._ЕмайлДляСчета,
"",
РегистрыСведений.РегистрКонстант.ПолучитьЗначениеКонстанты("Тема письма со счетом"),
Данные,
МассивПечати[0]);
//Результат = ОтправитьТабличныйДокументЭлектроннойПочтойКакPDF_олд(РегистрыСведений.РегистрКонстант.ПолучитьЗначениеКонстанты("Учетная запись для отправки письма"),
//Сделка._ЕмайлДляСчета,
//"",
//РегистрыСведений.РегистрКонстант.ПолучитьЗначениеКонстанты("Тема письма со счетом"),
//Данные);
Иначе
ЗаписьЖурналаРегистрации("Отправка письма счетов", УровеньЖурналаРегистрации.Ошибка,Сделка.Метаданные(),Сделка,"Ошибка отправки письма с авто-счетом по заказу "+Сделка+" т.к. не обнаружено созданных счетов");
КонецЕсли;
КонецПроцедуры
Функция ОтправитьТабличныйДокументЭлектроннойПочтойКакPDF(УчетнаяЗаписьПочтыОтправителя, ПочтаПолучателя, ТекстПисьма, ТемаПисьма, АдресТабличногоДокументаВоВременномХранилище, ДокументОснование=Неопределено)
УспешноОтправлено = Ложь;
Если УчетнаяЗаписьПочтыОтправителя = Неопределено Или УчетнаяЗаписьПочтыОтправителя.Пустая() Тогда
Возврат УспешноОтправлено;
КонецЕсли;
СписокПолучателей = Новый Массив;
СписокПолучателей.Добавить(ПочтаПолучателя);
ВременноеХранилищеФайла = ПоместитьВоВременноеХранилище(АдресТабличногоДокументаВоВременномХранилище, Новый УникальныйИдентификатор);
//Вложения = Новый Массив;
//ОписаниеВложения = Новый Структура("Представление, АдресВоВременномХранилище", РегистрыСведений.РегистрКонстант.ПолучитьЗначениеКонстанты("Наименование вложения в письме") + "Рахунок.pdf", ВременноеХранилищеФайла);
//Вложения.Добавить(ОписаниеВложения);
НовоеПисьмоИсходящее = Документы.ЭлектронноеПисьмоИсходящее.СоздатьДокумент();
НовоеПисьмоИсходящее.Автор = ПараметрыСеанса.ТекущийПользователь;
НовоеПисьмоИсходящее.УчетнаяЗапись = УчетнаяЗаписьПочтыОтправителя;
НовоеПисьмоИсходящее.Дата = ТекущаяДата();
НовоеПисьмоИсходящее.ДатаКогдаОтправить = НовоеПисьмоИсходящее.Дата+1;
НовоеПисьмоИсходящее.Кодировка = "UTF-8";
НовоеПисьмоИсходящее.Важность = Перечисления.ВариантыВажностиВзаимодействия.Обычная;
НовоеПисьмоИсходящее.ТипТекста = Перечисления.ТипыТекстовЭлектронныхПисем.ПростойТекст;
НовоеПисьмоИсходящее.ЕстьВложения = Истина;
НовоеПисьмоИсходящее.Тема = ТемаПисьма;
НовоеПисьмоИсходящее.Текст = ТекстПисьма;
НовоеПисьмоИсходящее.Основание = ДокументОснование;
НовоеПисьмоИсходящее.Комментарий = "Создано автоматически при авто-создании счетов: "+ТекущаяДата();
Для Каждого СтрокаПолучаетелей из СписокПолучателей Цикл
Если НЕ ПустаяСтрока(СтрокаПолучаетелей) Тогда
НоваяЗаписьОПолучателе = НовоеПисьмоИсходящее.ПолучателиПисьма.Добавить();
НоваяЗаписьОПолучателе.Адрес = СокрЛП(СтрокаПолучаетелей);
НовоеПисьмоИсходящее.СписокПолучателейПисьма = НовоеПисьмоИсходящее.СписокПолучателейПисьма+СокрЛП(СтрокаПолучаетелей)+";";
КонецЕсли;
КонецЦикла;
Попытка
НовоеПисьмоИсходящее.Записать(РежимЗаписиДокумента.Запись);
УспешноЗаписано = Истина;
Исключение
ЗаписьЖурналаРегистрации("Отправка письма счетов", УровеньЖурналаРегистрации.Ошибка,,,"Ошибка отправки письма с авто-счетом "+ПочтаПолучателя+", "+ОписаниеОшибки());
УспешноЗаписано = Ложь;
КонецПопытки;
Если УспешноЗаписано Тогда
//Добавляем вложение с ВременногоХранилища. Вложение добавляется только к ссылке
УправлениеЭлектроннойПочтой.ЗаписатьВложениеЭлектронногоПисьмаИзВременногоХранилища(НовоеПисьмоИсходящее.Ссылка,ВременноеХранилищеФайла,РегистрыСведений.РегистрКонстант.ПолучитьЗначениеКонстанты("Наименование вложения в письме") + "Рахунок.pdf",12);
Попытка
ПисьмоОбъект = НовоеПисьмоИсходящее.Ссылка.ПолучитьОбъект();
ИдентификаторПисьма = Взаимодействия.ВыполнитьОтправкуПисьма(ПисьмоОбъект);
ПисьмоОбъект.ИдентификаторСообщения = ИдентификаторПисьма;
ПисьмоОбъект.СтатусПисьма = Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Отправлено;
ПисьмоОбъект.ДатаОтправления = ТекущаяДатаСеанса();
ПисьмоОбъект.Записать(РежимЗаписиДокумента.Проведение);
УспешноОтправлено = Не ПустаяСтрока(ИдентификаторПисьма);
Исключение
ЗаписьЖурналаРегистрации("Отправка письма счетов", УровеньЖурналаРегистрации.Ошибка,,,"Ошибка отправки письма с авто-счетом "+ПочтаПолучателя+", "+ОписаниеОшибки());
УспешноОтправлено = Ложь;
КонецПопытки;
КонецЕсли;
Возврат УспешноОтправлено;
КонецФункции