При разработке пользовательских отчетов или выводе сложных табличных документов в 1С часто возникает задача предоставить пользователю возможность быстрой отправки сформированных данных по электронной почте. Вместо того чтобы изобретать велосипед и писать собственный почтовый клиент, мы можем воспользоваться мощными инструментами Библиотеки Стандартных Подсистем (БСП), которые уже интегрированы в современные конфигурации, такие как 1С:Управление нашей фирмой (УНФ), 1С:ERP или 1С:Бухгалтерия.
В этой статье мы подробно разберем, как интегрировать функционал отправки почты через стандартную форму печати, как программно управлять параметрами страницы и какие еще возможности предоставляет БСП для работы с почтовыми сообщениями.
Самый простой и эффективный способ добавить кнопку «Отправить по почте» — это не добавлять её на собственную форму, а использовать общую форму ОбщиеФормы.ПечатьДокументов. Эта форма уже содержит весь необходимый функционал: предварительный просмотр, печать на принтер, сохранение в различных форматах (PDF, Excel, Word) и, самое главное, встроенную кнопку с иконкой конверта для отправки документа по e-mail.
Разберем по шагам, как вывести ваш табличный документ в эту форму. Для этого нам потребуется подготовить структуру параметров и вызвать форму программно. Рассмотрим пример кода, который можно разместить в обработчике команды вашей формы:
// 1. Подготавливаем табличный документ
ТабДок = СформироватьВашТабличныйДокумент();
// 2. Создаем коллекцию печатных форм для передачи в форму печати
КоллекцияПечатныхФорм = Новый СписокЗначений;
// Параметры: Табличный документ, Имя макета (внутреннее), Синоним (заголовок закладки), Полный путь к макету (необязательно)
КоллекцияПечатныхФорм.Добавить(ТабДок, "НазваниеОтчета", "Ваш отчет", "");
// 3. Формируем параметры открытия формы
ПараметрыОткрытия = Новый Структура;
ПараметрыОткрытия.Вставить("ИмяФормы", "ОбщаяФорма.ПечатьДокументов");
ПараметрыОткрытия.Вставить("КоллекцияПечатныхФорм", КоллекцияПечатныхФорм);
// 4. Открываем форму печати БСП
ОткрытьФорму("ОбщаяФорма.ПечатьДокументов", ПараметрыОткрытия);
Проанализируем этот подход. Используя ОбщаяФорма.ПечатьДокументов, мы автоматически получаем интерфейс выбора форматов вложения. Когда пользователь нажмет на кнопку отправки, система предложит выбрать формат (например, PDF или XLSX) и откроет стандартное окно подготовки письма, где документ уже будет прикреплен в качестве вложения. Для реализации такого сценария можно использовать обработку для печати табличного документа через типовую форму БСП.
Часто при выводе отчета в форму печати возникает проблема: документ слишком широкий и не помещается на стандартный лист А4 в книжной ориентации. Рассмотрим, как программно задать альбомную ориентацию и настроить автоматическое масштабирование, чтобы документ выглядел корректно при отправке получателю.
Для этого перед выводом документа в форму необходимо установить соответствующие свойства объекта ТабличныйДокумент. Выясним, какие именно свойства нам помогут:
// Установка альбомной (ландшафтной) ориентации
ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
// Включение автомасшабирования, чтобы документ вписался в ширину страницы
ТабДок.АвтоМасштаб = Истина;
// Опционально: вывод на одну страницу по ширине
ТабДок.КоличествоСтраницПоШирине = 1;
Важно помнить, что эти настройки сохраняются при конвертации документа в формат PDF или Excel через механизмы БСП. Если вы не установите АвтоМасштаб, то при отправке по почте в формате PDF часть колонок может быть «обрезана», так как конвертер будет пытаться сохранить физические размеры ячеек.
Бывают ситуации, когда нам не нужно показывать пользователю форму предварительного просмотра печати, а нужно сразу открыть окно создания письма с уже прикрепленным файлом. В БСП для этого используется программный интерфейс модуля РаботаСПочтовымиСообщениямиКлиент.
Давайте разберем, как это реализовать. Процесс состоит из сохранения табличного документа во временный файл и передачи его в параметры нового сообщения:
// Сохраняем табличный документ во временный файл на клиенте
ИмяФайла = ПолучитьИмяВременногоФайла("pdf");
ТабДок.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.PDF);
// Подготавливаем описание вложения
Вложение = Новый Структура;
Вложение.Вставить("Представление", "Отчет.pdf");
Вложение.Вставить("Данные", Новый ДвоичныеДанные(ИмяФайла));
МассивВложений = Новый Массив;
МассивВложений.Добавить(Вложение);
// Параметры письма
ПараметрыПисьма = Новый Структура;
ПараметрыПисьма.Вставить("Тема", "Сформированный отчет");
ПараметрыПисьма.Вставить("Тело", "Добрый день! Во вложении ваш отчет.");
ПараметрыПисьма.Вставить("Вложения", МассивВложений);
// Открываем форму нового сообщения
РаботаСПочтовымиСообщениямиКлиент.СоздатьНовоеПочтовоеСообщение(ПараметрыПисьма);
Этот метод дает программисту больше контроля: вы можете заранее заполнить адрес получателя, тему письма и текст сообщения, используя данные из информационной базы (например, e-mail контрагента). Для отправки писем с файлами без изменения конфигурации можно использовать расширение для отправки и получения почтовых сообщений с вложениями.
Если вы разрабатываете отчет на базе Системы Компоновки Данных (СКД) и используете стандартную подсистему «Варианты отчетов», то кнопка отправки по почте может добавляться автоматически. Проверьте следующие настройки:
Использование механизмов БСП позволяет обеспечить единообразие интерфейса для пользователя. Когда кнопка «Отправить» выглядит и ведет себя одинаково во всех отчетах системы, это значительно снижает порог вхождения и количество ошибок при работе с программой.
При реализации функционала отправки табличных документов стоит учитывать несколько важных моментов:
Мы рассмотрели основные способы интеграции почтовых функций в табличные документы 1С. Выбор конкретного метода зависит от ваших задач: если нужна универсальность и минимум кода — используйте ОбщаяФорма.ПечатьДокументов. Если требуется тонкая настройка письма — используйте программный интерфейс РаботаСПочтовымиСообщениямиКлиент.