Имя: Пароль:
1C
 
Знатокам системы взаимодействия в 1С, вопрос по фискализации в Рознице
0 Гений 1С
 
гуру
14.05.22
12:51
Коллеги, у меня иногда фискализация в рознице зависает вот на этом коде:

&Вместо("ОбработкаОповещенияСообщенийФискализации")
Процедура дор_ОбработкаОповещенияСообщенийФискализации(Сообщение, ДополнительныеПараметры)
    //Боремся с зацикливанием очереди сообщений
    Если СтрНачинаетсяС(Сообщение.Текст, НСтр("ru='Фискализация чека'")) Тогда
        Если глПодключаемоеОборудование.Свойство("дор_ИдентификаторОбработанногоСообщенияФискализации")
        И глПодключаемоеОборудование.дор_ИдентификаторОбработанногоСообщенияФискализации = Сообщение.Идентификатор Тогда
            Попытка
                дор_Сервер.УдалитьСообщениеСистемыВзаимодействияПоИдентификатору(Сообщение.Идентификатор);
            Исключение
                //Уже удалено
            КонецПопытки;
            Возврат;
        КонецЕсли;
        
        глПодключаемоеОборудование.Вставить("дор_ИдентификаторОбработанногоСообщенияФискализации", Сообщение.Идентификатор);
    КонецЕсли;
    
    ПродолжитьВызов(Сообщение, ДополнительныеПараметры);
КонецПроцедуры


Я написал защиту от обработки одного и того же сообщения, но оно валится и валится и не удаляется, что показательно.

Как с этим бороться? Кто генерит это сообщение системы взаимодействия (в коде не нашел), почему оно циклится? Почему не удаляется? Розница 2.3, актуальная.
1 Гений 1С
 
гуру
23.05.22
11:39
Возможно, надо было удалять в привелигированном режиме, посмотрю.

Описание:
Удаляет указанное сообщение из обсуждения.
Вызов метода возможен только в привилегированном режиме.


Процедура УдалитьСообщениеСистемыВзаимодействияПоИдентификатору(Идентификатор) Экспорт
    //Удаляет сообщение только в привелигированном режиме
    УстановитьПривилегированныйРежим(Истина);
    СистемаВзаимодействия.УдалитьСообщение(Идентификатор);
КонецПроцедуры

Ну и поставил протоколироание:


&Вместо("ОбработкаОповещенияСообщенийФискализации")
Процедура дор_ОбработкаОповещенияСообщенийФискализации(Сообщение, ДополнительныеПараметры)
    //Боремся с зацикливанием очереди сообщений
    Если СтрНачинаетсяС(Сообщение.Текст, НСтр("ru='Фискализация чека'")) Тогда
        Если глПодключаемоеОборудование.Свойство("дор_ИдентификаторОбработанногоСообщенияФискализации")
        И глПодключаемоеОборудование.дор_ИдентификаторОбработанногоСообщенияФискализации = Сообщение.Идентификатор Тогда
            Попытка
                дор_Сервер.УдалитьСообщениеСистемыВзаимодействияПоИдентификатору(Сообщение.Идентификатор);
            Исключение
                //Уже удалено
                дор_Сервер.ЗаписьЖурналаРегистрацииНаСервере("Отладка.НеУдалосьУдалитьСообщение", ,,,
                "Идентификатор: " + Сообщение.Идентификатор + " Ошибка: " + ОписаниеОшибки());
            КонецПопытки;
            Возврат;
        КонецЕсли;
        
        глПодключаемоеОборудование.Вставить("дор_ИдентификаторОбработанногоСообщенияФискализации", Сообщение.Идентификатор);
    КонецЕсли;
    
    ПродолжитьВызов(Сообщение, ДополнительныеПараметры);
КонецПроцедуры
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой