Все знают, что можно сформировать электронное письмо, прям из окна просмотра сформированных печатных документов.
И это письмо открывается с прикрепленными файлами и с пустым списком получателей, и их нужно прописывать ручками.
Как оказалось, это подправить не сложно, достаточно посмотреть место формирования самого электронного письма в общей форме "ПечатьДокументов", причем, как оказалось, там за это отвечает всего одна функция "ПараметрыОтправкиПисьма", прямо в модуле формы.
В функции "ПараметрыОтправкиПисьма" нас интересует одна структура с названием "Результат"
Объявление переменной "Результат"
//Где СписокВложений это массив сохраннеых фалов
// а "Получатели" просто равно неопределенно
***
Результат = Новый Структура;
Результат.Вставить("Получатель", Получатели);
Результат.Вставить("Тема", ПараметрыВывода.ПараметрыОтправки.Тема);
Результат.Вставить("Текст", ПараметрыВывода.ПараметрыОтправки.Текст);
Результат.Вставить("Вложения", СписокВложений);
Результат.Вставить("УдалятьФайлыПослеОтправки", Истина);
***
Как указано в комментарии модуля, "РаботаСПочтовымиСообщениямиКлиент" может иметь один из трех вариантов заполнения
Комментарий из модуля :"РаботаСПочтовымиСообщениямиКлиент"
// * Получатель - Строка - список адресов в формате:
// [ПредставлениеПолучателя1] <Адрес1>; [[ПредставлениеПолучателя2] <Адрес2>;...]
// - СписокЗначений:
// ** Представление - Строка - представление получателя,
// ** Значение - Строка - почтовый адрес.
// - Массив - массив структур, описывающий получателей:
// ** Адрес - Строка - почтовый адрес получателя сообщения;
// ** Представление - Строка - представление адресата;
// ** ИсточникКонтактнойИнформации - СправочникСсылка - владелец контактной информации.
В нашем варианте, пожалуй, подойдет массив структур с указанием представления почты и ссылки на получателя письма.
Остается вопрос только как и где брать получателей, если на форме у нас есть только коллекция сформированных печатных форм.
Но это не совсем так, у нас еще есть список значений "ОбъектыПечати", существующий в реквизитах формы.
Как возможный универсальный вариант мы сделали следующее: в цикле перебираем каждый элемент "ОбъектыПечати" и находим в нем реквизит "Сотрудник" или "ФизическоеЛицо" и "Ответственный"
Если такие реквизиты, то вытаскиваем их заполненные электронные почты (контактная информация физ лица), и также добавляем в получатели текущего пользователя 1С.
НайтиВсехВозможныхПолучателей
&НаСервере
Функция НайтиВсехВозможныхПолучателей()
ИтоговыйМассивПолучателей = Новый Массив;
Для Каждого ЭлементОбъектыПечати из ОбъектыПечати Цикл
МассивПолучателей = ПолучитьМассивВозможныхПолучателейИзОбъекта(ЭлементОбъектыПечати.Значение);
Для Каждого ЭлементМассива из МассивПолучателей Цикл
Если ИтоговыйМассивПолучателей.Найти(ЭлементМассива) = Неопределено Тогда
ИтоговыйМассивПолучателей.Добавить(ЭлементМассива);
КонецЕсли;
КонецЦикла;
КонецЦикла;
ТекущийПользователь = ПользователиКлиентСервер.ТекущийПользователь();
Если ЗначениеЗаполнено(ТекущийПользователь.ФизическоеЛицо) Тогда
ИтоговыйМассивПолучателей.Добавить(ТекущийПользователь.ФизическоеЛицо);
КонецЕсли;
Возврат ИтоговыйМассивПолучателей
КонецФункции
Тестировалось на Зарплата и управление персоналом КОРП, редакция 3.1 (3.1.20.97) и платформе 1С:Предприятие 8.3 (8.3.18.1289).