|
Ошибка в отработке регламентного задания | ☑ | ||
---|---|---|---|---|
0
NIGHTHUNTER
23.06.22
✎
10:07
|
Регламентное задание отрабатывать по документам должно раз, проставляя флаг булево в строки документа, что свидетельствует об исключении повторной рассылки, зацикливания.
Но почему то зацикливается. Я на простейшем тестовом примере проверил, и оставил, в работу. Я занимаюсь этим вопросом, зависло на переименовании синонима, решил спросить. А так я сам занимаюсь. Спрашиваю, для получения полезных советов, рекомендаций. // &НаСервере Процедура Отправить() УстановитьПРивилегированныйРежим(Истина); МассивКому = Новый Массив; МассивВложений = Новый Массив; ТекстПисьма = ""; ТемаПисьма = ""; // Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ | ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада.Ссылка КАК Ссылка, | ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада.Ссылка.Номер КАК Номер, | ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада.Ссылка.Дата КАК Дата, | ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада.Ссылка.Менеджер КАК Менеджер, | ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада.НомерСтроки КАК НомерСтроки, | ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада.ДатаПоступления КАК ДатаПоступления, | ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада.Сертификат КАК Сертификат, | ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада.ПаспортИзделия КАК ПаспортИзделия, | РАЗНОСТЬДАТ(ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада.ДатаПоступления, &ТекДата, ДЕНЬ) КАК РазностьДат |ИЗ | Документ.ХХХ_ПредварительныйЗаказПоставщику.ОтметкиСклада КАК ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада |ГДЕ | ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада.Сертификат = ЛОЖЬ | И ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада.ПаспортИзделия = ЛОЖЬ | И ДОБАВИТЬКДАТЕ(ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада.ДатаПоступления, ДЕНЬ, 2) < &ТекДата | И ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада.ДатаПоступления >= &ДатаНачала | И НЕ ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада.УведомлениеОтправлено = ИСТИНА | |УПОРЯДОЧИТЬ ПО | РазностьДат"; Запрос.УстановитьПараметр("ТекДата", ТекущаяДата()); Запрос.УстановитьПараметр("ДатаНачала", Дата("20220621")); Рез = Запрос.Выполнить(); // НомерПредыдущегоДокумента = Неопределено; Если Не Рез.Пустой() Тогда Выборка = Рез.Выбрать(); Пока Выборка.Следующий() Цикл // Если НомерПредыдущегоДокумента = Неопределено ИЛИ Не Выборка.Номер = НомерПредыдущегоДокумента Тогда Сообщить("Отправляется " + Выборка.Номер); // ТемаПисьма = "О предоставлении сертификата"; ТекстПисьма = "Срочно предоставитьпаспорт изделия № " + Выборка.Номер + " от " + ФОРМАТ(Выборка.Дата, "ДЛФ=DD") + ". " + Символы.ПС; // // Ответственный менеджер ЕАдресМенеджер = ЕАдресПользователя(Выборка.Менеджер); НашПолучатель = Новый Структура; НашПолучатель.Вставить("Адрес", ЕАдресМенеджер); НашПолучатель.Вставить("Представление", ЕАдресМенеджер); Если ЗначениеЗаполнено(НашПолучатель.Адрес) Тогда МассивКому.Добавить(НашПолучатель); КонецЕсли; // // Контролирующее лицо КонтролирующееЛицо = Справочники.Пользователи.НайтиПоНаименованию("Пользователь 1", 1); ЕКонтролирующееЛицо = ЕАдресПользователя(КонтролирующееЛицо); НашПолучатель = Новый Структура; НашПолучатель.Вставить("Адрес", ЕКонтролирующееЛицо); НашПолучатель.Вставить("Представление", ЕКонтролирующееЛицо); Если ЗначениеЗаполнено(НашПолучатель.Адрес) Тогда МассивКому.Добавить(НашПолучатель); КонецЕсли; // Если МассивКому.Количество() > 0 Тогда // отправка писсьма УчетнаяЗаписьПочты = Справочники.УчетныеЗаписиЭлектроннойПочты.СистемнаяУчетнаяЗаписьЭлектроннойПочты; ПараметрыОтправки = Новый Структура; ПараметрыОтправки.Вставить("Важность", ВажностьИнтернетПочтовогоСообщения.Обычная); ПараметрыОтправки.Вставить("Кодировка", "UTF-8"); ПараметрыОтправки.Вставить("Кому", МассивКому); ПараметрыОтправки.Вставить("Вложения", МассивВложений); ПараметрыОтправки.Вставить("ОбрабатыватьТексты", Ложь); ПараметрыОтправки.Вставить("УдалитьСоединение", Истина); ПараметрыОтправки.Вставить("ПротоколПочты", "IMAP"); ПараметрыОтправки.Вставить("ТипТекста", Перечисления.ТипыТекстовЭлектронныхПисем.ПростойТекст); ПараметрыОтправки.Вставить("Тема", ТемаПисьма); ПараметрыОтправки.Вставить("Тело", ТекстПисьма); РаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение(УчетнаяЗаписьПочты, ПараметрыОтправки); КонецЕсли; // НомерПредыдущегоДокумента = Выборка.Номер; КонецЕсли; // ДокПредварительныйЗаказПоставщику = Выборка.Ссылка.ПолучитьОбъект(); НайденнаяСтрока = ДокПредварительныйЗаказПоставщику.ОтметкиСклада.Найти(Выборка.НомерСтроки, "НомерСтроки"); НайденнаяСтрока.УведомлениеОтправлено = Истина; ДокПредварительныйЗаказПоставщику.Записать(); КонецЦикла; КонецЕсли; // КонецПроцедуры // |
|||
1
Деспот_1С
23.06.22
✎
10:15
|
Заремируй эти строки кода и посмотри уйдет ли зацикливание:
ДокПредварительныйЗаказПоставщику = Выборка.Ссылка.ПолучитьОбъект(); НайденнаяСтрока = ДокПредварительныйЗаказПоставщику.ОтметкиСклада.Найти(Выборка.НомерСтроки, "НомерСтроки"); НайденнаяСтрока.УведомлениеОтправлено = Истина; ДокПредварительныйЗаказПоставщику.Записать(); Если не получиться тогда в запросе сделай вначале эту строчку и посмотри пройдет ли зацикливание: |ВЫБРАТЬ ПЕРВЫЕ 1 |
|||
2
NIGHTHUNTER
23.06.22
✎
10:27
|
(1) Вышло так.
Я стал тестировать обработку как внешнюю с формы. Смотрю, идет список документов. Я у обработки поменял синонимум, но новый номер. И сейчас ничего не меняя, запускаю, она не выполняется. То есть выполнилось по тому что было, как и предполагалось и все. Я не понимаю, что это означает (. Мне писали, что приходят какие то дикие рассылки. Я хотел устранять. Может что с идентификатором НомерСтроки7 И нужно как то иначе? Сейчас я не вижу ошибку, и не понимаю что отлаживать. (1) Если я это закомментирую, это и будет зацикливание же тогда. Благодаря этому должно срабатывать только раз. |
|||
3
Деспот_1С
23.06.22
✎
10:31
|
(2) "Если я это закомментирую, это и будет зацикливание же тогда."
Сделайте как я сказал и чтобы не было рассылки закомментируйте эту строку: РаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение(УчетнаяЗаписьПочты, ПараметрыОтправки); |
|||
4
NIGHTHUNTER
23.06.22
✎
10:49
|
(3) Дело в том что пока нет выборки на которой проверять, она куда то делась . И почему то.
Появились галки что вы просили закомментировать в (1) . |
|||
5
NIGHTHUNTER
23.06.22
✎
10:51
|
(3) Я вчера сделал тестирование, отрабатывает раз и все.
Сейчас выявилось, что, что то циклится. Я стал отлавливать, как ошибка исчезла. |
|||
6
lodger
23.06.22
✎
10:58
|
(0)
а) научись обходить результаты запроса по группировкам (внешний цикл по ссылкам, внутренний по тч). б) зачем писать одному менеджеру 10 писем из одной тч по одной ссылке, если можно написать одно с перечнем нужных документов? |
|||
7
Деспот_1С
23.06.22
✎
11:02
|
(5) Дело может быть в конфликте блокировок, посмотрите в журнале регистраций, что происходит после запуска обработки
|
|||
8
NIGHTHUNTER
23.06.22
✎
12:05
|
(6) Да согласен, нужно научиться обходить результаты запросов по группировкам.
(6) Так в моем случае, идет обработка по номеру. И так же по одному документу идет одно письмо, а не больше чем одно. Ведь так? |
|||
9
NIGHTHUNTER
23.06.22
✎
12:23
|
(6) Если не трудно, можете подсказать , как это было бы?
Учитывая что выборка идет по документу. Я и сам в принципе представляю. Но что то у меня с мотивацией ( А так, если вам не трудно бы. я и увидел бы, и применил, и тд. |
|||
10
NIGHTHUNTER
23.06.22
✎
12:38
|
Считаю что и (0), работает . А то что мне высылали немыслемые примеры, и потом внезапно, сам видел пропала выборка. Я не знаю как объяснить.
|
|||
11
lodger
23.06.22
✎
12:40
|
(9) у меня голова болит, устал наверное. пойду поем.
|
|||
12
NIGHTHUNTER
23.06.22
✎
12:43
|
Кажется я немного понимаю от чего там ошибки могли быть, я поправил сейчас так.
// Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ | ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада.Ссылка КАК Ссылка, | ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада.Ссылка.Номер КАК Номер, | ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада.Ссылка.Дата КАК Дата, | ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада.Ссылка.Менеджер КАК Менеджер, | ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада.НомерСтроки КАК НомерСтроки, | ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада.ДатаПоступления КАК ДатаПоступления, | ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада.Сертификат КАК Сертификат, | ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада.ПаспортИзделия КАК ПаспортИзделия, | РАЗНОСТЬДАТ(ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада.ДатаПоступления, &ТекДата, ДЕНЬ) КАК РазностьДат, | ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада.УведомлениеОтправлено КАК УведомлениеОтправлено |ИЗ | Документ.ХХХ_ПредварительныйЗаказПоставщику.ОтметкиСклада КАК ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада |ГДЕ | ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада.Сертификат = ЛОЖЬ | И ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада.ПаспортИзделия = ЛОЖЬ | И ДОБАВИТЬКДАТЕ(ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада.ДатаПоступления, ДЕНЬ, 2) < &ТекДата | И ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада.ДатаПоступления >= &ДатаНачала | И НЕ ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада.УведомлениеОтправлено = ИСТИНА | |УПОРЯДОЧИТЬ ПО | Номер, | РазностьДат"; |
|||
13
NIGHTHUNTER
23.06.22
✎
12:44
|
Если вот этого не сделать, то и алгоритм мой не будет работать.
|УПОРЯДОЧИТЬ ПО | Номер, | РазностьДат"; Он же подразумевает идущие по по порядку номера. А если в разброс, как и было. В рабочей то больше всего. Вот там и начало все летать. Установил сортировку по номеру. |
|||
14
Мультук
гуру
23.06.22
✎
12:50
|
(13)
И так пойдет. Потом, внезапно, придет откровение, что номера могут повторяться (например каждый год). А ссылки нет, но ... |
|||
15
NIGHTHUNTER
23.06.22
✎
12:55
|
(14) Но а подсказать как правильно не желаете? Так то да в (6), правильно говорят .
|
|||
16
NIGHTHUNTER
24.06.22
✎
13:52
|
(14) Снова что то сильно глючи. Я не пойму уже что, и как отловить. Как там по группировкам будет правильно?
Понимаю, что некоторые вещи мне не очевидны. И я не предвижу ни ошибок, ни возможных подзадач. Просто не знаю о них (((. |
|||
17
NIGHTHUNTER
24.06.22
✎
14:52
|
Похоже проблема была из за массива
МассивКому = Новый Массив; после этой строки Пока Выборка.Следующий() Цикл сделал МассивКому.Очистить(); |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |