Как отправить по почте НЕтиповой документ, используя стандартные средства БП 3.0
После работы с отладчиком в 23-х Общих модулях в поисках того, как же формируется тема, отправитель и тело письма, было принято решение поделиться найденными строчками кода с коллегами в надежде на то, что это поможет сократить их время при работе с похожей задачей.
- Описание
- Подробнее
Описание

Тот, кто будет создавать новый документ в Бухгалтерии 3.0 и поставит перед собой цель отправлять его печатные формы по электронной почте, столкнется с задачей: при отправке нетипового документа в форме «Отправка почтового сообщения» поля Кому, Тема и Тело письма пустые, когда как в типовом варианте отправка сообщения выглядит намного красивее. Почему?

Дело в том, что типовой варинант отработает только если в вашем документе есть реквизит «Организация» с типом значения СправочникСсылка.Организации и реквизит «Контрагент» с типом значений СправочникСсылка.Контрагенты/Организации/ФизическиеЛица. Если есть реквизиты, названные по-другому, к примеру, «Клиент», «Поставщик», «Партнер» и пр., то будет постоянно появляться пустая форма отправки письма, и все нужно добавлять вручную каждый раз.
Как сделать так, чтобы форма отправки письма заполнялась?
1.В общих командах, в «ОтправитьПоЭлектроннойПочте» выбираем наш документ в «ТипПараметраКоманды».

2. В модуле менеджера нашего нового документа (в моем примере это Коммерческое предложение) необходимо добавить команды отправки. Идентификаторы должны быть такие же, как в процедуре Печать().
// Заполняет список команд отправки по электронной почте.
//
// Параметры:
// КомандыОтправки - ТаблицаЗначений - состав полей см. в функции ОтправкаПочтовыхСообщений.КомандыОтправки
//
Процедура ДобавитьКомандыОтправки(КомандыОтправки) Экспорт
// Коммерческое предложение
КомандаОтправки = КомандыОтправки.Добавить();
КомандаОтправки.Идентификатор = "ПечатьКоммерческогоПредложения";
КомандаОтправки.Представление = НСтр("ru='Коммерческое предложение'");
КомандаОтправки.Порядок = 10;
// Коммерческое предложение для крупного клиента
КомандаОтправки = КомандыОтправки.Добавить();
КомандаОтправки.Идентификатор = "ПечатьКоммерческогоПредложенияДляКК";
КомандаОтправки.Представление = НСтр("ru='Коммерческое предложение для крупного клиента'");
КомандаОтправки.Порядок = 20;
КонецПроцедуры
3.В процедуре, которая возвращает ТабличныйДокумент, непосредственно перед Возврат ТабДок, нужно вставить следующее:
// В табличном документе зададим имя области, в которую был
// выведен объект. Нужно для возможности печати покомплектно.
УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабДокумент,
НомерСтрокиНачало, ОбъектыПечати, МассивОбъектов);
Возврат ТабДокумент;Параметр НомерСтрокиНачало нужно получить раньше, после создания ТабличногоДокумента
НомерСтрокиНачало = ТабДокумент.ВысотаТаблицы + 1;4. Идем в общий модуль «ОтправкаПочтовыхСообщений», в процедуре «ЗаполнитьТемуТелоПисьма» видим, как получаются ОрганизацияПоПисьму и КонтрагентПоПисьму
СтруктураТиповОбъектыПечати = РазложитьСписокПоТипамОбъектов(МассивОбъектов);
ОписаниеДопустимыхТиповКонтрагента = ОписаниеТиповИзСтроки("Контрагенты, Организации, ФизическиеЛица");
ОрганизацияПоПисьму = ПолучитьЗначениеОбщегоРеквизита(СтруктураТиповОбъектыПечати, "Организация", ОписаниеТиповИзСтроки("Организации"));
КонтрагентПоПисьму = ПолучитьЗначениеОбщегоРеквизита(СтруктураТиповОбъектыПечати, "Контрагент", ОписаниеДопустимыхТиповКонтрагента);Тут-то и понимаем, что нам доступны только реквизиты «Организация» и «Контрагент» с видами справочников Организации, Контрагенты и ФизическиеЛица.
Остается в этом месте добавить наши реквизиты. и далее все будет заполняться очень красиво. Например, добавим реквизит «Клиент» типа СправочникСсылка.Клиенты
СтруктураТиповОбъектыПечати = РазложитьСписокПоТипамОбъектов(МассивОбъектов);
ОписаниеДопустимыхТиповКонтрагента = ОписаниеТиповИзСтроки("Контрагенты, Организации, ФизическиеЛица");
ОрганизацияПоПисьму = ПолучитьЗначениеОбщегоРеквизита(СтруктураТиповОбъектыПечати, "Организация", ОписаниеТиповИзСтроки("Организации"));
КонтрагентПоПисьму = ПолучитьЗначениеОбщегоРеквизита(СтруктураТиповОбъектыПечати, "Контрагент", ОписаниеДопустимыхТиповКонтрагента);
//08.02.2016 старт
Если ТипЗнч(МассивОбъектов[0]) = Тип("ДокументСсылка.КоммерческоеПредложение") Тогда
КонтрагентПоПисьму = ПолучитьЗначениеОбщегоРеквизита(СтруктураТиповОбъектыПечати, "Клиент", ОписаниеТиповИзСтроки("Клиенты"));
КонецЕсли;
//конец
