Имя: Пароль:
1C
 
как поймать момент записи данных в регистр
0 evorle145
 
27.08.21
12:50
Есть регистр сведений CRM_НепрочитанныеЭлектронныеПисьма

Запись в него осуществляется в двух местах в конфигурации 1С КА 2.4 CRM
"РегистрыСведений.CRM_НепрочитанныеЭлектронныеПисьма.СоздатьНаборЗаписей()"

Так вот прикол в том что для 1 из 10 почтовых учетных записей в этот регистр каждый раз при запуске задания отправить/получить почту записываются все письма, как будто они непрочитанные.  Я включил отладку этого фонового задания. Но поймать момент записи в упор не могу...
Искал по всей конфигурации "CRM_НепрочитанныеЭлектронныеПисьма" и там всего пару мест где есть РегистрыСведений.CRM_НепрочитанныеЭлектронныеПисьма.СоздатьНаборЗаписей() и отладчик в них не заходит (точнее заходит , но только чтоб записать реально не прочитанные...

Расширения есть, но в них ничего такого... что за мистика? как еще можно отловить момент записи?
1 mistеr
 
27.08.21
12:52
Повесить на него подписку в расширении, например.
2 ДенисЧ
 
27.08.21
12:52
В модуле набора записей события ПередЗаписью и ПриЗаписи
3 evorle145
 
27.08.21
12:54
(1) исключено ... там пару расширений и то я сам их делал. там этого нет
(2) смотрел, но  там только это:
Процедура ПередЗаписью(Отказ, Замещение)
    
    Если ОбменДанными.Загрузка Тогда
        Возврат;
    КонецЕсли;
    
КонецПроцедуры

Процедура ПриЗаписи(Отказ, Замещение)
    
    Если ОбменДанными.Загрузка Тогда
        Возврат;
    КонецЕсли;
    
    Если Отбор.Письмо.Значение.УчетнаяЗапись.CRM_СинхронизироватьПапкиСПочтовымСервером Тогда
        Прочитано = (Количество() = 0);
        ЗаписьДействия = РегистрыСведений.CRM_ОтложенныеОперацииПоIMAP.СоздатьМенеджерЗаписи();
        ЗаписьДействия.Объект = Отбор.Письмо.Значение;
        ЗаписьДействия.УчетнаяЗапись = Отбор.Письмо.Значение.УчетнаяЗапись;
        ЗаписьДействия.Действие = ?(НЕ Прочитано, Перечисления.CRM_ДействияПоIMAP.УстановитьФлагПрочтения, Перечисления.CRM_ДействияПоIMAP.СнятьФлагПрочтения);
        ЗаписьДействия.Прочитать();
        Если ЗаписьДействия.Выбран() Тогда
            ЗаписьДействия.Удалить();
        КонецЕсли;
        ЗаписьДействия = РегистрыСведений.CRM_ОтложенныеОперацииПоIMAP.СоздатьМенеджерЗаписи();
        ЗаписьДействия.Объект = Отбор.Письмо.Значение;
        ЗаписьДействия.УчетнаяЗапись = Отбор.Письмо.Значение.УчетнаяЗапись;
        ЗаписьДействия.Действие = ?(Прочитано, Перечисления.CRM_ДействияПоIMAP.УстановитьФлагПрочтения, Перечисления.CRM_ДействияПоIMAP.СнятьФлагПрочтения);
        ЗаписьДействия.ИмяПапкиНаСервере = "";
        ЗаписьДействия.Записать();
    КонецЕсли;

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

то есть запись идет, но совершенно в другой регистр
4 ДенисЧ
 
27.08.21
12:57
Ты не то смотришь. Ты смотри на данные и стек вызовов.
5 evorle145
 
27.08.21
13:03
(4) ну вот какое дело, открываю стек вызовов, запускаю фоновое задание, вижу что в этот регистр идет 2-3 записи (2-3 письма новых получено). Далее все заканчивается в отладчике. А потом каким-то другим заданием в этом регистре появляется 1500 записей (типа все письма непрочитаны по этой учетке).. Как надо смотреть на данные? не пойму про что речь
6 mistеr
 
27.08.21
13:05
(3) Ты спросил "как еще можно поймать", я ответил.
7 evorle145
 
27.08.21
13:06
(6) ааа, сори, я не понял просто...
8 hhhh
 
27.08.21
13:08
(5) открываете список фоновых заданий и смотрите по времени, какое задание выполнялось, вы же время примерно знаете, когда произошла запись в регистр.
Закон Брукера: Даже маленькая практика стоит большой теории.