[Расширение] Доработка рассылки отчетов, отчет в теле письма


Я очень люблю механизм рассылки отчетов из БСП — достаточно гибкий, универсальный. Активно пользуюсь им для того, чтобы получать оповещения из программы о том, что «что-то идёт не так»… Однако, и в нем есть что улучшить.

В механизме рассылки отчетов из БСП есть замечательная настройка — "Отправлять пустой". По умолчанию она выключена. Если включена — в любом случае приходит письмо или в папке появляется файл с пустым содержимым. Но если отключена, отчет придет только в том, случае, если в нем что-то есть. Этим мы активно пользуемся для оповещений себя и пользователей о проблемах в программе, авариях, неверных настройках и неправильных данных. У меня есть набор отчетов-сигнализаторов и я ими обязательно поделюсь, но сейчас я хочу рассказать о доработке рассылки отчетов, которая сэкономила лично мне и многим пользователям достаточно много времени.

Итак. Неудобство рассылки — в наличии вложений файлов. Конечно, когда рассылка используется для отправки огромных портянок директорам, это единственный способ донести до них информацию. Но мы-то используем рассылку для оповещений о проблеме, нам нужно быстро видеть,что отправила программа, чтобы отреагировать как можно быстрее.

Представьте или вспомните как это обычно бывает:

  • Приходит письмо
  • Мы видим факт прихода письма, его тему, но конкретики нет
  • Открываем письмо
  • Открываем вложение
  • Вдумчиво читаем
  • Реагируем

Классно было бы сократить это до операций:

  • Пришло письмо
  • В шторке телефона или в окне оповещений Windows видим содержимое письма
  • Реагируем

Но мы же программисты, можем помочь сами себе и облегчить себе же жизнь!

Давайте сделаем какое то ключевое слово, если мы его напишем в шаблоне письма, программа поймет, что ей нужно вставить содержимое отчетов в текстовую часть е-мейла. Пусть это будет 

[ОтчетыВТелеПисьма]

напишем так в стиле имеющихся ключевых слов шаблона рассылки отчета.

С помощью расширения попробуем встроиться в процедуру рассылки отчетов. Нам надо попасть в такое место, чтобы отчеты были уже сформированы, но само письмо еще нет. Ознакомимся с кодом из общих модулей "РассылкаОтчетов". Хорошо подойдет процедура "ОтправитьОтчетыПолучателю", у нее есть параметры — "Вложения", "ПараметрыДоставки". Идеально!

Слава расширениям, мы можем выполнить свой код с директивой

&Перед("ОтправитьОтчетыПолучателю")

И ничего не сломаем.

Нам нужно обратиться к ПараметрыДоставки.ШаблонТекста, понять, что нужно вставить содержимое файлов в текстовую часть письма. Дальше прочитать Вложения, перевести их в текст, вставить этот текст вместо ключевого слова шаблона. Звучит очень просто, давайте уже напишем код.

&Перед("ОтправитьОтчетыПолучателю")
Процедура У_ОтправитьОтчетыПолучателю(Вложения, ПараметрыДоставки, СтрокаПолучатель)

ШаблонТекста = ПараметрыДоставки.ШаблонТекста;
Если СтрНайти(ШаблонТекста, "[ОтчетыВТелеПисьма]") = 0 Тогда
Возврат;
КонецЕсли;

ТекстыВложений = "";

Для Каждого Вложение Из ПреобразоватьВСоответствие(Вложения, "Ключ", "Значение") Цикл
Если Не ФорматПисьмаПригоденДляРассылки(Вложение.Ключ) Тогда
Продолжить;
КонецЕсли;
ТекстыВложений = ТекстыВложений + Символы.ПС;
Чтение = Новый ЧтениеТекста(Вложение.Значение);
ТекстыВложений = ТекстыВложений  + Чтение.Прочитать();
КонецЦикла;

Если ПараметрыДоставки.ПисьмоВФорматеHTML Тогда
ТекстыВложений = СтрЗаменить(ТекстыВложений, Символы.ПС, "<br>");
КонецЕсли;

ПараметрыДоставки.ШаблонТекста = СтрЗаменить(ШаблонТекста, "[ОтчетыВТелеПисьма]", ТекстыВложений);

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

Функция ФорматПисьмаПригоденДляРассылки(НаименованиеФайла)

Если Прав(НаименованиеФайла, 3) = "txt" ИЛИ Прав(НаименованиеФайла, 4) = "html" Тогда
Возврат Истина;
Иначе
Возврат Ложь;
КонецЕсли;

КонецФункции

Обычно письмо о проблеме выглядит так:

Ясно, понятно. Только у нас куча этих обработок, одновременно запущенных, под разные версии, разные порты. Как понять, какая именно зависла? Открываю письмо, открываю вложение, читаю.

Нет, сделаем проще! Смотрите как классно:

Из стандартного оповещения Windows я вижу не только то, что пришло письмо о проблеме, но и конкретную проблему. Я даже не открою это письмо, потому что уже знаю его содержимое, я просто сразу отреагирую — зависла обработка, запущенная на порту 1242. Чиню.

В публикации выложен файл расширения с доработкой рассылки отчетов. Проверен на версии БСП 3.0.1.434, возможно будет работать на более старых версиях (модуль рассылки отчетов менялся не сильно).

 

 Как пользоваться

  1. Устанавливаем расширение
  2. Создаем рассылку отчетов с нужной вам информацией.
  3. Проверяем формат отправляемых файлов — должен быть текстовый или html, не запакованный в архив.
  4. В шаблоне рассылки пишем волшебную фразу [ОтчетыВТелеПисьма] (именно так, с квадратными скобками)
  5. Получаем письма из вашей 1С.

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *