Блокировки при синхронизации

1. Ivan_Stepnov 22.10.21 16:53 Сейчас в теме
Доброго времени суток, уважаемые форумчане!

Передо мной была поставлена задача разработать в типовой конфигурации УТ11 документ вида "ВходящееОбращение". Создаваться эти документы должны автоматически при создании входящих электронных писем.
Кроме того, к этим документам должны быть прикреплены объекты справочника - присоединенные файлы.
Решил я задачу таким образом:
Добавил в конфигурацию подписку на событие "ПередЗаписью" документа типовой конфигурации "ЭлектронноеПисьмоВходящее".
В процедуре обработки подписки вызывается разработанная функция по созданию документа - входящего обращения.
Также добавлена подписка на событие "ПриЗаписи" элемента справочника "ЭлектронноеПисьмоВходящееПрисоединенныеФайлы", в которой вызывается функция, отыскивающая соответствующее письму-владельцу присоединенного файла документ входящего обращения и прикрепляющая к входящему обращению копию присоединенного файла.
Создание входящих электронных писем происходит при выполнении регламентного задания, поэтому все эти процедуры выполняются в фоновом режиме.
Этот алгоритм безотказно работал, пока в базе не начали использовать синхронизацию с Бухгалтерией по планам обмена.
Если запущена синхронизация (вручную), и при этом выполняется регламентное задание по получению и отправке электронных писем, то 1С сначала зависает, потом обработка, в которой запущена синхронизация, вылетает с сообщением об ошибке блокировки.
Когда эти подписки на события удаляются, синхронизация начинает отрабатывать без ошибок.
Подскажите, пожалуйста, в каком направлении копать, чтобы отловить причину этих ошибок блокировки?

Прилагаю фрагмент технлогического журнала. Модули и функции с префиксом "ДВО_" - это мои доработки.
Прикрепленные файлы:
Логи.txt
По теме из базы знаний
Найденные решения
6. gybson 25.10.21 09:08 Сейчас в теме
(5)Да письмо будет существовать, но это разве проблема? Исправите ошибку в регламентном задании и входящее обращение сформируется. А вот когда письмо не создается из-за ошибок создания связанных элементов, вот это проблема.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. RustamZz 22.10.21 17:09 Сейчас в теме
(1) Что это за объекты InfoRg60677, InfoRg64356 и Reference59926?
3. Ivan_Stepnov 22.10.21 17:37 Сейчас в теме
RustamZz,
Reference59926 - это таблица SQL, в которой хранится добавленный мной справочник "ДВО_ВходящиеОбращенияПрисоединенныеФайлы"
InfoRg60677 - таблица добавленного мной регистра сведений "ДВО_НаличиеПрисоединенныхФайлов"
nfoRg64356 - таблица регистра сведений "РезультатыОбменаДанными" из типовой УТ11
4. gybson 22.10.21 23:26 Сейчас в теме
"ПриЗаписи" идет в неявной транзакции, вы блокируете справочник. Откажитесь от событий и формируйте документ в регламентном задании с периодом подходящим для ведения дел. В регламентном задании обрабатываете письма, в вашем событии ссылка на письмо, чтобы не обрабатывать дважды и вообще полезно.
5. Ivan_Stepnov 23.10.21 13:27 Сейчас в теме
(4)gybson, спасибо за помощь, к такому варианту я тоже склоняюсь. Тогда получается, что при записи эл.письма ничего не делать, а регламентным заданием просматривать созданные эл.письма и создавать документы входящих обращений на те эл.письма, для которых их нет? Или другой вариант - из события при записи эл.письма запускать фоновое задание на генерацию входящего обращения? В обоих случаях будет такая проблема - сейчас, если при формировании входящего обращения происходит ошибка, то отменяется и сама запись электронного письма, т.е. эл.письма без вход.обращений в базе появиться не могут. А при этих вариантах, если в фоновом задании произойдет ошибка, то отменить создание эл.письма уже не получится - оно уже будет существовать! Или можно как-то эту проблему обойти?
6. gybson 25.10.21 09:08 Сейчас в теме
(5)Да письмо будет существовать, но это разве проблема? Исправите ошибку в регламентном задании и входящее обращение сформируется. А вот когда письмо не создается из-за ошибок создания связанных элементов, вот это проблема.
7. Ivan_Stepnov 24.11.21 13:23 Сейчас в теме
Коллеги, благодарю за помощь!
Решил задачу так:
Оставил подписку на событие "ПередЗаписью" документа типовой конфигурации "ЭлектронноеПисьмоВходящее".
В процедуре обработки подписки запускается новое фоновое задание, в котором выполняется разработанная функция по созданию документа - входящего обращения. В качестве параметра-аргумента эта функция получает структуру, содержащую необходимые для создания входящего обращения данные входящего электронного письма.
Таким же образом работает подписка на событие "ПриЗаписи" элемента справочника "ЭлектронноеПисьмоВходящееПрисоединенныеФайлы" - запускается новое фоновое задание, в котором отыскивается соответствующее письму-владельцу присоединенного файла документ входящего обращения и прикрепляется к входящему обращению копия присоединенного файла.
Таким образом, создание входящего обращения и присоединенных файлов выведено в отдельные транзакции, выполняемые в фоновых процессах.
Пока работает без конфликтов.
Смущает то, что все эти выполненные фоновые задания с нулевой длительностью отображаются в списке фоновых заданий, вызываемом из "НСИ и Администрирование - Обслуживание - Регламентные и фоновые задания" и попадают в журнал регистрации, дополнительно увеличивая его размер.

Подскажите, пожалуйста, насколько такое решение приемлемо?
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот