При разработке новых документов в 1С программисты часто сталкиваются с проблемой: стандартная кнопка «Отправить по почте» работает, форма отправки открывается, но поле «Кому» остается пустым. В то же время для типовых документов (например, «Акт сверки взаиморасчетов») почта контрагента подставляется корректно. Рассмотрим подробнее, почему это происходит и как реализовать автоматическое заполнение адреса в самописных документах для разных версий платформ и конфигураций.
В конфигурациях «старого» поколения, таких как «Комплексная автоматизация 1.1» или «Управление производственным предприятием 1.3», за отправку печатных форм отвечает общий модуль УправлениеОтчетами. Проблема заключается в том, что система должна понимать, к какому объекту относится печатная форма, чтобы найти связанного с ним контрагента и его контактную информацию.
Проанализируем ситуацию: когда вы вызываете стандартную процедуру печати, необходимо явно передать ссылку на документ в параметр ОбъектПечати. Если этот параметр пуст или передан некорректно, механизм поиска почты не сможет «зацепиться» за владельца адреса.
Для решения задачи в модуле менеджера или в модуле формы (в зависимости от места вызова печати) необходимо использовать следующий подход:
// Пример корректного вызова отправки почты
Заголовок = "Акт Сверки";
ОбъектПечати = Ссылка; // Передаем ссылку на текущий документ
ТабДок = Новый ТабличныйДокумент;
// Формируем печатную форму (код формирования пропущен)
// Вызываем типовую функцию отправки
УправлениеОтчетами.ОтправитьДокументПоЭлектроннойПочте(ТабДок, Заголовок, ОбъектПечати);
В этом случае система внутри функции ОтправитьДокументПоЭлектроннойПочте возьмет переданный ОбъектПечати, определит его тип, найдет реквизит Контрагент (или Организация) и обратится к регистру сведений «Контактная информация», чтобы извлечь адрес электронной почты.
Выясним причину, по которой даже при переданной ссылке адрес может не заполниться. Система ищет данные по определенным правилам:
Контрагент, Партнер или Организация. Если в вашем самописном документе реквизит называется иначе (например, Клиент), стандартный механизм может его не распознать.Если автоматика все равно не срабатывает, можно вмешаться в процесс на уровне формы ОтправкаСообщения. Рассмотрим, как это сделать в функции ПриСозданииНаСервере общего модуля формы:
// В конце процедуры ПриСозданииНаСервере формы отправки
Если Параметры.Свойство("Кому") Тогда
// Если параметр "Кому" пуст, можно принудительно его заполнить,
// получив данные из контактной информации контрагента
Если ПустаяСтрока(Объект.СписокПолучателей) И Параметры.Кому.Количество() > 0 Тогда
ДанныеКонтрагента = Параметры.Кому.Получить(0);
// Здесь выполняется логика поиска почты по ДанныеКонтрагента
КонецЕсли;
КонецЕсли;
В современных конфигурациях на базе Библиотеки стандартных подсистем (БСП) механизм отправки почты завязан на модуль УправлениеПечатью и работу с коллекциями печатных форм. Проанализируем процесс отправки в этих системах.
Когда пользователь нажимает кнопку «Отправить» в подменю печати, система вызывает процедуру ОтправитьПечатныеФормыПоПочте. Чтобы адрес подставился автоматически, необходимо, чтобы при формировании печатной формы были заполнены данные для отправки.
Посмотрим на пример того, как это работает в модуле менеджера документа при формировании коллекции печатных форм:
Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
// Находим описание нашей печатной формы
ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "Претензия");
Если ПечатнаяФорма <> Неопределено Тогда
// Задаем табличный документ
ПечатнаяФорма.ТабличныйДокумент = СформироватьПечатнуюФорму(МассивОбъектов, ОбъектыПечати);
// Ключевой момент для почты:
// Нужно заполнить поле ДанныеДляОтправки в строке коллекции
Для Каждого СсылкаИзМассива Из МассивОбъектов Цикл
// Формируем структуру с получателем
СтруктураДанных = Новый Структура("Получатель, ТекстПисьма, Тема");
СтруктураДанных.Получатель = СсылкаИзМассива.Контрагент;
СтруктураДанных.Тема = "Документ " + СсылкаИзМассива.Номер;
// В современных версиях БСП адрес ищется автоматически по Получателю,
// если Получатель — это ссылка на справочник с контактной информацией.
ПечатнаяФорма.ДанныеДляОтправки = СтруктураДанных;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Чтобы избежать проблем с автоматизацией почтовых отправлений, рекомендуем придерживаться следующих правил при создании новых объектов в конфигурации:
Контрагент. Это обеспечит совместимость не только с почтовым модулем, но и со многими другими подсистемами 1С (заполнение реквизитов, проверки, отчеты).УправлениеПечатью и переопределяемые модули РаботаСПочтовымиСообщениямиПереопределяемый.Контактная информация. Если прав нет, программный код не сможет получить email, и поле останется пустым без выдачи ошибок.Подводя итог, можно сказать, что решение проблемы всегда кроется в правильной передаче ссылки на объект-владелец в механизм печати и отправки. Как только система получает связь между табличным документом и ссылкой на контрагента, она автоматически извлекает необходимые данные из базы.