|
Почему дублируется отправка? | ☑ | ||
---|---|---|---|---|
0
prilforreal
09.10.17
✎
11:05
|
Доброго времени суток! Настроил рассылку отчетов, через батник планировщиком запускаю обработку, но по какой то причине отчет отправляется 2 раза, код проверил, операции по одному разу вызываются, в планировщике тоже задание одно, помогите разобраться в чем дело. Либо может как то возможно ограничить выполнение процедуры одним разом?
Процедура ОтправитьПисьма() Экспорт Перем Запрос, ТекстЗапроса; Запрос=Новый Запрос; Запрос.Текст="ВЫБРАТЬ | РасчетыОстаткиИОбороты.Контрагент КАК Дилер |ПОМЕСТИТЬ АктивныеКлиенты |ИЗ | РегистрНакопления.Расчеты.ОстаткиИОбороты(НАЧАЛОПЕРИОДА(&Дата1, ДЕНЬ), КОНЕЦПЕРИОДА(&Дата1, ДЕНЬ), Регистратор, , ) КАК РасчетыОстаткиИОбороты |ГДЕ | (РасчетыОстаткиИОбороты.БалансПриход <> 0 | ИЛИ РасчетыОстаткиИОбороты.БалансРасход <> 0) | |СГРУППИРОВАТЬ ПО | РасчетыОстаткиИОбороты.Контрагент |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | РасчетыОстатки.Контрагент, | РасчетыОстатки.Контрагент.ЭлПочта, | СУММА(РасчетыОстатки.БалансОстаток) КАК БалансКонОст |ИЗ | РегистрНакопления.Расчеты.Остатки( | &НаДату, | Контрагент.ЭлПочта <> """" | И Контрагент В | (ВЫБРАТЬ | АК.Дилер | ИЗ | АктивныеКлиенты КАК АК)) КАК РасчетыОстатки | |СГРУППИРОВАТЬ ПО | РасчетыОстатки.Контрагент, | РасчетыОстатки.Контрагент.ЭлПочта"; Запрос.УстановитьПараметр("НаДату",ТекущаяДата()); Дата1 = НачалоДня(ТекущаяДата()-86400); Запрос.УстановитьПараметр("Дата1",Дата1); Рез=Запрос.Выполнить().Выбрать(); ВыбНачПериода=ДобавитьМесяц(ТекущаяДата(),-1); ВыбКонПериода=ТекущаяДата(); Пока Рез.Следующий() Цикл // // Заполнение полей Контрагент // если не((Пустоезначение(Запрос.БалансПриход)=1)и(Пустоезначение(Запрос.БалансРасход)=1)) тогда ВыбДилер=Рез.Контрагент; ТемаОтправки="Взаморасчеты по дилеру "+СокрЛП(ВыбДилер.Наименование)+" за период "+ПредставлениеПериода(ВыбНачПериода,ВыбКонПериода,"L=ru_RU")+". "; если Рез.БалансКонОст<0 тогда ТемаОтправки=ТемаОтправки+"Ваш долг "+Рез.БалансКонОст+ " руб."; иначе ТемаОтправки=ТемаОтправки+"Ваш баланс "+Рез.БалансКонОст+ " руб."; конецесли; Сформировать1(0); глОтправитьОтчетПоПочте(Таб,ВыбДилер,ТемаОтправки,0,"file:G:\Bases2\Balance.htm",2); // конецесли; КонецЦикла; // // Если ошибка в запросе, то выход из процедуры // Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда // Возврат; // КонецЕсли; // // // Подготовка к заполнению выходных форм данными запроса // // // Заполнение полей "Заголовок" // ВыбНачПериода=ДТА-30; // ВыбКонПериода=ДТА; // Пока Запрос.Группировка(1) = 1 Цикл // // Заполнение полей Контрагент // если не((Пустоезначение(Запрос.БалансПриход)=1)и(Пустоезначение(Запрос.БалансРасход)=1)) тогда // ВыбДилер=Запрос.Контрагент; // ТемаОтправки="Взаморасчеты по дилеру "+СокрЛП(ВыбДилер.Наименование)+" за период "+ПериодСтр(ВыбНачПериода,ВыбКонПериода)+". "; // если Запрос.БалансКонОст<0 тогда // ТемаОтправки=ТемаОтправки+"Ваш долг "+Запрос.БалансКонОст+ " руб."; // иначе // ТемаОтправки=ТемаОтправки+"Ваш баланс "+Запрос.БалансКонОст+ " руб."; // конецесли; // Сформировать(0); // глОтправитьОтчетПоПочте(Таб,ВыбДилер,ТемаОтправки,0,"file:"+КаталогИБ()+"Balance.htm",2); // Сообщить(ТемаОтправки); // конецесли; // КонецЦикла; // // Заполнение полей "Итого" // ВыгрузкаНаличияПленки(); // // Вывод заполненной формы КонецПроцедуры Процедура ОтправитьБалансыВсемДилерамНажатие(Элемент) ОтправитьПисьма(); КонецПроцедуры Процедура ПриОткрытии() ОтправитьПисьма(); ЗавершитьРаботуСистемы(); ПоддерживаемыеТипыВО = Новый Массив(); ПоддерживаемыеТипыВО.Добавить("СканерШтрихкода"); ОповещенияПриПодключении = Новый ОписаниеОповещения("ПодключитьОборудованиеЗавершение", ЭтаФорма); МенеджерОборудованияКлиент.НачатьПодключениеОборудованиеПоТипу(ОповещенияПриПодключении, ЭтаФорма, ПоддерживаемыеТипыВО); КонецПроцедуры |
|||
1
spiller26
09.10.17
✎
11:18
|
(1) Попробуй в код записать, какой нибудь признак, что отправилось. Как вариант пусть записывает файл только не перезатирал предыдущий, что отправил, в тексте укажи момент записи.
Потом смотри если батник отсылает дважды, то будет создано 2 файла-отчета, потом смотри батник. Если система, то увидишь 1 файл, значит что-то в коде. Ну и как вариант №3 почтовой сервер. |
|||
2
prilforreal
09.10.17
✎
11:41
|
(1) Отправляет 2 одинаковых отчета, время получения одинаковое, в журнале планировщика 1 событие, батник 1 раз открывается,
Вот код батника @chcp 1251 "F:\Program Files (x86)\1cv8\common\1cestart.exe" enterprise /F"G:\Bases2" /N"*****" /P"*****" /Execute "G:\Bases2\dispatch\Rassilka.epf" Кажется что-то в коде.. хотя, возможно ли что обработка дважды запускается если на одном терминале открыто несколько клиентов 1С? |
|||
3
spiller26
09.10.17
✎
11:59
|
(2) Сделай проще, при отправке создай док типа Рассылка(Дата).txt , где Дата дата отправления.
И пусть при отправке проверяет файл, если нет такого то отправить, если есть то нет. |
|||
4
spiller26
09.10.17
✎
12:04
|
Вообще по хорошему, мы делали отдельный РС для таких случаев, для проверки отправления отчетов.
Просто есть возможность, что в течении дня можно перезагрузить несколько раз систему и будет он у тебя выполняться столько раз, сколько перезагрузиться система |
|||
5
prilforreal
09.10.17
✎
12:10
|
(4) При чем тут перезагрузка системы? Есть батник, который при открытии запускает 1С под учетной записью любого пользователя, в моем случае Автомат, и запускает обработку, по окончании исполнения обработки 1С закрывается, батник раз в сутки ночью запускаю планировщиком заданий windows
|
|||
6
spiller26
09.10.17
✎
12:12
|
(5) Моё дело предложить, ваше дело использовать или нет.
|
|||
7
prilforreal
09.10.17
✎
12:33
|
(6) Спасибо, буду пытаться)
|
|||
8
prilforreal
09.10.17
✎
14:56
|
(6) Нашел объект в котором ошибка, это процедура отправки из модуля обычного приложения, осталось в нем найти причину..
Процедура глОтправитьОтчетПоПочте(ТаблицаОтправки,Получатель,ТемаПисьма,Сообщения=1,ТелоПисьма="",ТипПисьма=0) Экспорт // // если ТипЗначенияСтр(ТаблицаОтправки)="Таблица" Тогда Если ТипЗнч(ТаблицаОтправки)=Тип("ТабличныйДокумент") или ТипЗнч(ТаблицаОтправки)=Тип("ПолеТабличногоДокумента") тогда // ИмяФайла=КаталогПользователя()+"Отчет"+СтрЗаменить(СокрЛП(ТекущаяДата()),".","")+"_"+СтрЗаменить(СокрЛП(ТекущееВремя()),":","")+".xls"; ИмяФайла=КаталогВременныхФайлов()+"Отчет"+Формат(ТекущаяДата(),"ДФ=""ддммгггг'_'ЧЧммсс""")+".xls"; // ТаблицаОтправки.Записать(ИмяФайла,1); ТаблицаОтправки.Записать(ИмяФайла,ТипФайлаТабличногоДокумента.XLS); //иначеесли ТипЗначенияСтр(ТаблицаОтправки)="Строка" тогда ИначеЕсли ТипЗнч(ТаблицаОтправки)=Тип("Строка") тогда // поз=Найти(ТаблицаОтправки,";"); поз=СтрНайти(ТаблицаОтправки,";"); ИмяФайла=Новый Массив;//""; пока поз<>0 цикл тестфайла=Лев(ТаблицаОтправки,поз-1); фс=Новый Файл(тестфайла); // если фс.СуществуетФайл(тестфайла)=1 тогда Если фс.Существует() тогда // если Пустоезначение(ИмяФайла)=0 тогда // ИмяФайла=ИмяФайла+";"; // конецесли; // ИмяФайла=ИмяФайла+тестфайла; ИмяФайла.Добавить(фс); конецесли; ТаблицаОтправки=Сред(ТаблицаОтправки,поз+1); поз=Найти(ТаблицаОтправки,";"); конеццикла; // фс=Новый Файл(ТаблицаОтправки); // если фс.СуществуетФайл(ТаблицаОтправки)=1 тогда Если фс.Существует() тогда //если Пустоезначение(ИмяФайла)=0 тогда // ИмяФайла=ИмяФайла+";"; //конецесли; //ИмяФайла=ИмяФайла+ТаблицаОтправки; ИмяФайла.Добавить(фс); конецесли; иначе ИмяФайла=""; конецесли; // АдресЭл=Константы.ЭлПочта.Получить(); Профиль=Новый ИнтернетПочтовыйПрофиль; Профиль.АдресСервераSMTP=АдресЭл.Сервер; Профиль.АдресСервераPOP3=АдресЭл.Сервер; Профиль.Таймаут=60; Профиль.ПортSMTP=?(НЕ ЗначениеЗаполнено(АдресЭл.Порт),"25",Строка(АдресЭл.Порт)); Профиль.ПортPOP3=110; Профиль.ПользовательSMTP=АдресЭл.Логин; Профиль.ПарольSMTP=АдресЭл.Пароль; Профиль.Пользователь=АдресЭл.Логин; Профиль.Пароль=АдресЭл.Пароль; Профиль.АутентификацияSMTP=СпособSMTPАутентификации.Login; Сообщение=Новый ИнтернетПочтовоеСообщение; Сообщение.Отправитель=АдресЭл.АдресОтправителя; Сообщение.ИмяОтправителя=АдресЭл.Отправитель; Сообщение.Получатели.Добавить(СокрЛП(Получатель.ЭлПочта)); Сообщение.Тема=ТемаПисьма; Если НЕ ЗначениеЗаполнено(ТелоПисьма) тогда Сообщение.Тексты.Добавить(ТемаПисьма,ТипТекстаПочтовогоСообщения.ПростойТекст); ИначеЕсли лев(ТелоПисьма,5)="file:" тогда // ВК.ЗагрузитьИзФайла(СокрЛП(сред(ТелоПисьма,6))); ТекстСообщения=""; ФайлТекстаСообщения=Новый ТекстовыйДокумент; ФайлТекстаСообщения.Прочитать(СокрЛП(сред(ТелоПисьма,6))); ТекстСообщения=ФайлТекстаСообщения.ПолучитьТекст(); Сообщение.Тексты.Добавить(ТекстСообщения,ТипТекстаПочтовогоСообщения.HTML); Иначе Сообщение.Тексты.Добавить(ТелоПисьма,ТипТекстаПочтовогоСообщения.ПростойТекст); КонецЕсли; Если ТипЗНЧ(ИмяФайла)=Тип("Строка") и ЗначениеЗаполнено(ИмяФайла) тогда ФайлСообщения=Новый Файл(ИмяФайла); Сообщение.Вложения.Добавить(ИмяФайла,ФайлСообщения.Имя); ИначеЕсли ТипЗнч(ИмяФайла)=Тип("Массив") тогда Для каждого МЗнач из ИмяФайла Цикл Сообщение.Вложения.Добавить(ИмяФайла.ПолноеИмя,ИмяФайла.Имя); КонецЦикла; КонецЕсли; Почта=Новый ИнтернетПочта; Попытка Почта.Подключиться(Профиль); Исключение Сообщить("Ошибка отправки файла: "+ИмяФайла); Сообщить(ОписаниеОшибки()); Возврат; КонецПопытки; Попытка Почта.Послать(Сообщение,ОбработкаТекстаИнтернетПочтовогоСообщения.НеОбрабатывать,ПротоколИнтернетПочты.SMTP); СообщенияОтправки=Почта.Послать(Сообщение,ОбработкаТекстаИнтернетПочтовогоСообщения.НеОбрабатывать,ПротоколИнтернетПочты.SMTP); Исключение Сообщить(Получатель.ЭлПочта); Сообщить(ОписаниеОшибки()); КонецПопытки; УдалитьФайлы("file:G:\Bases2\Balance.htm"); Сообщить(ТемаПисьма); Почта.Отключиться(); КонецПроцедуры |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |