В механизме рассылки отчетов из БСП есть замечательная настройка - "Отправлять пустой". По умолчанию она выключена. Если включена - в любом случае приходит письмо или в папке появляется файл с пустым содержимым. Но если отключена, отчет придет только в том, случае, если в нем что-то есть. Этим мы активно пользуемся для оповещений себя и пользователей о проблемах в программе, авариях, неверных настройках и неправильных данных. У меня есть набор отчетов-сигнализаторов и я ими обязательно поделюсь, но сейчас я хочу рассказать о доработке рассылки отчетов, которая сэкономила лично мне и многим пользователям достаточно много времени.
Итак. Неудобство рассылки - в наличии вложений файлов. Конечно, когда рассылка используется для отправки огромных портянок директорам, это единственный способ донести до них информацию. Но мы-то используем рассылку для оповещений о проблеме, нам нужно быстро видеть,что отправила программа, чтобы отреагировать как можно быстрее.
Представьте или вспомните как это обычно бывает:
- Приходит письмо
- Мы видим факт прихода письма, его тему, но конкретики нет
- Открываем письмо
- Открываем вложение
- Вдумчиво читаем
- Реагируем
Классно было бы сократить это до операций:
- Пришло письмо
- В шторке телефона или в окне оповещений Windows видим содержимое письма
- Реагируем
Но мы же программисты, можем помочь сами себе и облегчить себе же жизнь!
Давайте сделаем какое то ключевое слово, если мы его напишем в шаблоне письма, программа поймет, что ей нужно вставить содержимое отчетов в текстовую часть е-мейла. Пусть это будет
[ОтчетыВТелеПисьма]
напишем так в стиле имеющихся ключевых слов шаблона рассылки отчета.
С помощью расширения попробуем встроиться в процедуру рассылки отчетов. Нам надо попасть в такое место, чтобы отчеты были уже сформированы, но само письмо еще нет. Ознакомимся с кодом из общих модулей "РассылкаОтчетов". Хорошо подойдет процедура "ОтправитьОтчетыПолучателю", у нее есть параметры - "Вложения", "ПараметрыДоставки". Идеально!
Слава расширениям, мы можем выполнить свой код с директивой
&Перед("ОтправитьОтчетыПолучателю")
И ничего не сломаем.
Нам нужно обратиться к ПараметрыДоставки.ШаблонТекста, понять, что нужно вставить содержимое файлов в текстовую часть письма. Дальше прочитать Вложения, перевести их в текст, вставить этот текст вместо ключевого слова шаблона. Звучит очень просто, давайте уже напишем код.
&Перед("ОтправитьОтчетыПолучателю")
Процедура У_ОтправитьОтчетыПолучателю(Вложения, ПараметрыДоставки, СтрокаПолучатель)
ШаблонТекста = ПараметрыДоставки.ШаблонТекста;
Если СтрНайти(ШаблонТекста, "[ОтчетыВТелеПисьма]") = 0 Тогда
Возврат;
КонецЕсли;
ТекстыВложений = "";
Для Каждого Вложение Из ПреобразоватьВСоответствие(Вложения, "Ключ", "Значение") Цикл
Если Не ФорматПисьмаПригоденДляРассылки(Вложение.Ключ) Тогда
Продолжить;
КонецЕсли;
ТекстыВложений = ТекстыВложений + Символы.ПС;
Чтение = Новый ЧтениеТекста(Вложение.Значение);
ТекстыВложений = ТекстыВложений + Чтение.Прочитать();
КонецЦикла;
Если ПараметрыДоставки.ПисьмоВФорматеHTML Тогда
ТекстыВложений = СтрЗаменить(ТекстыВложений, Символы.ПС, "<br>");
КонецЕсли;
ПараметрыДоставки.ШаблонТекста = СтрЗаменить(ШаблонТекста, "[ОтчетыВТелеПисьма]", ТекстыВложений);
КонецПроцедуры
Функция ФорматПисьмаПригоденДляРассылки(НаименованиеФайла)
Если Прав(НаименованиеФайла, 3) = "txt" ИЛИ Прав(НаименованиеФайла, 4) = "html" Тогда
Возврат Истина;
Иначе
Возврат Ложь;
КонецЕсли;
КонецФункции
Обычно письмо о проблеме выглядит так:
Ясно, понятно. Только у нас куча этих обработок, одновременно запущенных, под разные версии, разные порты. Как понять, какая именно зависла? Открываю письмо, открываю вложение, читаю.
Нет, сделаем проще! Смотрите как классно:
Из стандартного оповещения Windows я вижу не только то, что пришло письмо о проблеме, но и конкретную проблему. Я даже не открою это письмо, потому что уже знаю его содержимое, я просто сразу отреагирую - зависла обработка, запущенная на порту 1242. Чиню.
В публикации выложен файл расширения с доработкой рассылки отчетов. Проверен на версии БСП 3.0.1.434, возможно будет работать на более старых версиях (модуль рассылки отчетов менялся не сильно).
- Устанавливаем расширение
- Создаем рассылку отчетов с нужной вам информацией.
- Проверяем формат отправляемых файлов - должен быть текстовый или html, не запакованный в архив.
- В шаблоне рассылки пишем волшебную фразу [ОтчетыВТелеПисьма] (именно так, с квадратными скобками)
- Получаем письма из вашей 1С.