<< Click to Display Table of Contents >> Разработка > Примеры разработки > Документы Как настроить получение документов определенного типа из сервиса обмена |
Ситуация
В нашей организации «ООО, Юпитер» настроен обмен с контрагентами:
•«ООО, Экспедитор» через сервис обмена СБИС;
•«ООО, ТЦК-Строй» через сервис обмена Диадок.
Необходимо, чтобы через СБИС поступали только универсальные передаточные документы с функцией первичного учетного документа (УПД с функцией ДОП) и универсальные передаточные документы с функцией счета-фактуры и первичного учетного документа (УПД с функцией СЧФДОП). Остальные типы документов из СБИС, в том числе неформализованные, не должны загружаться.
Полный список типов документов см. на сайтах сервисов обмена СБИС и Диадок (перечисление AttachmentType).
Решение
В Directum RX есть стандартная серверная функция FilterLiteMessages(), которая получает «легкие» сообщения с данными из сервиса обмена и фильтрует их. Подробнее см. раздел «Получение сообщений в фоновом режиме».
Чтобы задать свои настройки фильтрации данных из сервиса обмена, необходимо переопределить функцию:
1.В своем решении перекройте модуль «Электронный обмен» (Sungero.Exchange) и добавьте зависимость от него. Если зависимости не указаны, при публикации могут возникнуть ошибки.
2.Чтобы изменить стандартную логику, в редакторе перекрытого модуля переопределите серверную функцию FilterLiteMessages(). Для этого измените ее модификатор на override и доработайте код:
/// <summary>
/// Отфильтровать «легкие» сообщения с информацией из сервиса обмена.
/// </summary>
/// <param name="businessUnitBox">Абонентский ящик нашей организации.</param>
/// <param name="messages">Сообщения.</param>
/// <returns>Список отфильтрованных сообщений.</returns>
public override List<NpoComputer.DCX.Common.IMessage> FilterLiteMessages(ExchangeCore.IBusinessUnitBox businessUnitBox, List<NpoComputer.DCX.Common.IMessage> messages)
{
var filteredMessages = new List<NpoComputer.DCX.Common.IMessage>();
// Типы документов, которые нужно загружать из СБИС.
// УпдДоп – Универсальный передаточный документ с функцией первичного учетного документа.
// УпдСчфДоп – Универсальный передаточный документ с функцией счета-фактуры и первичного учетного документа.
// Полный список типов вложений см. на сайте СБИС: https://sbis.ru/help/integration/catalog/guide#_tipy_vlozhenij_dokumenta.
var sbisUTDTypes = new string[] { "УпдДоп", "УпдСчфДоп" };
foreach (var message in messages)
{
// Получить из СБИС только сообщения, которые содержат универсальные передаточные документы (УПД).
if (businessUnitBox.ExchangeService.ExchangeProvider == ExchangeCore.ExchangeService.ExchangeProvider.Sbis &&
message.IsRoot && !message.PrimaryDocuments.Any(pdoc => sbisUTDTypes.Contains(pdoc.ServiceType)))
continue;
// Запретить загружать ответные сообщения на все пропущенные основные сообщения, т.е. на все остальные типы документов, кроме УПД.
if (!message.IsRoot &&
// Исключить родительское сообщение из списка новых необработанных.
!filteredMessages.Any(m => m.IsRoot && m.ServiceMessageId == message.ParentServiceMessageId) &&
// Исключить родительское сообщение из очереди обработки.
!ExchangeCore.MessageQueueItems.GetAll(item => (bool)item.IsRootMessage && item.RootMessageId == message.ParentServiceMessageId).Any() &&
// Исключить родительское сообщение из процесса обработки, удалить всю информацию о нем.
// Для Диадок.
!ExchangeDocumentInfos.GetAll(info => info.ServiceMessageId == message.ParentServiceMessageId).Any() &&
// Для СБИС.
!ExchangeDocumentInfos.GetAll(info => info.ServiceMessageId.Contains(message.ParentServiceMessageId)).Any())
continue;
filteredMessages.Add(message);
}
return filteredMessages;
}
3.Опубликуйте разработку.
В результате из сервиса обмена СБИС в систему Directum RX смогут загружаться и отправляться на обработку только указанные типы документов: универсальный передаточный документ с функцией первичного учетного документа (УПД с функцией ДОП) и универсальный передаточный документ с функцией счета-фактуры и первичного учетного документа (УПД с функцией СЧФДОП).
Из сервиса обмена Диадок продолжат поступать все поддерживаемые типы документов.
© Компания Directum, 2024 |