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

05.07.19

Интеграция - Email рассылки

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
[Расширение] Доработка рассылки отчетов, отчет в теле письма.:
.cfe 5,22Kb
53
53 Скачать (1 SM) Купить за 1 850 руб.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&Перед("ОтправитьОтчетыПолучателю")
Процедура У_ОтправитьОтчетыПолучателю(Вложения, ПараметрыДоставки, СтрокаПолучатель)
	
	ШаблонТекста = ПараметрыДоставки.ШаблонТекста;
	Если СтрНайти(ШаблонТекста, "[ОтчетыВТелеПисьма]") = 0 Тогда
		Возврат;
	КонецЕсли;
	
	ТекстыВложений = "";
		
	Для Каждого Вложение Из ПреобразоватьВСоответствие(Вложения, "Ключ", "Значение") Цикл
		Если Не ФорматПисьмаПригоденДляРассылки(Вложение.Ключ) Тогда
			Продолжить;
		КонецЕсли;
		ТекстыВложений = ТекстыВложений + Символы.ПС;
		Чтение = Новый ЧтениеТекста(Вложение.Значение);
		ТекстыВложений = ТекстыВложений  + Чтение.Прочитать();
	КонецЦикла;
	
	Если ПараметрыДоставки.ПисьмоВФорматеHTML Тогда
		ТекстыВложений = СтрЗаменить(ТекстыВложений, Символы.ПС, "<br>");
	КонецЕсли;
		
	ПараметрыДоставки.ШаблонТекста = СтрЗаменить(ШаблонТекста, "[ОтчетыВТелеПисьма]", ТекстыВложений); 

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

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

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

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

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

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

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

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

Расширение рассылка отчетов БСП

См. также

Взаиморасчеты Email рассылки Акт сверки Бухгалтер Пользователь Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Бухгалтерский учет Платные (руб)

Внешняя обработка для Бухгалтерии 3.0 - позволяет автоматически формировать документы «Акт сверки расчетов» с контрагентами за выбранный период с последующей фоновой отправкой на почту контрагента.

3000 руб.

25.11.2020    24561    240    8    

206

Email рассылки Программист Пользователь Платформа 1С v8.3 Конфигурации 1cv8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Платные (руб)

Решение для массовой рассылки печатных форм (в том числе и дополнительных) любых документов, и произвольных файлов. Рассылка возможна посредством электронной почты, Telegram и файловой системы. Рассылка пакета документов. Добавление факсимильных печати и подписи. Произвольные шаблоны HTML/Simple text с автозаполнением любыми полями документа. Любые форматы файлов. Упаковка вложений в архив. Транслитерация имен файлов. Разбиение рассылки на произвольные порции. Обход спам-фильтров. Журналирование рассылок.

4920 руб.

30.06.2022    11088    72    98    

34

Взаиморасчеты Email рассылки Бухгалтер Пользователь Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Бухгалтерский учет Платные (руб)

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

7080 руб.

11.05.2021    9497    6    1    

6

Email рассылки Взаиморасчеты Акт сверки Бухгалтер Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 10 Россия Управленческий учет Платные (руб)

Обработка для конфигурации Управление торговлей 10.3 (КА 1.1, УПП 1.3), которая автоматически формирует акты сверок взаиморасчетов, позволяет их скопом распечатать и разослать по электронной почте контрагентам.

2160 руб.

08.02.2018    31503    47    0    

54
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. qeos 118 02.02.21 17:59 Сейчас в теме
2. ardn 658 02.02.21 18:15 Сейчас в теме
3. qeos 118 04.02.21 17:01 Сейчас в теме
(2) скриншоты отображаются в публикации нормально? или так задумано?
что за обработка Моби-С
4. TariK 28.04.22 09:57 Сейчас в теме
Что с скринами? Исправьте!
5. ardn 658 28.04.22 11:37 Сейчас в теме
(4)
В данной публикации имеется два изображения. На данный момент они оба отображаются нормально, вставлены через движок сайта.
6. user_2010 954 28.04.22 13:12 Сейчас в теме
(5) с изображениями проблема - все они закрыты другой картинкой "Не работает обработка Моби-С"
8. ardn 658 28.04.22 13:28 Сейчас в теме
(6)
Давайте вместе попробуем проанализировать текст статьи и приведенные тут изображения.
В тексте имеются следующие слова:
Представьте или вспомните как это обычно бывает:

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

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

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

Далее следует изображение области уведомлений Windows с уведомлением о пришедшем письме.

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


На мой взгляд, изображения соответствуют тексту. Что вы думаете по этому поводу?
10. user_2010 954 28.04.22 13:56 Сейчас в теме
(8) все ваши картинки - закрыты какой-то другой картинкой с текстом типа "Не работает обработка Моби-С".
Может быть вы видите свои картинки нормально. Я же вижу вместо ваших картинок - одну и туже - с текстом "Не работает обработка Моби-С".
7. user_2010 954 28.04.22 13:28 Сейчас в теме
Вопрос гуру рассылок.
У рассылки есть параметр "Отправлять пустой". Этот флаг не установлен. Т.е. пустые отчеты не должны приходить.
Каким образом программа определяет - пустой результат или не пустой?

Наблюдаю отправку письма в любом случае - даже если в отчете нет ни одной строки - только шапка отчета.
В чем может быть проблема? Как победить это?
Спасибо!
9. ardn 658 28.04.22 13:36 Сейчас в теме
(7)
Исследовал этот вопрос.

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

По поводу проверки на пустоту - в коде есть проверка, используются ли в схеме СКД внешние источники данных или данные, подставленные в схему из таблицы значений. (иногда так делаем при программном формировании отчета)
Например так
ВнешниеНаборыДанных = Новый Структура("тз...", тз...);
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки, Истина);
В этом случае рассылка считает, что результат будет не пустой всегда.
11. user_2010 954 28.04.22 13:58 Сейчас в теме
(9) понятно! спасибо! у меня как раз внешний набор данных.
15. Ranetka 23 23.11.22 13:58 Сейчас в теме
(9) Вот просто спасибо за разбор проблемы с отправкой пустого. Сэкономили кучу времени.
12. user1209971 74 30.05.22 09:24 Сейчас в теме
#Вставка                           
	Если СтрНайти(ШаблонТекста, "[ОтчетыВТелеПисьма]") > 0 Тогда
		
		ТекстыВложений = "";
		Для Каждого Вложение Из ПараметрыПисьма.Вложения Цикл
			Если Не ФорматВложенияПригоденДляВставкиВТелоПисьма(Вложение.Ключ) Тогда
				Продолжить;
			КонецЕсли;
			ТекстыВложений = ТекстыВложений + Символы.ПС;
			Чтение = Новый ЧтениеТекста(Вложение.Значение);
			ТекстыВложений = ТекстыВложений  + Чтение.Прочитать();
		КонецЦикла;
		
		Если ПараметрыДоставки.ПисьмоВФорматеHTML Тогда
			ТекстыВложений = СтрЗаменить(ТекстыВложений, Символы.ПС, "");
		КонецЕсли;
			
		ШаблонТекста = СтрЗаменить(ШаблонТекста, "[ОтчетыВТелеПисьма]", ТекстыВложений);
	КонецЕсли; 
#КонецВставки
Показать


Измененный вариант в расширении процедуры &Вместо (с контролем)

После получения текста шаблона в процедуре ОтправитьОтчетыПолучателю
ШаблонТекста = ПараметрыДоставки.ШаблонТекста;


Это решение на случай, когда получатель не один, а несколько, то есть рассылка каждому контрагенту (пользователю) по отдельности,
когда каждому нужно вставить в его письмо свой текст из вложения.
Вариант описанный в статье, заменяет текст в шаблоне для всех получателей писем по данным вложения для первого получателя
13. ardn 658 30.05.22 09:25 Сейчас в теме
(12)
заменяет текст в шаблоне для всех получателей писем по данным вложения для первого получателя

Спасибо!
14. user1209971 74 30.05.22 12:48 Сейчас в теме
(13) Взаимно, мне тоже времени сэкономили :)
16. blandinko 13.04.23 16:27 Сейчас в теме
подскажите, пожалуйста, а можно ли добавить таблицу отчета в тело письма?
17. ardn 658 13.04.23 16:40 Сейчас в теме
(16)

Да, конечно
Я письмо в формате html прикрепляю
Прикрепленные файлы:
18. blandinko 13.04.23 17:27 Сейчас в теме
(17) у меня тоже письмо в формате html, отчет - html, в итоге в тексте письма сначала почему-то выводится кусок кода html, как на втором скриншоте, а потом таблица отчета
Прикрепленные файлы:
19. blandinko 14.04.23 11:24 Сейчас в теме
Спасибо Вам большое за доработку, очень полезно.

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

Пока что никак не получается, ни границы, ни форматирование не применяются к таблице в теле письма...
20. Valeriy009 15.08.24 15:06 Сейчас в теме
спасибо большое! вставил в типовой функционал, c условием если тело письма http и вложение html то вставлять автоматически.
Оставьте свое сообщение