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