Каталог решений - Как отправить по почте НЕтиповой документ, используя стандартные средства БП 3.0

Как отправить по почте НЕтиповой документ, используя стандартные средства БП 3.0

Как отправить по почте НЕтиповой документ, используя стандартные средства БП 3.0

В наличии

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

Категория:

Описание

Отправка сообщения

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

Сравнение отправки письма

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

Как сделать так, чтобы форма отправки письма заполнялась?

1.В общих командах, в «ОтправитьПоЭлектроннойПочте» выбираем наш документ в «ТипПараметраКоманды».

ОтправитьПоЭлектроннойПочте

2. В модуле менеджера нашего нового документа (в моем примере это Коммерческое предложение) необходимо добавить команды отправки. Идентификаторы должны быть такие же, как в процедуре Печать().

// Заполняет список команд отправки по электронной почте.
// 
// Параметры:
//   КомандыОтправки - ТаблицаЗначений - состав полей см. в функции ОтправкаПочтовыхСообщений.КомандыОтправки
//
Процедура ДобавитьКомандыОтправки(КомандыОтправки) Экспорт
	
	// Коммерческое предложение
	КомандаОтправки = КомандыОтправки.Добавить();
	КомандаОтправки.Идентификатор               = "ПечатьКоммерческогоПредложения";
	КомандаОтправки.Представление               = НСтр("ru='Коммерческое предложение'");
	КомандаОтправки.Порядок                     = 10;
	
	// Коммерческое предложение для крупного клиента
	КомандаОтправки = КомандыОтправки.Добавить();
	КомандаОтправки.Идентификатор               = "ПечатьКоммерческогоПредложенияДляКК";
	КомандаОтправки.Представление               = НСтр("ru='Коммерческое предложение для крупного клиента'");
	КомандаОтправки.Порядок                     = 20;
	
КонецПроцедуры

3.В процедуре, которая возвращает ТабличныйДокумент, непосредственно перед Возврат ТабДок, нужно вставить следующее:

// В табличном документе зададим имя области, в которую был 
 // выведен объект. Нужно для возможности печати покомплектно.
 УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабДокумент, 
 НомерСтрокиНачало, ОбъектыПечати, МассивОбъектов);
 
 
 Возврат ТабДокумент;

Параметр НомерСтрокиНачало нужно получить раньше, после создания ТабличногоДокумента

НомерСтрокиНачало = ТабДокумент.ВысотаТаблицы + 1;

4. Идем в общий модуль «ОтправкаПочтовыхСообщений», в процедуре «ЗаполнитьТемуТелоПисьма» видим, как получаются ОрганизацияПоПисьму и КонтрагентПоПисьму

СтруктураТиповОбъектыПечати = РазложитьСписокПоТипамОбъектов(МассивОбъектов);
ОписаниеДопустимыхТиповКонтрагента = ОписаниеТиповИзСтроки("Контрагенты, Организации, ФизическиеЛица");
	
ОрганизацияПоПисьму = ПолучитьЗначениеОбщегоРеквизита(СтруктураТиповОбъектыПечати, "Организация", ОписаниеТиповИзСтроки("Организации"));
КонтрагентПоПисьму  = ПолучитьЗначениеОбщегоРеквизита(СтруктураТиповОбъектыПечати, "Контрагент",  ОписаниеДопустимыхТиповКонтрагента);

Тут-то и понимаем, что нам доступны только реквизиты «Организация» и «Контрагент» с видами справочников Организации, Контрагенты и ФизическиеЛица.

Остается в этом месте добавить наши реквизиты. и далее все будет заполняться очень красиво. Например, добавим реквизит «Клиент» типа СправочникСсылка.Клиенты

СтруктураТиповОбъектыПечати = РазложитьСписокПоТипамОбъектов(МассивОбъектов);
ОписаниеДопустимыхТиповКонтрагента = ОписаниеТиповИзСтроки("Контрагенты, Организации, ФизическиеЛица");
    
ОрганизацияПоПисьму = ПолучитьЗначениеОбщегоРеквизита(СтруктураТиповОбъектыПечати, "Организация", ОписаниеТиповИзСтроки("Организации"));
КонтрагентПоПисьму  = ПолучитьЗначениеОбщегоРеквизита(СтруктураТиповОбъектыПечати, "Контрагент",  ОписаниеДопустимыхТиповКонтрагента);

//08.02.2016 старт
Если ТипЗнч(МассивОбъектов[0]) = Тип("ДокументСсылка.КоммерческоеПредложение") Тогда
    КонтрагентПоПисьму  = ПолучитьЗначениеОбщегоРеквизита(СтруктураТиповОбъектыПечати, "Клиент",  ОписаниеТиповИзСтроки("Клиенты"));
КонецЕсли;
//конец
has been added to your cart:
Оформление заказа