Карпов Андрей | Программист 1С | ООО Сибинтек

«Как заработать миллион или история успешного сотрудничества»

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

Повтор отправки сообщений при ошибке.

1. Johney20 10.07.18 09:15 Сейчас в теме
Добрый день!

Есть обработка, которая проверят актуальность копий ИБ. Есть механизм автоматического оповещения о прекращении работы копии. Оповещения отправляются по почте владельцу копии.

Необходимо при ошибке отправки сообщения, повторять отправку, пока сообщение не отправится.

Отправка помещена в попытку, конечно.

Попытка
		Результат = Почта.Послать(Сообщение);
	Исключение
		Текст = НСтр("ru = 'Не удалось отправить письмо через профиль! Пользователь: ""ПользовательПочты "", сервер исходящей почты: ""АдресСервераSMTP""! Причина:
                      |%ОписаниеОшибки%'");
		Текст = СтрЗаменить(Текст, "%ПользовательПочты%", Строка(ПараметрыУчетнойЗаписи.Пользователь));
		Текст = СтрЗаменить(Текст, "%АдресСервераSMTP%", ПараметрыУчетнойЗаписи.СерверИсходящейПочтыSMTP);
		Текст = СтрЗаменить(Текст, "%ОписаниеОшибки%", ОписаниеОшибки());
		ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Текст);
	КонецПопытки;

Показать


Как работает механизм повторной отправки? Что нужно добавить??
Ответы
Сортировка: Древо
2. user627612_petroa 10.07.18 09:27 Сейчас в теме
Может записывать неудачно отправленные в регистр, а потом с помощью рег.задания неудачно отправленные по новой пытаться отправить?
3. Johney20 10.07.18 09:31 Сейчас в теме
(2) Не совсем подходит. Это нужно создавать новый регистр, новое РЗ, слишком много согласований получится для создания новых объектов. Должен быть способ попроще..
4. MamatovIA 10.07.18 09:37 Сейчас в теме
А если сделать так?
Пока Истина цикл
Попытка
        Результат = Почта.Послать(Сообщение);
    Исключение
        Текст = НСтр("ru = 'Не удалось отправить письмо через профиль! Пользователь: ""ПользовательПочты "", сервер исходящей почты: ""АдресСервераSMTP""! Причина:
                      |%ОписаниеОшибки%'");
        Текст = СтрЗаменить(Текст, "%ПользовательПочты%", Строка(ПараметрыУчетнойЗаписи.Пользователь));
        Текст = СтрЗаменить(Текст, "%АдресСервераSMTP%", ПараметрыУчетнойЗаписи.СерверИсходящейПочтыSMTP);
        Текст = СтрЗаменить(Текст, "%ОписаниеОшибки%", ОписаниеОшибки());
        ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Текст);
        Продолжить;
    КонецПопытки;
Прервать;
КонецЦикла;
Показать
5. Johney20 10.07.18 09:42 Сейчас в теме
(4) Мм.. Оператор "Прервать" выйдет из цикла после удачной отправки?? Не зациклится?
6. MamatovIA 10.07.18 09:44 Сейчас в теме
(5)Да, должен выйти.
Если сообщение отправится, то блок Исключение не сработает. Следующий оператор будет Прервать.
12. Johney20 10.07.18 10:29 Сейчас в теме
(6) Да, это пойдет, если только добавить счетчик. А то в случае, например, если упадет почтовый сервер, то отправка сообщений просто зациклится бесконечно и все.
7. qazaas 10.07.18 09:49 Сейчас в теме
(5) Хм...
Если вас предложенный метод устраивает, но вы опасаетесь за вечный цикл, тогда сделайте с меткой, типа так:

~ОтправкаСообщения:
Попытка
        Результат = Почта.Послать(Сообщение);
    Исключение
        Текст = НСтр("ru = 'Не удалось отправить письмо через профиль! Пользователь: ""ПользовательПочты "", сервер исходящей почты: ""АдресСервераSMTP""! Причина:
                      |%ОписаниеОшибки%'");
        Текст = СтрЗаменить(Текст, "%ПользовательПочты%", Строка(ПараметрыУчетнойЗаписи.Пользователь));
        Текст = СтрЗаменить(Текст, "%АдресСервераSMTP%", ПараметрыУчетнойЗаписи.СерверИсходящейПочтыSMTP);
        Текст = СтрЗаменить(Текст, "%ОписаниеОшибки%", ОписаниеОшибки());
        ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Текст);
Перейти ~ОтправкаСообщения;
    КонецПопытки;
Показать


Что-то типа такого...
8. herfis 256 10.07.18 09:54 Сейчас в теме
Я бы просто сделал это фоновым заданием, в нем тупо падал по исключению (т.е. просто пытался отправить без всяких Попытка/исключение), для фонового бы настроил штатные повторы при сбоях. Но лог отправок и ошибок при отправке все равно какой-то отдельный нужен. Можно просто в текстовый файлик писать. Потом его можно анализировать автоматически и выдавать нужным людям предупреждения в 1С, что почта или системные рассылки отвалились.
9. herfis 256 10.07.18 10:03 Сейчас в теме
Хотя, если в лог писать, то "Попытка" таки нужна.
Тогда так:
Попытка
        Результат = Почта.Послать(Сообщение);
        // запись в лог об успешной отправке
        ........
Исключение
        // запись в лог об ошибке отправки
        ........
        ВызватьИсключение ОписаниеОшибки();
КонецПопытки;
Показать
10. necropunk 5 10.07.18 10:07 Сейчас в теме
Я делаю переменную выхода, а сам цикл Пока Сч = 1 По 5.
То есть, если отправилось - ок. Если не отправилось - пять попыток, потом хорош, значит проблема глобальная, долбиться смысла нет.
11. Johney20 10.07.18 10:28 Сейчас в теме
(10) Вот, это логично! Спасибо!
13. herfis 256 10.07.18 10:57 Сейчас в теме
А в фоновом задании даже кодить не надо - там количество повторов при сбоях параметрически настраивается :)
14. user633533_encantado 2 10.07.18 11:15 Сейчас в теме
Суть в том, что метод Послать() не всегда даст исключение, если не удалось послать почту.
После какой-то версии платформы он стал возвращать соответствие с результатом отправки. Вот его и надо анализировать.
15. herfis 256 10.07.18 11:29 Сейчас в теме
(14) Таки да. С 8.3.9
У меня до сих пор 8.3.6 :)
16. kadild 12.07.18 10:53 Сейчас в теме
Ну так оберните весь ваш код в функцию в возвратом параметра удачной отправки и вызывайте его пока не останетесь довольны. В чем проблема-то?
Оставьте свое сообщение

Вакансии

Менеджер по продажам проектов 1С
Санкт-Петербург
Полный день

Бизнес-аналитик 1С
Санкт-Петербург
зарплата от 70 000 руб. до 90 000 руб.
Полный день

Консультант-аналитик 1С
Санкт-Петербург
зарплата от 50 000 руб. до 65 000 руб.
Полный день

Консультант по внедрению 1С
Новосибирск
Полный день

Программист 1С
Новокузнецк
зарплата от 55 000 руб.
Полный день