Параллельная отправка писем из 1С

1. echo77 1911 08.10.21 11:18 Сейчас в теме
Сейчас разные письма отправляются разным контрагентам из 1С. Специфика такова, что перед отправкой иногда надо сформировать отчет и сохранить его в Excel. Это все выполняется в толстом клиенте (из-за ограничений по безопасности).
Дело в том, что (видимо) почтовый сервер Gmail режет скорость трафика, в итоге один поток отправки письма занимает канал максимум в 300Кб/сек. Если отправлять почту из разных потоков - то канал занимается кратно этому значению (проверено экспериментально).
Собственно задача разделить пул контрагентов для отправки между запущенными n-процессами.

В качестве решения вижу создание РС, в котором каждый процесс 1С будет писать, что для текущего Контрагента выполняется отправка, а после отправки - удалять запись.
Может есть проще решение?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
10. RustamZz 11.10.21 11:40 Сейчас в теме
(1) Я бы в общем фоновом задании открывал бы дочерние фоновые на отправку каждого письма отдельно - не придется заморачиваться с контролем, что конкретное письмо отправлено или нет и плюс можно достичь максимальной производительности.
2. echo77 1911 08.10.21 11:35 Сейчас в теме
Есть мысль - непосредственно отправку выполнять запуском фонового задания. Главное проконтроллировать его успешное завершение и сообщить об ошибке, если что не так
3. slavyan_arena 08.10.21 12:44 Сейчас в теме
Здравствуйте.
Если отправляете с 1 учетной записи, то так и будет, даже если разделите контрагентов, если есть возможность отправлять с нескольких учетных записей почты то тогда есть смысл задуматься о параллельной отправке.
Можно не использовать РС, а создать план обмена для регистрации изменений (отправки)
4. echo77 1911 08.10.21 13:19 Сейчас в теме
(3) Отнюдь, я тоже так думал. Опытным путем я установил, что если запустить несколько
ФоновыеЗадания.Выполнить("ЭлектроннаяПочта.ОтправитьСообщение", МассивПараметров)

То количество байт в интервале на сервере кратно увеличивается
user645801_yyyuuu123q; +1 Ответить
5. slavyan_arena 08.10.21 13:36 Сейчас в теме
(4)
тогда бы я разбил контрагентов на группы и каждое регламентное делало бы отправку определенной группы
например ИП/физлица или что-то подобное
6. starik-2005 3096 08.10.21 14:21 Сейчас в теме
https://infostart.ru/1c/articles/370384/ - как-то писал про это. А так - статей на эту тему масса.
7. ImHunter 330 08.10.21 14:47 Сейчас в теме
(1) Бизнес-процессами можно. Сами по себе БП не запараллелят ничего - нужно написать исполнитель задач бизнес-процесса.
Это просто еще один способ для отслеживания намерений и результатов.
В своей конфигурации наваял движок с обработкой трех видов БП. Работает, как часы.
8. user645801_yyyuuu123q 11.10.21 04:15 Сейчас в теме
Если верно понял.
А что если собрать данные на отправку в одном месте и отправлять фоновым заданием по очереди, новое не начинается пока не завершиться старое.

ИмяМетода = "ФоновыеЗаданияОтправка.ОтправкаНаМыло";
	Для Каждого КомуОтправлять Из Список Получателей Цикл
        Ключ = "Рассылка";
	//параметры опциональные
	МассивПараметров = Новый Массив;    
	МассивПараметров.Добавить(FullName);
	МассивПараметров.Добавить(КомуОтправлять);
	МассивПараметров.Добавить("Тема");
	МассивПараметров.Добавить("Отправитель");
	
	ФонЗад = ФоновыеЗадания.Выполнить(ИмяМетода, МассивПараметров, Ключ,"Отправка на почту");
	//останавливаем поток до окончания выполнения фонового задания
	ФонЗад = ФонЗад.ОжидатьЗавершенияВыполнения();
	//анализируем состояние фонового задания
	Если ФонЗад.Состояние = СостояниеФоновогоЗадания.Завершено Тогда
		УдалитьФайлы(FullName);
	КонецЕсли;
        КонецЦикла;
Показать
9. echo77 1911 11.10.21 05:51 Сейчас в теме
(8) Смысл как раз в отправке нескольких разных писем, т.е. надо создавать несколько потоков
Сейчас выполняется так:
КоличествоПотоковОтправкиПочты = 5;
1. Вне цикла создается массив ОтправленныеПрайсы = Новый Массив;

В цикле выполняется:
2. Получаем активные фоновые задания
Функция АктивныеФоновыеЗаданияОтправкаПрайса()
	
	Отбор = Новый Структура("Наименование, Состояние", "ОтправкаПрайса", СостояниеФоновогоЗадания.Активно);
	ФоновыеЗаданияОтправкаПрайса = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор);
	
	Возврат ФоновыеЗаданияОтправкаПрайса;
	
КонецФункции

3. Если количество АктивныеФоновыеЗаданияОтправкаПрайса = КоличествоПотоковОтправкиПочты, то ожидаем завершения ОжидатьЗавершенияВыполнения() и проверяем статус фоновых заданий из массива ОтправленныеПрайсы. Выполненные задания из массива удаляем. Фоновые задания со статусом ЗавершеноАварийно обрабатываем, ошибки сообщаем, из массива удаляем.
4. Иначе отправляем почту фоновым заданием, полученное фоновое задание складываем в массив ОтправленныеПрайсы

После цикла:
выполняем пункты 2-3
11. gybson 11.10.21 20:56 Сейчас в теме
В типовых конфигурациях формирование письмо по шаблону с вложением печатной формы прекрасно работает на сервере, никто вроде не пострадал.

Формировать письмо в документ, документы отправлять регламентом у которого в параметрах контрагент-группа контрагентов-разное
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот