Как добавить кнопку отправки отчета по электронной почте на управляемую форму 1С

Программист 1С v8.3 (Управляемые формы)
← На главную

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

Реализация с использованием механизмов БСП

В современных типовых конфигурациях (таких как Бухгалтерия предприятия, Зарплата и управление персоналом или Управление торговлей) за функционал рассылки отвечает подсистема «Электронная почта». Проанализируем стандартный подход к решению этой задачи. Для того чтобы добавить заветную «кнопочку» на форму, нам не обязательно полагаться только на автоматическую генерацию командной панели. Мы можем создать команду самостоятельно и привязать её к нужному обработчику.

Разберем по шагам процесс создания команды на управляемой форме отчета:

  1. Откроем форму вашего отчета в конфигураторе.
  2. Перейдем на закладку Команды и создадим новую команду формы, назовем ее ОтправитьПоЭлектроннойПочте.
  3. Вынесем эту команду на командную панель формы или в меню «Еще».
  4. В свойствах команды нажмем на лупу в поле Действие, чтобы создать обработчик на клиенте.

Теперь проанализируем код, который необходимо разместить в модуле формы для работы штатного механизма БСП:


&НаКлиенте
Процедура ОтправитьПоЭлектроннойПочте(Команда)
    
    // Если результат отчета выводится в табличный документ, 
    // являющийся реквизитом отчета, необходимо связать его с формой
    ЭтотОбъект.Результат = Отчет.ТабДок;
    
    // Вызов стандартного метода БСП для отправки отчета
    ОтправкаПочтовыхСообщенийКлиент.ОтправитьОтчет(ЭтотОбъект);
    
КонецПроцедуры

Рассмотрим важный нюанс: метод ОтправитьОтчет подсистемы ОтправкаПочтовыхСообщенийКлиент ожидает, что в качестве параметра передается форма (ЭтотОбъект), у которой есть реквизит Результат с типом ТабличныйДокумент. Если в вашем отчете результат выводится в реквизит формы, который уже называется Результат, то первая строка кода не потребуется. Однако если ваш табличный документ называется иначе или находится в объекте Отчет, программное присваивание обязательно.

Требования подсистемы к структуре формы

Проанализируем более глубоко, как работает метод ОтправитьОтчет. Для корректного формирования письма системе требуются метаданные об отчете. Рекомендуется, чтобы форма обладала следующими свойствами:

Выясним причину, по которой иногда кнопка может не срабатывать. Стандартное окно отправки автоматически предлагает пользователю выбор форматов (Excel, PDF, MXL). Чтобы этот список заполнялся корректно, в конфигурации должны быть правильно настроены правила подсистемы «Печать». Если вы хотите программно ограничить список форматов, это можно сделать через расширенные параметры, передаваемые в структуру подсистемы.

Интеграция через подсистему «Печать»

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

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

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


Если РаботаСПочтовымиСообщениями.ПроверитьВозможностьОтправкиЭлектронныхПисем() Тогда
    // Код вызова формы отправки
Иначе
    Сообщить("В системе не настроена учетная запись электронной почты!");
КонецЕсли;

Такая проверка позволит избежать неинформативных системных ошибок и обеспечит лучший пользовательский опыт.

Альтернативный способ (без использования БСП)

Если вы работаете в конфигурации, где БСП не используется или сильно обрезана, рассмотрим алгоритм реализации «чистыми» средствами платформы 1С. В этом случае нам придется самостоятельно управлять процессом сохранения файла и формирования сообщения.

Разберем по шагам логику работы:

  1. Сохранение сформированного табличного документа во временный файл на сервере.
  2. Создание объекта ИнтернетПочтовоеСообщение.
  3. Добавление файла во вложения.
  4. Отправка через объект ИнтернетПочта.

Посмотрим на пример реализации серверной части отправки:


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

Проанализируем ситуацию с контекстом выполнения. При работе с большими отчетами передача ТабличногоДокумента с клиента на сервер может вызвать задержки. В таких случаях эффективнее формировать результат сразу на сервере, сохранять его во временное хранилище и передавать в почтовую подсистему только адрес (URL) этого хранилища.

Права доступа и настройки

Выясним, какие настройки прав необходимы для корректной работы функционала. Даже если код написан идеально, кнопка может быть неактивна или вызывать ошибку доступа, если:

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

← На главную