Сейчас разные письма отправляются разным контрагентам из 1С. Специфика такова, что перед отправкой иногда надо сформировать отчет и сохранить его в Excel. Это все выполняется в толстом клиенте (из-за ограничений по безопасности).
Дело в том, что (видимо) почтовый сервер Gmail режет скорость трафика, в итоге один поток отправки письма занимает канал максимум в 300Кб/сек. Если отправлять почту из разных потоков - то канал занимается кратно этому значению (проверено экспериментально).
Собственно задача разделить пул контрагентов для отправки между запущенными n-процессами.
В качестве решения вижу создание РС, в котором каждый процесс 1С будет писать, что для текущего Контрагента выполняется отправка, а после отправки - удалять запись.
Может есть проще решение?
Дело в том, что (видимо) почтовый сервер Gmail режет скорость трафика, в итоге один поток отправки письма занимает канал максимум в 300Кб/сек. Если отправлять почту из разных потоков - то канал занимается кратно этому значению (проверено экспериментально).
Собственно задача разделить пул контрагентов для отправки между запущенными n-процессами.
В качестве решения вижу создание РС, в котором каждый процесс 1С будет писать, что для текущего Контрагента выполняется отправка, а после отправки - удалять запись.
Может есть проще решение?
По теме из базы знаний
- 1С:Управление металлургическим комбинатом 2. Модуль для 1С:ERP
- 1С:Хлебобулочное и кондитерское производство. Модуль для 1С:ERP и 1С:КА
- 1С:Управление строительной организацией. 1С:ERP Управление строительной организацией 2
- DaJet Exchange: обмен данными с 1С (часть 1)
- Особенности использования мобильной платформы на крупных предприятиях
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Здравствуйте.
Если отправляете с 1 учетной записи, то так и будет, даже если разделите контрагентов, если есть возможность отправлять с нескольких учетных записей почты то тогда есть смысл задуматься о параллельной отправке.
Можно не использовать РС, а создать план обмена для регистрации изменений (отправки)
Если отправляете с 1 учетной записи, то так и будет, даже если разделите контрагентов, если есть возможность отправлять с нескольких учетных записей почты то тогда есть смысл задуматься о параллельной отправке.
Можно не использовать РС, а создать план обмена для регистрации изменений (отправки)
(1) Бизнес-процессами можно. Сами по себе БП не запараллелят ничего - нужно написать исполнитель задач бизнес-процесса.
Это просто еще один способ для отслеживания намерений и результатов.
В своей конфигурации наваял движок с обработкой трех видов БП. Работает, как часы.
Это просто еще один способ для отслеживания намерений и результатов.
В своей конфигурации наваял движок с обработкой трех видов БП. Работает, как часы.
Если верно понял.
А что если собрать данные на отправку в одном месте и отправлять фоновым заданием по очереди, новое не начинается пока не завершиться старое.
А что если собрать данные на отправку в одном месте и отправлять фоновым заданием по очереди, новое не начинается пока не завершиться старое.
ИмяМетода = "ФоновыеЗаданияОтправка.ОтправкаНаМыло";
Для Каждого КомуОтправлять Из Список Получателей Цикл
Ключ = "Рассылка";
//параметры опциональные
МассивПараметров = Новый Массив;
МассивПараметров.Добавить(FullName);
МассивПараметров.Добавить(КомуОтправлять);
МассивПараметров.Добавить("Тема");
МассивПараметров.Добавить("Отправитель");
ФонЗад = ФоновыеЗадания.Выполнить(ИмяМетода, МассивПараметров, Ключ,"Отправка на почту");
//останавливаем поток до окончания выполнения фонового задания
ФонЗад = ФонЗад.ОжидатьЗавершенияВыполнения();
//анализируем состояние фонового задания
Если ФонЗад.Состояние = СостояниеФоновогоЗадания.Завершено Тогда
УдалитьФайлы(FullName);
КонецЕсли;
КонецЦикла;
Показать
(8) Смысл как раз в отправке нескольких разных писем, т.е. надо создавать несколько потоков
Сейчас выполняется так:
КоличествоПотоковОтправкиПочты = 5;
1. Вне цикла создается массив ОтправленныеПрайсы = Новый Массив;
В цикле выполняется:
2. Получаем активные фоновые задания
3. Если количество АктивныеФоновыеЗаданияОтправкаПрайса = КоличествоПотоковОтправкиПочты, то ожидаем завершения ОжидатьЗавершенияВыполнения() и проверяем статус фоновых заданий из массива ОтправленныеПрайсы. Выполненные задания из массива удаляем. Фоновые задания со статусом ЗавершеноАварийно обрабатываем, ошибки сообщаем, из массива удаляем.
4. Иначе отправляем почту фоновым заданием, полученное фоновое задание складываем в массив ОтправленныеПрайсы
После цикла:
выполняем пункты 2-3
Сейчас выполняется так:
КоличествоПотоковОтправкиПочты = 5;
1. Вне цикла создается массив ОтправленныеПрайсы = Новый Массив;
В цикле выполняется:
2. Получаем активные фоновые задания
Функция АктивныеФоновыеЗаданияОтправкаПрайса()
Отбор = Новый Структура("Наименование, Состояние", "ОтправкаПрайса", СостояниеФоновогоЗадания.Активно);
ФоновыеЗаданияОтправкаПрайса = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор);
Возврат ФоновыеЗаданияОтправкаПрайса;
КонецФункции
3. Если количество АктивныеФоновыеЗаданияОтправкаПрайса = КоличествоПотоковОтправкиПочты, то ожидаем завершения ОжидатьЗавершенияВыполнения() и проверяем статус фоновых заданий из массива ОтправленныеПрайсы. Выполненные задания из массива удаляем. Фоновые задания со статусом ЗавершеноАварийно обрабатываем, ошибки сообщаем, из массива удаляем.
4. Иначе отправляем почту фоновым заданием, полученное фоновое задание складываем в массив ОтправленныеПрайсы
После цикла:
выполняем пункты 2-3
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот