Как настроить автоматическую подстановку электронной почты контрагента при отправке документов из 1С

Программист 1С v8.3 (Обычные формы) 1С:Комплексная автоматизация
← На главную

При разработке новых документов в 1С программисты часто сталкиваются с проблемой: стандартная кнопка «Отправить по почте» работает, форма отправки открывается, но поле «Кому» остается пустым. В то же время для типовых документов (например, «Акт сверки взаиморасчетов») почта контрагента подставляется корректно. Рассмотрим подробнее, почему это происходит и как реализовать автоматическое заполнение адреса в самописных документах для разных версий платформ и конфигураций.

Разбор механизма в обычных формах (на примере КА 1.1 и УПП 1.3)

В конфигурациях «старого» поколения, таких как «Комплексная автоматизация 1.1» или «Управление производственным предприятием 1.3», за отправку печатных форм отвечает общий модуль УправлениеОтчетами. Проблема заключается в том, что система должна понимать, к какому объекту относится печатная форма, чтобы найти связанного с ним контрагента и его контактную информацию.

Проанализируем ситуацию: когда вы вызываете стандартную процедуру печати, необходимо явно передать ссылку на документ в параметр ОбъектПечати. Если этот параметр пуст или передан некорректно, механизм поиска почты не сможет «зацепиться» за владельца адреса.

Для решения задачи в модуле менеджера или в модуле формы (в зависимости от места вызова печати) необходимо использовать следующий подход:


// Пример корректного вызова отправки почты
Заголовок = "Акт Сверки"; 
ОбъектПечати = Ссылка; // Передаем ссылку на текущий документ
ТабДок = Новый ТабличныйДокумент; 

// Формируем печатную форму (код формирования пропущен)

// Вызываем типовую функцию отправки
УправлениеОтчетами.ОтправитьДокументПоЭлектроннойПочте(ТабДок, Заголовок, ОбъектПечати);

В этом случае система внутри функции ОтправитьДокументПоЭлектроннойПочте возьмет переданный ОбъектПечати, определит его тип, найдет реквизит Контрагент (или Организация) и обратится к регистру сведений «Контактная информация», чтобы извлечь адрес электронной почты.

Особенности работы с контактной информацией

Выясним причину, по которой даже при переданной ссылке адрес может не заполниться. Система ищет данные по определенным правилам:

  1. Объект должен иметь реквизит с именем Контрагент, Партнер или Организация. Если в вашем самописном документе реквизит называется иначе (например, Клиент), стандартный механизм может его не распознать.
  2. В регистре «Контактная информация» для этого контрагента должен быть заведен адрес с типом «Адрес электронной почты».
  3. Если у контрагента несколько адресов (личный, рабочий, для счетов), система берет тот, который помечен как основной или соответствует виду контактной информации, заданному в настройках программы.

Если автоматика все равно не срабатывает, можно вмешаться в процесс на уровне формы ОтправкаСообщения. Рассмотрим, как это сделать в функции ПриСозданииНаСервере общего модуля формы:


// В конце процедуры ПриСозданииНаСервере формы отправки
Если Параметры.Свойство("Кому") Тогда
    // Если параметр "Кому" пуст, можно принудительно его заполнить, 
    // получив данные из контактной информации контрагента
    Если ПустаяСтрока(Объект.СписокПолучателей) И Параметры.Кому.Количество() > 0 Тогда
        ДанныеКонтрагента = Параметры.Кому.Получить(0);
        // Здесь выполняется логика поиска почты по ДанныеКонтрагента
    КонецЕсли;
КонецЕсли;

Реализация в управляемых формах (БСП, УТ 11, ERP, КА 2)

В современных конфигурациях на базе Библиотеки стандартных подсистем (БСП) механизм отправки почты завязан на модуль УправлениеПечатью и работу с коллекциями печатных форм. Проанализируем процесс отправки в этих системах.

Когда пользователь нажимает кнопку «Отправить» в подменю печати, система вызывает процедуру ОтправитьПечатныеФормыПоПочте. Чтобы адрес подставился автоматически, необходимо, чтобы при формировании печатной формы были заполнены данные для отправки.

Посмотрим на пример того, как это работает в модуле менеджера документа при формировании коллекции печатных форм:


Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт

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

КонецПроцедуры

Общие рекомендации для разработчиков

Чтобы избежать проблем с автоматизацией почтовых отправлений, рекомендуем придерживаться следующих правил при создании новых объектов в конфигурации:

  1. Стандартизация имен: Всегда называйте основной реквизит контрагента именем Контрагент. Это обеспечит совместимость не только с почтовым модулем, но и со многими другими подсистемами 1С (заполнение реквизитов, проверки, отчеты).
  2. Использование БСП: Если конфигурация современная, не пытайтесь писать свои велосипеды для отправки почты. Используйте возможности модуля УправлениеПечатью и переопределяемые модули РаботаСПочтовымиСообщениямиПереопределяемый.
  3. Проверка прав: Убедитесь, что у пользователя, отправляющего почту, есть права на чтение регистра сведений Контактная информация. Если прав нет, программный код не сможет получить email, и поле останется пустым без выдачи ошибок.
  4. Типизация контактной информации: Проверяйте, что в карточке контрагента адрес почты записан именно в поле с типом «Электронная почта», а не в произвольное текстовое поле «Комментарий» или «Адрес для доставки».

Подводя итог, можно сказать, что решение проблемы всегда кроется в правильной передаче ссылки на объект-владелец в механизм печати и отправки. Как только система получает связь между табличным документом и ссылкой на контрагента, она автоматически извлекает необходимые данные из базы.

← На главную