Имя: Пароль:
1C
1С v8
Отправка сообщений по почте из 1с
0 Eskeych
 
22.07.21
09:50
Приветствую, столкнулся с проблемой при отправке сообщений. Написал обработку, которая формирует отчет и сохраняет его в файл, создает очередь отправки в рег.сведений. Спустя время запускается регламентное задание и отправляет его на почту. Вроде как все работает, НО пока он его отправляет ничего в программе делать невозможно, висит колесико от мышки... 1с думает. Пробовал запихнуть его в фоновое задание результат тот же. Так же ставил регламентное на повтор и отправлял по 1 сообщению. Работать можно но постоянные подлагивания от отправки сообщений как бы тоже не приятно. Есть возможность отправлять сообщения, что бы на работу пользователя вообще никак не влияли? Конфа Управление производственным предприятием, редакция 1.3 (1.3.162.5)
1 ДенисЧ
 
22.07.21
09:53
Если регламентное задание тормозит интерфейс - то это неправильное задание и оно неправильно работает.
2 Eskeych
 
22.07.21
09:54
А не может тормозить из-за того что оно тяжелое? ну типо объем данных все дела
3 Asmody
 
22.07.21
09:55
"Есть возможность отправлять сообщения, что бы на работу пользователя вообще никак не влияли" - есть
4 Kassern
 
22.07.21
09:56
(0) конфигурация какая? База серверная?
5 Asmody
 
22.07.21
09:56
(2) А ты гигабайты по почте шлёшь?
6 Asmody
 
22.07.21
09:56
(4) Там же написано - "УПП". Какая она может быть?
7 Eskeych
 
22.07.21
09:56
(4) База файловая Конфа упп
8 OldCondom
 
22.07.21
09:57
в момент отправки писем смотри диспетчер задач. Очередь диска и активность сети
9 Kassern
 
22.07.21
09:57
(6) а в УПП разве нет типовой рассылки отчетов?
10 Eskeych
 
22.07.21
09:57
(5) хуже...килобайты :)
11 Asmody
 
22.07.21
09:57
(7) "Файловая" и "УПП" в одном предложении применяться не может!
12 Kassern
 
22.07.21
09:57
(6) Не дочитал видимо до конца)
13 ДенисЧ
 
22.07.21
09:58
(6) Ты никогда не видел файловых УПП?
14 Kassern
 
22.07.21
09:58
(13) у ТС наглядный пример))
15 ДенисЧ
 
22.07.21
09:59
Если коротко - регламентное задание выполняется на сервере и никакого влияния на интерфейс пользователя оказывать не может.
Если оказывает - это не регламентное задание, максимум - обработчик ожидания
16 Eskeych
 
22.07.21
10:00
(1) а не правильно работает, это типо не правильно создано, галочки неправильно проставлены в самом регламентном. Или сам код
17 Eskeych
 
22.07.21
10:01
(15) Так он висит при отправке прям, может конечно изза того что подключается к серверу почты
18 ДенисЧ
 
22.07.21
10:02
(17) Это не регламентное задание.
19 OldCondom
 
22.07.21
10:02
Иди завари кофе. Нужна кофейная гуща, без нее никак. Не инструментами же белого человека пользоваться.
20 Eskeych
 
22.07.21
10:05
(17) как не регламентное, если оно даже в консоли регл заданий висит.
(11) Сейчас буду заливать базу на сервер, посмотрю что там будет
21 Eskeych
 
22.07.21
10:12
Процедура Рассылка() Экспорт
    Сообщить("Начинаю выполняться");
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ Первые 1
                   |    БК_РассылкаПисем.Получатель,
                   |    БК_РассылкаПисем.Почта,
                   |    БК_РассылкаПисем.ПутьХранения
                   |ИЗ
                   |    РегистрСведений.БК_РассылкаПисем КАК БК_РассылкаПисем";
    Выборка = Запрос.Выполнить().Выбрать();
    КолвоОшибок = 0;
    ОтправленоСообщений = 0;
    Пока Выборка.Следующий() Цикл
        СотрудникОтбор = Выборка.Получатель;
            
        ОтправкаУведомлений(Выборка.ПутьХранения, Выборка.Почта, СотрудникОтбор, КолвоОшибок, ОтправленоСообщений);
    
    КонецЦикла;
    
КонецПроцедуры

Процедура ОтправкаУведомлений(ПолноеИмяФайла, Получатель, СотрудникОтбор, КолвоОшибок, ОтправленоСообщений)
    
    Если КолвоОшибок = 3 Тогда
        ВызватьИсключение "ОШИБКА!!! Рассылка прервана из-за большого количества ошибок. Проверьте правильность заполнения данных.";
    КонецЕсли;
    
    Профиль = Новый ИнтернетПочтовыйПрофиль;
    Профиль.АдресСервераSMTP = "smtp.yandex.ru";
    Профиль.ПользовательSMTP = "";
    Профиль.ПарольSMTP = "";
    Профиль.ИспользоватьSSLSMTP = Истина;
    Профиль.ПортSMTP = 465;
    Профиль.АутентификацияSMTP = СпособSMTPАутентификации.Login;
    
    Письмо = Новый ИнтернетПочтовоеСообщение;
    Текст = Письмо.Тексты.Добавить("Расчетный лист");
    Текст.ТипТекста = ТипТекстаПочтовогоСообщения.ПростойТекст;
    Письмо.Тема = "Расчетный Лист";
    Письмо.Отправитель = "dushka@bcobninsk.ru";
    Письмо.ИмяОтправителя = "Расчетный лист";
    Письмо.Вложения.Добавить(ПолноеИмяФайла);
    Письмо.Получатели.Добавить("");//Получатель
        Почта = Новый ИнтернетПочта;    
    Попытка
        Почта.Подключиться(Профиль);
        //Сообщить("Подключено");
    Исключение
        Сообщить("Не удалось подключиться к серверу");
        Сообщить(ОписаниеОшибки());
        КолвоОшибок = КолВоОшибок + 1;
        Отправлено = Ложь;
    КонецПопытки;

    Попытка
        Почта.Послать(Письмо);
        Сообщить("Письмо сотруднику: "+СотрудникОтбор+" отправлено");
        Отправлено = Истина;
        ОтправленоСообщений = ОтправленоСообщений + 1;
    Исключение
        Сообщить("Не удалось отправить письмо для "+СотрудникОтбор+"");
        Сообщить(ОписаниеОшибки());
        Отправлено = Ложь;
        КолвоОшибок = КолВоОшибок + 1;
    КонецПопытки;
    Почта.Отключиться();

    
    Если Отправлено = Истина Тогда
        УдалитьСтрокуОчереди(СотрудникОтбор);                  
    КонецЕсли;
    

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



Процедура УдалитьСтрокуОчереди(Сотрудник);
    
    НаборЗаписей = РегистрыСведений.БК_РассылкаПисем.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.Получатель.Установить(Сотрудник);
    НаборЗаписей.Прочитать();
    Для каждого Запись из НаборЗаписей Цикл
        НаборЗаписей.Удалить(Запись);
    КонецЦикла;    
    НаборЗаписей.Записать(Истина);
    
КонецПроцедуры

Вот сам код регл задания
что с ним не так?)
в самом регл задании отмечены признак использования и предопределенный больше с ним ничего не делал
22 Eskeych
 
22.07.21
10:12
Up
23 Kassern
 
22.07.21
10:16
(21) попробуй рег задание под какого-нить технического юзвера сделать и запусти под ним отдельный сеанс. После этого у других не должно тормозить, а вообще поставьте уже скульную базу и не будет таких танцев с бубном
24 Azverin
 
22.07.21
10:17
(21)  Письмо.Отправитель = "dushka@bcobninsk.ru"; - привет земляку!
25 ДенисЧ
 
22.07.21
10:17
Так всё-таки файловая?
В файловой регламентные выполняются от пользователя, в его же сеансе. Поэтому и тормозит.
26 Eskeych
 
22.07.21
10:19
(23) Сейчас загружаю конфу на sql. буду там пробовать. а от тех юзера это заходить под отдельным пользователем и что бы от него сеанс висел?)
27 Eskeych
 
22.07.21
10:19
(24) Ахаха дарова :) тоже с обнинска ?)
28 Smallrat
 
22.07.21
10:20
(0) В файловой у 1С есть какая-то фича - типа специальный сеанс под выполнение регзаданий. Типа запускаете на каком-нить компе конфу под этим пользователем и он там крутит регзадания.
29 Azverin
 
22.07.21
10:20
(27) Да.
(26) Да. Почитай на ИТС про работу регламентных заданий на файловой базе (тебе уже указали на этот нюанс).
30 Eskeych
 
22.07.21
10:21
Сейчас попробую, отпишусь :)
31 Eskeych
 
22.07.21
10:52
Ну вроде бы работает, меня не трогает. Всем спасибо! :)
32 Царь-пушка
 
22.07.21
10:53
можно попробовать перейти на файловую ERP может поможет...
33 Eskeych
 
22.07.21
11:06
(32) клиенты с ERP еще не разобрались, сидят на упп еще
34 hhhh
 
22.07.21
11:10
(32) это конечно юмор, но файловая ERP прекрасно работает, если пользователь один в базе.
35 Мультук
 
гуру
22.07.21
11:35
(21) Т.е. если

Почта.Подключиться(Профиль);

не получилось, то все равно заставим 1С делать

Почта.Послать(Письмо);


А выполнение команды

Почта.Отключиться();


вообще должно пройти "по любому".
36 Eskeych
 
22.07.21
11:52
(35) Согласен, косяк.
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс