Удаление ненужных сообщений в УТМ ЕГАИС

Порой при получении сообщений из ЕГАИС товароучетная система ругается на ответы ЕГАИС, для которых не найден запрос. В большинстве случаев это ответы на запросы, отправленные другими устройствами (ATOL HUB-19, Эвотор и т.п.). Чтобы не засорять учетную систему и не занимать её время обработкой ненужных сообщений, в публикации рассмотрен способ их удаления перед обработкой нужных сообщений из ЕГАИС.

Конкретный случай:

Магазин крепкого алкоголя работает на двух кассах Эвотор, которые периодически в фоновом режиме отправляют в ЕГАИС запросы остатков, реквизитов контрагентов, перемещения в регистр 2 и другие запросы. Таким образом два Эвотора в среднем генерируют пару запросов в минуту в ЕГАИС! За несколько дней в УТМе накапливаются тысячи ответов, которые Эвоторы за собой не удаляют.

Получение и подтверждение товарно-транспортных накладных (ТТН) ЕГАИС осуществляется из внешней товароучетной системы на 1С — Далион Управление магазином 1.2. В связи с необходимостью обработки тысяч ответов, на которые Далион не может найти запросы, получение ТТН занимает порой более суток (на ноутбуке средней производительности)! Кроме того, каждое сообщение записывается в базу 1с на всякий случай как необработанное.

Для решения проблемы было решено добавить в код 1с перед обработкой сообщений ЕГАИС процедуру очистки ненужных ответов в УТМ ЕГАИС: 

Процедура УдалитьНаСервере()
АдресРесурса = "/opt/out";
HTTPЗапрос = Новый HTTPЗапрос(АдресРесурса);
Соединение = Новый HTTPСоединение(IPАдресУТМ, 8080,,,,0);

HTTPОтвет = Соединение.Получить(HTTPЗапрос);
ОтветМодуляЕГАИС = HTTPОтвет.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8);

ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(ОтветМодуляЕГАИС);

ПостроительDOM = Новый ПостроительDOM;
ДокументDOM = ПостроительDOM.Прочитать(ЧтениеXML);
УзлыURL = ДокументDOM.ПолучитьЭлементыПоИмени("url");
АдресРесурсаОстатков = "";
Для каждого УзелURL Из УзлыURL Цикл
АтрибутDOM = УзелURL.Атрибуты.ПолучитьИменованныйЭлемент("replyId");
Если АтрибутDOM = Неопределено Тогда
Продолжить;
КонецЕсли;

ReplyID = АтрибутDOM.ТекстовоеСодержимое;
АдресРесурса = СтрЗаменить(УзелURL.ТекстовоеСодержимое,"http://"+IPАдресУТМ+":8080","");
АдресРесурса = СтрЗаменить(АдресРесурса, "http://127.0.0.1:8088", "");
HTTPЗапрос = Новый HTTPЗапрос(АдресРесурса);

HTTPОтвет = Соединение.Получить(HTTPЗапрос);
СтрокаОтвета = HTTPОтвет.ПолучитьТелоКакСтроку();
Если СтрНайти(СтрокаОтвета, "DocType>WAYBILL") = 0 И
СтрНайти(СтрокаОтвета, "DocType>WayBillAct_v3") = 0 И
СтрНайти(СтрокаОтвета, "DocType>QueryNATTN") = 0 И
СтрНайти(СтрокаОтвета, "DocType>QueryResendDoc") = 0 Тогда
HTTPОтвет = Соединение.Удалить(HTTPЗапрос);
Сообщить(УзелURL.ТекстовоеСодержимое + " удален.");
Иначе
Сообщить(УзелURL.ТекстовоеСодержимое + " не удален.");
КонецЕсли;
КонецЦикла;
ЧтениеXML.Закрыть();
КонецПроцедуры

Как видно из кода процедура обрабатывает только ответы (в сообщении должен быть replyId), поэтому, к примеру, входящие ТТНки не удалятся. Кроме того, не удалятся ответы на запрос необработанных ТТН, на повторный запрос ТТН и на запрос подтверждения ТТН.

Обработка с описанной процедурой приложена (УФ). Проверялась на платформе 1с 8.3.13.1513 на пустой конфигурации.

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *